Skip to content

ivanaposdev/immich-lite

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


License: AGPLv3

Immich Lite

A read-only, multi-user photo/video viewer — stripped from Immich v3.0.1

What this is

Immich Lite is a divergent fork of Immich (pinned at v3.0.1) cut down to a single job: point it at photo/video folders that already exist on disk, mounted read-only, and browse them — timeline, albums, favorites, video playback — with multi-user email/password auth. It does not track upstream Immich releases.

There is no upload, no backup, no machine learning, and no sharing. Assets only ever enter the system by scanning external library folders you mount into the container. The app never writes to your photo library; the only volumes it writes to are the Postgres database and a generated-media volume for thumbnails/previews/transcodes.

See docs-lite/spec.md for the full design rationale and docs-lite/plan.md for the task-by-task strip log.

What was removed from upstream Immich

  • Upload/backup ingest — no upload endpoints, mobile app, or mobile sync API. The external-library scanner is the only ingest path.
  • Machine learning — smart search (CLIP), facial recognition/people, duplicate detection, OCR. The immich-machine-learning container is gone entirely.
  • Sharing — public shared links, partner sharing, same-server album collaborators (albumUsers), and activity/comments.
  • Destructive & edit operations — trash/soft-delete, bulk asset delete, the photo editor, OAuth/OIDC login.
  • Non-web platforms — the mobile app, Fastlane, and their CI workflows are deleted from the repo.

Kept: timeline with virtualized scroll, full-screen photo/video viewer (with ffmpeg transcoding), albums, favorites, tags, memories, global map, metadata search, stacks, multi-user admin, API keys, download/export.

Quick start

  1. Copy docker/example.env to docker/.env and set:

    • UPLOAD_LOCATION — where Postgres data and generated thumbnails/transcodes live.
    • PHOTOS_LOCATION — the host folder containing your existing photos/videos (mounted read-only at /photos in the container).
    • DB_PASSWORD and the other Postgres variables.
  2. Start the stack:

    docker compose -f docker/docker-compose.lite.yml --project-directory docker up -d --build
  3. Open http://localhost:2283, complete admin sign-up.

  4. Library setup — Immich Lite never discovers photos on its own; an admin has to create a library:

    • As the admin user, create an external library (Administration -> Libraries in the web UI, or POST /api/libraries with ownerId and importPaths: ["/photos"], or a subfolder of it).
    • Trigger a scan (UI button or POST /api/libraries/{id}/scan). Scanning is an async background job — large libraries (the design targets ~1M photos) take a while; watch the admin jobs page.
    • Repeat per user if multiple users need separate libraries.
  5. bash scripts/smoke.sh runs an end-to-end curl-based check (admin auth, library create + scan, timeline buckets, thumbnail, video asset) against a running stack — useful after any change to confirm the stack still serves photos correctly. scripts/seed-test-media.sh generates a few throwaway test images/video into PHOTOS_LOCATION if you don't have real media handy yet.

Verification story

This fork does not run Immich's original e2e/ suite in full: most of those specs seed their test fixtures by uploading assets over HTTP, and the upload endpoint no longer exists here (ingestion is library-scan only). Specs that depended on that upload seeding path were removed rather than reworked (see the Task 12 report for the exact file list).

What's actually retained and passing:

  • Vitest API/CLI/maintenance specs (e2e/src/specs/server/**) — auth, sessions, API keys, external-library scanning/offline-handling, system config/metadata, user admin, database backups. 166/176 tests pass against a real running server (the other 9 are CLI specs that fail in sandboxes where plain pnpm isn't on PATH, not a suite defect).
  • Playwright ui project (e2e/src/ui/specs) — timeline, asset viewer, and memory-viewer specs that mock the API in-browser rather than depending on real uploaded fixtures. This is real, rendered-browser coverage of exactly the flows that Task 11 could only verify at the API level: 50/67 tests pass (login/timeline render, deep-linking, scrubber scrolling, keyboard navigation in most cases, favorite toggle, album add, archive/unarchive/favorite-an-archived-photo). The remaining 13 are either resource-contention flakiness under parallel workers (asset prev/next-button navigation intermittently times out, passes when re-run serially) or reproducible failures in still-kept features — keyboard month/year/"go to time" navigation, day-range selection, and 5 of 10 "deep link to random asset" iterations consistently fail against the current stripped web build. These weren't previously verified in a real browser and are a genuine, concrete follow-up (not something this task's scope covers fixing). (Note: the dedicated /archive page was intentionally removed along with trash/delete, per docs-lite/spec.md — the archive/unarchive action itself is still live and is what these specs exercise directly on a thumbnail, not the removed page.) A follow-up investigation tried to determine whether these 13 are a real strip regression or an artifact of this project's mocked-network ui Playwright specs, by looking for equivalent coverage in the real-backend web Playwright project — none exists (a pre-existing gap in upstream Immich's own e2e suite, not something the strip introduced). Resolving this conclusively requires a manual click-through against the running stack at http://localhost:2283, which no automated tool in this project's toolchain can currently perform.

scripts/smoke.sh plus manual/API verification against the running stack remains the project's primary day-to-day verification story, alongside whichever e2e subset stays green above.

Attribution

Immich Lite is a fork of immich-app/immich, licensed AGPL-3.0. All credit for the original design, the timeline/scan/thumbnail pipeline, and the vast majority of the code goes to the upstream Immich project and its contributors. This fork keeps the upstream LICENSE (AGPL-3.0) and is not affiliated with or endorsed by the Immich project.

About

No description, website, or topics provided.

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages