Immich Folder Watch is a folder watcher and uploader designed to automatically ingest new media files into Immich via its HTTP API. It enables seamless integration between file imports on Windows or Linux systems and your Immich instance, eliminating the need for manual uploads.
Key Features:
Watches one or more local folders for newly created or modified media files.
Waits until files are fully written before uploading to avoid partial transfers.
Configurable batch uploads to optimize performance and reduce API load.
Optional per-source album placement in Immich, with automatic album creation if needed.
Retries failed uploads automatically, with configurable delay and maximum attempts.
Audience & Benefit:
Ideal for users who want automated, real-time media import into Immich without manual intervention. This tool is perfect for photographers, families, or anyone managing large volumes of photos and videos, saving time and ensuring a centralized, organized media repository. It can be installed via winget on Windows systems.
README
Immich Folder Watch
Immich Folder Watch is a desktop app for Windows and Linux that watches local folders and uploads newly created media to Immich automatically.
It runs as a per-user tray app — no system service, no elevation on every change. If screenshots, camera imports, scanner output, or synced files land on a desktop before they land in Immich, this fills that gap without writing directly into Immich storage.
Use Cases
Automatically upload screenshots into an Immich album
Watch a DSLR or SD-card import folder and send new photos to Immich
Ingest scanner output into a family archive
Pick up files dropped by another tool into a staging folder
Run a small always-on system that feeds Immich in the background
Separate sources by album, for example Screenshots, Camera Imports, or Receipts
Same configuration shape and feature set on Windows and Linux
Solution
immich-folder-watch watches one or more folders, waits until files are fully written, and uploads them through the normal Immich HTTP API.
That gives you a clean, low-maintenance ingestion path:
Desktop GUI and (where the desktop supports it) a tray icon
Per-user operation — each user runs their own configuration
Autostart on login (toggleable in the GUI; uses the Background portal on Linux)
Optional per-folder album placement in Immich
API-based uploads instead of storage hacks
Each watched folder has its own sync mode: upload only new files that appear during runtime (the default, preserving prior behavior), upload everything the folder already contains, or keep the folder bidirectionally in sync with its Immich album (additive — local files missing in the album are uploaded and album assets missing locally are downloaded). Deletions are never mirrored — the app does not remove files locally or remotely, and it does not write directly into Immich's storage folders.
Upgrading from an older service-based install: the legacy service is stopped and removed, and the existing C:\ProgramData\Immich Folder Watch\config.yaml is migrated into the installing user's %LOCALAPPDATA%.
Linux (Flatpak)
The Flathub listing is in submission. Until it's live, install the Flatpak bundle attached to each GitHub Release:
flatpak install --user immich-folder-watch-2.5.1.flatpak
flatpak run io.github.voltkraft.ImmichFolderWatch
Tested live on Fedora 44 + GNOME 46 with the AppIndicator extension; other GNOME-based desktops and KDE Plasma 6 should work but the tray-icon path uses StatusNotifierItem and falls back to a Background-Apps banner where no SNI watcher is installed. Wayland and X11 are both supported.
Logs: journald (default — journalctl --user -t io.github.voltkraft.ImmichFolderWatch.desktop) or ~/.var/app/io.github.voltkraft.ImmichFolderWatch/data/Immich Folder Watch/logs/ when File logging is selected
Autostart: managed via the desktop's Background portal — toggle inside the GUI
Folder picking goes through the FreeDesktop FileChooser portal so the app only sees the folders you explicitly grant. The watcher resolves the doc-portal handles back to host paths via org.freedesktop.portal.Documents, and inotify-blind FUSE mounts are covered by a 5-second polling sweep.