Bold Save, Disable Reset on change
[pyTivo.git] / plugins / admin / templates / settings.tmpl
blob18bd3ea4d16be10e999411bf9b28ae90d2cdf6ec
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\r
2 <html>\r
3 <head>\r
4 \r
5   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">\r
6   <title>pyTivo Web Configuration</title>\r
7 \r
8 \r
9   <script language="javascript" type="text/javascript">\r
10 function fillBlank(){\r
11 var texts=document.getElementsByTagName('input')\r
12 for (var i_tem = 0; i_tem < texts.length; i_tem++)\r
13 if (texts[i_tem].value=='')\r
14 texts[i_tem].value=' '\r
15 }\r
16 function switchDiv(pass, type){ \r
17 hideallids(type);\r
18 showDiv(pass);\r
19 }\r
20 function hideallids(type){\r
21 //loop through the array and hide each element by id\r
22 var divs = document.getElementsByTagName('div');\r
23 for (var i=0;i<divs.length;i++){\r
24 if(divs[i].id.match(type)){\r
25 hideDiv(divs[i].id);\r
26 }\r
27 } }\r
28 function hideDiv(pass) {\r
29 var divs = document.getElementsByTagName('div');\r
30 for(i=0;i<divs.length;i++){\r
31 if(divs[i].id.match(pass)){//if they are 'see' divs\r
32 if (document.getElementById) // DOM3 = IE5, NS6\r
33 divs[i].style.visibility="hidden";// show/hide\r
34 else\r
35 if (document.layers) // Netscape 4\r
36 document.layers[divs[i]].display = 'hidden';\r
37 else // IE 4\r
38 document.all.hideshow.divs[i].visibility = 'hidden';\r
39 }\r
40 }\r
41 }\r
42 function showDiv(pass) {\r
43 var divs = document.getElementsByTagName('div');\r
44 for(i=0;i<divs.length;i++){\r
45 if(divs[i].id == pass){\r
46 if (document.getElementById)\r
47 divs[i].style.visibility="";\r
48 else\r
49 if (document.layers) // Netscape 4\r
50 document.layers[divs[i]].display = '';\r
51 else // IE 4\r
52 document.all.hideshow.divs[i].visibility = '';\r
53 }\r
54 }\r
55 }\r
56 function deleteSection(id){\r
57 var name = select_section.section.options[id].text;\r
58 var answer = confirm("Are you sure you wish to delete the '" + name + "' Section?")\r
59 if (answer){\r
60         switchDiv('set-delete', 'set-');\r
61         select_section.section.options[id] = null;\r
62         var field = document.getElementById(name).value;\r
63         document.getElementById(field).value = 'Delete_Me';\r
64         saveNotify();\r
65         return true;\r
66 }\r
67 else{\r
68         //Don't delete\r
69 }\r
70 }\r
71 function resetpyTivo(){\r
72 var answer = confirm("Are you sure you wish to reset the pyTivo Server? Any unsaved changes will be lost!")\r
73 if (answer){\r
74         window.location="/TiVoConnect?Command=Reset&Container=$container"\r
75 }\r
76 else{\r
77         //Don't reset\r
78 }\r
79 }\r
80 function showData(form) {\r
81         var section = ""\r
82         var setting = ""\r
83         re=/[\[\]<>|]/;\r
84         inputs = form.getElementsByTagName("input");\r
85         for (i = 0; i < inputs.length; i++){\r
86                 if (inputs[i].type == 'text' && re.exec(inputs[i].value)){\r
87                         setting = inputs[i].name;\r
88                         break;\r
89                 }\r
90         }\r
91         if (setting != ""){\r
92                 var map = document.getElementById('Section_Map').value.split(']');\r
93                 map.pop();\r
94                 splitSetting = setting.split('.');\r
95                 for(i=0;i<map.length;i++){\r
96                         key = map[i].split('|');\r
97                         //buffer += key[0] + "---" + key[1] + "===" + splitSetting[0] + "\n";\r
98                         if (splitSetting[0] == 'Server'){\r
99                                 section = 'server';\r
100                                 break;\r
101                         }\r
102                         if (key[0] == splitSetting[0]){\r
103                                 section = key[1];\r
104                                 break;\r
105                         }\r
106                 }\r
107                 alert("Invalid Entry:\nSorry these are not allowed \n!@#$%^&*()|}{\][?></.,:;\" '=`~");\r
108                 switchDiv('set-' + section, 'set-');\r
109                 document.getElementById(setting).select();\r
110                 return false;\r
111         }\r
112         fillBlank();\r
113         document.config.submit();\r
115 function saveNotify(){\r
116         document.getElementById('B1').style.fontWeight= 'bold';\r
117         document.getElementById('B2').disabled = true;\r
119 </script>\r
120 </head>\r
123 <body style="background-color: rgb(250, 250, 250);">\r
125 <p align="center"><font size="6">pyTivo Web\r
126 Configuration</font> <a href="#">help</a></p>\r
127 <center>\r
128 <table style="border: 1px solid rgb(220, 220, 220);background-color: rgb(255, 255, 255);text-align: left; margin-left: auto; margin-right: auto;" border="0" cellpadding="0" cellspacing="4">\r
130   <tbody>\r
132     <tr>\r
134       <td style="border-right: 1px dotted rgb(153, 153, 153); vertical-align: top;">\r
135       <div id="leftframe" style="position: relative; text-align: center; width: 200px;">\r
136       <form name="select_section">Sections\r
137         <select name="section" size="7">\r
138         <option value="set-server">Global Server Settings</option>\r
139 #for $name, $data in $shares_data\r
140         <option value="set-$name">$name</option>\r
141 #end for\r
142 #for $name, $data in $tivos_data\r
143         <option value="set-$name">$name</option>\r
144 #end for\r
145         </select>\r
147         <input name="B3" value="Edit Section" type="button" onclick="switchDiv(select_section.section.options[select_section.section.selectedIndex].value, 'set-');return true;"> \r
148         <input name="B4" value="Delete Section" type="button" onclick="deleteSection(select_section.section.selectedIndex)">\r
149         <input name="B5" value="Add Section" type="button" onclick="switchDiv('set-add', 'set-');return true;"></form>\r
151       <hr>Administration\r
152       <form method="post">\r
153         <p align="center"><input name="B1" id="B1" value="Save Changes" type="button" onclick="showData(document.config);return true;">\r
154         <input id="B2" name="B2" value="Soft Reset pyTivo" type="button" onclick="resetpyTivo();"></p>\r
156       </form>\r
158 View Raw File </div>\r
160       </td>\r
162       <td style="vertical-align: top;">\r
163       <div id="settings" style="width: 300px; overflow: scroll; height: 450px; position: relative;">\r
164       <form name="config" method="GET" action="TiVoConnect" onsubmit="fillBlank();showData(this);">\r
165       <input type="hidden" name="Command" value="UpdateSettings">\r
166       <input type="hidden" name="Container" value="$container">\r
167 <div id="set-server" style="width: 280px; text-align: center;position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
168         <b>Global Server Settings</b><br>\r
169         <hr style="width: 100%; height: 2px;"> \r
170         <table align="center">\r
171 #set $i = 0\r
172 #for $key in $server_known\r
173 #set $i += 1\r
174 #if $i%2\r
175 <tr style="background-color: rgb(250, 250, 250);">\r
176 #else\r
177 <tr>\r
178 #end if\r
179 <td>\r
180 #if $key in $server_data\r
181         $key :</td><td><input size="20" id="Server.$key" name="Server.$key" value="$server_data[$key]" onChange="saveNotify();" onfocus="switchDiv('help-$key', 'help-');return true;" type="text">\r
183 #else\r
184         $key :</td><td><input size="20" id="Server.$key" name="Server.$key" value="" onChange="saveNotify();" onfocus="switchDiv('help-$key', 'help-');return true;" type="text">\r
186 #end if\r
187 </td></tr>\r
188 #end for\r
189 <tr><td colspan="2" align="center" style="border-bottom: 1px solid rgb(153, 153, 153);">User Defined Settings:</td></tr>        \r
190 #set $i = 0\r
191 #for $key in $server_data \r
192         #if not $key in $server_known\r
193                 #set $i += 1\r
194                 #if $i%2\r
195                         <tr style="background-color: rgb(250, 250, 250);">\r
196                 #else\r
197                         <tr>\r
198                 #end if\r
199                 <td>         $key :</td><td>\r
200                 <input size="20" id="Server.$key" name="Server.$key" value="$server_data[$key]" onChange="saveNotify();" onfocus="switchDiv('help-$key', 'help-');return true;" type="text">\r
201                 </td></tr>\r
202         #end if \r
203 #end for \r
204         </table>\r
205         <div style="width: 280px; position: relative;">\r
206                 <div id="add-server-button" style="width: 280px; position: absolute; position: absolute; left: 0px; top: 0px;">\r
207                         <br>\r
208                         <center>\r
209                         <input type="button" value="Add Setting" onclick="switchDiv('add-server-field', 'add-server-');return true;">\r
210                         </center>\r
211                 </div>\r
212                 <div id="add-server-field" style="position: absolute; position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
213                         <table style="width: 265px;">\r
214                         <tr><td colspan="2" align="center" style="border-bottom: 1px solid rgb(153, 153, 153);">Add a Setting</td></tr>\r
215                         <tr><td>Setting Name:</td><td>Setting Value:</td></tr>\r
216                         <tr><td><input size="16" id="Server.new_settting" name="Server.new__setting" onChange="saveNotify();" type="text" value=""></td><td><input size="16" type="text" onChange="saveNotify();" id="Server.new_value"  name="Server.new__value" value=""></td></tr>\r
217                         </table>\r
218                 </div>\r
219         </div>\r
220 </div>\r
221 #set $section_count = 0\r
222 #set $section_map = ''\r
223 #for $name, $data in $shares_data\r
224         #set $section_count += 1\r
225         #set $section_number = 'section-' + str($section_count)\r
226         <input type="hidden" name="$name" id="$name" value="$section_number">\r
227         #set $section_map += $section_number + '|' + $name + ']'\r
228         <div id="set-$name" style="text-align: center;position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
229         [<input size="20" onChange="saveNotify();" id="$section_number" name="$section_number" value="$name">]<br>\r
230         <hr style="width: 100%; height: 2px;"><table align="center">\r
231         #set $i = 0\r
232         #for $key in $shares_known\r
233                 #set $i += 1\r
234                 #if $i%2\r
235                         <tr style="background-color: rgb(250, 250, 250);">\r
236                 #else\r
237                         <tr>\r
238                 #end if\r
239                 #if $key in $data\r
240                         <td>$key :</td><td><input onChange="saveNotify();" size="20" id="$section_number.$key" name="$section_number.$key" value="$data[$key]" onfocus="switchDiv('help-$key', 'help-');return true;" type="text">\r
241                         </td>\r
242                 #else\r
243                         <td>$key : </td><td><input onChange="saveNotify();" size="20" id="$section_number.$key" name="$section_number.$key" value="" onfocus="switchDiv('help-$key', 'help-');return true;" type="text">\r
244                         </td>\r
245                 #end if\r
246                 </tr>\r
247         #end for\r
249         <tr><td colspan="2" align="center" style="border-bottom: 1px solid rgb(153, 153, 153);">User Defined Settings:</td></tr> \r
250         #set $i = 0\r
251         #for $key in $data \r
252                 #if not $key in $shares_known\r
253                         #set $i += 1\r
254                         #if $i%2\r
255                                 <tr style="background-color: rgb(250, 250, 250);">\r
256                         #else\r
257                                 <tr>\r
258                         #end if\r
259                         <td> $key : </td><td>\r
260                         <input size="20" onChange="saveNotify();" id="$section_number.$key" name="$section_number.$key" value="$data[$key]" onfocus="switchDiv('help-$key', 'help-');return true;" type="text">\r
261                         </td></tr>\r
262                 #end if \r
263         #end for\r
264         </table>\r
265                 <div style="position: relative;">\r
266                         <div id="add-$name-button" style="width: 280px; position: absolute; position: absolute; left: 0px; top: 0px;">\r
267                                 <br>\r
268                                 <center>\r
269                                 <input type="button" value="Add Setting" onclick="switchDiv('add-$name-field', 'add-$name-');return true;">\r
270                                 </center>\r
271                         </div>\r
272                         <div id="add-$name-field" style="position: absolute; position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
273                                 <table style="width: 265px;">\r
274                                 <tr><td colspan="2" align="center" style="border-bottom: 1px solid rgb(153, 153, 153);">Add a Setting</td></tr>\r
275                                 <tr><td>Setting Name:</td><td>Setting Value:</td></tr>\r
276                                 <tr><td><input onChange="saveNotify();" size="16" id="$(section_number).new__setting" name="$(section_number).new__setting" type="text" value=""></td><td><input onChange="saveNotify();" size="16" type="text" id="$(section_number).new__value" name="$(section_number).new__value" value=""></td></tr>\r
277                                 </table>\r
278                         </div>\r
279                 </div>\r
280         </div>\r
281 #end for\r
283 #for $name, $data in $tivos_data\r
284         #set $section_count += 1\r
285         #set $section_number = 'section-' + str($section_count)\r
286         <input type="hidden" name="$name" id="$name" value="$section_number">\r
287         #set $section_map += $section_number + '|' + $name + ']'\r
288         <div id="set-$name" style="text-align: center;position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
289         [<input size="20" onChange="saveNotify();" id="$section_number" name="$section_number" value="$name">]<br>\r
290         <hr style="width: 100%; height: 2px;"><table align="center">\r
291         #set $i = 0\r
292         #for $key in $tivos_known\r
293                 #set $i += 1\r
294                 #if $i%2\r
295                         <tr style="background-color: rgb(250, 250, 250);">\r
296                 #else\r
297                         <tr>\r
298                 #end if\r
299                 #if $key in $data\r
300                         <td>$key :</td><td><input onChange="saveNotify();" size="20" id="$section_number.$key" name="$section_number.$key" value="$data[$key]" onfocus="switchDiv('help-$key', 'help-');return true;" type="text">\r
301                         </td>\r
302                 #else\r
303                         <td>$key :</td><td><input onChange="saveNotify();" size="20" id="$section_number.$key" name="$section_number.$key" value="" onfocus="switchDiv('help-$key', 'help-');return true;" type="text">\r
304                         </td>\r
305                 #end if\r
306                 </tr>\r
307         #end for\r
309         <tr><td colspan="2" align="center" style="border-bottom: 1px solid rgb(153, 153, 153);">User Defined Settings:</td></tr> \r
310         #set $i = 0\r
311         #for $key in $data \r
312                 #if not $key in $tivos_known\r
313                         #set $i += 1\r
314                         #if $i%2\r
315                                 <tr style="background-color: rgb(250, 250, 250);">\r
316                         #else\r
317                                 <tr>\r
318                         #end if\r
319                         <td> $key :</td><td> \r
320                         <input size="20" onChange="saveNotify();" id="$section_number.$key" name="$section_number.$key" value="$data[$key]" onfocus="switchDiv('help-$key', 'help-');return true;" type="text">\r
321                         </td></tr>\r
322                 #end if \r
323         #end for\r
324         </table>\r
325                 <div style="position: relative;">\r
326                         <div id="add-$name-button" style="width: 280px; position: absolute; position: absolute; left: 0px; top: 0px;">\r
327                                 <br>\r
328                                 <center>\r
329                                 <input type="button" value="Add Setting" onclick="switchDiv('add-$name-field', 'add-$name-');return true;">\r
330                                 </center>\r
331                         </div>\r
332                         <div id="add-$name-field" style="position: absolute; position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
333                                 <table style="width: 265px;">\r
334                                 <tr><td colspan="2" align="center" style="border-bottom: 1px solid rgb(153, 153, 153);">Add a Setting</td></tr>\r
335                                 <tr><td>Setting Name:</td><td>Setting Value:</td></tr>\r
336                                 <tr><td><input onChange="saveNotify();" size="16" id="$(section_number).new__setting" name="$(section_number).new__setting" type="text" value=""></td><td><input onChange="saveNotify();" size="16" type="text" id="$(section_number).new__value" name="$(section_number).new__value" value=""></td></tr>\r
337                                 </table>\r
338                         </div>\r
339                 </div>\r
340         </div>\r
341 #end for\r
342 <div id="set-add" style="text-align: center;position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
343         Add a New Section\r
344         <hr>\r
345         <table>\r
346         <tr>\r
347         <td> Section Name :</td><td> \r
348                 <input onChange="saveNotify();" type="text" size="20" name="new_Section" value="" onfocus="switchDiv('help-add', 'help-');return true;">\r
349         </td></tr></table>\r
350         The new section name will be added to the pyTivo.conf file when you click <b>Save Changes</b>.\r
351 </div>\r
352 <div id="set-delete" style="text-align: center;position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
353         Delete a Section\r
354         <hr>\r
355         <br>\r
356         The Section has been marked for deletion. However it will not be actually deleted until you click the <b>Save Changes</b> button.\r
357 </div>\r
358 <input type="hidden" id="Section_Map" name="Section_Map" value="$section_map">\r
359       </form>\r
361       </div>\r
363       </td>\r
365       <td style="border-left: 1px dotted rgb(153, 153, 153); vertical-align: top;">\r
366       <div id="sidesections" style="width: 400px; position: relative;"><!-- HELP SECTIONS -->\r
367       <div id="help-instructions" style="position: absolute; left: 0px; top: 0px; visibility: visible;">\r
368       <p align="center"><strong>Instructions</strong>\r
369       </p>\r
371 Instructions and sample settings will appear here when you click on the\r
372 settings boxes</div>\r
374         <div id="help-add" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
375       <p align="center"><strong>Add a New Section</strong> </p>\r
377       <p> Add the name of a new section.<br>\r
379       Remember if you want to add TiVo section remember it must start with _tivo_<br>\r
381       You must save your settings before the new section will be editable.<br>\r
382         </p>\r
384       </div>\r
386       <div id="help-port" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
387       <p align="center"><strong>port</strong> </p>\r
389       <p> <strong>Default Setting:</strong> None,\r
390 must be entered. Distributed conf file uses 9032<br>\r
392       <strong>Valid Entries:</strong> Valid port number<br>\r
394       <strong>Required:</strong> Yes, without a port\r
395 setting in the conf file pyTivo will not start.<br>\r
397       <strong>Skill:</strong> Basic<br>\r
399       <strong>Description:</strong> The port which pyTivo\r
400 uses to serve your files. Can be changed if it conflicts with another\r
401 program. It is reported on Ubuntu that this port is already used so you\r
402 may need to change it to something like port=9254.<br>\r
404       <strong>Example Settings:</strong> 9032 </p>\r
406       </div>\r
408       <div id="help-guid" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
409       <p align="center"><strong>guid</strong> </p>\r
411       <p> <strong>Default Setting:</strong> 123456<br>\r
413       <strong>Valid Entries:</strong> Any 6 digit number<br>\r
415       <strong>Required:</strong> Generally NO, will default\r
416 to '123456' if left blank. If you use more than one pyTivo server on\r
417 the same network a different random number is required here.<br>\r
419       <strong>Skill:</strong> Advanced<br>\r
421       <strong>Description:</strong> A unique identifier\r
422 used in the beacon to identify this server. If you have 2 or more\r
423 pyTivo servers on one network each server must use its own unique\r
424 identifier.<br>\r
426       <strong>Example Settings:</strong> Any 6 digit\r
427 number. </p>\r
429       </div>\r
431       <div id="help-ffmpeg" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
432       <p align="center"><strong>ffmpeg</strong>\r
433       </p>\r
435       <p> <strong>Default Setting:</strong> There is\r
436 none.<br>\r
438       <strong>Valid Entries:</strong> Operating system path<br>\r
440       <strong>Required:</strong> Yes! <br>\r
442       <strong>Skill:</strong> Basic<br>\r
444       <strong>Description:</strong> This is the full path\r
445 to your ffmpeg binary. For windows users ffmpeg is distributed with\r
446 pyTivo and is in the plugins/video folder<br>\r
448       <strong>Example Settings:</strong> <span class="underline">Linux</span> = /usr/bin/ffmpeg | <span class="underline">Windows</span> = c:\Program\r
449 Files\pyTivo\plugins\video\ffmpeg_mp2.exe </p>\r
451       </div>\r
453       <div id="help-beacon" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
454       <p align="center"><strong>beacon</strong>\r
455       </p>\r
457       <p> <strong>Default Setting:</strong>\r
458 255.255.255.255<br>\r
460       <strong>Valid Entries:</strong> A Subnet or Listen<br>\r
462       <strong>Required:</strong> No, defaults to\r
463 255.255.255.255<br>\r
465       <strong>Skill:</strong> Advanced<br>\r
467       <strong>Description:</strong> The subnet which the\r
468 beacon should broadcast on. Most people can leave this at the default\r
469 setting. If set to listen will accept incoming TCP requests.<br>\r
471       <strong>Example Settings:</strong> 255.255.255.255 </p>\r
473       </div>\r
475       <div id="help-hack83" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
476       <p align="center"><strong>hack83</strong>\r
477       </p>\r
479       <p> <strong>Default Setting:</strong> False<br>\r
481       <strong>Valid Entries:</strong> True/False<br>\r
483       <strong>Required:</strong> No<br>\r
485       <strong>Skill:</strong> Moderate<br>\r
487       <strong>Description:</strong> Available in the <a class="wiki" href="/wiki/SubFoldersBranch">SubFoldersBranch</a>.\r
488 Allows TiVos with software 8.3 and above to display subfolders as users\r
489 are accustomed too prior to the 8.3Software glitch. If you use this\r
490 then you don't need to use <a href="http://pytivo.armooo.net/wiki/ConfigurepyTivo#auto_subshares">auto_subshares</a>.\r
491       <strong>Warning:</strong> navigating folders too fast\r
492 with this setting enabled may cause <a class="wiki" href="/wiki/TiVo">TiVo</a> to reboot. <br>\r
494       <strong>Example Settings:</strong> True/False </p>\r
496       </div>\r
498       <div id="help-debug" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
499       <p align="center"><strong>debug</strong>\r
500       </p>\r
502       <p> <strong>Default Setting:</strong> False<br>\r
504       <strong>Valid Entries:</strong> True/False<br>\r
506       <strong>Required:</strong> No<br>\r
508       <strong>Skill:</strong> Advanced<br>\r
510       <strong>Description:</strong> Will create a file\r
511 named debug.txt in the base folder of pyTivo. This file will contain\r
512 debug information helpful in diagnosing problems. Generally only\r
513 necessary if you are having a problem and the information is requested\r
514 by support staff.<br>\r
516       <strong>Example Settings:</strong> True/False </p>\r
518       </div>\r
520       <div id="help-optres" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
521       <p align="center"><strong>optres</strong>\r
522       </p>\r
524       <p> <strong>Default Setting:</strong> False<br>\r
526       <strong>Valid Entries:</strong> True/False<br>\r
528       <strong>Required:</strong> No<br>\r
530       <strong>Skill:</strong> Moderate<br>\r
532       <strong>Description:</strong> Allows for the use of\r
533 the Optimal Resolution in transcoding. By setting optes = true pyTivo\r
534 will treat the <a href="http://pytivo.armooo.net/wiki/ConfigurepyTivo#height">height</a>\r
535 and <a href="http://pytivo.armooo.net/wiki/ConfigurepyTivo#width">width</a>\r
536 settings in the conf file as a maximum. If the video to be transcoded\r
537 has smaller dimensions that are closer to other acceptable TiVo\r
538 dimensions then pyTivo will use these dimensions. This allows for\r
539 faster transcoding and small files when the initial video is a lower\r
540 quality.<br>\r
542       <strong>Example Settings:</strong> True/False </p>\r
544       </div>\r
546       <div id="help-audio_br" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
547       <p align="center"><strong>audio_br</strong>\r
548       </p>\r
550       <p> <strong>Default Setting:</strong> 192K<br>\r
552       <strong>Valid Entries:</strong> Any valid Bit rate.\r
553 Up to 384K for SD TiVos. Up to 448K for HD TiVos.<br>\r
555       <strong>Required:</strong> No<br>\r
557       <strong>Skill:</strong> Advanced<br>\r
559       <strong>Description:</strong> This allows you to\r
560 choose the default server audio bit rate used in transcoding. The\r
561 default is likely fine for most users. Users with HD units and high\r
562 quality videos to transcode will want to use higher value. Higher\r
563 values may slow down transcoding and will increase the file size.\r
564 Increased file sizes take up more room on the <a class="wiki" href="/wiki/TiVo">TiVo</a> and take longer to transfer\r
565 over the network.<br>\r
567       <strong>Example Settings:</strong> 192K, 384K, 448K. </p>\r
569       </div>\r
571       <div id="help-max_audio_br" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
572       <p align="center"><strong>max_audio_br</strong>\r
573       </p>\r
575       <p> <strong>Default Setting:</strong> 448K<br>\r
577       <strong>Valid Entries:</strong> Any valid Bit rate. <br>\r
579       <strong>Required:</strong> No<br>\r
581       <strong>Skill:</strong> Advanced<br>\r
583       <strong>Description:</strong> This sets the maximum\r
584 audio bit rate that can be sent to the <a class="wiki" href="/wiki/TiVo">TiVo</a>. Files having a higher bit\r
585 rate will be transcoded to ensure <a class="wiki" href="/wiki/TiVo">TiVo</a> compatibilty. <br>\r
587       <strong>Example Settings:</strong> 384K, 448K. </p>\r
589       </div>\r
591       <div id="help-video_br" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
592       <p align="center"><strong>video_br</strong>\r
593       </p>\r
595       <p> <strong>Default Setting:</strong> 4096K\r
596 for SD <a class="wiki" href="/wiki/TiVo">TiVo</a>'s,\r
597 8192K for HD <a class="wiki" href="/wiki/TiVo">TiVo</a>'s<br>\r
599       <strong>Valid Entries:</strong> Any valid Bit rate.\r
600 1024K = 1Mi<br>\r
602       <strong>Required:</strong> No<br>\r
604       <strong>Skill:</strong> Advanced<br>\r
606       <strong>Description:</strong> This allows you to\r
607 choose the default server video bit rate used in transcoding. FFmpeg\r
608 does not strictly follow this bit rate, there is a certain level of\r
609 tolerance that is allowed. Also a low quality file will always have a\r
610 low bit rate. The default is likely fine for most users. Higher values\r
611 may slow down transcoding and will increase the file size. Increased\r
612 file sizes take up more room on the <a class="wiki" href="/wiki/TiVo">TiVo</a> and take longer to transfer\r
613 over the network.<br>\r
615       <strong>Example Settings:</strong> 4096K, 8Mi, 12Mi </p>\r
617       </div>\r
619       <div id="help-max_video_br" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
620       <p align="center"><strong>max_video_br</strong>\r
621       </p>\r
623       <p> <strong>Default Setting:</strong> 17408k<br>\r
625       <strong>Valid Entries:</strong> Any valid Bit rate.\r
626 1024K = 1Mi<br>\r
628       <strong>Required:</strong> No<br>\r
630       <strong>Skill:</strong> Advanced<br>\r
632       <strong>Description:</strong> This allows you to\r
633 choose the maximum bit rate and is more strict than the <a href="http://pytivo.armooo.net/wiki/ConfigurepyTivo#video_br">video_br</a>\r
634 setting above. However setting this can cause buffer overflows and can\r
635 cause issues with ffmpeg. In addition to setting the ffmpeg maxrate\r
636 option, this setting is used to determine if the video bitrate of the\r
637 source video file is too high for the <a class="wiki" href="/wiki/TiVo">TiVo</a>. Otherwise compatible\r
638 mpeg's with a video bitrate above this setting will be transcoded\r
639 rather than sent to the <a class="wiki" href="/wiki/TiVo">TiVo</a>\r
640 untouched. Raising this setting much higher than the default will likly\r
641 result in pixelation during playback. Recommended only for skilled\r
642 users. <strong>Note:</strong> there is a report that\r
643 ffmpeg throws an error with 17Mi but accepts 17408K just fine. <br>\r
645       <strong>Example Settings: 17408k</strong> </p>\r
647       </div>\r
649       <div id="help-width" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
650       <p align="center"><strong>width</strong>\r
651       </p>\r
653       <p> <strong>Default Setting:</strong> 544<br>\r
655       <strong>Valid Entries:</strong> Any valid pixel\r
656 dimension. Setting will be rounded to nearest acceptable <a class="wiki" href="/wiki/TiVo">TiVo</a>\r
657 dimension<br>\r
659       <strong>Required:</strong> No<br>\r
661       <strong>Skill:</strong> Moderate<br>\r
663       <strong>Description:</strong> Allows you to choose\r
664 the output dimension of the transcoded videos. SD units are limited to\r
665 544 and below. Likely HD users will want to choose a higher value.\r
666 Higher values may slow down transcoding and will increase the file\r
667 size. Increased file sizes take up more room on the TiVo and take\r
668 longer to transfer over the network.<br>\r
670       <strong>Example Settings:</strong> 1920, 1440, 1280,\r
671 720, 704, 544, 480, 352. </p>\r
673       </div>\r
675       <div id="help-height" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
676       <p align="center"><strong>height</strong>\r
677       </p>\r
679       <p> <strong>Default Setting:</strong> 480<br>\r
681       <strong>Valid Entries:</strong> Any valid pixel\r
682 dimension. Setting will be rounded to nearest acceptable <a class="wiki" href="/wiki/TiVo">TiVo</a>\r
683 dimension<br>\r
685       <strong>Required:</strong> No<br>\r
687       <strong>Skill:</strong> Moderate<br>\r
689       <strong>Description:</strong> Allows you to choose\r
690 the output dimension of the transcoded videos. SD units are limited to\r
691 480 and below. Likely HD users will want to choose a higher value.\r
692 Higher values may slow down transcoding and will increase the file\r
693 size. Increased file sizes take up more room on the TiVo and take\r
694 longer to transfer over the network.<br>\r
696       <strong>Example Settings:</strong> 1080, 720, 480 </p>\r
698       </div>\r
700       <div id="help-ffmpeg_prams" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
701       <p align="center"><strong>ffmpeg_prams</strong>\r
702       </p>\r
704       <p> <strong>Default Setting:</strong> -vcodec\r
705 mpeg2video -r 29.97 -b %(video_br)s -maxrate %(max_video_br)s -bufsize\r
706 %(buff_size)s %(aspect_ratio)s -comment pyTivo.py -ac 2 -ab\r
707 %(audio_br)s -ar 44100 -f vob -<br>\r
709       <strong>Valid Entries:</strong> A valid ffmpeg command<br>\r
711       <strong>Required:</strong> No<br>\r
713       <strong>Skill:</strong> Very Advanced<br>\r
715       <strong>Description:</strong> This allows you to\r
716 control the parameters passed to ffmpeg. Most users will be just fine\r
717 with the default setting. Some HD users are experimenting with the\r
718 following line:<br>\r
720 -vcodec mpeg2video -maxrate %(max_video_br)s -qscale 1.2 -bufsize\r
721 %(buff_size)s -comment pyTivo.py -acodec ac3 -ab %(audio_br)s -ar 48000\r
722 -f vob -<br>\r
724 The major difference is that this does not alter the dimensions of the\r
725 video. The native height and width setting of the video used to\r
726 transcode the video. This will only work for HD and S3 units. So far\r
727 there has not been any report of dimensions which the HD units will not\r
728 accept. Additionally this line increases the audio frequency setting to\r
729 48000 too. <strong>Example Settings:</strong> See Above\r
730 and the forum. </p>\r
732       </div>\r
734       <div id="help-bufsize" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
735       <p align="center"><strong>bufsize</strong>\r
736       </p>\r
738       <p> <strong>Default Setting:</strong> 1024k<br>\r
740       <strong>Valid Entries:</strong> Any valid byte size<br>\r
742       <strong>Required:</strong> No<br>\r
744       <strong>Skill:</strong> Very Advanced<br>\r
746       <strong>Description:</strong> Allows you to set the\r
747 buffer size used by ffmpeg. I don't know much about this setting, but\r
748 from what I can tell it is rather touchy and should only be edited by\r
749 advanced users.<br>\r
751       <strong>Example Settings:</strong> 1024k<br>\r
753       </p>\r
755       </div>\r
757       <div id="help-type" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
758       <p align="center"><strong>type</strong> </p>\r
760       <p> <strong>Default Setting:</strong> None<br>\r
762       <strong>Valid Entries:</strong> Video, Music, or any\r
763 other valid plugin name.<br>\r
765       <strong>Required:</strong> Yes<br>\r
767       <strong>Skill:</strong> Basic<br>\r
769       <strong>Description:</strong> Sets the type of share\r
770 that this will be. This must be set to something otherwise pyTivo will\r
771 not start.<br>\r
773       <strong>Example Settings:</strong> Video or Music </p>\r
775       </div>\r
777       <div id="help-path" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
778       <p align="center"><strong>path</strong> </p>\r
780       <p> <strong>Default Setting:</strong> None<br>\r
782       <strong>Valid Entries:</strong> Any operating system\r
783 path<br>\r
785       <strong>Required:</strong> Yes<br>\r
787       <strong>Skill:</strong> Basic<br>\r
789       <strong>Description:</strong> Sets the base path to\r
790 your media content. While pyTivo will start with an invalid path your\r
791 shares will not work at all.<br>\r
793       <strong>Example Settings:</strong> <span class="underline">Windows</span> = C:\videos | <span class="underline">Linux</span> = /home/user/media </p>\r
795       </div>\r
797       <div id="help-subshares" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
798       <p align="center"><strong>auto_subshares</strong>\r
799       </p>\r
801       <p> <strong>Default Setting:</strong> false<br>\r
803       <strong>Valid Entries:</strong> True/False<br>\r
805       <strong>Required:</strong> No<br>\r
807       <strong>Skill:</strong> Moderate<br>\r
809       <strong>Description:</strong> Subfolders of the share\r
810 paths you define will be seen by pyTivo and displayed as subfolders in\r
811 the Now Playing List. This is an alternative to the <a href="http://pytivo.armooo.net/wiki/ConfigurepyTivo#hack83">hack83</a>\r
812 setting which enables the <a class="wiki" href="/wiki/SubFoldersBranch">SubFoldersBranch</a><br>\r
814       <strong>Example Settings:</strong> True/False </p>\r
816       </div>\r
818       <div id="help-precache" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
819       <p align="center"><strong>precache</strong>\r
820       </p>\r
822       <p> <strong>Default Setting:</strong> false<br>\r
824       <strong>Valid Entries:</strong> True/False<br>\r
826       <strong>Required:</strong> No<br>\r
828       <strong>Skill:</strong> Moderate<br>\r
830       <strong>Description:</strong> In order to verify that\r
831 the video files present on your computer were compatible with ffmpeg in\r
832 older versions pyTivo would query ffmpeg for each file. While this\r
833 information was cached it still caused a delay in the initial loading\r
834 of a list of files. This precache setting forced pyTivo to inspect each\r
835 video prior to starting the pyTivo server. However, this had two\r
836 drawbacks. 1. It took time as much as two minutes before pyTivo was\r
837 ready to accept requests. 2. It did not update the cache if new files\r
838 were added while the pyTivo server was running. <br>\r
840 In the more recent releases, anything after Feb 16, 2008, pyTivo no\r
841 longer needs to query ffmpeg when creating a file list. Instead pyTivo\r
842 has a list of accepted video format extensions. If the file extension\r
843 falls within this list it is displayed on the TiVo. This achieves the\r
844 same speed increase as the precache method without the delay in loading\r
845 the pyTivo server. <br>\r
847 There are still two drawbacks to this method. 1. The video file must\r
848 have an extension that is in the list. There is a possibility that a\r
849 new video file extension could come out before pyTivo is updated. 2.\r
850 Incomplete or video files with errors will still appear in the TiVo\r
851 listing if they have the correct extension, even though they are not\r
852 valid files. Both of these concerns are minimal. 1. Very few new\r
853 formats of video files come out very often. And all extensions are\r
854 stored in the video.ext file which is easily edited. 2. When viewing\r
855 the file details before transferring the pyTivo server queries ffmpeg\r
856 to make sure it is valid. If the file is not valid it will show up as a\r
857 copyrighted file and transferring it will be prevented by TiVo. <br>\r
859 It is recommended that you leave precaching turned off as it is no\r
860 longer needed.<br>\r
862       <strong>Example Settings:</strong> True/False </p>\r
864       </div>\r
866       <div id="help-aspect169" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
867       <p align="center"><strong>aspect169</strong>\r
868       </p>\r
870       <p> <strong>Default Setting:</strong> True<br>\r
872       <strong>Valid Entries:</strong> True/False<br>\r
874       <strong>Required:</strong> No<br>\r
876       <strong>Skill:</strong> Moderate<br>\r
878       <strong>Description:</strong> Most TiVos, even S2,\r
879 can handle 16:9 videos perfectly. Some S2s are known not to handle 16:9\r
880 and will default to false in this setting. If you are experiencing\r
881 major distortion you can try setting this to false. Likely mos users\r
882 will not have to mess with this.<br>\r
884       <strong>Example Settings:</strong> True/False </p>\r
886       </div>\r
888       <div id="help-shares" style="position: absolute; left: 0px; top: 0px; visibility: hidden;">\r
889       <p align="center"><strong>shares</strong>\r
890       </p>\r
892       <p> <strong>Default Setting:</strong> Blank,\r
893 which is equivalent to allow all shares on this TiVo.<br>\r
895       <strong>Valid Entries:</strong> The name of any share\r
896 in your pyTivo.conf file. A comma separated list.<br>\r
898       <strong>Required:</strong> No<br>\r
900       <strong>Skill:</strong> Easy<br>\r
902       <strong>Description:</strong> Only the shares listed\r
903 in this setting will be visible on this TiVo. Will ignore invalid\r
904 shares. If no valid shares are listed or the setting does not exist,\r
905 all shares will be visible on this TiVo.<br>\r
907       <strong>Example Settings:</strong> Movies, Kids Stuff\r
908       </p>\r
910       </div>\r
912 <!-- END HELP SECTIONS --> </div>\r
914       </td>\r
916     </tr>\r
918   </tbody>\r
919 </table>\r
920 </center>\r
921 </body>\r
922 </html>\r