Releases: epheterson/immich-apple-silicon
Releases · epheterson/immich-apple-silicon
Release list
Immich Accelerator v1.5.24
Immich 3.0 support
- Plugin-path detection now recognizes both the 2.7 layout (
corePlugin/) and the 3.0 layout (plugins/immich-plugin-core/). Immich 3.0 renamed the WASM core-plugin directory, which made the layer-download early-exit never fire on 3.0, so setup downloaded every image layer instead of stopping once the small plugin layer arrived. Setup is fast again on 3.0. The rest of the 3.0 worker (extraction, native Sharp, ffmpeg wrapper, plugin load, worker start) was verified end to end. - README notes the worker tracks your Immich version, verified with 2.7.x and 3.0.x.
Note: moving your own Docker stack from 2.7 to 3.0 requires Immich's database migration (pgvecto-rs to VectorChord); that is on the Immich side, not the accelerator.
Upgrade
brew upgrade immich-accelerator
immich-accelerator setup # if first time or new features require itImmich Accelerator v1.5.23
Diagnostics
spawn EBADFinstrumentation (#89): when a child-process spawn throws (the crash a reporter hits during ffmpeg capability detection, not reproducible on any environment we can build), the shim now logs the file-descriptor state at the point of failure, which of fd 0/1/2 is invalid, the requested stdio, and the process's open fds, then re-throws unchanged. Fires only on the error path; silent in normal operation. This is to capture the root cause on the affected machine.
Upgrade
brew upgrade immich-accelerator
immich-accelerator setup # if first time or new features require itImmich Accelerator v1.5.22
Fixed
- pg_dump shim wrapped
child_processspawn twice (#89): the shim calledinstall()for bothchild_processandnode:child_process, which are the same object on modern Node, so every spawn ran through two nested wrappers (twopg_dump_shim.jsframes in stack traces). Now guarded to patch a given module object once. This is hardening, not a confirmed fix for the reportedspawn EBADF, which could not be reproduced across Node 22/24, launchd-style stdio, high concurrency, or starved fd limits, and rewrites nothing for ffprobe. Reported by @KoenM9264.
Upgrade
brew upgrade immich-accelerator
immich-accelerator setup # if first time or new features require itImmich Accelerator v1.5.21
Fixed
brew cleanupfailing on root-owned.pyc(#86): the CLI wrapper now setsPYTHONDONTWRITEBYTECODE=1, so Python no longer writes__pycache__into the Homebrew Cellar. Previously, running the CLI as root (e.g.sudo immich-accelerator ...) left root-owned bytecode in the keg thatbrew cleanupcouldn't remove. Reported by @shtefko. After upgrading, clear any existing root-owned files once:sudo chown -R $(whoami):admin /opt/homebrew/Cellar/immich-accelerator.
Upgrade
brew upgrade immich-accelerator
immich-accelerator setup # if first time or new features require itImmich Accelerator v1.5.20
Docs
- README house style: added badges, a Star History chart, and License/Credits sections, and aligned the footer to the canonical form. Documented that Immich's
Transcoding video ... without hardware accelerationlog is expected and benign on macOS (the ffmpeg wrapper does the VideoToolbox encode; Immich has no VideoToolbox option to report). Reported by @shtefko (#84). - README slimmed: Troubleshooting is now a collapsible symptom index (
<details>), and the Split deployment guide moved todocs/split-deployment.mdwith a short pointer. The common path reads top-to-bottom without scrolling past the long tail. - README polish: promoted the status from Alpha to Beta (in daily use), de-duplicated the Commands table (the
immich-acceleratorprefix is stated once, not on every row), and removed all em-dashes.
Upgrade
brew upgrade immich-accelerator
immich-accelerator setup # if first time or new features require itImmich Accelerator v1.5.19
Fixes
brew services stop/restartnow stop ML and the dashboard too, not just the worker (#81 follow-up). v1.5.18's stop handler used the normal sequential shutdown, which waits up to 5s per service; launchd SIGKILLs the watcher only a few seconds after signalling it, so the handler was cut off after the worker and left ML + dashboard running. The handler now signals all services up front, so they all stop even under launchd's short grace.
Upgrade
brew upgrade immich-accelerator
immich-accelerator setup # if first time or new features require itImmich Accelerator v1.5.18
Fixes
- Media-readiness gate no longer refuses a writable split setup (#80). The gate checked writability at the media root, but Immich only writes to the subdirs (
upload,thumbs, …) — a split deployment can have a root-owned, non-writable media root (e.g. a/datasynthetic link) while the subdirs are fully writable. The gate now places/verifies its marker across the media root and Immich's standard subdirs (root first, for back-compat), testing writability where Immich actually writes. A genuinely missing/unmounted root still correctly refuses. Reported by @shtefko. brew services stop/restartnow actually stop the worker (#81). The worker, ML, and dashboard run detached, so they survived when launchd signalled only the watcher — a stop or restart left them running. The watcher now traps SIGTERM/SIGINT and stops its services before exiting, so the service lifecycle behaves as expected. Reported by @shtefko.immich-accelerator startnow also starts the dashboard. Previously onlywatch/brew-services brought it up. Reported by @shtefko.
Upgrade
brew upgrade immich-accelerator
immich-accelerator setup # if first time or new features require itImmich Accelerator v1.5.17
Fixes
brew upgradenow actually takes effect. The worker and ML service run detached, so they survived abrew services restart— a fresh watcher would adopt the still-running old-code worker, and an upgrade silently didn't apply until a full manual stop/start. The watcher now stamps the version each worker starts with, restarts a worker found running stale code, and (in service mode) notices when the installed version on disk changes and relaunches itself so the new code — shims and fixes — comes up on a fresh worker within ~30s. No manual restart needed when running as a service. README updated.
Upgrade
brew upgrade immich-accelerator
immich-accelerator setup # if first time or new features require itNote: upgrading to 1.5.17 itself needs one brew services restart — the watcher already running predates this change and can't self-reload. Every upgrade after this one applies automatically in service mode.
Immich Accelerator v1.5.16
Features
- Media-readiness gate: don't start until the real media root is mounted (default on). On a network-mounted media root, the worker could start before the mount came up and write thumbnails into a local placeholder directory that the mount later masks (silent data loss). The worker now drops a small marker file in the media root on first start and verifies it on every subsequent start; if the marker is missing — a placeholder, or the mount isn't up yet — it refuses to start (the watch loop retries, so it comes up as soon as the mount appears). Mount-agnostic (works for local, NFS, and SMB), runs before the ML service so a not-ready mount never orphans it, and probes in a timeout-bounded subprocess so a hung mount can't wedge startup. Opt out with
"require_media_ready": false.
Upgrade
brew upgrade immich-accelerator
immich-accelerator setup # if first time or new features require itImmich Accelerator v1.5.15
Fixes
- Keep remote Postgres connections alive in split deployments (#74). When the worker and the database sit on different network segments, a stateful firewall or NAT can silently reap an idle connection; the worker then hangs on the next read until
read ETIMEDOUTand doesn't recover (intermittent, since only idle connections get reaped). Immich doesn't expose a keepalive setting, so the worker now preloads a small shim that enables TCP keepAlive on everypgconnection, keeping the socket warm so it isn't dropped. No-op for same-host setups; Immich's source is untouched. Tunable/disable viaIMMICH_ACCEL_PG_KEEPALIVE/IMMICH_ACCEL_PG_KEEPALIVE_MS. Reported by @shtefko.
Upgrade
brew upgrade immich-accelerator
immich-accelerator setup # if first time or new features require it