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 desktop 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 with background operation; the Windows build includes a tray icon,
while the first Flathub build shows an in-app banner until a Flatpak-safe tray
backend is available
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. Once it's live, installation will be a single command:
The Flatpak package runs through X11/XWayland because the current Avalonia
Linux backend initializes X11. The current Flathub build disables Avalonia's
StatusNotifierItem tray backend because it requires a broad KDE D-Bus own-name
permission that Flathub no longer grants to new apps; the app shows a window
banner and can be reopened from the launcher or Background Apps.
Logs: journald (default — journalctl --user -t io.github.voltkraft.immich-folder-watch.desktop) or ~/.var/app/io.github.voltkraft.immich-folder-watch/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.