diff --git a/cli/src/commands/asset.ts b/cli/src/commands/asset.ts index d06b30e984e..edb24e2f671 100644 --- a/cli/src/commands/asset.ts +++ b/cli/src/commands/asset.ts @@ -43,6 +43,7 @@ export interface UploadOptionsDto { concurrency: number; progress?: boolean; watch?: boolean; + jsonOutput?: boolean; } class UploadFile extends File { @@ -65,6 +66,9 @@ class UploadFile extends File { const uploadBatch = async (files: string[], options: UploadOptionsDto) => { const { newFiles, duplicates } = await checkForDuplicates(files, options); const newAssets = await uploadFiles(newFiles, options); + if (options.jsonOutput) { + console.log(JSON.stringify({ newFiles, duplicates, newAssets }, undefined, 4)); + } await updateAlbums([...newAssets, ...duplicates], options); await deleteFiles(newFiles, options); }; diff --git a/cli/src/index.ts b/cli/src/index.ts index 5da4b50722b..a0392186c09 100644 --- a/cli/src/index.ts +++ b/cli/src/index.ts @@ -68,6 +68,11 @@ program .env('IMMICH_UPLOAD_CONCURRENCY') .default(4), ) + .addOption( + new Option('-j, --json-output', 'Output detailed information in json format') + .env('IMMICH_JSON_OUTPUT') + .default(false), + ) .addOption(new Option('--delete', 'Delete local assets after upload').env('IMMICH_DELETE_ASSETS')) .addOption(new Option('--no-progress', 'Hide progress bars').env('IMMICH_PROGRESS_BAR').default(true)) .addOption( diff --git a/docs/docs/features/command-line-interface.md b/docs/docs/features/command-line-interface.md index 1ab79ee3f19..436b499e505 100644 --- a/docs/docs/features/command-line-interface.md +++ b/docs/docs/features/command-line-interface.md @@ -90,19 +90,22 @@ Usage: immich upload [paths...] [options] Upload assets Arguments: -paths One or more paths to assets to be uploaded + paths One or more paths to assets to be uploaded Options: --r, --recursive Recursive (default: false, env: IMMICH_RECURSIVE) --i, --ignore [paths...] Paths to ignore (default: [], 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) ---delete Delete local assets after upload (env: IMMICH_DELETE_ASSETS) ---help display help for command + -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) + --delete Delete local assets after upload (env: IMMICH_DELETE_ASSETS) + --no-progress Hide progress bars (env: IMMICH_PROGRESS_BAR) + --watch Watch for changes and upload automatically (default: false, env: IMMICH_WATCH_CHANGES) + --help display help for command ``` @@ -172,6 +175,16 @@ By default, hidden files are skipped. If you want to include hidden files, use t immich upload --include-hidden --recursive directory/ ``` +You can use the `--json-output` option to get a json printed which includes +three keys: `newFiles`, `duplicates` and `newAssets`. Due to some logging +output you will need to strip the first three lines of output to get the json. +For example to get a list of files that would be uploaded for further +processing: + +```bash +immich upload --dry-run . | tail -n +4 | jq .newFiles[] +``` + ### Obtain the API Key The API key can be obtained in the user setting panel on the web interface.