id = "immich-cli" name = "Immich CLI" homepage = "https://immich.app/" description = "A command-line interface for Immich." executables = ["immich"] [dotfiles] # Immich's official CLI documentation says login stores credentials in # auth.yml under the configuration directory, defaulting to ~/.config/immich/. # A user may override that directory with IMMICH_CONFIG_DIR, so only the fixed # default is represented here; auth.yml is a credential end to end. # https://github.com/immich-app/immich/blob/main/docs/docs/features/command-line-interface.md paths = [] exclude = [] secret = ["[configHome]/immich/auth.yml"] side_effect = false [commands] format = 1 label = "Immich CLI" description = "Upload photos and videos to an Immich server. Login, logout, server-info and the delete-after-upload flags are outside this form." quality = "ai-draft" parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false } [[commands.subcommand]] path = ["upload"] label = "Upload assets" description = "Upload files or directories to the logged-in Immich server." [[commands.subcommand.source]] id = "help" kind = "manual" url = "https://immich.app/docs/features/command-line-interface" revision = "2026-10-27" evidence = """ Usage: immich upload [paths...] [options] Arguments: paths One or more paths to assets to be uploaded Options: -r, --recursive Recursive (default: false, env: IMMICH_RECURSIVE) -i, --ignore Pattern to ignore (env: IMMICH_IGNORE_PATHS) -h, --skip-hash Don't hash files before upload (default: false, env: IMMICH_SKIP_HASH) -H, --include-hidden Include hidden folders (default: false, env: IMMICH_INCLUDE_HIDDEN) -a, --album Automatically create albums based on folder name (default: false, env: IMMICH_AUTO_CREATE_ALBUM) -A, --album-name Add all assets to specified album (env: IMMICH_ALBUM_NAME) -n, --dry-run Don't perform any actions, just show what will be done (default: false, env: IMMICH_DRY_RUN) -c, --concurrency Number of assets to upload at the same time (default: 4, env: IMMICH_UPLOAD_CONCURRENCY) -j, --json-output Output detailed information in json format (default: false, env: IMMICH_JSON_OUTPUT) """ [[commands.subcommand.field]] id = "paths" label = "Files or directories" type = "path" path = { kind = "any", role = "input" } position = 0 multiple = true min = 1 sources = ["help"] [[commands.subcommand.field]] id = "recursive" label = "Include subfolders" type = "boolean" option = ["--recursive", "-r"] sources = ["help"] [[commands.subcommand.field]] id = "dry_run" label = "Dry run" description = "Show what would happen without uploading." type = "boolean" option = ["--dry-run", "-n"] sources = ["help"] [[commands.subcommand.field]] id = "album" label = "Create albums from folder names" type = "boolean" option = ["--album", "-a"] sources = ["help"] [[commands.subcommand.field]] id = "album_name" label = "Album name" type = "string" option = ["--album-name", "-A"] sources = ["help"] [[commands.subcommand.field]] id = "ignore" label = "Ignore pattern" type = "string" option = ["--ignore", "-i"] sources = ["help"] [[commands.subcommand.field]] id = "skip_hash" label = "Skip hashing" type = "boolean" option = ["--skip-hash"] sources = ["help"] [[commands.subcommand.field]] id = "include_hidden" label = "Include hidden folders" type = "boolean" option = ["--include-hidden", "-H"] sources = ["help"] [[commands.subcommand.field]] id = "concurrency" label = "Concurrent uploads" type = "integer" option = ["--concurrency", "-c"] sources = ["help"] [[commands.subcommand.field]] id = "json_output" label = "JSON output" type = "boolean" option = ["--json-output", "-j"] sources = ["help"] [[commands.subcommand.task]] id = "upload_dir" label = "Upload a folder" fields = ["paths", "recursive"] required = ["paths"] set = { recursive = [true] } [[commands.subcommand.task]] id = "preview" label = "Preview an upload" fields = ["paths", "recursive", "dry_run"] required = ["paths"] set = { recursive = [true], dry_run = [true] } [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["paths", "recursive", "dry_run", "album", "album_name"] [[commands.subcommand.group]] id = "advanced" label = "Advanced" fields = ["ignore", "skip_hash", "include_hidden", "concurrency", "json_output"]