Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11,679 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


License: AGPLv3 Discord

Noodle Gallery logo

High performance self-hosted photo and video management solution


The Noodle Gallery photo timeline, with Shared Spaces in the sidebar, the filter panel open, and generated trip memories across the top

Note

This is a community fork of Immich with additional features and improvements. Currently based on Immich v3.1.0. We regularly sync with upstream to stay up to date. See What's Different below.

Tip

Already running Immich? Switching to Gallery is a three-line config change — two image names in your docker-compose.yml and IMMICH_VERSION=v5 in your .env. Your library and database are fully compatible. See the install guide.

Not for you? A one-command switch-back script cleans up Gallery-specific tables and columns and puts you back on upstream Immich. Your photos and videos never move.

What's Different from Upstream Immich

Gallery is a friendly fork that rebases onto every upstream Immich release, so every fix, performance improvement, and new feature from the Immich team lands here automatically. On top of that foundation, Gallery adds the features below — grouped the way the Noodle Gallery vs Immich comparison frames them: each is an additive answer to a place where upstream runs out of room. Every feature has a feature page, and most have a docs page too.

People and identity

Immich's face recognition is account-scoped — the same person shows up as a separate entry in your library, your partner's, and every shared album you both touch.

  • Global People — people, filters, and search results dedupe across your library and every Shared Space you can access, without crossing a permission boundary. Naming and merging stay scoped to where they were entered.

Sharing and collaboration

Partner Sharing is all-or-nothing and albums belong to whoever made them — there's no combined family timeline, no activity log, and no way to bulk-share tens of thousands of photos by hand.

  • Shared Spaces — multi-owner collaborative timelines with Owner / Editor / Viewer roles, cross-contributor face recognition, and a per-space activity log. Photos are linked by reference at zero extra storage cost, and each contributor keeps their own library. (Docs)
  • Spaces Filtering — the full filter suite (date, people, location, camera, tags) scoped to a single Space.
  • User Groups — named, color-coded groups so you can share with a whole circle at once. (Docs)
  • Bulk Add to Spaces — add hundreds of thousands of photos to a Space in one click, processed in the background.

Search and discovery

Each page has its own search bar with no keyboard-first global entry point, smart-search results can't be sorted or threshold-tuned, filters operate in isolation, and the map has no filter panel of its own.

  • Timeline Grouping — a Years / Months / All switcher on every timeline. Zoom into a period without restricting the query, and keep your scroll position when you switch back.
  • Inline Search Filters — type structured filters (people, tags, dates, locations, ratings, cameras) straight into the search bar, with live suggestions and shareable URL state.
  • Global SearchCmd/Ctrl+K searches people, places, tags, albums, commands, and settings in parallel. (Docs)
  • Search Palette — the command palette behind it, with prefix shortcuts (@ people, # tags, / albums, > commands) and page commands for rename / share / delete. (Docs)
  • Search Sorting & Relevance — sort by relevance, newest, or oldest, with a tunable similarity threshold.
  • Interdependent Filtering — every filter narrows every other filter, so there are no dead-end combinations. (Docs)
  • Smart Search & Contextual Filters — full-text and CLIP search inside Spaces, with filter suggestions that adapt to your selection.
  • Map Filtering — the full filter panel on the Map view, with markers updating in real time. (Docs)

AI and automation

Immich's AI surface is focused on faces and basic CLIP search — pets aren't detected, memories show only "On This Day", there's no automated clutter suppression, and duplicate detection misses re-encoded videos.

  • Auto-Classification — define what clutter looks like (screenshots, memes, receipts) and Gallery tags and optionally archives it automatically, each category with its own threshold. (Docs)
  • Memories Archive — a dedicated Memories page with search, an All/Saved filter, and retention controls. (Docs)
  • Smarter Memories — recent-trip recaps detected from location clusters, plus birthday memories that adapt to each person's photo history. (Docs)
  • Pet Detection — YOLO11 detects dogs, cats, birds, and other animals and surfaces them alongside people. (Docs)
  • Video Duplicate Detection — averages CLIP embeddings across sampled frames, catching duplicate videos even after re-encoding or resizing. (Docs)

Media management and migration

Trimming a video means exporting to an external tool, moving from Google Photos needs CLI scripts, storage is local disk or external libraries with no native S3 backend, and a large existing library can't be linked into a shared collection.

  • Image Editing — non-destructive rotation and cropping from the asset viewer, plus batch rotate. Originals are always preserved. (Docs)
  • Video Trimming — cut clips in the browser. FFmpeg stream copy makes it instant and lossless, and you can restore the original at any time. (Docs)
  • Connected Libraries — link external photo libraries into Shared Spaces with no file duplication and originals left untouched. (Docs)
  • Google Photos Import — a guided in-browser wizard for Takeout archives that preserves dates, GPS, descriptions, and album structure. No CLI required. (Docs)
  • S3-Compatible Storage — store media on any S3-compatible backend (AWS S3, MinIO, Cloudflare R2, Backblaze B2, Wasabi), with a built-in migration tool that resumes and rolls back. (Docs)

Mobile

Filtering the timeline in the Immich mobile app means switching to a separate tab and losing your scroll position, and advanced surfaces sit deeper in the app or aren't there at all.

  • Photos Filtering on Mobile — a bottom sheet filters the timeline by people, places, tags, dates, rating, and media type without leaving the grid.
  • iPhone and Android — native apps on the App Store and Google Play, with background camera backup, on-device CLIP search, the map, and Shared Spaces — all talking directly to your own server. (Docs)

Operations

  • Structured JSON logging — opt-in JSON log output (IMMICH_LOG_FORMAT=json) for clean integration with log aggregation systems like Grafana Loki, the ELK Stack, Datadog, or Splunk.

Switching to This Fork

Switching is simple — just change your Docker image names. Your existing database, configuration, and media files are fully compatible.

Step 1: Back Up Your Database

Important

Always back up your database before switching. This allows you to revert to upstream Immich if needed.

docker exec -t immich_postgres pg_dumpall -c -U postgres | gzip > immich-db-backup-$(date +%Y%m%d).sql.gz

Step 2: Update Your Docker Compose File

Set the version in your .env file:

IMMICH_VERSION=v5

Change the image references in your docker-compose.yml:

services:
  immich-server:
-   image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
+   image: ghcr.io/open-noodle/gallery-server:${IMMICH_VERSION:-release}

  immich-machine-learning:
-   image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
+   image: ghcr.io/open-noodle/gallery-ml:${IMMICH_VERSION:-release}

For NVIDIA GPU acceleration on the ML container, use the -cuda tag variant:

image: ghcr.io/open-noodle/gallery-ml:${IMMICH_VERSION:-release}-cuda

Step 3: Restart

docker compose pull
docker compose up -d

That's it. To switch back to upstream Immich later, flip the two image names back and either restore your database backup or run the automated switch-back script, which drops Gallery-specific tables, columns, and migration records — shared spaces, pet detection, classifications, duplicate data — leaving a plain upstream Immich database. Your photos and videos are never touched.


Català Español Français Italiano 日本語 한국어 Deutsch Nederlands Türkçe 简体中文 正體中文 Українська Русский Български Português Brasileiro Svenska العربية Tiếng Việt ภาษาไทย മലയാളം

Warning

Always follow 3-2-1 backup plan for your precious photos and videos!

Note

You can find the full documentation at https://docs.opennoodle.de/.

Links

Features

Features Mobile Web
Upload and view videos and photos Yes Yes
Auto backup when the app is opened Yes N/A
Prevent duplication of assets Yes Yes
Selective album(s) for backup Yes N/A
Download photos and videos to local device Yes Yes
Multi-user support Yes Yes
Album and Shared albums Yes Yes
Scrubbable/draggable scrollbar Yes Yes
Support raw formats Yes Yes
Metadata view (EXIF, map) Yes Yes
Search by metadata, objects, faces, and CLIP Yes Yes
Administrative functions (user management) No Yes
Background backup Yes N/A
Virtual scroll Yes Yes
OAuth support Yes Yes
API Keys N/A Yes
LivePhoto/MotionPhoto backup and playback Yes Yes
Support 360 degree image display No Yes
User-defined storage structure Yes Yes
Public Sharing Yes Yes
Archive and Favorites Yes Yes
Global Map Yes Yes
Partner Sharing Yes Yes
Facial recognition and clustering Yes Yes
Memories (x years ago, birthdays, trips) Yes Yes
Offline support Yes No
Read-only gallery Yes Yes
Stacked Photos Yes Yes
Tags No Yes
Folder View Yes Yes
Shared Spaces Yes Yes
Smart Search & Filters No Yes
Search Palette (Cmd+K) No Yes
User Groups No Yes
Auto-Classification No Yes
Video Duplicate Detection No Yes
Pet Detection Yes Yes
Google Photos Import No Yes
Image Editing & Video Trimming No Yes
S3-Compatible Storage Yes Yes

Translations

Gallery inherits upstream Immich's translations through every rebase. Fork-specific strings are translated in this repo — see the translations guide if you'd like to help.

Docker Images

Pre-built Docker images are published to GitHub Container Registry (GHCR) under the open-noodle organization.

Available Images

Image Description
ghcr.io/open-noodle/gallery-server Server + web UI + CLI (all-in-one)
ghcr.io/open-noodle/gallery-ml Machine learning service (CPU)
ghcr.io/open-noodle/gallery-ml:*-cuda Machine learning service (NVIDIA CUDA)

Tags

  • release / release-cuda — most recent published build (like upstream's release tag)
  • v5 — floats to the latest v5.x.x release (set IMMICH_VERSION=v5 to auto-update within major version)
  • v5.0.0 — pinned version using semantic versioning

Publishing

Gallery maintainers ship releases via manually-triggered GitHub Actions workflows — the full two-phase (mobile + server) flow and the server-only fast path are documented in CONTRIBUTING.md.

Contributing

Gallery is a community fork and contributions are welcome — bug fixes, features, docs, translations. Come say hi on Discord if you want to chat about an idea before diving in.

Setting Up a Dev Environment

The repo is a pnpm workspace monorepo — server (NestJS), web (SvelteKit), mobile (Flutter), machine-learning (Python), and a few supporting packages. The dev stack runs in Docker Compose with live reload for the server and web.

Prerequisites: Docker, Docker Compose, Node.js 22+, and pnpm.

  1. Fork and clone the repo

    git clone https://github.com/<your-username>/gallery.git
    cd gallery
  2. Copy the example env file

    cp docker/example.env docker/.env

    The defaults work out of the box for local development. Adjust UPLOAD_LOCATION and DB_DATA_LOCATION if you want to store data somewhere other than the repo directory.

  3. Install dependencies

    pnpm install

    This installs deps for every workspace package (server, web, cli, sdk, e2e).

  4. Start the dev stack

    mise dev

    This brings up Postgres, Redis, the ML service, the server (with hot reload), and the web UI on http://localhost:2283. The first run downloads ML models and builds containers, so give it a few minutes. Stop it with mise dev-down.

Running Tests and Checks Before You Push

# Server
cd server && pnpm test          # unit tests
cd server && pnpm check         # TypeScript type check

# Web
cd web && pnpm test             # unit tests
cd web && pnpm check            # svelte-check + tsc

# Translation files, from the repo root
pnpm format                     # prettier --check i18n/
pnpm format:fix                 # prettier --write i18n/

CI runs lint, type checks, unit tests, and e2e tests on every PR. If you're touching server controllers or repositories, regenerate the OpenAPI clients and SQL query files:

mise open-api                   # regenerates TS SDK + Dart client
mise sql                        # regenerates SQL query docs (needs DB running)

mise tasks lists everything else available.

Opening a Pull Request

  • Branch off main and keep PRs focused on one change.
  • Follow Conventional Commits for your commit messages (feat:, fix:, docs:, chore:, etc.) — the release workflow uses them to compute version bumps.
  • Include a short description of what changed and why, plus screenshots or screen recordings for UI work.
  • Make sure CI is green before requesting review.

How Gallery is Built

Gallery is developed with heavy assistance from AI coding tools (Claude Code and Codex), with humans leading the ideas, testing, and debugging. We say so openly because it shaped how the project was built.

What we'd rather be judged on is the result. There's a live demo you can click through without installing anything, unit and e2e suites run on every pull request, and all of it is open source — read the code and decide for yourself.

Acknowledgements

Gallery would not exist without Immich, largely written by hand, and the work of everyone who built it. We rebase onto every upstream release, so the foundation Gallery stands on keeps coming from that project.

See AGENTS.md for a deeper tour of the codebase architecture and common commands.

About

High performance self-hosted photo and video management solution.

Resources

Contributing

Security policy

Stars

279 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages