{"id":46668802,"url":"https://github.com/voltkraft/immich-folder-watch","last_synced_at":"2026-05-23T20:01:05.292Z","repository":{"id":337268275,"uuid":"1152889808","full_name":"VoltKraft/immich-folder-watch","owner":"VoltKraft","description":"A folder watcher for Immich that synchronizes media files via the Immich HTTP API.","archived":false,"fork":false,"pushed_at":"2026-05-23T15:20:34.000Z","size":884,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-23T17:15:17.716Z","etag":null,"topics":["automation","folder-watch","folder-watcher","immich","immich-api","photo-management"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VoltKraft.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-08T15:41:39.000Z","updated_at":"2026-05-23T15:20:37.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/VoltKraft/immich-folder-watch","commit_stats":null,"previous_names":["voltkraft/immich-folder-watch"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/VoltKraft/immich-folder-watch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VoltKraft%2Fimmich-folder-watch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VoltKraft%2Fimmich-folder-watch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VoltKraft%2Fimmich-folder-watch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VoltKraft%2Fimmich-folder-watch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VoltKraft","download_url":"https://codeload.github.com/VoltKraft/immich-folder-watch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VoltKraft%2Fimmich-folder-watch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33410345,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T18:09:33.147Z","status":"ssl_error","status_checked_at":"2026-05-23T18:09:31.380Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","folder-watch","folder-watcher","immich","immich-api","photo-management"],"created_at":"2026-03-08T21:27:30.696Z","updated_at":"2026-05-23T20:01:05.281Z","avatar_url":"https://github.com/VoltKraft.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./assets/branding/logo.svg\" alt=\"Immich Folder Watch logo\" width=\"128\" /\u003e\n\u003c/p\u003e\n\n# Immich Folder Watch\n\n[![Platform Windows](https://img.shields.io/badge/Platform-Windows%2010%2F11%2FServer-0078D6?logo=windows)](./docs/installation-windows.md)\n[![Platform Linux](https://img.shields.io/badge/Platform-Linux%20(Flatpak)-FCC624?logo=linux\u0026logoColor=black)](./packaging/flatpak/README.md)\n[![Version](https://img.shields.io/badge/Version-2.5.1-blue)](./CHANGELOG.md)\n[![License: AGPL-3.0-only](https://img.shields.io/badge/License-AGPL--3.0--only-blue.svg)](./LICENSE)\n\n`Immich Folder Watch` is a desktop app for **Windows and Linux** that watches local folders and uploads newly created media to Immich automatically.\n\nIt 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.\n\n---\n\n## Use Cases\n\n- Automatically upload screenshots into an Immich album\n- Watch a DSLR or SD-card import folder and send new photos to Immich\n- Ingest scanner output into a family archive\n- Pick up files dropped by another tool into a staging folder\n- Run a small always-on system that feeds Immich in the background\n- Separate sources by album, for example `Screenshots`, `Camera Imports`, or `Receipts`\n- Same configuration shape and feature set on Windows and Linux\n\n\n---\n\n## Solution\n\n`immich-folder-watch` watches one or more folders, waits until files are fully written, and uploads them through the normal Immich HTTP API.\n\nThat gives you a clean, low-maintenance ingestion path:\n\n- Desktop GUI and (where the desktop supports it) a tray icon\n- Per-user operation — each user runs their own configuration\n- Autostart on login (toggleable in the GUI; uses the Background portal on Linux)\n- Optional per-folder album placement in Immich\n- API-based uploads instead of storage hacks\n\nEach 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.\n\n---\n\n## Features\n\n- Watches one or more local folders for new media files\n- Waits until files are stable before upload\n- Uploads through the Immich API in configurable batches\n- Supports optional per-source `albumName`\n- Creates missing albums automatically when album placement is configured\n- Per-folder **sync mode**: `Upload new files only` (default), `Upload everything in the folder`, or `Sync folder with album (bidirectional)`\n- Retries transient upload failures automatically\n- Runs as a per-user tray app with live sync status\n- Autostarts on login by default; togglable in the GUI\n- Verifies Immich URL, API key, and required permissions from the GUI\n- Localized UI (English, German) with OS auto-detect and live in-app language switching\n- Cross-platform: Windows MSI and Linux Flatpak built from the same Core; Windows logs to the Event Log by default, Linux to journald\n\n---\n\n## Installation\n\n### Windows (MSI)\n\n1. Download the latest MSI from [GitHub Releases](https://github.com/VoltKraft/immich-folder-watch/releases).\n2. Install it with administrative rights (per-machine binary install).\n3. Open the `Immich Folder Watch` desktop shortcut.\n4. Enter your Immich URL and API key and review the verification result.\n5. Select one or more folders and expand **Advanced Watch Options** only when you want to adjust subdirectories, extensions, or exclude filters.\n6. **Save and Apply** — watching starts in-process.\n\nEach Windows user has their own configuration. The app autostarts at login by default.\n\nInstalled layout:\n\n- Binaries: `%ProgramFiles%\\Immich Folder Watch\\bin\\` (shared, per-machine)\n- Config: `%LOCALAPPDATA%\\Immich Folder Watch\\config.yaml` (per user)\n- Logs: Windows Event Log (`Immich Folder Watch` source, default) or `%LOCALAPPDATA%\\Immich Folder Watch\\logs\\` when File logging is selected\n- Autostart: `%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\Immich Folder Watch.lnk`\n\nUpgrading 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%`.\n\n### Linux (Flatpak)\n\nThe Flathub listing is in submission. Once it's live, installation will be a single command:\n\n```bash\nflatpak install flathub io.github.voltkraft.immich-folder-watch\n```\n\nUntil then, build and install the Flatpak from source per [`packaging/flatpak/README.md`](./packaging/flatpak/README.md):\n\n```bash\n./tools/generate-nuget-sources.sh\nflatpak-builder --user --install --force-clean \\\n    packaging/flatpak/build-dir \\\n    packaging/flatpak/flathub/io.github.voltkraft.immich-folder-watch.yml\nflatpak run io.github.voltkraft.immich-folder-watch\n```\n\nThe Flatpak package runs through X11/XWayland because the current Avalonia\nLinux backend initializes X11. It falls back to the window and Background Apps\nflow where a tray icon is not available.\n\nSandbox layout:\n\n- App ID: `io.github.voltkraft.immich-folder-watch`\n- Config: `~/.var/app/io.github.voltkraft.immich-folder-watch/config/immich-folder-watch/config.yaml`\n- 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\n- Autostart: managed via the desktop's Background portal — toggle inside the GUI\n\nFolder 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.\n\nDetailed guides:\n\n- [Windows Installation](./docs/installation-windows.md)\n- [Linux Flatpak packaging](./packaging/flatpak/README.md)\n- [Configuration](./docs/configuration.md)\n- [Troubleshooting](./docs/troubleshooting.md)\n\n---\n\n## Example\n\nExample configuration:\n\n```yaml\nimmich:\n  serverApiUrl: \"https://immich.example.com/api\"\n  apiKey: \"REPLACE_WITH_IMMICH_API_KEY\"\n\nwatch:\n  sources:\n    - path: \"C:\\\\Users\\\\YOUR_USER\\\\Pictures\\\\Screenshots\"\n      albumName: \"Screenshots\"\n      syncMode: \"uploadNew\" # uploadNew (default) | uploadAll | sync\n      includeSubdirectories: true\n      extensions:\n        - \".avif\"\n        - \".bmp\"\n        - \".gif\"\n        - \".heic\"\n        - \".heif\"\n        - \".jp2\"\n        - \".jpe\"\n        - \".jpeg\"\n        - \".jpg\"\n        - \".insp\"\n        - \".jxl\"\n        - \".png\"\n        - \".psd\"\n        - \".raw\"\n        - \".rw2\"\n        - \".svg\"\n        - \".tif\"\n        - \".tiff\"\n        - \".webp\"\n      excludeDirectories:\n        - \"private\"\n      excludeFileNames:\n        - \"Thumbs.db\"\n  batchIntervalSeconds: 5\n  maxBatchSize: 25\n  fileReadyTimeoutSeconds: 30\n\nretry:\n  maxAttempts: 5\n  baseDelayMilliseconds: 500\n\nlogging:\n  level: \"Information\"\n  logDirectory: \"C:\\\\Users\\\\YOUR_USER\\\\AppData\\\\Local\\\\Immich Folder Watch\\\\logs\"\n```\n\n---\n\n## Documentation\n\nThe GUI keeps per-source watch options collapsed by default and only shows `Excluded Directories` when `Include subdirectories` is enabled.\n\n- [Configuration](./docs/configuration.md)\n- [Windows Installation](./docs/installation-windows.md)\n- [Linux Flatpak packaging](./packaging/flatpak/README.md)\n- [Architecture](./docs/architecture.md)\n- [Troubleshooting](./docs/troubleshooting.md)\n- [Development](./docs/development.md)\n\n---\n\n## Contact\n\nIssues and feature requests are welcome via GitHub Issues.\nPlease read [`CONTRIBUTING.md`](./CONTRIBUTING.md) first.\n\n---\n\n## ⭐ Support the Project\n\nIf you find the project useful, consider leaving a star on GitHub ⭐\nIt helps visibility and supports continued development.\n\n---\n\n## ⭐ Star History\n\n\u003ca href=\"https://www.star-history.com/#/VoltKraft/immich-folder-watch\u0026type=date\u0026legend=top-left\"\u003e\n \u003cpicture\u003e\n   \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/image?repos=voltkraft/immich-folder-watch\u0026type=date\u0026theme=dark\u0026legend=top-left\" /\u003e\n   \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/image?repos=voltkraft/immich-folder-watch\u0026type=date\u0026legend=top-left\" /\u003e\n   \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/image?repos=voltkraft/immich-folder-watch\u0026type=date\u0026legend=top-left\" /\u003e\n \u003c/picture\u003e\n\u003c/a\u003e\n\n---\n\n## License\n\nThis repository is licensed under **AGPL-3.0-only**. See [LICENSE](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvoltkraft%2Fimmich-folder-watch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvoltkraft%2Fimmich-folder-watch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvoltkraft%2Fimmich-folder-watch/lists"}