Unofficial Qt desktop client for Immich
Browse, search, upload, download, and stream your self-hosted photo library.
Unofficial project. Fan-made desktop client, not affiliated with, maintained by, or endorsed by the official Immich project. Immich is a trademark of its respective owners. This app uses its own branding.
- Library - Immich-style timeline with day groups, Years view, zoomable grids (Ctrl+scroll), and progressive month loading
- Explore - people, places, and recent media; open a person or place as an in-app Library-style gallery
- Library sections - People, Favorites, Archive, Albums, Tags, Folders, and Trash in the sidebar; albums, tags, and folders expand into lists, and the trash can restore or permanently delete
- Viewer - step through photos and videos with on-screen controls or arrow keys; optional info panel (date, camera, location, people, albums, tags, folder) that links to those pages
- Search - find photos and videos across your library
- Folder Sync - watch multiple local folders and auto-upload new photos/videos to Immich (Windows, macOS, Linux); add another folder with +
- Optional local-network only mode: upload only when your Immich Local URL is reachable
- Unsynced files show in Library immediately with an unsaved badge (saving / error icons while uploading)
- Sharing - create and copy photo/video share links (optional password) from the context menu or media preview
- Upload & download - drag-and-drop, paste, send media to the server, or save it locally (original filename suggested)
- Video streaming - built-in player with seek, volume, buffering, and muted hover preview
- mTLS - optional client certificate (PKCS#12 or PEM) for Immich behind a reverse proxy
- Offline mode - keep browsing with a local thumbnail/disk cache; uploads queue until online
- Themes - light, dark, and custom palettes; collapsible sidebar
- Desktop extras - system tray, close-to-tray, autostart, single-instance
sudo snap install immich-desktopA community-maintained immich-desktop
package builds from source with your system's Qt:
yay -S immich-desktop # or any other AUR helperGrab Windows (.exe / .msi), Linux .deb, or AppImage (x86_64 / aarch64)
from the latest release (currently v0.2.3).
Snap Store ships amd64 and arm64.
- Install Immich Desktop from Snap, the Arch Linux AUR, or a GitHub release.
- Open the app and go to Settings → Immich Server.
- Enter your Immich server URL and an API key with permissions such as
user.read,asset.read,asset.view,asset.upload,asset.download,asset.delete, andperson.read, plus optionallyalbum.read,tag.readandfolder.readfor the Albums, Tags and Folders sections in the sidebar (album.readalso lists a photo's albums in the info panel). Optionally set a Local URL for LAN use. - Test the connection, save, then browse Library or Explore.
- (Optional) Open Settings → Folder Sync, choose folders with the system file picker (use + to add more), enable watching, and turn on Upload only when Immich is available on the local network if you only want uploads over LAN. Drop photos or videos into those folders; they appear in Library with sync status badges and upload when allowed. Each folder has its own Browse, Open folder, and Remove controls.
# Snap or Arch Linux AUR
immich-desktop
# AppImage (x86_64 or aarch64)
chmod +x immich-desktop-x86_64.AppImage # or immich-desktop-aarch64.AppImage
./immich-desktop-x86_64.AppImageIf your Immich server is behind an mTLS reverse proxy, enable Client certificate in Settings → Immich Server. The app supports PKCS#12 (.p12 / .pfx) or separate PEM certificate + PEM private key, plus an optional custom CA. The key password can be remembered or prompted when needed. Client certificates apply to the remote server URL only; the optional Local URL connects without them.
If a reverse proxy in front of Immich requires extra headers, turn on Enable custom HTTP headers under Settings → Immich Server. Click Add header, enter the name and value, then save. Each header is sent with every request to your Immich server, including requests to the optional Local URL and those made for video playback. They are not sent to third-party CDN or S3 addresses that Immich redirects to. The following header names are reserved by the app and cannot be overridden: Host, Content-Length, Transfer-Encoding, Connection, Range, and x-api-key. Values are stored locally in the app's plaintext settings file.
The same headers are used for both URLs, so do not store secrets here if your Local URL is plain HTTP.
For example, for Cloudflare Access add CF-Access-Client-Id and CF-Access-Client-Secret with the values from your service token.
Plans can shift, track progress and ideas in Issues.
- Library timeline with search, Years view, zoomable grids, progressive month loading, preview, trash, upload & download
- Shared viewer with photo/video navigation and an info panel (people, places, albums, tags, folder, EXIF)
- Sidebar sections for people, favorites, archive, albums, tags, folders, and trash (view-only for now)
- Explore: people and places as in-page galleries (Library-style person/place views)
- Folder Sync: multiple watched local folders, LAN-only upload option, unsaved/saving/error badges in Library
- Share links with optional password; mTLS client certificates for reverse proxies
- Custom HTTP headers for reverse-proxy authentication (e.g. Cloudflare Access)
- Video streaming player and hover preview
- Offline browsing via local disk cache + queued uploads when offline
- Themes (light / dark / custom), collapsible sidebar, system tray, autostart, single-instance
- Packaging: Windows installers,
.deb, AppImage, Snap Store (amd64+arm64), rolling beta on everymainpush
- Albums & tags - create albums and tags, add/remove assets, cover photos
- Bulk actions - multi-select favorite, archive, download, trash, album assign
- Upload reliability - pause/resume, per-file progress, clearer failure recovery
- Explore polish - map improvements, people naming/merge hooks, better empty states
- Keyboard & UX - more shortcuts and smoother scrolling
- Sharing - album links, partner sharing, richer public URL workflows
- Memories & faces - Immich memories feed and richer face/person management
- Smart library tools - duplicates, advanced filters (type, camera, date)
- Notifications - tray alerts for finished uploads and available updates
- Sync health - richer Folder Sync history, last sync time, cache size controls
- Multi-account / multi-server profiles
- Full-resolution offline packs for selected albums
- External editor / “open with” workflows
- Wider Immich API parity as the server evolves
- Broader packaging (Flatpak) as demand appears
I'm looking for people who want to co-build this project, and other projects too (mine or yours). Whether you want to contribute to immich desktop, start something new together, or get help on your own repo, reach out and let's figure out what to build.
Contact - Discord: diegosanche3 · GitHub: github.com/hdmain/immich-desktop · Issues: github.com/hdmain/immich-desktop/issues
Major community contributor: gardar (viewer navigation, zoomable grids, collapsible sidebar, info panel, and more).
Ways to help right now: bug fixes, UX polish, Immich API coverage (albums, sharing, memories), packaging (Flatpak/Snap), and testing on different distros/GPUs. No pressure on scope, small PRs and ideas are welcome too. See Settings → About in the app for the full tech stack and links.
The interface supports Qt translation catalogs and follows your system language. Choose Settings → Appearance → Language to override it; the interface refreshes immediately. The app automatically downloads current translations from GitHub at startup and when selecting a language. A saved copy and embedded catalogs provide offline fallback, so translation updates do not require a new app build. English is complete. Polish and Simplified Chinese cover most of the UI (new library-section strings still need translating); unfinished text falls back to English. See the translation guide to help translate or add a language.
| Language | Code | Progress | Strings |
|---|---|---|---|
| English | en |
██████████ 100% |
597 / 597 |
| German (Deutsch) | de |
███░░░░░░░ 27% |
160 / 597 |
| French (Français) | fr |
███░░░░░░░ 27% |
160 / 597 |
| Polish (Polski) | pl |
█████████░ 91% |
543 / 597 |
| Chinese (简体) | zh_CN |
█████████░ 91% |
543 / 597 |
Auto-generated from translations/immich_*.ts. Run python tools/update_translation_status.py or cmake --build build --target update_translations.
Requires CMake 3.21+ and Qt 6.2+ (Core, Gui, Widgets, Network, Svg, Multimedia, LinguistTools). Install
qt6-imageformats (or your distro's equivalent) at runtime so WebP thumbnails can be decoded.
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
./build/immichOptions for distribution packages:
| Option | Default | Purpose |
|---|---|---|
IMMICH_ENABLE_UPDATER |
ON |
Built-in update checks and installs; turn off when a package manager handles updates |
IMMICH_EXECUTABLE_NAME |
immich |
Name of the installed executable (the .desktop file follows it) |
IMMICH_BUILD_INFO |
empty | Shown after the version, e.g. AUR or beta 1a2b3c4 → "v0.2.3 (AUR)" |
src/core- settings, Immich client, updates, tray helperssrc/ui- shell, pages, and widgetsresources- icons, fonts, desktop metadatasnap- Snap packaging
Every push to main rebuilds installers for all platforms and refreshes a rolling
beta prerelease
(Windows .exe / .msi, Linux .deb / AppImage for x86_64 + aarch64, and Snap).
Snap Store also gets those builds on the beta and edge channels:
sudo snap install immich-desktop --beta
# or
sudo snap install immich-desktop --edgePrefer the latest stable release for day-to-day use. Beta builds can break.
MIT - see LICENSE.txt.


