Immich is a self hosted photo and video management solution designed for people who want more control over their personal photo library. It is often considered an alternative to services such as Google Photos, but the biggest difference is that you can host Immich on your own server and keep your library under your own control. The project is open source and available under the AGPL-3.0 license.
The first thing that stands out about Immich is how polished it feels. Self hosted applications sometimes sacrifice usability for flexibility, but Immich manages to provide a modern web interface alongside Android and iOS mobile applications. The mobile app can automatically back up photos and videos, making the experience feel much closer to a commercial cloud photo service.
Immich goes well beyond simple photo storage. It provides albums, shared albums, public sharing, favorites, archives, memories, maps, RAW image support, Live Photos and Motion Photos, stacked photos, and external libraries. It also supports multiple users, which makes it practical for families or small groups running their own server.
Search is one of Immich's strongest features. Photos can be searched using metadata, objects, faces, and machine learning based image understanding. Facial recognition automatically detects and groups faces, allowing you to organize photos around people in your library.
The mobile backup experience is another major advantage. You can select which albums should be backed up, download media back to your device, and use background backup. This makes Immich particularly useful for replacing a cloud photo backup service while keeping the actual storage on your own hardware.
For more advanced users, Immich offers plenty of features for integrating it into an existing self hosted environment. There are API keys, a CLI uploader, OAuth integration, Prometheus monitoring, configurable storage templates, hardware video transcoding, database backups, and external libraries.
There is, however, an important downside to self hosting. You are responsible for the server, storage, updates, networking, and backups. Immich's own documentation recommends a 3-2-1 backup strategy and specifically warns that backing up the database alone is not enough. The database contains metadata and user information, while the actual photos and videos also need to be backed up separately.
Another consideration is resource usage. Immich's machine learning features can require additional CPU, RAM, and potentially GPU resources depending on the configuration. Facial recognition and other processing tasks can be particularly demanding when importing a large existing library.
Despite these requirements, Immich is remarkably complete. It combines automatic mobile backup, photo organization, intelligent search, facial recognition, sharing, and a polished gallery into a package that can replace many of the features people expect from commercial photo services.
Download Immich APK v3.2.0 - Software Mirrors |
|---|
app-arm64-v8a-release.apk | 65.8 MB app-armeabi-v7a-release.apk | 60.75 MB app-release.apk | 170.68 MB app-x86_64-release.apk | 68.4 MB |
Immich APK v3.2.0 Release Notes: v3.2.0
Welcome to Immich v3.2.0!
This release includes many new features as well as the usual collection of bug fixes and cleanups. Keep reading below for a list of highlights.
Highlights
- Docker compose builder
- Revamped search UI (web)
- Search API v2 (server)
- View own people in shared assets, cross-user clustering
- Workflow tags trigger and actions
- Dedicated memories page
- Tag renaming (web)
- View assets in map viewport (web)
Docker compose builder
We recently released our new docker compose builder, which lets you put together a custom compose file for Immich more easily. Please try it out and give us your feedback!
Search API v2 (server)
We have built an entirely new search API that, amongst other things, will support searching within albums and combining multiple search filters with both AND and OR operations. Some of these features will be exposed to the search UI interfaces in the future, others will be used to power other fancy features as well as give 3rd party tools more functionality. If you are interested in the particular changes and examples for how to use the new API, feel free to check out the PR <#30179> as well as our API documentation at .
Revamped search UI (web)
We have a new designer who helped us remodel the search modal, which has been pretty complex before and looks a lot more visually appealing in our opinion now. It still supports the same functionality, but with some quality of life additions as well as a significantly simpler look. In the future, we will extend this to also include some of the new features enabled by the new search API. Stay tuned and give us your feedback on the new design!
_New search modal filtering by images with Jason in it, taken in the last 30 days in BC, Canada, tagged "Long Beach" with the context search term "Swimming"_
_Advanced filters showing camera make, model, and lens model, as well as filers for favorite and archive status, and album membership_
View own people in shared assets
We are very happy to ship the first step towards better sharing. You can now have people recognized across trusted users, which also allows you to view people you already have records of in any shared assets!
In the user sharing settings there is a new section; cluster group.
_The user sharing settings showing a cluster group with Jane Doe and Mich in it_
You can invite users on your instance that you trust to your own group, or join another group you have been invited to. These cluster groups make it possible to identify people in assets shared by users in the same group. They also likely improve accuracy, as the clustering will operate on a bigger pool of faces. People names and birth dates are still set on a per-user level and aren’t (yet) shared with users in the same group.
As of now, this requires resetting facial recognition for all users in the group, in order for the changes to apply retroactively for all assets. This means, names and birth dates will be lost, and the results can vary slightly compared to before. Only faces recognized by machine learning will be affected by this. We may be able to do some non-destructive merging in the future, but for now this is a necessary step in order to fully benefit from the feature. That is why we put a button in the sharing settings for every user in the group (specifically also non-admins) to reset the facial recognition for that group.
Workflow tags trigger and actions
Workflows have gotten a new trigger. You can now do automations when an asset has been tagged.
In order to use this new trigger, there is also a new filter that allows you to match specific tags. It supports matching for all, any, or none in the provided list.
Lastly, a new workflow action to add tags to the current asset has also been added. It allows to add a list of tags at once.
Dedicated memories page
The new memories page allows you to view past memories. You can also favorite memories and they will show up here and never get deleted. The goal is for this to be a place you can come back to at any point and reminisce in old memories.
Tag renaming (web)
Finally, you can also rename existing tags. This is a small addition to the edit tag modal on web, but under the hood was more complicated than you might expect.
View assets in map viewport (web)
Similarly to showing a timeline all assets in a cluster on the map when clicking on it, you can now open a timeline for assets currently in the viewport. There is a new button among the map controls to show assets in the area. It will open a timeline that will update as you pan around the map.
_The map page showing a timeline of assets currently in the viewport on the right_
As always, please consider supporting the project.
🎉 Cheers! 🎉
Support Immich
If you find the project helpful, you can support Immich by purchasing a product key at or our merchandise at
-
What's Changed
🚀 Features- feat: workflow logging by @benbeckford in #29878
- feat(web): new search ui by @benbeckford in #30279
- feat: new config endpoints by @jrasm91 in #30881
- feat: cluster groups by @jrasm91 in #30739
- feat: asset file apis by @jrasm91 in #25900
- feat: memories view by @benbeckford in #28675
- feat(mobile): show asset owner in asset details by @Lauritz-Tieste in #29302
- feat(server): new search API by @timonrieger in #30179
🌟 Enhancements- feat: store null instead of empty string for album.description by @gPinato in #30123
- feat: log hint about downgrades when migration is missing by @bo0tzz in #30493
- feat(web): search album description in add-to-album modal by @djadji-gueye in #30462
- feat: Display the number of selected items in AlbumPickerModal title by @statox in #30485
- feat(widget): add toggle to match icon theme by @bwees in #30428
- feat: workflow asset tag trigger/filter/action by @benbeckford in #29043
- feat: iOS dynamic background ids by @mikes1991gh in #30574
- feat: actions undo handling by @shenlong-tanwen in #30481
- feat: rotate an API key by @bwees in #30801
- fix(cli): enforce node engine version on start by @bo0tzz in #30437
- chore(server): migrate library e2e tests by @etnoy in #27277
- feat: add oauth account management url by @sacha-c in #30873
- feat(web): tag renaming v2 by @jorbrock in #27909
- chore: search filter animation improvement and reactive search cue example by @alextran1502 in #30866
- perf(web): use hash-wasm SHA-1 with pure-JS fallback for upload hashing by @mosh-dev in #30107
- fix: don't swallow fetch errors by @bo0tzz in #30496
- feat(mobile): map asset number by @YarosMallorca in #28911
- feat: allow users to re-run facial recognition for their group by @danieldietzler in #30965
- feat(web): view assets in map viewport by @rickytrevor in #27492
🐛 Bug fixes- fix: make sure iOS memory widget render by @alextran1502 in #30172
- fix: calendar heatmap permissions by @danieldietzler in #30310
- fix: calendar heatmap api key permissions by @danieldietzler in #30314
- fix(deployment): matplotlib in rootless deployments by @mmomjian in #30328
- fix(mobile): refresh person thumbnail when the featured photo changes by @santoshakil in #29350
- fix: assetFileFilter path matching by @benbeckford in #30394
- fix: shared check for server setup availability by @bo0tzz in #30311
- fix(mobile): resolve owned assets when partner owns identical asset by @agg23 in #30137
- fix(web): Fix face thumbnail when swapping merge direction by @lhvy in #30466
- fix(server): reject invalid or deleted user when creating a partner by @djadji-gueye in #30431
- fix(server): remove the asset row when an upload fails after creating it by @santoshakil in #30349
- fix(mobile): correct mislabeled Bengali locale entry by @DrHaque in #30519
- fix(mobile): sync stack changes from the websocket by @santoshakil in #30479
- fix: metadata extraction as LensModel can be a float by @danieldietzler in #30512
- fix(mobile): run one more sync round when a request arrives mid sync by @santoshakil in #30478
- fix: use setRequireOriginal on SDK 29 and above by @shenlong-tanwen in #29072
- fix(mobile): stale local renders after editing a photo on device by @santoshakil in #30415
- fix(mobile): stop websocket reconnect loop draining battery when server is unreachable by @santoshakil in #29901
- fix(mobile): stop long images squishing on ios by @santoshakil in #29367
- fix(mobile): keep backup remainder from going negative by @santoshakil in #29011
- fix(mobile): handle asset websocket events by @santoshakil in #30499
- fix(mobile): stop disabling androidx.startup initializers by @shenlong-tanwen in #30559
- fix: map not updating after viewing an asset by @shenlong-tanwen in #30601
- fix(deployment): Add huggingface cache directory to Dockerfile by @mmomjian in #30357
- fix(mobile): video playback controls dead for backed up videos opened from search by @santoshakil in #30587
- fix(mobile): decode remote thumbnails at displayed size by @santoshakil in #29965
- fix(mobile): don't let a frozen sync block syncing on resume by @santoshakil in #29870
- fix: face label clipping by @danieldietzler in #30712
- fix: owner cascade delete album by @danieldietzler in #30692
- fix(mobile): prevent iOS status bar scroll to top during transitions by @agg23 in #30717
- fix(mobile): disable iOS smart quotes/dashes in email/password inputs by @agg23 in #30767
- fix(mobile): prevent snapping to center on pinch-to-zoom release (#29207) by @cmdPromptCritical in #29343
- fix: shared link create validation by @danieldietzler in #30762
- fix(mobile): mark finished downloads complete instead of leaving them stuck by @santoshakil in #29023
- fix: freeze on navigating back album description by @YarosMallorca in #30781
- fix(server): guard createAll against empty values list by @tech00exploere in #30837
- fix(server): respect backpressure in the sync stream by @enol5423 in #30764
- fix(server): update ocr & faces after asset edit by @YarosMallorca in #29303
- fix(mobile): resend an upload once when the connection dies before a response by @santoshakil in #30843
- fix(mobile): cannot deep link to memory lane (#30634) by @nikhilpodila in #30787
- fix: redis cli ping command by @mmomjian in #30329
- fix(server): do not throw on unparsable DB_URL when building backup arguments by @NoiceHax in #30759
- fix(server): Sort stacked assets by creation date by @timonrieger in #24033
- fix(web): gracefully handle map errors when WebGL is disabled by @meesfrensel in #26538
- fix(server): unicode email validation by @YarosMallorca in #30871
- fix(mobile): order album/place/person timelines by local date by @santoshakil in #29338
- chore(mobile): update flutter-maplibre-gl to 0.27.0 by @agg23 in #30892
- fix(web): download archives via html POST forms by @diogotcorreia in #30021
- fix(server): library exclusion patterns can soft-delete assets outside their directory by @PAtreju in #30850
- fix(mobile): dedupe stale remote_asset rows on sync by @santoshakil in #28445
- fix(server): correct asset dimensions from exif metadata by @fuergaosi233 in #29244
- fix: quote database owner in restore by @danieldietzler in #30905
- fix(mobile): permanently delete local copies when moving to the locked folder by @santoshakil in #29730
- fix(server): let a second metadata extraction replace stored AV metadata by @RxChi1d in #30900
- fix: do not exit search screen on back during multiselect by @YarosMallorca in #30689
- fix(mobile): respect 24h system setting by @YarosMallorca in #30792
- fix: maintentance return URL sanitization by @bwees in #30948
- fix: remove partner assets from existing memories by @shenlong-tanwen in #28950
- fix(server): correct tag create operations by @jorbrock in #30877
- fix: thumbnail generation for specific SVGs by @danieldietzler in #30908
- fix(mobile): aspect ratio change by @ferraridamiano in #30939
- fix: throw a typed error on malformed api responses by @bo0tzz in #31006
- fix(web): restore timeline scroll when the asset id cannot be resolved by @thejeff77 in #30916
- fix(web): do not play memory video if the
MemoryVideoViewer element is not visible by @Zlendy in #30947 - fix(web): preserve slideshow pause state when viewing video slides by @tech00exploere in #30278
- fix: draggable Immich logo by @danieldietzler in #31055
- fix(server): kill pg_dump when a backup fails so it stops holding table locks by @justadityaraj in #30851
- fix(web): misleading toast notification by @brn-lin in #30976
- fix(web): map by @jrasm91 in #31056
- fix: external library statistics for excluded assets by @stevenjoezhang in #28462
- feat: same-second photos now sub-sort by filename by @andydotmp3 in #29528
- fix(web): face editor coordinates on a not-yet-loaded video by @immich-push-o-matic[bot] in #31085
- fix: do not move faces of users other than the current owner by @immich-push-o-matic[bot] in #31149
- fix(server): allow an empty assetIds array when creating an album shared link by @immich-push-o-matic[bot] in #31151
- fix(mobile): keep the original filename when sharing downloaded assets by @immich-push-o-matic[bot] in #31154
- fix(mobile): handle transient loading states for map timelines by @immich-push-o-matic[bot] in #31153
- fix(web): interaction with some filter elements closes the search panel by @immich-push-o-matic[bot] in #31160
- fix(ml): read CLIP model configs as UTF-8 by @immich-push-o-matic[bot] in #31152
- fix(mobile): refresh server info when the websocket connects by @immich-push-o-matic[bot] in #31155
- fix(server): never unlink an untracked-file path that an asset now references by @immich-push-o-matic[bot] in #31194
- fix: incorrect edit's openapi type by @immich-push-o-matic[bot] in #31233
- fix(web): album date range formatting by @immich-push-o-matic[bot] in #31238
- fix: face detection of edited assets by @immich-push-o-matic[bot] in #31243
- fix(mobile): prevent inner mutability on Freezed classes by @immich-push-o-matic[bot] in #31251
- fix(web): partner sharing timeline by @immich-push-o-matic[bot] in #31252
- fix(mobile): refresh the memory lane after resume by @immich-push-o-matic[bot] in #31260
- fix: memory page navigation by @immich-push-o-matic[bot] in #31368
- fix(server): live photo transcode visibility by @immich-push-o-matic[bot] in #31374
- fix(web): use RTL-friendly layout for people panel buttons by @immich-push-o-matic[bot] in #31378
- fix(web): word-wrap long album names by @immich-push-o-matic[bot] in #31379
- fix(mobile): hide negative age by @immich-push-o-matic[bot] in #31381
- fix(mobile): make shared link download toggle depend on metadata toggle by @immich-push-o-matic[bot] in #31382
📚 Documentation- fix(docs): remove listing unraid as an "official" deployment by @mmomjian in #30323
- fix(docs): Revise config file instructions and notes by @mmomjian in #30418
- docs: fix identity provider examples in oauth guide by @fredrikekre in #30828
- docs: Update backup script to match manual/automatic backups by @Quantum-Cucumber in #26810
- docs: update remote-machine-learning.md by @Aviatorpaal in #28728
🌐 Translations- feat: add cantonese for mobile by @danieldietzler in #30318
- chore(web): update translations by @weblate in #30296
New Contributors- @jaegeral made their first contribution in #30385
- @deveshkolte made their first contribution in #30223
- @gPinato made their first contribution in #30123
- @lhvy made their first contribution in #30466
- @djadji-gueye made their first contribution in #30462
- @DrHaque made their first contribution in #30519
- @statox made their first contribution in #30485
- @ihmcsm made their first contribution in #30742
- @baseballyama made their first contribution in #30782
- @enol5423 made their first contribution in #30764
- @mikes1991gh made their first contribution in #30574
- @nikhilpodila made their first contribution in #30787
- @fredrikekre made their first contribution in #30828
- @NoiceHax made their first contribution in #30759
- @Quantum-Cucumber made their first contribution in #26810
- @sacha-c made their first contribution in #30873
- @PAtreju made their first contribution in #30850
- @fuergaosi233 made their first contribution in #29244
- @jorbrock made their first contribution in #27909
- @RxChi1d made their first contribution in #30900
- @mosh-dev made their first contribution in #30107
- @thejeff77 made their first contribution in #30916
- @brn-lin made their first contribution in #30976
- @Aviatorpaal made their first contribution in #28728
- @stevenjoezhang made their first contribution in #28462
- @andydotmp3 made their first contribution in #29528
- @rickytrevor made their first contribution in #27492
- @immich-push-o-matic[bot] made their first contribution in #31066
Full Changelog: v3.1.0...v3.2.0 |
Pros
Excellent self hosted alternative to cloud photo services
Modern web and mobile applications
Automatic photo and video backup
Powerful search and facial recognition
Supports RAW images, Live Photos, and Motion Photos
Albums, sharing, memories, maps, and favorites
Multi-user and partner sharing support
API, CLI, OAuth, and monitoring features
Open source
Cons
Requires your own server and storage
You are responsible for maintaining the installation
Machine learning features can require significant resources
A proper backup strategy is still required
Large libraries can take considerable time to process
Final Verdict
Immich is an excellent choice for anyone who wants a modern photo management platform without handing their entire library to a cloud provider. Its combination of automatic mobile backup, intelligent search, facial recognition, sharing, and a polished interface makes it much more than a simple self hosted photo gallery.
The main tradeoff is responsibility. Unlike Google Photos or iCloud, there is no cloud provider handling your infrastructure and backups for you. If you are comfortable managing Docker, storage, and backups, Immich offers an impressive amount of functionality and control.
For self hosted users, Immich is one of the easiest recommendations in its category.
Post a Comment/Report Broken Link: