Skip to main content

CLI Reference

This page is auto-generated from the Click command definitions. Run make docs-cli to regenerate.

Global options​

FlagTypeDefaultDescription
--versionbooleanfalseShow the version and exit.
--config, -cpath-Path to config file
--presetchoice: fast-Config preset for this run: fast = CPU-only/NAS profile (1080p h264, medium quality, fast encoder preset, static title backgrounds). It changes nothing about what the editor reads. Anything you set explicitly wins
--verbose, -vbooleanfalseLog at DEBUG level. Shorthand for --log-level DEBUG
--log-levelchoice: DEBUG | INFO | WARNING | ERROR-Log level for this run (default: IMMICH_MEMORIES_LOG_LEVEL or INFO)

auto​

Automation -- detect and generate memory candidates.

immich-memories auto [OPTIONS] COMMAND [ARGS]...

auto history​

Show recent auto-generated memories.

immich-memories auto history [OPTIONS]
FlagTypeDefaultDescription
--limitinteger10Number of entries to show

auto install​

Install system-level scheduler (launchd/systemd/cron).

immich-memories auto install [OPTIONS]
FlagTypeDefaultDescription
--hourinteger range9Hour to run (0-23)
--minuteinteger range0Minute to run (0-59)
--cooldowninteger24Cooldown hours between runs
--uninstallbooleanfalseRemove installed scheduler
--showbooleanfalseShow config without installing
--forcebooleanfalseSchedule this install even when its checkout is a worktree or behind its upstream

auto run​

Generate the chosen eligible candidate, or the highest-scoring one.

immich-memories auto run [OPTIONS]
FlagTypeDefaultDescription
--candidatetext-Exact memory_key from auto suggest --json
--dry-runbooleanfalseShow what would be generated
--forcebooleanfalseSkip cooldown check
--cooldowninteger-Min hours since last auto-run
--uploadbooleanfalseUpload to Immich
--quietbooleanfalseOne machine-readable line per decision, no progress display; -v adds log detail

auto status​

Show durable automation and external scheduler state.

immich-memories auto status [OPTIONS]
FlagTypeDefaultDescription
--jsonbooleanfalseMachine-readable output

auto suggest​

Show prioritized memory candidates.

immich-memories auto suggest [OPTIONS]
FlagTypeDefaultDescription
--jsonbooleanfalseMachine-readable output
--limitinteger10Max candidates to show
--typetext-Filter by memory type

auto test-notification​

Send a test notification to verify Apprise URL configuration.

immich-memories auto test-notification [OPTIONS]

capabilities​

Show what this setup supports, what is missing, and which music profiles work.

Connection and installation checks are labelled separately from real generation. Saved settings and running model servers are left alone. Use --test-music after unloading idle models if you want to test music with their memory freed.

immich-memories capabilities [OPTIONS]
FlagTypeDefaultDescription
--test-musicbooleanfalseGenerate 15 seconds for each local ACE-Step profile that fits; may download models.
--verify-localbooleanfalseVerify configured owned reader and cached local audio with synthetic inputs; no full-film certification
--jsonbooleanfalsePrint the report as JSON

config​

Configure the Immich connection, or inspect where each setting comes from.

Without a subcommand this sets the Immich URL and API key, prompting for them when no option is given. Settings saved here go to the database, below environment variables and config.yaml, which this never writes. The API key is a secret: saving it needs IMMICH_MEMORIES_SECRET_KEY.

immich-memories config [OPTIONS] [COMMAND] [ARGS]...
FlagTypeDefaultDescription
--url, -utext-Immich server URL
--api-key, -ktext-Immich API key
--show, -sbooleanfalseSame as config show

config move-to-db​

Move settings out of config.yaml into the database.

KEYS are runtime paths such as llm.model (no advanced. prefix). Each value is saved to the database, then its line is removed from config.yaml, so the UI can edit it. The rest of the file keeps its values and ${VAR} references but loses its comments; the old file is kept as config.yaml.bak. Nothing moves without this command.

immich-memories config move-to-db [OPTIONS] KEYS...

Arguments:

  • keys (text; required, repeatable)

config show​

Every setting with its value and source: env, file, database or default.

Secrets are masked. An env or file source names the variable or the config.yaml key that sets it. Give key prefixes (llm, immich.url) to show only those.

immich-memories config show [OPTIONS] [PREFIXES]...

Arguments:

  • prefixes (text; optional, repeatable)

config test​

Check the Immich connection and the API version it resolves (read-only).

Every extra account under immich.accounts is checked too, one line each.

immich-memories config test [OPTIONS]

days-due​

Show which discovered days have an anniversary about now.

immich-memories days-due [OPTIONS]
FlagTypeDefaultDescription
--ondatetime-The date to look around (default today)

days-export​

Write the special-days catalogue as JSON, for a backup or a hand edit.

immich-memories days-export [OPTIONS]
FlagTypeDefaultDescription
--tofile-Write to this file instead of standard output

days-import​

Replace the special-days catalogue with a JSON file's.

Every record is kept as written, so an edited export comes back exactly. A file whose records do not read as a catalogue changes nothing.

immich-memories days-import [OPTIONS]
FlagTypeDefaultDescription
--fromfile-A JSON catalogue, as days-export writes it (required)

discover-days​

Find days something happened on, and remember them for later.

Meant to run occasionally rather than per generation: the point of a catalogue is a memory nobody asked for (five years to the day since the wedding), and that needs the days found in advance.

Days inside a trip are skipped, since a trip memory already tells that story. On Basic and GPU tiers, holidays spent at home are skipped too. Other days count when one recorded fact stands out (away from home, three favourites, mostly video, or a long day with close family), and each year keeps its strongest few. On Full tier, days are read a month at a time. A separate occasion on a holiday can qualify; the holiday celebration itself belongs to a holiday memory.

Resumes by default: years already in the catalogue are not scanned again, which matters for a command that runs for hours. --rescan starts over.

--replace re-scans the years between --since and --until and replaces their catalogue rows with the newly qualifying days. It says how many rows it will replace before it starts, and it never touches a year outside the period.

The catalogue lives in the store; days-export writes it to a file.

immich-memories discover-days [OPTIONS]
FlagTypeDefaultDescription
--sinceinteger2007First year to scan
--untilintegercurrent yearLast year to scan
--also-skiptext-A holiday name or MM-DD this library keeps that the defaults miss (repeatable)
--rescanbooleanfalseStart over, ignoring and replacing the existing catalogue
--replacebooleanfalseRe-scan --since..--until and replace every row those years already hold, dropping days that no longer qualify. Rows outside the period are kept.

generate​

Generate a video compilation.

Memory type presets:
--memory-type season --season summer --year 2024
--memory-type person_spotlight --person "Riley" --year 2024
--memory-type multi_person --person "Riley" --person "Bob" --year 2024
--memory-type multi_person --person "Riley" --person "Bob" (no dates: from
the first day both could be in a picture, read off their birth dates)
--memory-type monthly_highlights --month 7 --year 2024
--memory-type on_this_day
Manual time period options:
--year 2024 Calendar year
--year 2024 --birthday 02-07 Birthday-based year
--start 2024-01-01 --end 2024-06-30 Custom range
--start 2024-01-01 --period 6m Period from start
immich-memories generate [OPTIONS]
FlagTypeDefaultDescription
--year, -yinteger-Year to generate video for (calendar year by default)
--starttext-Start date (YYYY-MM-DD)
--endtext-End date (use with --start)
--periodtext-Period from start date (e.g., 6m, 1y, 2w)
--birthday, -btext-Run the year up to a birthday, plus earlier birthdays (reads Immich's birth date, or override with MM-DD, e.g. 03-15)
--from-albumtext-Generate from an Immich album (name or ID) instead of a date range
--subjecttext-With --from-album: what the album was curated for, in your words. Every picture then stands on that subject, a loaf in a bread album included, and every year the album holds gets a shot. Needs a model reader
--asktext-Highly experimental: the film in a sentence, e.g. "our cat along the years". Read by the configured model reader against your prepared library; the translation is printed first. Needs tier: full
--ask-tracefile-With --ask: keep the translation (the trace, the pool counts, the rule preview, the verdict) in this JSON file, for a watcher such as the web client
--person, -ptext-Person name, or a UUID for exactly one person (repeatable) (repeatable)
--people-expressiontext-Grouped people condition, e.g. ("Person A" OR "Person B") AND "Person C". Use exact library names; read per picture: every named person must be recognised on the same picture, not just somewhere nearby.
--grouptext-A label saved with people group add, resolved like --people-expression (mutually exclusive with it, --person and --person-match)
--person-matchchoice: and | orandWith several --person values, require everyone recognised on the same picture (and) or accept any named person on it (or)
--accountstext-Immich accounts the film reads, comma-separated: primary plus names under immich.accounts, e.g. primary,partner. Default: the primary alone
--memory-typechoice: year_in_review | season | person_spotlight | multi_person | monthly_highlights | on_this_day | album | trip | holiday | special_day-Memory type preset (album takes its pool from --from-album)
--holidaytext-Holiday name or MM-DD (use with --memory-type holiday)
--seasonchoice: spring | summer | fall | autumn | winter-Season (use with --memory-type season)
--monthinteger-Month 1-12 (with --year, generates that month; selects trip by month)
--hemispherechoice: north | southnorthHemisphere for season calculation
--duration, -dinteger-Target duration in seconds (default: fitted to the material the period holds)
--short-formchoice: 15 | 30 | 60 | 90-Short-form preset: sets the duration and makes the video vertical
--orientationchoice: landscape | portrait | square | autoautoOutput orientation (auto follows the final selected cut)
--scale-mode, -schoice: fit | blur-How to fill an aspect mismatch: blurred background or black bars (default: from config, else blur)
--fade-colorchoice: white | black-Opening and closing title fade (default: title_screens.fade_color)
--transition, -tchoice: smart | cut | crossfade | nonesmartTransition style (default: smart, a mix of fades and cuts)
--resolution, -rchoice: auto | 4k | 1080p | 720p-Output resolution (default: config value, 'auto' to match source clips)
--music-volumefloat0.5Music volume 0.0-1.0 (default: 0.5)
--formatchoice: mp4 | h265 | prores-Output format override (default: config value)
--quality, -qchoice: high | medium | low-Output quality: high, medium (balanced), low (fast); default: from config
--output, -o, -Opath-Output file path. The run writes it inside its own directory and adds a recipe hash to the name; each rerun gets a new run directory
--music, -mtext-Music: path to audio file, 'auto' to generate from config, or omit for default behavior
--no-musicbooleanfalseDisable all music (skip both provided files and AI generation)
--dry-runbooleanfalseDiscover inputs and show preparation needs without selection or generation
--no-renderbooleanfalseRun story-first selection and its audience and media checks, then stop before encoding. Unlike --dry-run, this picks the clips it would actually ship
--trace-selectionfile-Write a stage-by-stage report of how the clips were chosen
--includetext-Keep this picture in the cut even if the editor would drop it (repeatable) (repeatable)
--excludetext-Leave this picture out of the cut (repeatable) (repeatable)
--sharingchoice: just-us | family | shareable-Who the film is for: just-us (the household), family (default: defaults.sharing) or shareable (anyone)
--upload-to-immichbooleanfalseUpload generated video back to Immich
--albumtext-Immich album name for uploaded video
--add-date, --no-add-dateboolean-Caption each clip with its date (default: defaults.add_date, on)
--add-place, --no-add-placeboolean-Caption each clip with its place (default: defaults.add_place, on)
--keep-intermediatesbooleanfalseKeep intermediate files for debugging
--privacy-modebooleanfalseDemo mode: blur every clip frame, scramble the audio, fake the person names
--titletext-Override video title text
--llm-title, --no-llm-titleboolean-People and occasion memories are named by the model whenever a reader is configured. --llm-title adds trips, --no-llm-title pins the template everywhere (--title still wins)
--subtitletext-Override video subtitle text
--include-live-photos, --no-live-photosboolean-Include Live Photo video clips (3s iPhone clips, merged when burst-captured)
--include-photos, --no-photosboolean-Include photos as animated Ken Burns clips (blur background, face-aware pan)
--accept-any-provenancebooleanfalseKeep forwarded and re-encoded media for this memory; date, person, privacy, and Live Photo boundaries still apply
--photo-durationfloat-Duration per photo clip in seconds (default: 4.0)
--trip-indexinteger-Select a specific trip by index (use with --memory-type trip)
--all-tripsbooleanfalseGenerate a video for every detected trip (use with --memory-type trip)
--years-backinteger-Years to look back for --birthday, on_this_day or holiday
--near-datetext-Select trip closest to this date (YYYY-MM-DD, use with --memory-type trip)
--event-idtext-Exact catalogue event ID (use with --memory-type special_day and --day)
--daydatetime-The day this memory is about (YYYY-MM-DD). With --memory-type special_day it names a catalogued day, whose title comes from the catalogue rather than from here (immich-memories days-due lists them). With --memory-type on_this_day it is the anniversary to look back from, so the cut is reproducible; without it, today
--quietbooleanfalseSilence the live progress display and print log lines instead (cron, logs); -v sets the log level

hardware​

Show hardware acceleration information.

immich-memories hardware [OPTIONS]

models​

Fetch the pinned model artifacts selection needs.

immich-memories models [OPTIONS] COMMAND [ARGS]...

models fetch​

Download every pinned model artifact a first cut needs, in one command.

immich-memories models fetch [OPTIONS]
FlagTypeDefaultDescription
--forcebooleanfalseRe-download even when the file is already right
--detectors, --no-detectorsboolean-Fetch detector models (default: gpu/full only); --detectors also fetches on nas
--layabooleanfalseFetch the Laya audience checkpoint even on the basic tier (gpu and full fetch it anyway)

music​

Music and audio commands.

immich-memories music [OPTIONS] COMMAND [ARGS]...

music add​

Add background music to a video with automatic ducking.

Without a music file, picks a track from your library by --mood (calm when absent). No frame of the video is sent to any model. Music volume is automatically lowered when speech/sounds are detected.

immich-memories music add [OPTIONS] VIDEO_PATH OUTPUT_PATH
FlagTypeDefaultDescription
--music, -mpath-Music file (auto-select if not provided)
--moodtext-Override mood for music selection
--genre, -gtext-Override genre for music selection
--volume, -vfloat-6.0Music volume in dB
--fade-infloat2.0Fade in duration in seconds
--fade-outfloat3.0Fade out duration in seconds

Arguments:

  • video_path (path; required)
  • output_path (path; required)

music preview​

Generate the music this cut would get, from its own timeline and mood, before rendering.

The track it prints renders with runs render RUN --music PATH.

immich-memories music preview [OPTIONS] [RUN_ID]
FlagTypeDefaultDescription
--outdirectory-Where to write the track (default: the cache, beside the run)
--progress-filefile-Keep generation progress in this JSON file, for a watcher such as the web client

Arguments:

  • run_id (text; optional)

Search for music in local library.

immich-memories music search [OPTIONS]
FlagTypeDefaultDescription
--mood, -mtext-Mood (happy, calm, energetic, etc.)
--genre, -gtext-Genre (acoustic, electronic, cinematic, etc.)
--tempo, -tchoice: slow | medium | fast-Tempo
--min-durationfloat60Minimum duration in seconds
--limit, -ninteger10Number of results

people​

Who is in this library, and who they are to each other.

Called on its own this still lists the people Immich knows, which is what immich-memories people has always done.

immich-memories people [OPTIONS] [COMMAND] [ARGS]...

people bind​

Say that one person has this id in another Immich account.

PERSON is a store person id or a name exactly one person carries. The binding only adds the id: the name, birth date and everything you confirmed stay as they are. An id somebody else holds is refused, never merged, and binding the same id again changes nothing.

immich-memories people bind [OPTIONS] PERSON
FlagTypeDefaultDescription
--accounttext-The account that reads the id: primary, or an extra account's name (required)
--idtext-The person's id as that account's Immich knows them (required)

Arguments:

  • person (text; required)

people export​

Write the people registry out as YAML, in the shape people.yaml had.

The file holds names and birth dates, so it is created readable by you alone. Edit it and bring it back with people import.

immich-memories people export [OPTIONS]
FlagTypeDefaultDescription
--tofile-Write the YAML here instead of to standard output

people group​

Saved people expressions generate --group can reuse.

immich-memories people group [OPTIONS] COMMAND [ARGS]...

people group add​

Save EXPRESSION under LABEL, in the --people-expression grammar.

EXPRESSION's leaves are canonical person ids : the ids people show lists : not names, e.g. ("id-alex" OR "id-sam") AND "id-kit". LABEL must not already be in use.

immich-memories people group add [OPTIONS] LABEL EXPRESSION

Arguments:

  • label (text; required)
  • expression (text; required)

people group list​

List every saved group and its expression.

immich-memories people group list [OPTIONS]

people group rm​

Remove a saved group. Never touches the people it names.

immich-memories people group rm [OPTIONS] LABEL

Arguments:

  • label (text; required)

people import​

Replace the people registry with a YAML file, keeping every id as written.

The whole file is checked first; if any person in it is malformed, nothing is written and every problem is listed. A registry that already holds people is only overwritten with --replace.

immich-memories people import [OPTIONS]
FlagTypeDefaultDescription
--fromfile-A YAML file written by people export (or an old people.yaml) (required)
--replacebooleanfalseOverwrite a registry that already holds people

people scan​

Build or refresh the people registry from Immich.

Reads every named person's count and month curve, then asks about each remaining pair to find who appears with whom. Nothing here looks at a pixel and nothing here asks you a question: the library's own distribution is the whole input.

Safe to re-run: everything you confirmed is copied through untouched, and preferred to this pass's reading forever after.

immich-memories people scan [OPTIONS]
FlagTypeDefaultDescription
--min-assetsinteger25Pictures a named person needs before the graph has an opinion
--ownertext-The name of the person whose library this is, if the account does not say

people show​

Print the people registry: what the last scan read and what you confirmed.

immich-memories people show [OPTIONS]
FlagTypeDefaultDescription
--tierchoice: inner | recurring | episodic | event-Show only one tier

pictures​

Your own word on a picture: clear its hold, or never use it.

Every tier reads it, in every later cut. Find the asset id at the end of the picture's Immich URL: /photos/ASSET_ID.

immich-memories pictures [OPTIONS] COMMAND [ARGS]...

pictures clear-hold​

Clear this one picture's hold for a level, after you've looked at it yourself.

immich-memories pictures clear-hold [OPTIONS] ASSET_ID
FlagTypeDefaultDescription
--levelchoice: anyone | family | just-us-The widest film it may play in; asked when not given (--yes: family)
--yesbooleanfalseClear it without asking

Arguments:

  • asset_id (text; required)

pictures list​

Every picture you cleared or will never use.

immich-memories pictures list [OPTIONS]

pictures never-use​

Keep this picture out of every film from now on.

immich-memories pictures never-use [OPTIONS] ASSET_ID

Arguments:

  • asset_id (text; required)

pictures show​

What holds this picture, and what you decided.

immich-memories pictures show [OPTIONS] ASSET_ID

Arguments:

  • asset_id (text; required)

pictures undo​

Forget what you decided about this picture: the app's own holds apply again.

immich-memories pictures undo [OPTIONS] ASSET_ID

Arguments:

  • asset_id (text; required)

preflight​

Run preflight checks to validate all provider connections.

Checks:

  • Immich server connection and API key, and each extra account
  • LLM availability (Ollama or OpenAI-compatible)
  • Title rendering (GPU or PIL fallback)
  • Pinned DINOv2 encoder export (presence and digest)
  • Caption endpoint (advertises the accepted alias)
  • Configured paths that are not on this host
  • Notification delivery health
  • Hardware acceleration
immich-memories preflight [OPTIONS]
FlagTypeDefaultDescription
--verbose, -vbooleanfalseShow detailed output

prepare​

Prepare a scope's annotations, print what each producer cost, and stop.

# No selection and no render happen. Preparation is banked per picture, so
# a scope prepared today is free for every later cut:
immich-memories prepare --year 2024 --month 6
immich-memories prepare --start 2024-01-01 --period 1y
#
# --overviews goes one step further and banks what each month was about,
# which a cut of that month then reads instead of working it out again:
immich-memories prepare --year 2024 --month 6 --overviews
immich-memories prepare [OPTIONS]
FlagTypeDefaultDescription
--year, -yinteger-Calendar year to prepare
--monthinteger-Month 1-12, with --year: one month at a time
--starttext-Start date (YYYY-MM-DD)
--endtext-End date (use with --start)
--periodtext-Period from the start date (e.g. 6m, 1y, 2w)
--overviewsbooleanfalseAlso bank each month's episode readings and the account a cut reads as its thesis
--library-sizeinteger1000Project the measured rate onto a library of this many pictures

report​

Print a privacy-safe GitHub issue report. Defaults to the latest run.

Logs are included. Review the report before sharing it. Nothing is sent.

immich-memories report [OPTIONS] [RUN_ID]
FlagTypeDefaultDescription
--jsonbooleanfalsePrint the redacted report as JSON
--bundlefile-Write the full redacted report to a ZIP file
--include-flagged-captionsbooleanfalseInclude captions and reasons of flagged free-text photos; review before sharing
--wrongtext-Mark a photo of a free-text film as wrong (repeatable); kept on the run (repeatable)
--missingtext-Say what a free-text film is missing; kept on the run and checked against it

Arguments:

  • run_id (text; optional)

runs​

Browse and manage pipeline run history.

immich-memories runs [OPTIONS] COMMAND [ARGS]...

runs delete​

Delete a run and optionally its output files.

Examples:

# Delete run and its output
immich-memories runs delete 20260105_143052_a7b3
# Delete run but keep the video
immich-memories runs delete 20260105_143052_a7b3 --keep-output
immich-memories runs delete [OPTIONS] RUN_ID
FlagTypeDefaultDescription
--keep-outputbooleanfalseKeep the output video file
--yesbooleanfalseConfirm the action without prompting.

Arguments:

  • run_id (text; required)

runs list​

List recent pipeline runs.

Examples:

# List recent runs
immich-memories runs list
# Filter by person
immich-memories runs list --person "John"
# Show only failed runs
immich-memories runs list --status failed
immich-memories runs list [OPTIONS]
FlagTypeDefaultDescription
--limit, -ninteger20Number of runs to show
--person, -ptext-Filter by person name
--status, -schoice: completed | failed | running | cancelled | interrupted-Filter by status

runs render​

Render a finished cut, or one of its saved revisions, through the same engine as generate.

With no RUN_ID the most recent completed run is rendered. Revisions are the ones the web client saved (--revision 2); without one, the cut renders as it was chosen.

immich-memories runs render [OPTIONS] [RUN_ID]
FlagTypeDefaultDescription
--revisioninteger-Render this saved revision of the cut
--titletext-Title card text (default: as generate decides)
--subtitletext-Title card subtitle
--llm-title, --no-llm-titleboolean-Let the model name the film
--transitionchoice: smart | crossfade | cut | none-Transition style (default: saved cut)
--fade-colorchoice: white | black-Opening and closing title fade (default: title_screens.fade_color)
--title-stylechoice: auto | random | modern_warm | elegant_minimal | vintage_charm | playful_bright | soft_romantic-Title style for this render (default: title_screens.style_mode)
--resolutionchoice: auto | 4k | 1080p | 720p-Output resolution (default: from config)
--orientationchoice: landscape | portrait | square | auto-Output orientation (default: auto, follows the saved cut)
--scale-modechoice: fit | blur-Fill an aspect mismatch with black bars or a blurred background
--formatchoice: mp4 | h265 | prores-Output format override, as generate takes it (default: config value)
--qualitychoice: high | medium | low-Output quality: high, medium (balanced), low (fast); default: from config
--musictext-A track to use, or 'auto' to choose as configured
--no-musicbooleanfalseRender without a music track
--music-volumefloat0.5Music volume from 0.0 to 1.0
--add-date, --no-add-dateboolean-Caption each clip with its date (default: defaults.add_date, on)
--add-place, --no-add-placeboolean-Caption each clip with its place (default: defaults.add_place, on)
--privacy-modebooleanfalseDemo mode: blur every clip frame, scramble the audio, fake the person names
--upload-to-immichbooleanfalseUpload the film to Immich after rendering
--albumtext-Immich album for the upload
--progress-filefile-Keep the render's progress in this JSON file, for a watcher such as the web client

Arguments:

  • run_id (text; optional)

runs show​

Show detailed information about a specific run.

Example: immich-memories runs show 20260105_143052_a7b3

immich-memories runs show [OPTIONS] RUN_ID

Arguments:

  • run_id (text; required)

runs stats​

Show aggregate statistics across all runs.

immich-memories runs stats [OPTIONS]

runs storage​

Report configured output and cache storage without changing it.

immich-memories runs storage [OPTIONS]
FlagTypeDefaultDescription
--jsonbooleanfalseMachine-readable output

runs story​

Print the cut of a run in the order it plays: day, kind, length, story, reason.

With no RUN_ID the most recent completed run is read. A run id prefix works, and so does the path of an attempt directory.

immich-memories runs story [OPTIONS] [RUN_ID]

Arguments:

  • run_id (text; optional)

runs why​

Say what a run decided about one picture: where it passed, where it was dropped, and why.

immich-memories runs why [OPTIONS] ASSET_ID
FlagTypeDefaultDescription
--runtext-Run id or prefix (default: latest)

Arguments:

  • asset_id (text; required)

store​

The database that holds your decisions, model answers, run history and settings.

SQLite at ~/.immich-memories/store.db unless IMMICH_MEMORIES_DATABASE_URL (or database.url) names another one. Stop the app before restore.

immich-memories store [OPTIONS] COMMAND [ARGS]...

store backup​

Write a consistent backup while the app runs, with a manifest beside it.

SQLite: VACUUM INTO. PostgreSQL: pg_dump of the schema in custom format, which needs the PostgreSQL client tools on PATH.

immich-memories store backup [OPTIONS]
FlagTypeDefaultDescription
--tofile-The backup file (default: ~/.immich-memories/backups/store-UTCTIME.db, .dump on PostgreSQL)

store copy​

Copy every table into another store: SQLite to PostgreSQL, or back.

The target is migrated first, and every table's row count and content digest are compared afterwards. Point IMMICH_MEMORIES_DATABASE_URL at the target to switch.

immich-memories store copy [OPTIONS]
FlagTypeDefaultDescription
--totext-The database URL to copy into (required)
--schematext-The PostgreSQL schema to copy into (default: the configured one)
--forcebooleanfalseEmpty a target that already holds rows

store facts​

Inspect detector compatibility and plan selective refreshes.

immich-memories store facts [OPTIONS] COMMAND [ARGS]...

store facts migrate​

Carry compatible Marqo still facts forward without inference; keep old versions.

immich-memories store facts migrate [OPTIONS]
FlagTypeDefaultDescription
--applybooleanfalseApply the compatible migration; default only reports it
--jsonbooleanfalsePrint the migration report as JSON

store facts refresh​

Plan a selective detector refresh; --apply removes only those facts, all versions.

Stop preparation workers first. Run prepare for the affected scope afterwards. Captions, pixel measurements, other detectors and owner decisions stay banked.

immich-memories store facts refresh [OPTIONS]
FlagTypeDefaultDescription
--headtext-Detector to refresh; repeat for multiple heads (required, repeatable)
--assettext-Asset ID to refresh; repeat for multiple assets (required, repeatable)
--applybooleanfalseForget the selected facts; default only reports them
--jsonbooleanfalsePrint the selected refresh as JSON

store facts status​

Show banked producer versions; an app upgrade alone does not invalidate them.

immich-memories store facts status [OPTIONS]
FlagTypeDefaultDescription
--jsonbooleanfalsePrint machine-readable compatibility counts

store import​

Bring the files the app used before the store into it.

Safe to run again: a record the store holds is never replaced, and an importer whose files have not changed since it last completed is skipped. An interrupted import finishes where it stopped.

immich-memories store import [OPTIONS]
FlagTypeDefaultDescription
--fromdirectory-The directory holding the legacy files (default: IMMICH_MEMORIES_IMPORT_FROM, then database.import_from, then ~/.immich-memories). They are only read, never changed
--verifybooleanfalseAfterwards, check that every legacy record is in the store with equal values; exit 1 on any difference

store migrate​

Upgrade the store to this app's schema without starting a film.

immich-memories store migrate [OPTIONS]

store restore​

Replace the store with a backup, migrate it to head and check its row counts.

Stop the app first: a restore cannot reach another process's connections.

immich-memories store restore [OPTIONS]
FlagTypeDefaultDescription
--fromfile-A file store backup wrote; its manifest must sit beside it (required)
--forcebooleanfalseReplace a store that already holds rows

store status​

Backend, URL, schema, revision, import record, row counts and size.

immich-memories store status [OPTIONS]

titles​

Title screen generation and testing commands.

immich-memories titles [OPTIONS] COMMAND [ARGS]...

titles fonts​

Manage title screen fonts.

Five OFL-1.1 families and Noto Sans (Latin, Greek, Cyrillic, Vietnamese) ship inside the wheel. --install adds the Noto faces for every other script a title can hold (Arabic, Hebrew, Indic, Thai, CJK and more) from raw.githubusercontent.com, each file checked against a pinned SHA-256. It is the only step that downloads a font; a render never does. The Docker image runs it at build time.

immich-memories titles fonts [OPTIONS]
FlagTypeDefaultDescription
--installbooleanfalseDownload the pinned Noto script fonts (about 43 MB, most of it CJK)
--clearbooleanfalseClear ~/.immich-memories/fonts
--listbooleanfalseList title fonts (the default)

titles test​

Generate a test title screen to preview styles.

Examples:

# Simple year title
immich-memories titles test --year 2024
# Birthday title with person name
immich-memories titles test --birthday-age 1 --person "Emma"
# Month divider
immich-memories titles test --month 6 --year 2024 --type month
# Portrait orientation (for social media)
immich-memories titles test --year 2024 --orientation portrait
# French locale with specific style
immich-memories titles test --year 2024 --locale fr --style vintage_charm
immich-memories titles test [OPTIONS]
FlagTypeDefaultDescription
--year, -yinteger-Year for title screen (e.g., 2024)
--birthday-ageinteger-Age for birthday title (e.g., 1 for '1st Year')
--person, -ptext-Person name for subtitle
--month, -minteger-Month for month divider (1-12)
--orientationchoice: landscape | portrait | squarelandscapeOutput orientation
--resolution, -rchoice: 720p | 1080p | 4k1080pOutput resolution
--locale, -lchoice: en | fr | nl | de | es | it | pt-BR | pt-PT | pl | sv | ru | ja | zh-Hans | koenLanguage
--style, -schoice: modern_warm | elegant_minimal | vintage_charm | playful_bright | soft_romantic | randomrandomVisual style
--output, -o, -Opath-Output file path
--typechoice: title | month | endingtitleScreen type
--no-animated-backgroundbooleanfalseDisable animated backgrounds (static gradient)

ui​

Launch the web client: make, review, refine and render memories in the browser.

immich-memories ui [OPTIONS]
FlagTypeDefaultDescription
--port, -pinteger-Port to run the UI on (default: config or 8080)
--host, -htext-Host to bind to (default: config or 127.0.0.1)
--reload, --no-reloadbooleanfalseEnable hot reload (for development only)

years​

List years with video content.

immich-memories years [OPTIONS]