forked from jlesage/docker-handbrake
-
Notifications
You must be signed in to change notification settings - Fork 0
/
appdefs.xml
833 lines (789 loc) · 41.3 KB
/
appdefs.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
<!--
Definitions for HandBrake docker container.
This file is used as data source to generate README.md and unRAID template files
from Jinja2 templates.
-->
<defs>
<app>
<id>3</id>
<gui>True</gui>
<friendly_name>HandBrake</friendly_name>
<name>{{ defs.app.friendly_name|lower|replace(' ', '-') }}</name>
<project>
<description>HandBrake is a tool for converting video from nearly any format to a selection of modern, widely supported codecs.</description>
<url>https://handbrake.fr/</url>
</project>
<unraid>
<support_url>https://forums.unraid.net/topic/57420-support-handbrake/</support_url>
<category>MediaApp:Video</category>
<extra_description>
[span style='color: red;'][b]NOTE:[/b][/span] For the container to have
access to your optical drive(s), you need to allow access to the proper
device (usually [b][i]/dev/sr0[/i][/b]) by adding the parameter
[b][i]--device DEV[/i][/b] in the [i]Extra Parameters[/i] field (shown when
[i]Advanced View[/i] is enabled). For example, if your optical drive is at
[b][i]/dev/sr0[/i][/b], you need to add [b][i]--device /dev/sr0[/i][/b].
</extra_description>
</unraid>
<container>
<overview>A fully automated mode is also available: drop files into a watch folder and let {{ defs.app.friendly_name }} process them without any user interaction.</overview>
<rough_download_size>80MB</rough_download_size>
<storage_permissions>ro</storage_permissions>
</container>
<!-- Extra stuff to be added to the documentation. -->
<documentation>
<section>
<title level="2">Access to Optical Drive(s)</title>
<content>
By default, a Docker container doesn't have access to host's devices. However,
access to one or more device can be granted with the `--device DEV` parameter.
Optical drives usually have `/dev/srX` as device. For example, the first drive
is `/dev/sr0`, the second `/dev/sr1`, and so on. To allow HandBrake to access
the first drive, this parameter is needed:
```
--device /dev/sr0
```
To easily find devices of optical drives, start the container and look at its
log for messages similar to these ones:
```
...
[cont-init.d] 95-check-optical-drive.sh: executing...
[cont-init.d] 95-check-optical-drive.sh: looking for usable optical drives...
[cont-init.d] 95-check-optical-drive.sh: found optical drive /dev/sr0, but it is not usable because is not exposed to the container.
[cont-init.d] 95-check-optical-drive.sh: no usable optical drive found.
[cont-init.d] 95-check-optical-drive.sh: exited 0.
...
```
Since HandBrake can decrypt DVD video discs, their conversion can be performed
directly from the optical device. From the graphical interface, click the
`Open Source` button and browse through the file system to find your optical
drive device (e.g. `/dev/sr0`).
</content>
</section>
<section>
<title level="2">Automatic Video Conversion</title>
<content>
This container has an automatic video converter built-in. This is useful to
batch-convert videos without user interaction.
Basically, files copied to the `/watch` container folder are automatically
converted by HandBrake to a pre-defined video format according to a pre-defined
preset. Both the format and the preset are specified via environment variables:
| Variable | Default |
|----------------|---------|
|`AUTOMATED_CONVERSION_PRESET` | "Very Fast 1080p30" |
|`AUTOMATED_CONVERSION_FORMAT` | "mp4" |
See the [Environment Variables](#environment-variables) section for details
about setting environment variables.
**NOTE**: Converted videos are stored to the `/output` folder of the container.
**NOTE**: All default presets, along with personalized/custom ones, can be seen
with the HandBrake GUI.
**NOTE**: The status and progression of conversions performed by the automatic
video converter can only be seen in the container's log. It is not something
visible from the GUI. Container's log can be obtained by executing the command
`docker log handbrake`, where `handbrake` is the name of the container. Also,
full details about the conversion are stored in `/config/log/hb/conversion.log`
(container path).
</content>
</section>
<section>
<title level="3">Multiple Watch Folders</title>
<content>
If needed, up to 4 additionnal watch folders can be used:
- `/watch2`
- `/watch3`
- `/watch4`
- `/watch5`
This is useful in scenarios where videos need to be converted by different
presets. For example, one could use a watch folder for movies and another watch
folder for TV shows, both having different encoding quality requirements.
By default, additional watch folders inherits the same settings has the main one
(`/watch`). A setting for a particular watch folder can be overrided by adding
its index to the corresponding environment variable name.
For example, to set the HandBrake preset used to convert videos in `/watch2`,
the environment variable `AUTOMATED_CONVERSION_PRESET_2` is used.
`AUTOMATED_CONVERSION_PRESET_3` is used for `/watch3`, and so on.
All settings related to the automatic video converter can be overrided for each
additional watch folder:
- `AUTOMATED_CONVERSION_PRESET`
- `AUTOMATED_CONVERSION_FORMAT`
- `AUTOMATED_CONVERSION_SOURCE_STABLE_TIME`
- `AUTOMATED_CONVERSION_SOURCE_MIN_DURATION`
- `AUTOMATED_CONVERSION_OUTPUT_SUBDIR`
- `AUTOMATED_CONVERSION_KEEP_SOURCE`
</content>
</section>
<section>
<title level="3">Video Discs</title>
<content>
The automatic video converter supports video discs, in the folllowing format:
- ISO image file.
- `VIDEO_TS` folder (DVD disc).
- `BDMV` folder (Blu-ray disc).
Note that folder names are case sensitive. For example, `video_ts`, `Video_Ts`
or `Bdmv` won't be treated as discs, but as normal directories.
Video discs can have multiple titles (the main movie, previews, extras, etc).
In a such case, each title is converted to its own file. These files have the
suffix `.title-XX`, where `XX` is the title number. For example, if the file
`MyMovie.iso` has 2 titles, the following files would be generated:
- `MyMovie.title-1.mp4`
- `MyMovie.title-2.mp4`
It is possible to ignore titles shorted than a specific amount of time. By
default, only titles longer than 10 seconds are processed. This duration can be
adjusted via the `AUTOMATED_CONVERSION_SOURCE_MIN_DURATION` environment
variable. See the [Environment Variables](#environment-variables) section for
details about setting environment variables.
When the source is a disc folder, the name of the converted video file will
match its parent folder's name, if any. For example:
| Watch folder path | Converted video filename |
|-------------------------|--------------------------|
| /watch/VIDEO_TS | VIDEO_TS.mp4 |
| /watch/MyMovie/VIDEO_TS | MyMovie.mp4 |
</content>
</section>
<section>
<title level="3">Hooks</title>
<content>
Custom actions can be performed using hooks. Hooks are shell scripts executed
by the automatic video converter.
**NOTE**: Hooks are always invoked via `/bin/sh`, ignoring any shebang the
script may have.
Hooks are optional and by default, no one is defined. A hook is defined and
executed when the script is found at a specific location.
The following table describe available hooks:
| Container location | Description | Parameter(s) |
|--------------------|-------------|--------------|
| `/config/hooks/pre_conversion.sh` | Hook executed before the beginning of a video conversion. | The first argument is the path of the converted video. The second argument is the path to the source file. Finally, the third argument is the name of the Handbrake preset that will be used to convert the video. |
| `/config/hooks/post_conversion.sh` | Hook executed when the conversion of a video file is terminated. | The first parameter is the status of the conversion. A value of `0` indicates that the conversion terminated successfuly. Any other value represent a failure. The second argument is the path to the converted video (the output). The third argument is the path to the source file. Finally, the fourth argument is the name of the Handbrake preset used to convert the video. |
During the first start of the container, example hooks are installed in
`/config/hooks/`. Example scripts have the suffix `.example`. For example,
you can use `/config/hooks/post_conversion.sh.example` as a starting point.
**NOTE**: Keep in mind that this container has the minimal set of packages
required to run HandBrake. This may limit actions that can be performed in
hooks.
</content>
</section>
<section>
<title level="3">Temporary Conversion Directory</title>
<content>
A video being converted is written in a hidden, temporary directory under the
root of the output directory (`/output`). Once a conversion successfully
terminates, the video file is moved to its final location.
This feature can be useful for scenarios where the output folder is monitored
by another application: with proper configuration, one can make sure this
application only "sees" the final, converted video file and not the transient
versions.
If the monitoring application ignores hidden directories, then nothing special
is required and the application should always see the final file.
However, if the monitoring application handles hidden directories, the automatic
video converter should be configured with the
`AUTOMATED_CONVERSION_OUTPUT_SUBDIR` environment variable sets to a
subdirectory. The application can then be configured to monitor this
subdirectory. For example, if `AUTOMATED_CONVERSION_OUTPUT_SUBDIR` is set to
`TV Shows` and `/output` is mapped to `$HOME/appvolumes/HandBrake` on the host,
`$HOME/appvolumes/HandBrake/TV Shows` should be monitored by the application.
application.
</content>
</section>
<section>
<title level="2">Intel Quick Sync Video</title>
<content>
Intel Quick Sync Video is Intel's brand for its dedicated video encoding and
decoding hardware core. It is a technology that is capable of offloading video
decoding and encoding task to the integrated GPU, thus saving the CPU usage to
do other tasks. As a specialized hardware core on the processor die, Quick Sync
offers a much more power efficient video processing which is much superior to
video encoding on a CPU.
For HandBrake to be able to use hardware-accelerated encoding, the following are
required:
- Have a compatible Intel processor. To determine if your CPU has the Quick
Sync Video hardware, consult this [list] from the [Intel Ark] website. The
model name of your processor is printed to the container's log during its
startup. Look for a message like this:
```
[cont-init.d] 95-check-qsv.sh: Processor: Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
```
- The Intel i915 graphic driver must be loaded on the **host**.
- The `/dev/dri` device must be exposed to the container. This is done by
adding the `--device /dev/dri` parameter to the `docker run` command.
When Intel Quick Sync Video is properly enabled, HandBrake offers the following
video encoder:
```
H.264 (Intel QSV)
```
If this encoder is not part of the list, something is wrong and looking at the
container's log can give more details about the issue.
[list]: https://ark.intel.com/Search/FeatureFilter?productType=processors&QuickSyncVideo=true
[Intel Ark]: https://ark.intel.com
</content>
</section>
<section>
<title level="3">unRAID</title>
<content>
The Intel i915 driver is already included in unRAID. To automatically load the
driver during the startup of the host, the following lines must be added to
`/boot/config/go`:
```
# Load the i915 driver.
modprobe i915
```
</content>
</section>
<section>
<title level="2">Nightly Builds</title>
<content>
{{ defs.app.friendly_name }} nightly builds are based on the latest development code, which means
they may or may not be stable.
The latest development version is available by using the `dev-latest` Docker
image tag. For other specific development versions, look at available
[tags on Docker Hub].
When creating the container, the tag needs to be appended to the name of the
Docker image, like this:
```
docker run [OPTIONS..] jlesage/{{ defs.app.name }}:dev-latest
```
[tags on Docker Hub]: https://hub.docker.com/r/jlesage/{{ defs.app.name }}/tags/
</content>
</section>
<section>
<title level="2">Debug Builds</title>
<content>
Debug builds can be used to better investigate problems that can occur with
{{ defs.app.friendly_name }}. These builds have {{ defs.app.friendly_name }}
compiled in debug mode and all symbols are kept.
The main use case of debug builds is debugging a crash. To do this, a core dump
needs to be generated when {{ defs.app.friendly_name }} crashes. To make sure
this core dump is properly generated, two things are required:
1. Core dumps must be enabled. This is done by setting the maximum size of
cores via the `--ulimit core=-1` parameter of the `docker run` command.
A value of `-1` mean "unlimited".
2. Location of the cores must be set. This can be done by executing the
following command on the **host**:
```
echo 'CORE_PATTERN' | sudo tee /proc/sys/kernel/core_pattern
```
Where `CORE_PATTERN` is the template that defines the naming of core dump
files. For example, to set the files in the configuration volume of the
container (for easy retrieval from the host), use the pattern
`/config/core.%e.%t`.
**NOTE**: Because a core file contains the complete memory layout of an
application, it is created with restrictive permissions. If another user
other than the one used to run {{ defs.app.friendly_name }} needs to access
the core file, permissions must be changed by executing
`chmod a+r CORE`, where `CORE` is the path to the core file.
**NOTE**: Since the core dump files pattern is shared between the host and
the container, you may want to revert to the original pattern once
done.
**NOTE**: The current value of the pattern can be obtained by executing
`cat /proc/sys/kernel/core_pattern`.
Debug builds are available by using Docker image tags with the `debug` suffix.
Make sure to look at available [tags on Docker Hub].
When creating the container, the tag needs to be appended to the name of the
Docker image, like this:
```
docker run [OPTIONS..] jlesage/{{ defs.app.name }}:v1.14.3-debug
```
[tags on Docker Hub]: https://hub.docker.com/r/jlesage/{{ defs.app.name }}/tags/
</content>
</section>
<section>
<title level="3">unRAID</title>
<content>
On systems running unRAID, the `--ulimit core=-1` parameter can be added to the
`Extra Parameters` field of the container settings.
</content>
</section>
</documentation>
<!-- Changelog of the application. -->
<history>
<release>
<version>1.14.7</version>
<date>2018-09-11</date>
<change>Upgraded to HandBrake version 1.1.2.</change>
<change>Fixes to the automatic video converter:</change>
<change level="2">Gracefully handle the case where the pre-conversion hook removes the source video file.</change>
<change level="2">Skip unreadable files.</change>
<change level="2">Drop root privileges at start.</change>
<change level="2">Better handling of unexisting cache files.</change>
</release>
<release>
<version>1.14.6</version>
<date>2018-07-30</date>
<change>Fixed an issue where the automatic video converter would fail to convert video with multiple titles.</change>
<change>Make sure to apply the `HANDBRAKE_DEBUG` environment variable to the automatic video converter.</change>
</release>
<release>
<version>1.14.5</version>
<date>2018-07-19</date>
<change>A video being converted is now written to a temporary directory before being moved to its final location.</change>
</release>
<release>
<version>1.14.4</version>
<date>2018-07-17</date>
<change>Fixed an issue where HandBrake could crash while encoding a video using x264.</change>
</release>
<release>
<version>1.14.3</version>
<date>2018-07-16</date>
<change>Added support for debug images.</change>
</release>
<release>
<version>1.14.2</version>
<date>2018-07-13</date>
<change>Upgraded HandBrake to version 1.1.1.</change>
<change>Reduced the size of the container image.</change>
</release>
<release>
<version>1.14.1</version>
<date>2018-07-12</date>
<change>Fixed an issue where the automatic video converter would not be able to access the device required to enable Intel Quick Sync Video hardware-accelerated encoding.</change>
</release>
<release>
<version>1.14.0</version>
<date>2018-07-09</date>
<change>Added support for Intel Quick Sync Video hardware-accelerated encoding.</change>
<change>Now using baseimage v3.4.0, which is based on Alpine Linux 3.8.</change>
<change>Fixed issue where selecting a different video encoder would result in incorrect video preset selection.</change>
<change>Fixed an issue where the automatic video converter would choose an incorrect output subfolder when `SAME_AS_SRC` is used.</change>
<change>Fixed an issue where the automatic video converter, during source cleanup, would try to remove the watch folder itself.</change>
<change>Fixed an issue where the automatic video converter would choose an incorrect output filename when the source is a DVD/Blu-Ray folder.</change>
</release>
<release>
<version>1.13.5</version>
<date>2018-06-18</date>
<change>Fixed nightly build.</change>
</release>
<release>
<version>1.13.4</version>
<date>2018-06-11</date>
<change>Fixed nightly build.</change>
</release>
<release>
<version>1.13.3</version>
<date>2018-05-21</date>
<change>Moved the HandBrake debug log under the proper directory.</change>
<change>Fixed the nightly build.</change>
</release>
<release>
<version>1.13.2</version>
<date>2018-05-09</date>
<change>Fixed issue where handling DVD structure would cause a crash.</change>
</release>
<release>
<version>1.13.1</version>
<date>2018-04-26</date>
<change>Improved fix for FLAC encoder crash.</change>
</release>
<release>
<version>1.13.0</version>
<date>2018-04-09</date>
<change>Upgraded HandBrake to version 1.1.0.</change>
</release>
<release>
<version>1.12.0</version>
<date>2018-03-22</date>
<change>Added pre-conversion hook for the automatic video converter.</change>
<change>Added support for creation of image based on the latest HandBrake development code.</change>
<change>Switched to a baseimage based on Alpine Linux 3.7.</change>
</release>
<release>
<version>1.11.5</version>
<date>2018-03-02</date>
<change>Now using baseimage v3.3.4, which brings the following changes (since last used version):</change>
<change level="2">Make sure the log monitor is started after the X server.</change>
<change level="2">Fixed an issue where the log monitor `yad` target would use XDG folders of the application.</change>
<change level="2">Fixed issue where log monitor states were not cleared during container startup.</change>
</release>
<release>
<version>1.11.4</version>
<date>2018-03-01</date>
<change>Since HandBrake doesn't work well with ffmpeg, reverted to libav.</change>
<change>Thus, the FLAC encoder crash has been fixed in libav instead.</change>
<change>Make sure the main window is always visible in background.</change>
</release>
<release>
<version>1.11.3</version>
<date>2018-02-13</date>
<change>Fixed an issue where encoding audio to FLAC would cause a crash.</change>
<change>Use AAC encoder from libavcodec.</change>
<change>Fixed an issue where automatic conversion of a multi-titles medias would produce only the first one.</change>
<change>Improved logging of the automatic video converter while processing multi-titles medias.</change>
</release>
<release>
<version>1.11.2</version>
<date>2018-02-03</date>
<change>Now using baseimage v3.3.2, which brings the following changes:</change>
<change level="2">Restored timezone support in Alpine Linux images with glibc.</change>
<change level="2">Fixed issue in `add-pkg` helper where a package could be incorrectly detected as installed.</change>
</release>
<release>
<version>1.11.1</version>
<date>2018-01-30</date>
<change>Now using baseimage v3.3.1, which brings the following changes:</change>
<change level="2">Adjusted the way some ressources are accessed to better support reverse proxy to the container.</change>
</release>
<release>
<version>1.11.0</version>
<date>2018-01-22</date>
<change>Now using baseimage v3.3.0, which brings the following changes (since last used version):</change>
<change level="2">For Alpine Linux images with glibc, automatically update dynamic linker's cache after new libraries are installed.</change>
<change level="2">Fixed the LANG environment variable not being set properly.</change>
<change level="2">Added the ability to automatically install a CJK (Chinese/Japanese/Korean) font.</change>
</release>
<release>
<version>1.10.0</version>
<date>2018-01-18</date>
<change>Added support for multiple watch folders.</change>
<change>Added environment variable to set the interval at which the automatic video converter checks for new files.</change>
<change>Source file and HandBrake preset name are now passed to the post hook script.</change>
</release>
<release>
<version>1.9.4</version>
<date>2018-01-11</date>
<change>Now using baseimage v3.2.2, which brings the following changes (since last used version):</change>
<change level="2">Upgraded S6 overlay to version 1.21.2.2.</change>
<change level="2">Upgraded glibc to version 2.26 (Alpine Linux glibc images).</change>
<change level="2">Adjusted the way ownership of /config is taken to better support cases where the folder is mapped to a network share.</change>
<change>Small adjustment to the way ownership of files are taken.</change>
</release>
<release>
<version>1.9.3</version>
<date>2017-12-12</date>
<change>Now using baseimage v3.1.4, which brings the following changes:</change>
<change level="2">Set 2 worker processes for nginx.</change>
</release>
<release>
<version>1.9.2</version>
<date>2017-11-20</date>
<change>Now using baseimage v3.1.3, which brings the following changes:</change>
<change level="2">Upgraded S6 overlay to version 1.21.2.1.</change>
<change>Better output of automated conversions: encoding progress now seen in container's log, while detailed output is redirected to a log file.</change>
</release>
<release>
<version>1.9.1</version>
<date>2017-11-07</date>
<change>Now using baseimage v3.1.2, which brings the following changes (from last used version):</change>
<change level="2">Fixed an issue where a self-disabled service could be restarted.</change>
<change level="2">Upgraded S6 overlay to version 1.21.2.0.</change>
<change level="2">Use a more efficient way to monitor status files.</change>
</release>
<release>
<version>1.9.0</version>
<date>2017-10-29</date>
<change>Now using baseimage v3.1.0, which brings the following changes:</change>
<change level="2">Upgraded S6 overlay to version 1.21.1.1.</change>
<change level="2">Enhanced integration of service dependencies functionality.</change>
<change level="2">Added a simple log monitor.</change>
<change level="2">Fixed race condition where container's exit code would not be the expected one.</change>
<change level="2">Fixed issue where application's GUI fails to displayed when accessing it through the web interface via standard ports 80/443.</change>
</release>
<release>
<version>1.8.0</version>
<date>2017-10-09</date>
<change>Now using baseimage v3.0.2, which brings the following changes:</change>
<change level="2">Better support for service dependencies.</change>
<change level="2">Added support for secure access to the application's GUI.</change>
</release>
<release>
<version>1.7.0</version>
<date>2017-09-18</date>
<change>Added support for optical drive(s) access.</change>
<change>Removed some useless shortcuts in the video source selection window.</change>
</release>
<release>
<version>1.6.1</version>
<date>2017-09-08</date>
<change>Now using baseimage v2.0.8, which brings the following changes (from last used version):</change>
<change level="2">Fixed timezone support on alpine-glibc images.</change>
<change level="2">Fixed duplicated entries in /etc/passwd and /etc/group that were created after a restart of the container.</change>
</release>
<release>
<version>1.6.0</version>
<date>2017-08-16</date>
<change>Added libdvdcss to allow reading of encrypted DVD video files.</change>
</release>
<release>
<version>1.5.9</version>
<date>2017-08-14</date>
<change>Now using baseimage v2.0.6, which brings the following changes:</change>
<change level="2">Upgraded S6 overlay to version 1.20.0.0.</change>
</release>
<release>
<version>1.5.8</version>
<date>2017-08-12</date>
<change>Fixed conversion of videos containing multiple titles.</change>
</release>
<release>
<version>1.5.7</version>
<date>2017-07-31</date>
<change>Now using baseimage v2.0.5, which brings the following changes (from last used version):</change>
<change level="2">Clear the environment of the container during startup.</change>
<change level="2">Clear the /tmp folder during startup.</change>
<change level="2">Cleanly terminate the X server when container is restarted/stopped.</change>
<change level="2">Improved robustness of X server starting process.</change>
<change level="2">Removed unneeded files from the image.</change>
</release>
<release>
<version>1.5.6</version>
<date>2017-07-27</date>
<change>Watch folder: recursively remove empty directories.</change>
</release>
<release>
<version>1.5.5</version>
<date>2017-07-27</date>
<change>Now using baseimage v2.0.3, which brings the following changes:</change>
<change level="2">Improved robustness of the X server starting process.</change>
</release>
<release>
<version>1.5.4</version>
<date>2017-07-26</date>
<change>Watch folder: properly support video discs (ISO files, DVD/Blu-ray folders).</change>
<change>Watch folder: when removing empty folders, ignore the watch folder itself.</change>
<change>Watch folder: make sure to abort if destination file already exists.</change>
</release>
<release>
<version>1.5.3</version>
<date>2017-07-25</date>
<change>Fixed HandBrake CLI crash that was occuring when working with ISO files or DVD folders.</change>
<change>Small adjustments to the default configuration file.</change>
</release>
<release>
<version>1.5.2</version>
<date>2017-07-23</date>
<change>Now using baseimage v2.0.2, which brings the following changes:</change>
<change level="2">Proper VNC port is exposed.</change>
</release>
<release>
<version>1.5.1</version>
<date>2017-07-18</date>
<change>Now using baseimage v2.0.1, which brings the following changes:</change>
<change level="2">Internal enhancements.</change>
<change level="2">Clean temporary files left by npm.</change>
</release>
<release>
<version>1.5.0</version>
<date>2017-07-17</date>
<change>Now using baseimage v2.0.0, which brings the following changes:</change>
<change level="2">Various internal enhancements.</change>
<change level="2">Fixed the way a service waits for another one.</change>
<change>Watch folder: ignore hidden files and folders.</change>
<change>Watch folder: adjusted the way empty folders are removed.</change>
</release>
<release>
<version>1.4.0</version>
<date>2017-07-04</date>
<change>Watch folder: Make sure to respect the configured umask.</change>
<change>Now using baseimage v1.5.0, which brings the following changes:</change>
<change level="2">Added the UMASK environment variable to control how file permissions are set for newly created files.</change>
<change level="2">Added the X11VNC_EXTRA_OPTS environment variable used to pass additional arguments to the x11vnc server.</change>
<change level="2">By default, activate auto-scaling of application's window.</change>
<change level="2">Applied latest Alpine Linux security updates.</change>
</release>
<release>
<version>1.3.3</version>
<date>2017-06-30</date>
<change>Watch folder: Added handling of environment variable AUTOMATED_CONVERSION_OUTPUT_SUBDIR, which allows customization of the output location of automatically converted videos..</change>
<change>The default source folder is now /storage.</change>
</release>
<release>
<version>1.3.2</version>
<date>2017-06-27</date>
<change>Watch folder: also process files in subfolders.</change>
</release>
<release>
<version>1.3.1</version>
<date>2017-06-22</date>
<change>Now using baseimage v1.4.3, which brings the following changes:</change>
<change level="2">Updated Alpine Linux to version 3.6.2.</change>
</release>
<release>
<version>1.3.0</version>
<date>2017-06-21</date>
<change>Now using baseimage v1.4.2, which brings the following changes (from last used version):</change>
<change level="2">Switched to Alpine Linux 3.6.</change>
<change level="2">Associate the application's icon to a unique version to avoid browser cache issues.</change>
<change level="2">Fixed prefix of some service related messages.</change>
<change level="2">Added support for supplying supplementary groups of the application.</change>
<change level="2">Improved process startup and shutdown.</change>
<change level="2">When container is stopped or restarted, processes are now terminated gracefully and in proper order. This allow the GUI application to execute its termination routine.</change>
<change level="2">No more error messages when container is stopped or restarted.</change>
</release>
<release>
<version>1.2.0</version>
<date>2017-05-31</date>
<change>Added support for post-conversion hook.</change>
</release>
<release>
<version>1.1.4</version>
<date>2017-05-30</date>
<change>Now using baseimage v1.3.2, which brings the following changes:</change>
<change level="2">Fixed password modal window not showing up when required.</change>
</release>
<release>
<version>1.1.3</version>
<date>2017-05-26</date>
<change>Watch folder: Fixed issue where, after a first successful conversion, conversion of next available video files would not start.</change>
<change>Renamed the 'Watch Folder' service to 'Automatic Video Converter'.</change>
</release>
<release>
<version>1.1.2</version>
<date>2017-05-24</date>
<change>Watch folder: Changed the way files being transferred are detected. Method used previously was not working properly in all cases.</change>
</release>
<release>
<version>1.1.1</version>
<date>2017-05-24</date>
<change>Watch folder: temporarily skip files being accessed/transferred.</change>
<change>Watch folder: improved robustness.</change>
</release>
<release>
<version>1.1.0</version>
<date>2017-05-23</date>
<change>Watch folder: properly support filenames containing spaces.</change>
<change>Watch folder: added support for symbolic links.</change>
<change>HandBrake debug can now be enabled via the HANDBRAKE_DEBUG environment variable.</change>
<change>Take ownership of the `/output` folder.</change>
<change>Added the ability to remove video source files from the watch folder after successfully conversion.</change>
</release>
<release>
<version>1.0.1</version>
<date>2017-05-18</date>
<change>The watch folder is now monitored without inotify for better compatibility.</change>
</release>
<release>
<version>1.0.0</version>
<date>2017-05-18</date>
<change>Initial release.</change>
</release>
</history>
</app>
<container>
<!-- Environment variables -->
<environment_variables>
<environment_variable>
<name>AUTOMATED_CONVERSION_PRESET</name>
<description>HandBrake preset used by the automatic video converter. See the [Automatic Video Conversion](#automatic-video-conversion) section for more details.</description>
<default>Very Fast 1080p30</default>
<unraid_template>
<title>Automatic Video Converter: Preset</title>
<description>Preset used by the automatic video converter. Name of all available presets can be seen via the HandBrake GUI.</description>
<display>always</display>
<required>false</required>
<mask>false</mask>
</unraid_template>
</environment_variable>
<environment_variable>
<name>AUTOMATED_CONVERSION_FORMAT</name>
<description>Video container format used by the automatic video converter for output files. This is typically the video filename extension. See the [Automatic Video Conversion](#automatic-video-conversion) section for more details.</description>
<default>mp4</default>
<unraid_template>
<title>Automatic Video Converter: Format</title>
<description>Video container format used by the automatic video converter for output files. This is typically the video filename extension.</description>
<display>always</display>
<required>false</required>
<mask>false</mask>
</unraid_template>
</environment_variable>
<environment_variable>
<name>AUTOMATED_CONVERSION_KEEP_SOURCE</name>
<description>When set to `0`, a video that has been successfully converted is removed from the watch folder.</description>
<default>1</default>
<unraid_template>
<title>Automatic Video Converter: Keep Source Files</title>
<description>Set to 0 to remove successfully converted videos from the watch folder, 1 to keep them.</description>
<display>always</display>
<required>false</required>
<mask>false</mask>
</unraid_template>
</environment_variable>
<environment_variable>
<name>AUTOMATED_CONVERSION_OUTPUT_SUBDIR</name>
<description>Subdirectory of the output folder into which converted videos should be written. By default, this variable is not set, meaning that videos are saved directly into `/output/`. If `Home/Movies` is set, converted videos will be written to `/output/Home/Movies`. Use the special value `SAME_AS_SRC` to use the same subfolder as the source. For example, if the video source file is `/watch/Movies/mymovie.mkv`, the converted video will be written to `/output/Movies/`.</description>
<unraid_template>
<title>Automatic Video Converter: Output Subdirectory</title>
<description>Subdirectory of the output folder into which converted videos should be written.[ul][li]Leave value empty to save converted videos directly into [b][i]/output/[/i][/b].[/li][li]Use the special value [b][i]SAME_AS_SRC[/i][/b] to use the same subfolder as the source. For example, if the video source file is [b][i]/watch/Movies/mymovie.mkv[/i][/b], the converted video will be written to [b][i]/output/Movies/[/i][/b].[/li][li]Use any subfolder name. For example, setting the value [b][i]Home/Movies[/i][/b] will make converted videos written to [b][i]/output/Home/Movies[/i][/b]/[/li][/ul]</description>
<display>always</display>
<required>false</required>
<mask>false</mask>
</unraid_template>
</environment_variable>
<environment_variable>
<name>AUTOMATED_CONVERSION_SOURCE_STABLE_TIME</name>
<description>Time during which properties (e.g. size, time, etc) of a video file in the watch folder need to remain the same. This is to avoid processing a file that is being copied.</description>
<default>5</default>
<unraid_template>
<title>Automatic Video Converter: Source File Stable Time</title>
<description>Time during which properties (e.g. size, time, etc) of a video file in the watch folder need to remain the same. This is to avoid processing a file that is being copied.</description>
<display>advanced</display>
<required>false</required>
<mask>false</mask>
</unraid_template>
</environment_variable>
<environment_variable>
<name>AUTOMATED_CONVERSION_SOURCE_MIN_DURATION</name>
<description>Minimum title duration (in seconds). Shorter titles will be ignored. This applies only to video disc sources (ISO file, `VIDEO_TS` folder or `BDMV` folder).</description>
<default>10</default>
<unraid_template>
<title>Automatic Video Converter: Minimum Title Duration</title>
<description>Minimum title duration (in seconds). Shorter titles will be ignored. This applies only to video disc sources (ISO file, [i]VIDEO_TS[/i] folder or [i]BDMV[/i] folder).</description>
<display>advanced</display>
<required>false</required>
<mask>false</mask>
</unraid_template>
</environment_variable>
<environment_variable>
<name>AUTOMATED_CONVERSION_CHECK_INTERVAL</name>
<description>Interval (in seconds) at which the automatic video converter checks for new files.</description>
<default>5</default>
<unraid_template>
<title>Automatic Video Converter: Check Interval</title>
<display>advanced</display>
<required>false</required>
<mask>false</mask>
</unraid_template>
</environment_variable>
<environment_variable>
<name>HANDBRAKE_DEBUG</name>
<description>Setting this to `1` enables HandBrake debug logging for both the GUI and the automatic video converter. For the latter, the increased verbosity is reflected in `/config/log/hb/conversion.log` (container path). For the GUI, log messages are sent to `/config/log/hb/handbrake.debug.log` (container path). **NOTE**: When enabled, a lot of information is generated and the log file will grow quickly. Make sure to enable this temporarily and only when needed.</description>
<default/>
</environment_variable>
</environment_variables>
<!-- Volumes -->
<volumes>
<volume>
<container_path>/watch</container_path>
<host_path_example>$HOME/HandBrake/watch</host_path_example>
<description>This is where videos to be automatically converted are located.</description>
<permissions>rw</permissions>
<include_in_quick_start>true</include_in_quick_start>
<unraid_template>
<title>Watch Directory</title>
<description>This is the watch folder of the automatic video converter. Any video copied into this folder will be automatically converted by HandBrake.[br]Container path: /watch</description>
<default/>
<display>always</display>
<required>false</required>
<mask>false</mask>
</unraid_template>
</volume>
<volume>
<container_path>/output</container_path>
<host_path_example>$HOME/HandBrake/output</host_path_example>
<description>This is where automatically converted video files are written.</description>
<permissions>rw</permissions>
<include_in_quick_start>true</include_in_quick_start>
<unraid_template>
<title>Output Directory</title>
<description>This is the default output folder for converted videos. Also used by the automatic video converter.[br]Container path: /output</description>
<display>always</display>
<required>true</required>
<mask>false</mask>
</unraid_template>
</volume>
</volumes>
<!-- Network ports -->
<ports/>
<!-- Devices -->
<devices/>
<!-- Extra parameters -->
<extra_params/>
</container>
</defs>