mirror of
https://github.com/9001/copyparty.git
synced 2026-08-14 06:14:48 -06:00
th: demote vips (#1556);
use libvips as last resort due to risk of OOM; example: libvips defers to imagemagick for animated avif, and imagemagick probably does an identify, iterating through each frame, itself consuming 100+ MiB RAM, which libvips amplifies to 7+ GiB similar behavior is observed with `identify a.mkv` in a shell
This commit is contained in:
parent
daf144af61
commit
ed0be42a3b
|
|
@ -773,7 +773,7 @@ press `g` or `田` to toggle grid-view instead of the file listing and `t` togg
|
||||||

|

|
||||||
|
|
||||||
it does static images with Pillow / pyvips / FFmpeg, and uses FFmpeg for video files, so you may want to `--no-thumb` or maybe just `--no-vthumb` depending on how dangerous your users are
|
it does static images with Pillow / pyvips / FFmpeg, and uses FFmpeg for video files, so you may want to `--no-thumb` or maybe just `--no-vthumb` depending on how dangerous your users are
|
||||||
* pyvips is 3x faster than Pillow, Pillow is 3x faster than FFmpeg
|
* Pillow is 3x faster (and safer) than FFmpeg
|
||||||
* disable thumbnails for specific volumes with volflag `dthumb` for all, or `dvthumb` / `dathumb` / `dithumb` for video/audio/images only
|
* disable thumbnails for specific volumes with volflag `dthumb` for all, or `dvthumb` / `dathumb` / `dithumb` for video/audio/images only
|
||||||
* for installing FFmpeg on windows, see [optional dependencies](#optional-dependencies)
|
* for installing FFmpeg on windows, see [optional dependencies](#optional-dependencies)
|
||||||
|
|
||||||
|
|
@ -3241,7 +3241,7 @@ enable sending [zeromq messages](#zeromq) from event-hooks: `pyzmq`
|
||||||
|
|
||||||
enable [smb](#smb-server) support (**not** recommended): `impacket==0.13.0`
|
enable [smb](#smb-server) support (**not** recommended): `impacket==0.13.0`
|
||||||
|
|
||||||
`pyvips` gives higher quality thumbnails than `Pillow` and is 320% faster, using 270% more ram
|
`pyvips` adds support for some additional image formats, but can use extreme amounts of RAM
|
||||||
* to install `pyvips` on Linux: `sudo apt install libvips42 && python3 -m pip install --user -U pyvips`
|
* to install `pyvips` on Linux: `sudo apt install libvips42 && python3 -m pip install --user -U pyvips`
|
||||||
* to install `pyvips` on windows: `pip install --user -U "pyvips[binary]"`
|
* to install `pyvips` on windows: `pip install --user -U "pyvips[binary]"`
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ optdepends=("ffmpeg: thumbnails for videos, images (slower) and audio, music tag
|
||||||
"python-mutagen: music tags (alternative)"
|
"python-mutagen: music tags (alternative)"
|
||||||
"python-paramiko: sftp server",
|
"python-paramiko: sftp server",
|
||||||
"python-pillow: thumbnails for images"
|
"python-pillow: thumbnails for images"
|
||||||
"python-pyvips: thumbnails for images (higher quality, faster, uses more ram)"
|
"python-pyvips: thumbnails for images (eats ram, prefer pillow)"
|
||||||
"libkeyfinder: detection of musical keys"
|
"libkeyfinder: detection of musical keys"
|
||||||
"python-pyopenssl: ftps functionality"
|
"python-pyopenssl: ftps functionality"
|
||||||
"python-pyzmq: send zeromq messages from event-hooks"
|
"python-pyzmq: send zeromq messages from event-hooks"
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
# create thumbnails with Pillow; faster than FFmpeg / MediaProcessing
|
# create thumbnails with Pillow; faster than FFmpeg / MediaProcessing
|
||||||
withThumbnails ? true,
|
withThumbnails ? true,
|
||||||
|
|
||||||
# create thumbnails with PyVIPS; even faster, uses more memory
|
# create thumbnails with PyVIPS; uses more memory, pillow is preferred
|
||||||
# -- can be combined with Pillow to support more filetypes
|
# -- can be combined with Pillow to support more filetypes
|
||||||
withFastThumbnails ? false,
|
withFastThumbnails ? false,
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1795,7 +1795,7 @@ def add_thumbnail(ap):
|
||||||
ap2.add_argument("--th-x3", metavar="TXT", type=u, default="n", help="show thumbs at 3x resolution; client can override in UI unless force. [\033[32my\033[0m]=yes, [\033[32mn\033[0m]=no, [\033[32mfy\033[0m]=force-yes, [\033[32mfn\033[0m]=force-no (volflag=th3x)")
|
ap2.add_argument("--th-x3", metavar="TXT", type=u, default="n", help="show thumbs at 3x resolution; client can override in UI unless force. [\033[32my\033[0m]=yes, [\033[32mn\033[0m]=no, [\033[32mfy\033[0m]=force-yes, [\033[32mfn\033[0m]=force-no (volflag=th3x)")
|
||||||
ap2.add_argument("--th-qv", metavar="N", type=int, default=40, help="webp/jpg thumbnail quality (10~90); higher is larger filesize and better quality (volflag=th_qv)")
|
ap2.add_argument("--th-qv", metavar="N", type=int, default=40, help="webp/jpg thumbnail quality (10~90); higher is larger filesize and better quality (volflag=th_qv)")
|
||||||
ap2.add_argument("--th-qvx", metavar="N", type=int, default=64, help="jxl thumbnail quality (10~90); higher is larger filesize and better quality (volflag=th_qvx)")
|
ap2.add_argument("--th-qvx", metavar="N", type=int, default=64, help="jxl thumbnail quality (10~90); higher is larger filesize and better quality (volflag=th_qvx)")
|
||||||
ap2.add_argument("--th-dec", metavar="LIBS", default="vips,raw,pil,ff", help="image decoders, in order of preference")
|
ap2.add_argument("--th-dec", metavar="LIBS", default="raw,pil,ff,vips", help="image decoders, in order of preference")
|
||||||
ap2.add_argument("--th-no-jpg", action="store_true", help="disable jpg output")
|
ap2.add_argument("--th-no-jpg", action="store_true", help="disable jpg output")
|
||||||
ap2.add_argument("--th-no-webp", action="store_true", help="disable webp output")
|
ap2.add_argument("--th-no-webp", action="store_true", help="disable webp output")
|
||||||
ap2.add_argument("--th-no-jxl", action="store_true", help="disable jpeg-xl output")
|
ap2.add_argument("--th-no-jxl", action="store_true", help="disable jpeg-xl output")
|
||||||
|
|
|
||||||
|
|
@ -1029,8 +1029,8 @@ class SvcHub(object):
|
||||||
# fmt: off
|
# fmt: off
|
||||||
to_check = [
|
to_check = [
|
||||||
(HAVE_SQLITE3, "sqlite", "sessions and file/media indexing"),
|
(HAVE_SQLITE3, "sqlite", "sessions and file/media indexing"),
|
||||||
(HAVE_PIL, "pillow", "image thumbnails (plenty fast)"),
|
(HAVE_PIL, "pillow", "image thumbnails (good and fast)"),
|
||||||
(HAVE_VIPS, "vips", "image thumbnails (faster, eats more ram)"),
|
(HAVE_VIPS, "vips", "image thumbnails (eats ram; will prefer pillow)"),
|
||||||
(H_PIL_WEBP, "pillow-webp", "create thumbnails as webp files"),
|
(H_PIL_WEBP, "pillow-webp", "create thumbnails as webp files"),
|
||||||
(HAVE_FFMPEG, "ffmpeg", t_ff + ", good-but-slow image thumbnails"),
|
(HAVE_FFMPEG, "ffmpeg", t_ff + ", good-but-slow image thumbnails"),
|
||||||
(HAVE_FFPROBE, "ffprobe", t_ff + ", read audio/media tags"),
|
(HAVE_FFPROBE, "ffprobe", t_ff + ", read audio/media tags"),
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ with image size after installation and when gzipped
|
||||||
* [`min`](https://hub.docker.com/r/copyparty/min) (57 MiB, 20 gz) is just copyparty itself
|
* [`min`](https://hub.docker.com/r/copyparty/min) (57 MiB, 20 gz) is just copyparty itself
|
||||||
* [`im`](https://hub.docker.com/r/copyparty/im) (70 MiB, 25 gz) can thumbnail images with pillow, parse media files with mutagen
|
* [`im`](https://hub.docker.com/r/copyparty/im) (70 MiB, 25 gz) can thumbnail images with pillow, parse media files with mutagen
|
||||||
* [`ac` (163 MiB, 56 gz)](https://hub.docker.com/r/copyparty/ac) is `im` plus ffmpeg for video/audio thumbs + audio transcoding + better tags
|
* [`ac` (163 MiB, 56 gz)](https://hub.docker.com/r/copyparty/ac) is `im` plus ffmpeg for video/audio thumbs + audio transcoding + better tags
|
||||||
* [`iv`](https://hub.docker.com/r/copyparty/iv) (211 MiB, 73 gz) is `ac` plus vips for faster heif / avic / jxl thumbnails
|
* [`iv`](https://hub.docker.com/r/copyparty/iv) (211 MiB, 73 gz) is `ac` plus vips for more thumbnail formats
|
||||||
* [`dj`](https://hub.docker.com/r/copyparty/dj) (309 MiB, 104 gz) is `iv` plus beatroot/keyfinder to detect musical keys and bpm
|
* [`dj`](https://hub.docker.com/r/copyparty/dj) (309 MiB, 104 gz) is `iv` plus beatroot/keyfinder to detect musical keys and bpm
|
||||||
|
|
||||||
[`ac` is recommended](https://hub.docker.com/r/copyparty/ac) since the additional features available in `iv` and `dj` are rarely useful
|
[`ac` is recommended](https://hub.docker.com/r/copyparty/ac) since the additional features available in `iv` and `dj` are rarely useful
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue