Skip to main content

scheduler

Smart automation is the easier option

Most users should use auto instead: it detects trips, birthdays, and highlights automatically. No cron expressions or explicit schedules needed. The scheduler below is for Docker/K8s deployments or when you want exact control over what generates when.

Background mode not yet implemented

The scheduler daemon currently requires --foreground to run. Background (daemonized) mode is planned but not yet implemented. Always pass --foreground when starting the scheduler.

scheduler list

immich-memories scheduler list

Shows all configured schedules: name, memory type, cron expression, enabled/disabled, upload setting, and next run time.

If nothing's configured, you get a hint pointing you to the config file.

scheduler status

immich-memories scheduler status

Quick overview: is the scheduler enabled, how many schedules are active, when the next job fires.

scheduler start

immich-memories scheduler start --foreground
FlagTypeDefaultDescription
--foregroundflagfalseRun in foreground (required: background mode is not yet implemented)

Starts the scheduler daemon. Needs scheduler.enabled: true and at least one schedule in the config.

Auto-resolved parameters

When a schedule fires, date parameters get resolved automatically from the fire time:

Memory typeWhat gets filled in
year_in_reviewyear = previous year
monthly_highlightsyear + month = previous month
on_this_daytarget_date = fire date
tripyear = previous year (scans GPS data, generates all trips)

So a year_in_review firing on Jan 15 2025 generates for 2024. A monthly_highlights firing on Aug 1 generates for July. You get the idea.

Explicit params in the schedule config override these auto-resolved values. Setting params: { year: 2020 } on a year_in_review schedule always generates for 2020 no matter when it fires.

Example config

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 at 9am
duration_minutes: 3

- name: "on-this-day"
memory_type: "on_this_day"
cron: "0 9 * * *" # Every day at 9am
person_names: ["Alice"]

- name: "summer-2024"
memory_type: "season"
cron: "0 9 1 10 *" # Oct 1 at 9am
enabled: false # Paused
params:
season: "summer"
year: 2024

Cron format: minute hour day-of-month month day-of-week. Standard 5-field cron syntax, nothing fancy.