Skip to main content

Turn your Immich photo library into video memory compilations with music and smart cuts

Project description

Immich Memories

CI codecov OpenSSF Scorecard Release Python License Docs

Turn your Immich photo library into video memory compilations with music, title screens, and smart cuts.

Immich Memories connects to your self-hosted Immich server, selects the best moments from your videos and photos, and compiles them into shareable memory videos. Year-end recaps, trip highlights, person spotlights, seasonal compilations, monthly highlights, "on this day" flashbacks -- all from a single tool.

Full documentation: sam-dumont.github.io/immich-video-memory-generator

Reference Setup

graph LR
    subgraph "Apple M2 Pro – 16GB RAM"
        IM["Immich Memories<br/>Python + FFmpeg"]
        LLM["omlx (mlx-vlm)<br/>Qwen2.5-VL local"]
    end

    subgraph "K8s Cluster (GPUs)"
        ACE["ACE-Step 1.5<br/>T1000 8GB"]
        MG["MusicGen API<br/>GTX 1070 8GB"]
    end

    subgraph "Synology NAS"
        Immich["Immich v2.5.6<br/>Photos + Videos"]
    end

    IM -->|"API reads<br/>(download clips)"| Immich
    IM -->|"Vision analysis<br/>(clip scoring)"| LLM
    IM -->|"Background music<br/>(AI-generated)"| ACE
    ACE -.->|"fallback"| MG
    IM -->|"Upload back<br/>(optional)"| Immich

The LLM runs locally on the Mac via omlx (Apple Silicon MLX). Music generation runs on a K8s cluster with dedicated GPUs. Both are optional — the tool works without them, just without AI clip descriptions and generated music.


Docker (recommended for self-hosters)

# 1. Download the compose file
curl -O https://raw.githubusercontent.com/sam-dumont/immich-video-memory-generator/main/docker-compose.yml

# 2. Set your Immich connection
export IMMICH_URL="http://your-immich-server:2283"
export IMMICH_API_KEY="your-api-key"

# 3. Start
docker compose up -d

# 4. Open http://localhost:8080

Resource Requirements

Phase RAM CPU Time estimate
Idle (UI) ~100MB minimal
Analyzing clips 2-4GB 2+ cores ~1 min per 10 clips
Encoding (1080p) 4GB 4 cores ~2 min for 5 min video
Encoding (4K) 6-8GB 4+ cores ~5 min for 5 min video

Default Docker limits: 4GB RAM, 4 CPUs. This is not a NAS app — video analysis and encoding need real compute. Best run on a machine with 8GB+ RAM.

Developed and tested on: Apple M2 Pro, 16GB RAM, macOS. Not yet tested on other hardware. If you run it on Linux/x86, Synology, Unraid, or Raspberry Pi — please report your experience.

Supported Immich Versions

Developed and tested against Immich v2.5.6. Should work with v1.100+ (uses the /api/ endpoint prefix), but no guarantees for older versions.

Optional: LLM for smart clip analysis

For AI-powered content analysis (identifies what's happening in each clip), point to any OpenAI-compatible vision model:

# In ~/.immich-memories/config.yaml
advanced:
  llm:
    provider: "openai-compatible"
    base_url: "http://your-llm-server:8080/v1"
    model: "qwen2.5-vl"

Quick Install

# One-liner (no clone needed)
uvx immich-memories --help

# Or clone and install
git clone https://github.com/sam-dumont/immich-video-memory-generator.git
cd immich-video-memory-generator
uv sync

Quick Start

# 1. Configure
mkdir -p ~/.immich-memories
cat > ~/.immich-memories/config.yaml << EOF
immich:
  url: "https://photos.example.com"
  api_key: "your-api-key-here"
EOF

# 2. Launch the UI
immich-memories ui
# Opens at http://localhost:8080

# 3. Or use the CLI
immich-memories generate --year 2024 --person "John" --output ~/Videos/john_2024.mp4

Key Features

  • Videos + Photos — Unified selection pool: videos, photos (Ken Burns / face-aware pan), and Live Photos
  • 7 Memory Types — Year in Review, Season, Person Spotlight, Multi-Person, Monthly Highlights, On This Day, Trip
  • Smart Clip Selection — Scene detection, interest scoring, duplicate filtering, temporal coverage
  • Cinematic Titles — GPU-rendered title screens with globe animations, satellite maps, month dividers
  • Face-Aware Cropping — Keeps faces centered when converting aspect ratios
  • Hardware Acceleration — NVIDIA NVENC, Apple VideoToolbox, Intel QSV, AMD VAAPI
  • AI Music Generation — ACE-Step or MusicGen with automatic mood detection and audio ducking
  • Privacy Mode — Blur all video, muffle audio, anonymize GPS/names for demos
  • Smart Automationauto suggest detects interesting memories, auto run generates them on a schedule
  • Authentication — Basic auth, OIDC/SSO (Auth0, Authelia, Keycloak), or trusted header proxy
  • Web UI + CLI — 4-step wizard or headless automation
  • Docker & Kubernetes — Containerized deployment with GPU support

Documentation

See the full documentation for:

Development

make dev      # Install all dependencies
make check    # Run all checks (lint, format, typecheck, tests)
make ci       # Full CI pipeline
make help     # Show all available targets

See CONTRIBUTING.md for guidelines.

Built with AI

This entire codebase was written with AI (Claude) as an experiment in building complex software cleanly with AI assistance. 3,900+ tests, 20+ CI quality gates, 225 source modules. See DISCLAIMER.md for the full story.

License

MIT License — see LICENSE for details.


Made with ❤️ for the Immich community

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

immich_memories-0.36.4.tar.gz (1.6 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

immich_memories-0.36.4-py3-none-any.whl (1.3 MB view details)

Uploaded Python 3

File details

Details for the file immich_memories-0.36.4.tar.gz.

File metadata

  • Download URL: immich_memories-0.36.4.tar.gz
  • Upload date:
  • Size: 1.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for immich_memories-0.36.4.tar.gz
Algorithm Hash digest
SHA256 4d5bfbdcbf0a1e0e6230ce675407c6ec41ae850b5626410d0f7ca889ca504af0
MD5 2ab36f995d7cd1f6f8e4c5f421d640a1
BLAKE2b-256 667360ee81b8ab58f79baec789267fc074f0062bdc0e635f83382ab63ff026a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for immich_memories-0.36.4.tar.gz:

Publisher: release.yml on sam-dumont/immich-video-memory-generator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file immich_memories-0.36.4-py3-none-any.whl.

File metadata

File hashes

Hashes for immich_memories-0.36.4-py3-none-any.whl
Algorithm Hash digest
SHA256 98c23619ec126e05bda71f39711bbb12bbefe4d39216e12136e78fc689fde6ce
MD5 3b7ced29452796a77d7b308ffc135ca4
BLAKE2b-256 3aedf9ae5226d87fe58b41f5b70831142d6f10c5dcdf2c957ef06c4928a0bb15

See more details on using hashes here.

Provenance

The following attestation bundles were made for immich_memories-0.36.4-py3-none-any.whl:

Publisher: release.yml on sam-dumont/immich-video-memory-generator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page