{
  "id": "immich-cli",
  "name": "Immich CLI",
  "homepage": "https://immich.app/",
  "description": "A command-line interface for Immich.",
  "executables": [
    "immich"
  ],
  "dotfiles": {
    "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
    },
    "subcommand": [
      {
        "path": [
          "upload"
        ],
        "label": "Upload assets",
        "description": "Upload files or directories to the logged-in Immich server.",
        "source": [
          {
            "id": "help",
            "kind": "manual",
            "url": "https://immich.app/docs/features/command-line-interface",
            "revision": "2026-10-27",
            "evidence": "Usage: immich upload [paths...] [options]\nArguments:\n  paths                       One or more paths to assets to be uploaded\nOptions:\n  -r, --recursive             Recursive (default: false, env: IMMICH_RECURSIVE)\n  -i, --ignore <pattern>      Pattern to ignore (env: IMMICH_IGNORE_PATHS)\n  -h, --skip-hash             Don't hash files before upload (default: false, env: IMMICH_SKIP_HASH)\n  -H, --include-hidden        Include hidden folders (default: false, env: IMMICH_INCLUDE_HIDDEN)\n  -a, --album                 Automatically create albums based on folder name (default: false, env: IMMICH_AUTO_CREATE_ALBUM)\n  -A, --album-name <name>     Add all assets to specified album (env: IMMICH_ALBUM_NAME)\n  -n, --dry-run               Don't perform any actions, just show what will be done (default: false, env: IMMICH_DRY_RUN)\n  -c, --concurrency <number>  Number of assets to upload at the same time (default: 4, env: IMMICH_UPLOAD_CONCURRENCY)\n  -j, --json-output           Output detailed information in json format (default: false, env: IMMICH_JSON_OUTPUT)\n"
          }
        ],
        "field": [
          {
            "id": "paths",
            "label": "Files or directories",
            "type": "path",
            "path": {
              "kind": "any",
              "role": "input"
            },
            "position": 0,
            "multiple": true,
            "min": 1,
            "sources": [
              "help"
            ]
          },
          {
            "id": "recursive",
            "label": "Include subfolders",
            "type": "boolean",
            "option": [
              "--recursive",
              "-r"
            ],
            "sources": [
              "help"
            ]
          },
          {
            "id": "dry_run",
            "label": "Dry run",
            "description": "Show what would happen without uploading.",
            "type": "boolean",
            "option": [
              "--dry-run",
              "-n"
            ],
            "sources": [
              "help"
            ]
          },
          {
            "id": "album",
            "label": "Create albums from folder names",
            "type": "boolean",
            "option": [
              "--album",
              "-a"
            ],
            "sources": [
              "help"
            ]
          },
          {
            "id": "album_name",
            "label": "Album name",
            "type": "string",
            "option": [
              "--album-name",
              "-A"
            ],
            "sources": [
              "help"
            ]
          },
          {
            "id": "ignore",
            "label": "Ignore pattern",
            "type": "string",
            "option": [
              "--ignore",
              "-i"
            ],
            "sources": [
              "help"
            ]
          },
          {
            "id": "skip_hash",
            "label": "Skip hashing",
            "type": "boolean",
            "option": [
              "--skip-hash"
            ],
            "sources": [
              "help"
            ]
          },
          {
            "id": "include_hidden",
            "label": "Include hidden folders",
            "type": "boolean",
            "option": [
              "--include-hidden",
              "-H"
            ],
            "sources": [
              "help"
            ]
          },
          {
            "id": "concurrency",
            "label": "Concurrent uploads",
            "type": "integer",
            "option": [
              "--concurrency",
              "-c"
            ],
            "sources": [
              "help"
            ]
          },
          {
            "id": "json_output",
            "label": "JSON output",
            "type": "boolean",
            "option": [
              "--json-output",
              "-j"
            ],
            "sources": [
              "help"
            ]
          }
        ],
        "task": [
          {
            "id": "upload_dir",
            "label": "Upload a folder",
            "fields": [
              "paths",
              "recursive"
            ],
            "required": [
              "paths"
            ],
            "set": {
              "recursive": [
                true
              ]
            }
          },
          {
            "id": "preview",
            "label": "Preview an upload",
            "fields": [
              "paths",
              "recursive",
              "dry_run"
            ],
            "required": [
              "paths"
            ],
            "set": {
              "recursive": [
                true
              ],
              "dry_run": [
                true
              ]
            }
          }
        ],
        "group": [
          {
            "id": "basic",
            "label": "Basic",
            "fields": [
              "paths",
              "recursive",
              "dry_run",
              "album",
              "album_name"
            ]
          },
          {
            "id": "advanced",
            "label": "Advanced",
            "fields": [
              "ignore",
              "skip_hash",
              "include_hidden",
              "concurrency",
              "json_output"
            ]
          }
        ]
      }
    ]
  }
}
