How Gallery and Immich relate
Noodle Gallery is a friendly fork of Immich, the open-source self-hosted photo app built by Alex Tran and a growing community of contributors. Gallery rebases onto every upstream Immich release. Bug fixes, performance work and new features from the Immich team land in Gallery automatically.
Immich is the foundation. Gallery sits on top of it and adds features for use cases that did not fit upstream's scope. Same database, same containers, same migration path back. Change your mind and swapping to upstream is a three-line change.
Where Immich runs out of room
Every Gallery-exclusive feature started the same way: someone hit a wall in Immich. Below are the walls, each followed by the features that get past it.
One person, several accounts
The shortcoming. Immich's face recognition is account-scoped. One real person becomes a separate entry in your library, in your partner's library, and in every shared album you both touch. Search for them and you get a third of their photos. Name them in one account and the name stays there. The People page tracks containers, not people.
How Gallery solves it.
- Global People: people, filters and search results dedupe across your personal library and every timeline-enabled Space you can access. One row on the People page, one suggestion in filters, one hit in search, and never across a permission boundary you were not already on the right side of. Naming, merging and birthdays stay scoped to where you entered them. The identity layer underneath joins up what is provably the same person.
Sharing with more than two people
The shortcoming. Immich has two sharing primitives, Partner Sharing and Albums, and both run out of room past two people. Partner Sharing is all-or-nothing. Albums belong to whoever made them. There is no combined family timeline, no activity log, no "what is new since I last looked", and no way to share tens of thousands of photos without selecting them by hand.
How Gallery solves it.
- Edit members' photos in Spaces: a space Owner or Editor can rotate, crop, re-date and describe the photos other members contributed. Delete, archive and visibility stay with the photo's owner, and every such edit shows up in the space activity feed.
- Personal favorites: a favorite is yours, not the photo's. Anybody who can see a photo can heart it, Space viewers included, and nobody else sees or changes your hearts.
- Space album folders: nestable folders inside a Shared Space's Albums tab, so a space several people are filling at once keeps a shape you can navigate. Editors create, rename and drag. Deleting a folder promotes its contents instead of taking them with it.
- Workflows for Shared Spaces: actions that add an arriving photo to one or more Shared Spaces, or file it into a named album inside a space, creating and linking that album if it does not exist yet.
- Shared Spaces: multi-owner collaborative timelines with Owner / Editor / Viewer roles, cross-contributor face recognition, per-member timeline integration, last-visit tracking and a per-space activity log.
- Space albums bring whole albums into a Space. Link an existing album or create a new one inside it, on web and mobile, with cross-owner contributions and per-album control over the shared timeline.
- Spaces filtering: the full filter suite (date, people, location, camera, tags) scoped to a single Space.
- User groups: named, colour-coded groups for one-click sharing. Invite a whole circle to a Space at once.
- Bulk add to Spaces: add hundreds of thousands of photos to a Space with one click, processed in the background.
The faces recognition won't commit to
The shortcoming. Face recognition is deliberately conservative, for a good reason: the errors are asymmetric. A face it never assigned is a quiet loss. A face assigned to the wrong person spreads into search, into memories, into the album everyone can see, and pulling it back out means finding every place it went. So the model holds a tight threshold and leaves anything short of it alone. The cost is a long tail of near-misses in every library: the profile shot, the one in bad light, the one from four years ago, all sitting unassigned while the person they belong to is named and obvious. Immich gives you no way to work through that tail, and no way to untangle the clusters that did fuse two people together.
How Gallery solves it.
- Face suggestions: the near-misses come back to you as a banner on the named person they most likely belong to. Review them one at a time against a known photo: same person, different person, or ignore the face. Every answer is durable, so you are never asked twice. Dismissing a suggestion still leaves normal recognition free to pick that face up later on its own.
- Face review with context: each suggestion shows the photo's date, place, camera, albums and the people already in it, and the queue can be cleared from the keyboard.
- Face cleanup is for when clustering did get it wrong. A scan finds the clusters contaminated with someone else's photos and splits them into a lane you can approve in one pass and a lane that needs a human look. Every flagged face lands in one of six explicit destinations, nothing is written until you apply, and manual review audits any person you pick without running a scan at all.
Both run on one shared verdict layer, so a decision in either sticks everywhere: through merges, renames and every future scan.
Finding a photo
The shortcoming. Each page in Immich has its own search bar, and there is no global keyboard-first entry point. Smart search results come back in default relevance order, with no date sort and no similarity threshold to tune, so combined text and filter searches return noise. Filters operate in isolation: select a country and you still see cameras and tags from elsewhere. The map view has no filter panel at all.
How Gallery solves it.
- Timeline grouping: switch any timeline between Years, Months and All, then zoom in and out to land on the photos you want. It earns its keep once a library spans 20+ years. Tap a year or month card to drill into that period without restricting the query, and your scroll position survives the switch back out.
- Inline search filters: type people, tags, dates, locations, ratings, media type, favorites, cameras and album filters straight into the search bar, with live suggestions before Enter.
- Global search: Cmd/Ctrl+K is now the main search surface. It routes Top result searches back into Photos and Spaces while still searching people, places, tags, commands and pages.
- Search palette: a keyboard-first command palette opens with Cmd/Ctrl+K from anywhere and searches photos, people, places, tags and every settings page in parallel. Prefix shortcuts (@, #, /, >) scope to one kind of result. On album and space pages it adds context-aware verbs, with inline confirmation for the destructive ones.
- Search sorting and relevance: sort smart search results by date or by relevance, with date-grouped infinite scroll and a similarity threshold you can tune until combined text and filter searches stop returning noise.
- Interdependent filtering: every filter narrows every other filter. Select a country and you see only the cameras, people and tags that exist in those photos.
- Smart search and contextual filters: natural-language search inside Spaces, with filter suggestions that adapt to your current selection.
- Map filtering puts the full filter panel from Photos onto the Map view. Markers update in real time.
- Contextual filters: the viewer's info panel becomes a filtering surface. Click the camera, lens, city, date, tag, album or filename, and whatever surface you opened the photo from (your timeline, an album, a Space, the map) narrows to match. The filter goes in the URL, so the view is shareable and the back button behaves.
What the models never look for
The shortcoming. Immich's AI surface covers faces and CLIP search. Pets are not detected, though most libraries are full of them. Memories show "On This Day" and nothing else: no recent trip recaps, no birthday compilations. Clutter (screenshots, memes, receipts) has to be cleared off your timeline by hand. Duplicate detection works on photos and misses videos that have been re-encoded, resized or format-converted.
How Gallery solves it.
- Pet recognition: individual dogs and cats, one entry each, named, merged and browsed on the People page exactly like people, with an All / People / Pets filter and no minimum-photo threshold. Three re-identification models sit behind it, trained by us and published as open weights.
- Generated memories: nine more memory types beside On This Day, namely month and season recaps, favourites throwbacks, on-this-day-in-a-place, trip anniversaries, people together, video moments, themed sets and person throwbacks. They stagger across the month, and each one is switchable per user and server-wide.
- Auto-classification: define what clutter looks like (screenshots, memes, receipts) and Gallery tags and archives it for you, using CLIP.
- Memories archive: browse every retained generated memory from the Memories page, with local search, saved filtering and admin controls over how long generated memories are kept.
- Smarter memories: server-side rules generate recent trips and birthdays, with curated trip recaps and birthday sets for both multi-year and newer libraries.
- Pet detection: RF-DETR finds the cats and dogs in your library on its own, and Pet recognition turns them into named individuals.
- Video duplicate detection: find duplicate videos even after re-encoding, resizing or format conversion.
Getting media in, out and onto other storage
The shortcoming. Trimming a video in Immich means exporting to another tool and re-importing. Moving from Google Photos takes CLI tools and hand-written scripts. Storage is local disk and external libraries, with no native S3-compatible backend. Linking an existing 30,000-photo library into a shared collection means selecting the photos by hand.
How Gallery solves it.
- Adjust tool: exposure, contrast, saturation and invert in the image editor, previewed live and stored beside the crop and rotate edits, so a dark or flat photo is fixed without leaving Gallery.
- Video trimming: trim videos losslessly with stream copy. Nothing is re-encoded, so there is no quality loss and the trim is near-instant.
- Connected libraries: link external photo libraries to Shared Spaces, and thousands of photos appear at once.
- Google Photos import: a guided wizard that takes Google Takeout archives straight from the browser.
- S3-compatible storage: use AWS S3, MinIO, Cloudflare R2, Backblaze B2, or any other S3-compatible backend.
Mobile
The shortcoming. Filtering the timeline in the Immich mobile app means switching to a separate Search tab and losing your scroll position. The map view and scoped search sit deeper in the app. Shared Spaces are not there at all.
How Gallery solves it.
- Photos filtering on mobile: a three-snap bottom sheet on the Photos tab filters the timeline by people, places, tags, dates, rating and media type. You never leave the grid.
- Noodle Gallery for iPhone: a native iOS app on the App Store with background camera backup, on-device CLIP search, the map view and a Shared Spaces preview, all talking straight to your Gallery server.
- Noodle Gallery for Android: the same native app, live on Google Play, with background camera backup, on-device CLIP search, the map and Shared Spaces.
The shortcomings, side-by-side
| Where Immich runs out of room | How Gallery solves it |
|---|---|
| The editor can crop, rotate and mirror, but a dark or flat photo has to be fixed in another tool and uploaded again | Adjust tool: exposure, contrast, saturation and invert in the editor, with a live preview that matches the saved result |
| A shared album list is flat, with nothing to group twenty-five albums by | Nestable album folders inside every Shared Space, with covers, counts and a breadcrumb, on web and mobile |
| No pet detection at all, so no way to find your own dog | Pet detection finds the cats and dogs; Pet recognition turns them into named individuals on the People page, on re-ID models we trained and published ourselves |
| Filtering on mobile means leaving the Photos tab and losing your scroll position | In-place filter sheet on the Photos tab: people, places, tags, dates, rating, media type |
| Automation stops at the edge of a shared library: nothing can file an arriving photo into a space for you | Workflows for Shared Spaces: add to space and add to space album actions, chained to any trigger or filter, creating the album if it is missing |
| Memories only ever ask "what happened on this date?", so most days come up empty and every card looks the same | Generated memories: nine more rules for months, seasons, places, favourites, people together, videos, trip anniversaries, themes and person throwbacks, staggered across the month |
| Only a photo's owner can edit it, so the person who spots a sideways scan or a wrong date in a shared library cannot fix it | Edit members' photos in Spaces: Owners and Editors rotate, crop, re-date and describe what other members contributed, with every edit attributed in the activity feed |
| A favorite is a property of the photo that only its owner can set, so in a shared library the favorites are whatever the uploader liked | Personal favorites: anybody who can see a photo can heart it, each person's favorites are private, and they mix across libraries, partners and Spaces |
| Partner sharing is all-or-nothing; albums belong to whoever made them; face recognition stops at your account | Shared Spaces: multi-owner timelines with Owner/Editor/Viewer roles, cross-contributor face recognition, last-visit tracking and a per-space activity log |
| Albums belong to whoever made them and live outside any shared timeline | Space albums: link or create albums inside a Shared Space, with cross-owner contributions and per-album timeline control, on web and mobile |
| The same person can appear as separate entries across personal and shared libraries | Global People: deduped people rows, filters and search results across every timeline Space you can access |
| Recognition is deliberately cautious, so it skips the close calls, and nothing brings those near-miss faces back to you | Face suggestions: near-misses surface on the named person they probably belong to, reviewed one at a time, with every answer durable |
| Deciding whether a face belongs to someone means opening the photo elsewhere to see when, where and with whom it was taken | Face review with context: date, place, camera, albums and the other people in the photo next to each suggestion, with a key for every verdict |
| When clustering fuses two people together, untangling it means reassigning faces by hand with no tooling | Face cleanup: a scan finds contaminated clusters and splits them into approve-in-one-pass and needs-review lanes, with six explicit destinations per face |
| The info panel shows the camera, place, date and tags, but none of it is actionable: filtering means leaving for a search page | Contextual filters: click any metadata value to filter the surface you are already on, with the filter in the URL |
| Pets aren't detected | Pet detection: RF-DETR finds the cats and dogs; Pet recognition names them individually |
| Memories show "On This Day" and nothing else | Smarter memories: recent trip recaps and birthday memories with curated, server-defined titles |
| Generated memories disappear after their daily carousel window, with no archive or retention control | Memories archive: browse retained generated memories and set how long unsaved memory records are kept |
| Each page has its own search bar; no keyboard-first global entry point | Search palette: Cmd/Ctrl+K from anywhere across photos, people, places, tags and every settings page, with prefix shortcuts and context-aware verbs |
| Advanced filters require leaving the keyboard flow for the filter panel | Inline search filters: type structured filters into the search bar, with live suggestions and shareable URL state |
| Navigating a large library means scrolling through every day bucket, with no way to jump to a year or month at a glance | Timeline grouping: a Years / Months / All switcher on every timeline; tap a year or month card to zoom in and out and find a photo fast in a decades-deep library |
| Smart search returns default relevance order: no date sort, no similarity tuning | Sort by date, date-grouped infinite scroll, tunable similarity threshold |
| Filters work in isolation: selecting a country still shows cameras and tags from elsewhere | Interdependent filtering: every filter narrows every other filter in real time |
| The map view has no filter panel of its own | Full filter panel on the map itself, with markers updating in real time |
| Storage is local disk or external libraries, with no native S3-compatible backend | AWS S3, MinIO, Cloudflare R2, Backblaze B2, Wasabi, or any S3-compatible store |
| Importing from Google Photos requires CLI tools and manual scripts | An in-browser guided wizard for Google Takeout archives |
| Trimming a video means exporting and re-encoding | Lossless stream-copy trimming, near-instant |
Every fix above is additive: each shortcoming gets a feature stacked on top of upstream. Core photo features, the full REST API, third-party integrations, Frame and home automation all carry over to a Gallery server unchanged.
Try Gallery on your existing Immich library.
Swap three config lines. Your database, uploads, photos and videos stay exactly where they are, and a switch-back script returns you to Immich if Gallery does not suit you.
Should you stick with upstream Immich?
There are real reasons to run upstream Immich instead of the fork. Three of them.
A much bigger community
Immich has been in active development since 2022. Tens of thousands of GitHub stars, hundreds of contributors, a busy Discord. Gallery has a small team and a much shorter track record. If you want a community where your question has already been asked and answered, upstream is the place to be.
Broader platform testing
Upstream Immich runs on more hardware combinations than anyone has counted: Raspberry Pis, Synology NAS units, Unraid, TrueNAS, Docker on Windows via WSL2, bare-metal Kubernetes. Gallery has been tested on fewer. On an unusual setup, upstream's wider test surface helps.
You don't need any of the additions
This is the honest reason most people should stick with upstream. If you do not need Shared Spaces, Pet detection, S3 storage, the Google Takeout wizard or advanced filtering, upstream Immich already does everything you want. Gallery adds features for specific use cases. If none of them are yours, upstream is leaner and has more eyes on it.
Migrating from Immich is a three-line change
Already running Immich and want to try Gallery? Swap two image names in yourdocker-compose.yml and bump IMMICH_VERSION in your.env. The current version is v5.
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}image: ghcr.io/open-noodle/gallery-server:${IMMICH_VERSION:-release}image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}image: ghcr.io/open-noodle/gallery-ml:${IMMICH_VERSION:-release}IMMICH_VERSION=releaseIMMICH_VERSION=v5Then pull the new images and restart:
docker compose pull && docker compose up -dNo data migration, no database conversion, no file copying. Your library stays exactly where it is. Gallery reads and writes the same files Immich was using, against the same Postgres database, on the same volume.
docker exec -t your-db-container pg_dumpall -U postgres > backup.sqlFull step-by-step guide on the install page. See the migration walkthrough →
Gallery ships a cleanup SQL that drops every Gallery-specific table, column and migration record (shared spaces, pet detection, classifications, duplicate data), leaving a plain upstream Immich database. Your photos and videos are not touched. Flip the two image names back and you are on upstream.
Read the switch-back guideGallery's job: add a small set of features without making you choose between them and the Immich roadmap.
Frequently asked questions
Is my data safe if I move from Immich to Noodle Gallery?
Yes. Gallery uses the same database schema, the same upload directory layout and the same file formats as upstream Immich. The migration is two image-name changes in your docker-compose.yml. Nothing in your library is copied, transformed or rewritten. Gallery reads and writes the same files Immich was using.
Can I switch back to upstream Immich later?
Yes. Gallery ships a one-command cleanup script that drops every Gallery-specific table, column and migration record from the database. Your photos and videos are not touched. Run the script, swap the two image names back to ghcr.io/immich-app/immich-server and ghcr.io/immich-app/immich-machine-learning, run docker compose pull, and you are back on upstream. The door swings both ways by design.
Will Gallery diverge from Immich over time?
No. Gallery rebases onto every upstream Immich release, so every bug fix, performance improvement and new feature from the Immich team lands in Gallery automatically. Gallery's exclusive features are additive: they sit on top of upstream.
How quickly does Gallery rebase after a new Immich release?
Usually within a few days. The rebase is automated where it can be and manual where it cannot. The aim is to stay close enough that running Gallery feels like running a slightly extended Immich.
Does Gallery have a mobile app?
Yes, on the App Store (iPhone) and Google Play (Android), with background camera backup, on-device CLIP search, the map view and Shared Spaces.
Will third-party Immich apps still work with Noodle Gallery?
Yes. Gallery exposes the same REST API as upstream Immich: same endpoints, same paths, same payloads. Anything built against the Immich API works with Gallery unmodified, including third-party mobile clients, Immich Frame, home automation integrations, CLI tools and scripts. Point the app at your Gallery server URL instead of your old Immich URL. Gallery also has its own iOS and Android app.
Why fork at all instead of upstreaming features?
Several Gallery-exclusive features (Shared Spaces, Pet detection, contextual filters) were declined upstream, considered out of scope, or needed architectural changes that would not have fit Immich's roadmap. Forking lets us experiment without slowing the upstream team down. Rebasing keeps us in step with their progress.
Why do all the commits on GitHub share the same timestamp?
Gallery is rebased onto each upstream Immich release instead of merged, and rebasing rewrites the commit date on every commit it replays. So the whole history carries the timestamp of the last rebase. Every fork that rebases looks like this, and it says nothing about how the work behind the commits was done. We rebase rather than merge because it keeps GitHub's commit counter meaningful. That counter is the clearest public signal of how close Gallery stays to Immich. A fork that merges instead shows thousands of commits ahead and behind that tell you nothing useful. Merging would preserve the original dates, but it would also make the number useless.
A note on the upstream Immich team
Noodle Gallery exists because Immich exists. The architecture, the database design, the mobile apps, the CLIP integration, the relentless pace of releases: all of it comes from the upstream team. If you find Gallery useful, star, sponsor or contribute to immich-app/immich as well.