Skip to main content

Immich Memories

CI codecov OpenSSF Scorecard Release Python License Docs

Beta, under heavy rework, not stable. The selection engine has just been replaced by a story-driven editor, and main and the latest Docker tag move with the work that follows. Expect runs that fail, photos that go missing, and options that move between releases. Try it on one small album first, not your whole library, and file what breaks.

Turns your self-hosted Immich library into edited memory videos: a year in review, a trip with its map, one person across the years. It reads the period as a story, keeps the pictures that carry it, always in chronological order, and writes down why every picture is in the cut.

Immich Memories demo: the brief, the cut and the story it produced
▶ Watch the 47-second demo · Make your first memory · Full documentation

The year-in-review videos your phone's cloud used to make, generated from your own Immich library, on your own hardware.

What leaves your machine

Nothing, unless you point it somewhere. No telemetry, no cloud API; the app talks to your Immich server over your LAN. Two optional model endpoints can receive pictures: a caption server gets a 400 px tile of every picture in the period, once, and a reader gets 800 px tiles of a few dozen candidates plus their annotation lines, which carry people and place names. Both default to localhost. Trip detection geocodes GPS clusters at nominatim.openstreetmap.org, and satellite title screens fetch map tiles. The full list, with the switch for each, is on Network & Privacy.

Three ways to run it

The editor has two independent settings: who reads the period, and how much image analysis runs first.

Setup What you need What you get
Rules only (reader: rules, tier: metadata_only) The app alone. A 4-core NAS is enough All ten memory types from dates, places, favourites and people. No model, $0 in API fees. Measured on a Celeron NAS: 279 s for a month cold, 11 s warm. Simpler cuts: it can skip an occasion or spend time on a mundane object, so look before you share
Rules plus classifiers (tier: no_captions) Same box, plus about 500 MB of pinned ONNX models fetched with one command The sensitive-content and document detectors, so the family-viewing gate has evidence. First pass over a library of about ten thousand pictures on a Celeron: 3 h 41 min, then banked
Model reader (reader: model) A machine that holds a vision model with a 32k context. Graded on a 30B model at 4-bit, about 17 GB resident, on an Apple Silicon Mac with 32 GB The full editor: it reads the period as a story, looks at the pictures it needs to, and argues for each one. Add the caption server (1 to 2 GB) for a description under every picture; that first pass costs 30 s a picture

Title screens are GPU-rendered on Linux x86_64, Linux aarch64, macOS arm64 and Windows AMD64 (Python 3.11 to 3.13). On an Intel Mac or Python 3.14 there is no kernel wheel and titles fall back to the PIL renderer: same text and timing, static instead of animated. immich-memories preflight tells you which one you get.

The reader and the caption server can live on another machine than the app, which needs 2 to 4 GB and renders on CPU. Measured timings, what each degraded mode loses, and what a hosted reader costs are on Running modes.

Run it

curl -O https://raw.githubusercontent.com/sam-dumont/immich-video-memory-generator/main/docker-compose.yml
export IMMICH_URL="http://your-immich-server:2283"
export IMMICH_API_KEY="your-api-key"
docker compose up -d
docker compose exec immich-memories immich-memories models fetch   # skip on metadata_only
docker compose exec immich-memories immich-memories preflight      # Immich, models, reader
# then open http://localhost:8080

The compose file publishes port 8080 on localhost only, and authentication is disabled by default. The UI is single-user, single-replica: run one instance. The app holds an API key to your whole library, so turn on authentication before you expose the port.

Supported Immich Versions

Immich v2 and v3, detected at runtime:

immich:
  api_version: auto  # auto | v2 | v3

Leave this on auto. The app detects the server major version and uses the matching API contract; you do not choose a version for each run. The explicit v2 and v3 values are manual troubleshooting overrides: escape hatches for proxies or unusual deployments that hide or rewrite the version endpoint. They force that contract, so don't use them as upgrade flags.

Without Docker, on Python 3.11 or later:

uv tool install "immich-memories[editorial]"
immich-memories models fetch
immich-memories prepare --year 2024 --month 6      # prepare one month, print what each producer cost
immich-memories generate --memory-type monthly_highlights --year 2024 --month 6
immich-memories ui                                 # the web UI on :8080

Start with one month, not a year: preparation scales with the width of the date range and is paid once, so the second cut over the same period is mostly the render. The whole stand-up, in order, is the self-hosting guide.

What it does

  • Ten memory types: year in review, monthly, person, multiple people (with AND / OR between names), season, on this day, album, trip with an animated map, holiday, and a day the library itself flagged. The web UI adds a custom date range.
  • Photos and videos in one pool, Live Photos included. Title screens, month dividers, map fly-overs.
  • Music: your own file, 28 bundled tracks, or a generated track through ACE-Step or MusicGen. Ducking under the clips' own audio.
  • A four-page web UI (Memory, Media pool, Generation Options, Preview & Export) behind basic auth, OIDC or a trusted-header proxy, or a headless CLI.
  • Daily automation: one scheduled auto run generates a single eligible memory a day and can upload it back to Immich. In Docker set IMMICH_MEMORIES_AUTOMATION__ENABLED=true.
  • Privacy mode blurs every frame and moves the map to a fake city, for demos and screenshots.

How the editor decides is written up in The Curator.

About the demo

The hero above is make demo-hero, an 18-second cut of the Remotion demo (make demo-ui), which recreates the UI in React over six CC0 photos. The CLI demo inside it is a VHS recording (make demo-cli). Docs screenshots come from a hermetic run over the same fixture library (make screenshots).

Development

make dev installs everything, make ci runs what CI runs, make help lists the rest. Guidelines in CONTRIBUTING.md. The codebase was written with AI assistance as a deliberate experiment; DISCLAIMER.md says how and where it fell short.

License

MIT, see LICENSE.

Release files for immich-memories 0.84.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for immich-memories 0.84.1
File Size Uploaded
immich_memories-0.84.1.tar.gz 8.0 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for immich-memories 0.84.1
File Interpreter ABI Platform
immich_memories-0.84.1-py3-none-any.whl Python 3 none any Details

Total release size: 14.5 MB

Release files / immich_memories-0.84.1.tar.gz

Download URL immich_memories-0.84.1.tar.gz
Size 8.0 MB
Tags Source
SHA-256 checksum
How to use checksums
58425a0a77021e95fae1b108b94e08d7b7651da1d189793c0fb8fac015ad8a9b
BLAKE2b-256 checksum
How to use checksums
7591a62caba1abd57ae387016bc461a620b75a592e6e33bf8dd7b45e2f67dcef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 13, 2026.

Transparency log

Release files / immich_memories-0.84.1-py3-none-any.whl

Download URL immich_memories-0.84.1-py3-none-any.whl
Size 6.6 MB
Tags Python 3
SHA-256 checksum
How to use checksums
bf43b6c283512acc25918c1093f00896dc5bdbb4b4e028c652fd99fc2df220d2
BLAKE2b-256 checksum
How to use checksums
0f62f1ff405b424299de80a7f61852f8f7c8bd356f5829429b75c286a5a0789d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 13, 2026.

Transparency log

Release history Release notifications | RSS feed

0.99.1

2 release files

0.99.0

2 release files

0.98.2

2 release files

0.98.1

2 release files

0.98.0

2 release files

0.97.0

2 release files

0.96.0

2 release files

0.95.0

2 release files

0.94.2

2 release files

0.94.1

2 release files

0.94.0

2 release files

0.93.0

2 release files

0.92.3

2 release files

0.92.2

2 release files

0.92.1

2 release files

0.92.0

2 release files

0.91.1

2 release files

0.91.0

2 release files

0.90.2

2 release files

0.90.1

2 release files

0.90.0

2 release files

0.89.1

2 release files

0.89.0

2 release files

0.88.0

2 release files

0.87.9

2 release files

0.87.8

2 release files

0.87.7

2 release files

0.87.6

2 release files

0.87.5

2 release files

0.87.4

2 release files

0.87.3

2 release files

0.87.2

2 release files

0.87.1

2 release files

0.87.0

2 release files

0.86.3

2 release files

0.86.2

2 release files

0.86.1

2 release files

0.86.0

2 release files

0.85.1

2 release files

0.85.0

2 release files

This release

0.84.1 This release

2 release files

0.84.0

2 release files

0.83.0

2 release files

0.82.0

2 release files

0.81.1

2 release files

0.81.0

2 release files

0.80.0

2 release files

0.79.3

2 release files

0.79.2

2 release files

0.79.1

2 release files

0.79.0

2 release files

0.78.0

2 release files

0.77.2

2 release files

0.77.1

2 release files

0.77.0

2 release files

0.75.5

2 release files

0.75.4

2 release files

0.75.3

2 release files

0.75.2

2 release files

0.75.1

2 release files

0.75.0

2 release files

0.74.0

2 release files

0.73.0

2 release files

0.72.3

2 release files

0.72.2

2 release files

0.72.1

2 release files

0.72.0

2 release files

0.71.1

2 release files

0.71.0

2 release files

0.70.1

2 release files

0.70.0

2 release files

0.69.2

2 release files

0.69.1

2 release files

0.69.0

2 release files

0.68.0

2 release files

0.67.0

2 release files

0.66.0

2 release files

0.65.0

2 release files

0.64.0

2 release files

0.63.0

2 release files

0.62.1

2 release files

0.62.0

2 release files

0.61.0

2 release files

0.60.1

2 release files

0.60.0

2 release files

0.59.2

2 release files

0.59.1

2 release files

0.59.0

2 release files

0.58.0

2 release files

0.57.0

2 release files

0.56.0

2 release files

0.55.0

2 release files

0.54.1

2 release files

0.54.0

2 release files

0.53.9

2 release files

0.53.8

2 release files

0.53.7

2 release files

0.53.6

2 release files

0.53.5

2 release files

0.53.4

2 release files

0.53.3

2 release files

0.53.2

2 release files

0.53.1

2 release files

0.53.0

2 release files

0.52.2

2 release files

0.52.1

2 release files

0.52.0

2 release files

0.51.2

2 release files

0.51.1

2 release files

0.51.0

2 release files

0.50.0

2 release files

0.49.2

2 release files

0.49.1

2 release files

0.49.0

2 release files

0.48.1

2 release files

0.48.0

2 release files

0.47.0

2 release files

0.46.0

2 release files

0.45.1

2 release files

0.45.0

2 release files

0.44.0

2 release files

0.43.0

2 release files

0.42.3

2 release files

0.42.2

2 release files

0.42.1

2 release files

0.42.0

2 release files

0.41.0

2 release files

0.40.3

2 release files

0.40.2

2 release files

0.40.1

2 release files

0.40.0

2 release files

0.39.0

2 release files

0.38.3

2 release files

0.38.2

2 release files

0.37.2

2 release files

0.37.1

2 release files

0.37.0

2 release files

0.35.0

2 release files

0.34.6

2 release files

0.34.5

2 release files

0.34.4

2 release files

0.34.3

2 release files

0.34.2

2 release files

0.34.1

2 release files

0.34.0

2 release files

0.33.0

2 release files

0.32.1

2 release files

0.32.0

2 release files

0.31.0

2 release files

0.30.1

2 release files

0.30.0

2 release files

0.29.5

2 release files

0.29.4

2 release files

0.29.3

2 release files

0.29.2

2 release files

0.29.1

2 release files

0.29.0

2 release files

0.28.1

2 release files

0.28.0

2 release files

0.27.1

2 release files

0.27.0

2 release files

0.26.5

2 release files

0.26.4

2 release files

0.26.3

2 release files

0.26.2

2 release files

0.26.1

2 release files

0.26.0

2 release files

0.25.1

2 release files

0.25.0

2 release files

0.24.1

2 release files

0.24.0

2 release files

0.23.4

2 release files

0.23.3

2 release files

0.23.2

2 release files

0.23.1

2 release files

0.23.0

2 release files

0.22.0

2 release files

0.21.6

2 release files

0.21.5

2 release files

0.21.4

2 release files

0.21.3

2 release files

0.20.0

2 release files

0.19.1

2 release files

0.19.0

2 release files

0.18.2

2 release files

0.18.1

2 release files

0.18.0

2 release files

0.17.3

2 release files

0.17.2

2 release files

0.17.1

2 release files

0.17.0

2 release files

0.16.0

2 release files

0.15.0

2 release files

0.14.0

2 release files

0.13.2

2 release files

0.13.1

2 release files

0.13.0

2 release files

0.12.1

2 release files

0.12.0

2 release files

0.11.1

2 release files

0.11.0

2 release files

0.10.1

2 release files

0.10.0

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.6.0

2 release files

0.5.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page