Skip to main content

Automated Generation

Once you know your preferred settings, automate the whole thing. Three paths: smart automation (recommended), the built-in scheduler daemon, or classic cron/scripts.

The auto system scans your library, detects what's worth turning into a memory video, and generates the best candidate. It runs 8 detectors (monthly, yearly, trips, person spotlights, birthdays, activity bursts, on-this-day, multi-person pairs) and picks the highest-scoring one.

# See what it would generate
immich-memories auto suggest

# Generate the top candidate
immich-memories auto run

# Set up daily automatic runs (launchd on macOS, systemd on Linux)
immich-memories auto install --hour 9

Each run generates one memory, then applies cooldowns so the next run picks something different. Over a week of daily runs, you get a diverse mix: monthlies, birthday videos, trip compilations, year-in-reviews.

See auto CLI docs for the full reference including detector details and scoring.

Built-in Scheduler

Use smart automation instead

Most users should use the auto system above — it figures out what to generate automatically. The scheduler below is for Docker/K8s deployments or when you need exact control over what generates when (specific memory types on specific dates).

The scheduler daemon runs inside immich-memories and handles timezone-aware cron, auto-resolved date parameters, and upload-back. No shell scripting required.

# config.yaml
scheduler:
enabled: true
timezone: "America/New_York"
schedules:
- name: "yearly-recap"
memory_type: "year_in_review"
cron: "0 9 15 1 *" # Jan 15 at 9am
upload_to_immich: true
album_name: "{year} Memories"

- name: "monthly-highlights"
memory_type: "monthly_highlights"
cron: "0 9 1 * *" # 1st of each month
duration_minutes: 3

- name: "on-this-day"
memory_type: "on_this_day"
cron: "0 9 * * *" # Every morning
# Start the daemon (foreground mode required, background mode not yet implemented)
immich-memories scheduler start --foreground

# Check what's scheduled
immich-memories scheduler list
immich-memories scheduler status

Date parameters are auto-resolved from fire time: year_in_review firing in January generates for the previous year, monthly_highlights firing on the 1st generates for the previous month, on_this_day uses the current date. Override with explicit params in the schedule config if you need something specific.

Full reference: scheduler CLI docs.

CLI One-Liner

If you just need a one-off:

immich-memories generate \
--person "Emma" \
--year 2024 \
--duration 600 \
--orientation landscape \
--resolution 1080p

Cron Job (Legacy)

Old-school but works. Consider auto install instead — it generates the right cron/launchd/systemd config for you. Generate a yearly memory video every January 1st:

# crontab -e
0 3 1 1 * immich-memories generate --person "Emma" --year $(date -d 'last year' +\%Y) --duration 600

Runs at 3 AM on January 1st. Uses last year as the period so you get a complete year of content.

Multiple People

Shell script that generates for everyone:

#!/bin/bash
PEOPLE=("Emma" "Lucas" "Sophie")
YEAR="2024"

for person in "${PEOPLE[@]}"; do
echo "Generating for $person..."
immich-memories generate \
--person "$person" \
--year "$YEAR" \
--duration 600 \
--output "/videos/memories/${person}_${YEAR}.mp4"
done

Kubernetes Batch Job

There's a job manifest in the repo at deploy/kubernetes/job.yaml. Customize the configmap with your Immich connection details and submit:

kubectl apply -f deploy/kubernetes/configmap.yaml
kubectl apply -f deploy/kubernetes/job.yaml

The job runs to completion and writes the output video to the configured volume. Good for running generation on a GPU node in your cluster without tying up your local machine.

Headless Mode

The CLI runs fully headless: no display needed. Works fine in Docker containers, SSH sessions, and CI pipelines. All configuration comes from config.yaml and CLI flags.