Skip to content

v4.6.0

Latest

Choose a tag to compare

@jaimetur jaimetur released this 23 Jul 02:52

🗓️ CHANGELOG

Planned Roadmap for the following releases
Changelog for the past releases


Release: v4.6.0

Release Date: 2026-07-21

🚨 Breaking Changes:

  • Separated cloud non-album folders from Takeout master libraries. --foldername-no-albums now defaults to No_Albums and is used only for assets without album association in cloud/local-library workflows. Google and iCloud Takeout now use the new --foldername-all-photos argument (default ALL_PHOTOS) for the master library containing every asset. Renamed --google-no-albums-folders-structure to --google-all-photos-folders-structure (-gaps) and --icloud-no-albums-folders-structure to --icloud-all-photos-folders-structure (-iaps); the removed flags are not accepted. Updated CLI, Web Interface, GUI, TUI, help, and Takeout processing to use the separate contract.
  • Automatic Migration now recognises configured ALL_PHOTOS roots, including PARTNER_SHARED/ALL_PHOTOS, as canonical Takeout source roots independently of No_Albums. Takeouts with no Albums directory therefore migrate their nested master-library assets correctly.
  • Replaced --no-request-user-confirmation with --request-user-confirmation=true|false. Confirmation remains enabled by default; unattended runs must now use --request-user-confirmation=false.
  • Renamed duplicate-asset arguments: --immich-duplicates-algorithm is now --dup-immich-native-algorithm, --immich-duplicates-deletion is now --dup-immich-native-deletion, and --duplicate-asset-keeper is now --dup-asset-keeper. The former long names are no longer accepted.
  • Renamed the managed local-library public contract: --client=local-folder is now --client=local-photos-folder, and -localFolder, --local-folder is now -lPhotosFolder, --local-photos-folder. The former client value and argument are no longer accepted; the guide is now help/10-local-photos-folder.md.

🌟 New Features:

  • Remove Duplicates Assets: Added --remove-duplicates-assets to every cloud-service feature. Synology Photos, Immich Photos, and NextCloud Photos can remove duplicate physical assets using the required --dup-asset-keeper selector; Google Photos exposes the analysis and selection flow but clearly reports that its public Library API cannot delete media items. Immich additionally supports native visual duplicate detection and native metadata-preserving resolution, with PhotoMigrator's exact filename-and-size/manual-merge flow available as a fallback.
  • Google Takeout People Extraction: Added --google-process-people=true|false (enabled by default) to capture people labels from Google Takeout JSON sidecars during processing. It writes reusable takeout_people_metadata.json data keyed by filename and source dates, preserving independent same-name candidates for later date-based matching. The control is available in CLI, Web, GUI, and TUI.
  • People Import for Supported Cloud Targets: Added --import-people for Immich Upload All, Upload Albums, and Automatic Migration when the target is Immich. It consumes Google Takeout people metadata, matches assets by filename and nearest dates, and creates or reuses people/<name> tags without changing face assignments. Execution summaries report people assigned to at least one asset.
  • Immich Burst Stack Control: Added --create-stacks=true|false for Immich Upload All, Upload Albums, and Automatic Migration when the target is Immich. Stack creation and --import-people now default to enabled; Google Takeout keeps --google-process-people enabled by default. The controls are available in CLI, Web, GUI, and TUI.
  • Cloud Album Consolidation: Extended --consolidate-albums-names for Google Photos, Synology Photos, Immich Photos, and NextCloud Photos with compatible date-prefix detection and safe end-truncation detection. Date families retain the most precise compatible date as keeper; truncated names require a common dominant asset year and protect terminal Shared/Share/Public/Público variants from accidental merges with plain names. The detected keeper and merge candidates are previewed with --preview-album-actions, and --request-user-confirmation now confirms the displayed plan before consolidation.
  • Local Photos Folder Management: Added a Local Photos Folder tab after NextCloud Photos. It provides the common cloud-library modules against a managed on-disk library, with physical assets stored under No_Albums and album membership represented without duplicating media files.
  • Made people import controls contextual in every interactive interface. --import-people is shown for Immich Upload All and Upload Albums, and in Automatic Migration only when the selected target is Immich. The control remains available to CLI users as an optional argument.
  • Added Immich-native duplicate detection to Remove Duplicates Assets through --dup-immich-native-algorithm=true|false (default: enabled). The module uses Immich's visually similar duplicate groups by default; native deletion delegates the supported merge to Immich, while disabling it uses PhotoMigrator's guarded manual merge. --dup-asset-keeper adds the better-quality strategy, selected by default with native detection and based on Immich's suggested quality keeper; oldest and newest remain available.
  • Added the optional Immich-only --dup-immich-native-deletion=true|false flag to Remove Duplicates Assets across CLI, Web, TUI, and GUI. It defaults to enabled with --dup-immich-native-algorithm=true, and is disabled when native detection is off; when enabled, PhotoMigrator sends the selected keeper and redundant native duplicate assets to Immich's Alpha resolver, which merges its supported metadata and moves redundant assets to trash. The default without native detection keeps PhotoMigrator's guarded manual merge and permanent deletion path.
  • Added a red Restore Default action below the General Arguments cards in Web, GUI, and TUI. It restores all visible general fields to their defaults, persists the reset state where enabled, and refreshes the command preview without changing feature-specific values.
  • Added hover-revealed jump-to-first-line and jump-to-last-line controls to the Web Interface Output Log Panel. The top control switches to manual review, while the bottom control restores Auto Scroll and returns to the latest output.
  • Added people/tags-first duplicate keeper strategies for every cloud service: more-people/tags-then-better-quality, more-people/tags-then-oldest, and more-people/tags-then-newest. They retain the asset with the largest distinct people count, then the largest distinct tag count, before applying the named tie breaker; the quality variant is available only with Immich native duplicate detection. Immich continues to default to better-quality with native detection and now defaults to more-people/tags-then-newest when native detection is disabled.
  • Refined Google Takeout people import during Immich Automatic Migration. Same-name map entries that cannot be distinguished because their dates are identical or unavailable now merge their labels instead of skipping import; asset logs show only non-empty found/assigned people context; Album Pushed summaries accumulate the labels found and confirmed assigned across all assets in that album, including duplicate assets resolved through the album-association queue; and the final summary reports assets with labels found, assets with labels confirmed assigned, and total unique people assigned.

🚀 Enhancements:

  • Improved Remove Duplicates Assets inventory feedback across cloud backends. Immich uses /api/search/statistics for an exact user-visible total before its determinate 1,000-asset-page bar; Synology reads the native paginated result total for the same purpose; and NextCloud displays the real received-file count while traversing WebDAV without performing a wasteful second recursive scan, because WebDAV exposes no reliable recursive total. All scans now state clearly that large libraries can take several minutes; unsupported statistics endpoints fall back safely to indeterminate progress.
  • Moved --prefer-canonical-album-names and --consolidate-similar-albums out of the Web Interface Configuration > General Arguments panel into the features that implement them: cloud uploads and Automatic Migration.
  • Applied the same contextual placement for --prefer-canonical-album-names and --consolidate-similar-albums in the TUI and desktop GUI: they no longer appear in General Arguments and are available only in cloud upload and Automatic Migration forms.
  • Optimized Immich Remove Duplicates Assets inventory retrieval by omitting person associations from the full paginated scan. Complete relationship metadata is now retrieved only for the small set of duplicate candidates before confirmation and deletion, retaining the face-safety check while avoiding an expensive people join and payload expansion for every library asset.
  • Removed inactive --prefer-canonical-album-names and --consolidate-similar-albums controls from Google Takeout and iCloud Takeout in the Web Interface, TUI, and desktop GUI. The codebase has no Takeout-side reads of these flags; they remain available only where their behavior is implemented.
  • Changed the Google Takeout Web controls for --show-gpth-info, --show-gpth-errors, and --google-process-people from true/false comboboxes to boolean checkboxes, matching the existing TUI and desktop GUI behavior while preserving their default-enabled state.
  • Restored Immich Remove Duplicates Assets inventory pages to 1,000 assets after compatibility testing showed that the target server rejects larger metadata pages.
  • Enhanced Immich Remove Duplicates Assets to preserve assigned people when deleting a duplicate group. The manual merge transfers faces only when every asset has the same Immich checksum and compatible normalized geometry, creating only faces missing from the keeper. Unsafe or unavailable face transfers are reported but no longer block deletion of the rest of the duplicate group.
  • Placed the Immich Remove Duplicates Assets account selector after its native-detection and keeper controls in the Web Interface, GUI, and TUI, and clarified that disabling native detection uses exact filename-and-size groups for cases such as repeated processed-Takeout uploads whose differing EXIF tag values prevented Immich duplicate rejection.
  • Renamed the Immich native duplicate-detection flag to --dup-immich-native-algorithm.
  • Expanded Immich Remove Duplicates Assets metadata preservation and its pre-deletion review. The preview now hydrates every candidate and reports visibility/archived state, capture date, coordinates, stack membership, and face references. Before deletion, the selected keeper preserves the most restrictive visibility (including archived assets), fills missing capture date and geolocation, and reconstructs affected stacks around the keeper; groups whose stack or metadata operations cannot be completed are skipped rather than deleted.
  • Linked the Immich duplicate-resolution controls across CLI, Web, TUI, and GUI: disabling --dup-immich-native-algorithm now disables --dup-immich-native-deletion and selects PhotoMigrator's manual flow; enabling native detection defaults the native-deletion control back to enabled.
  • Hardened the CLI dependency between the Immich duplicate flags: --dup-immich-native-deletion defaults to true with native detection, but an explicitly enabled native-deletion flag is rejected when --dup-immich-native-algorithm=false.
  • Prevented interactive Immich manual duplicate runs from emitting the disabled native-deletion option. With native detection off, Web, GUI, and TUI previews now omit --dup-immich-native-deletion; CLI validation also accepts an explicit false value while continuing to reject native deletion enabled without native detection.
  • Finalized duplicate-review name resolution for albums, tags, and people. It reads cached catalog maps, falls back to legacy /api/people pagination where required, resolves remaining people directly and through the Faces API, and retains a UUID only when Immich has no display name.
  • Reworked the Immich duplicate-review preview into a side-by-side ASCII table. Metadata fields are rows and the keeper plus redundant assets are columns; long values wrap within cells, collections show their count and one name per line, and optional rows appear only when at least one candidate supplies the value.
  • Parallelized the known-page Immich inventory scan used by duplicate analysis with up to 100 concurrent 1,000-asset metadata requests while preserving page order in the resulting inventory. Servers that cannot provide an inventory total keep the existing sequential pagination fallback.
  • Added a per-candidate Size row below ID in the Immich duplicate-review comparison table, so keeper and redundant asset file sizes can be compared directly.
  • Added the effective keeper criterion, such as newest, oldest, or better-quality, to the Immich duplicate-review table's keeper-column header.
  • Disabled per-candidate album-membership reads during the Immich duplicate-review preview to reduce review latency. The Albums row is omitted from that preview; PhotoMigrator's manual deletion flow still loads and merges album memberships before deletion, while Immich's native resolver preserves them server-side.
  • Marked --dup-immich-native-algorithm and --dup-immich-native-deletion as required selections for Immich Remove Duplicates Assets in Web, GUI, and TUI. Active native-detection commands now include both values explicitly; native deletion remains unavailable when detection is disabled.
  • Reclassified startup configuration logging: Optional Flags Provided now lists every effective optional flag owned by the selected feature/module, while the former Optional Flags Default section is now General Arguments and contains the tool-wide shared arguments.
  • Kept feature-specific global modifiers out of unrelated startup summaries: --albums-folders appears only for Upload All, --preview-album-actions only for its supported album modules, and --remove-albums-assets only for supported Remove Albums / Remove All Albums modules.
  • Set the real default for --filter-by-type to all, aligning CLI parsing, General Arguments restoration, and interactive selectors with the documented behavior.
  • Hardened Immich authentication diagnostics with explicit API-key/password and supported-media-type progress messages plus 10-second connection and 30-second read timeouts. Native duplicate-group retrieval now fails explicitly after a 10-second connection or five-minute response timeout instead of waiting indefinitely on an unreported request.
  • Prevented the Web Interface from starting a second module for the same user while another job is running or stopping, avoiding concurrent runs that can interleave output and contend for the same target APIs.
  • Reordered startup global settings so Generated Log File Location is emitted immediately after Project Root.
  • Added post-confirmation progress feedback to Immich Remove Duplicates Assets: manual cleanup reports group-by-group resolution, while native resolution reports duplicate-group preparation and real server-side resolution progress.
  • Added a blank log line before every Remove Duplicates Assets preview group header, improving separation between consecutive asset comparison tables.
  • Hardened Immich native duplicate resolution for partial group access. When Immich reports Not found or no duplicate.delete access for a batch, PhotoMigrator now subdivides only that batch until it isolates the inaccessible groups, keeps the accessible groups in server-side batches, and emits concise final summaries for inaccessible, stale (not_found), and other failed groups.
  • Optimized Immich manual Remove Duplicates Assets cleanup when --dup-immich-native-algorithm=false: metadata merges remain group-safe, but redundant asset IDs are now permanently deleted in 250-asset batches instead of one request per group. A rejected deletion batch is recursively isolated so valid IDs still delete and only the rejected IDs appear in one final warning with Immich's response. Per-group deletion messages are logged at DEBUG; normal output shows the progress bar, final totals, and separate metadata-merge versus deletion timings.
  • Added bounded retry handling for transient Immich stack-merge connection failures during manual duplicate cleanup. A reset or timeout retries the stack read/write with short backoff before the duplicate group is skipped.
  • Reorganized Google Takeout and iCloud Takeout desktop GUI and TUI fields into separate Module Fields and Folder Structure sections. ALL_PHOTOS Folder Name now appears immediately before the corresponding album-folder structure controls, matching the Web Interface layout.
  • Enhanced the Web Interface, desktop GUI, and TUI output panels for every non-Automatic Migration module with live Elapsed Time and Last Updated metadata beneath status. Automatic Migration continues to show those values only in its Live Dashboard. Added a contextual red Restore Default action beneath every feature panel; it resets only the visible feature parameters, including module-specific overrides, without changing General Arguments.
  • Scoped --one-time-password to Synology Photos throughout the Web Interface, GUI, and TUI. It is now available as an optional argument for every Synology module and in Automatic Migration only when either endpoint is Synology.
  • Scoped --albums-folders to Upload All in the Web Interface and TUI for Google Photos, Synology Photos, Immich Photos, and NextCloud Photos. It is no longer displayed as a general argument because the runtime only consumes it in that module.
  • Scoped --remove-albums-assets to Remove Albums and Remove All Albums for the cloud services that implement asset deletion (Synology Photos, Immich Photos, and NextCloud Photos). It no longer appears in General Arguments in Web, GUI, or TUI.
  • Refined Google Takeout people-map collision matching for Immich imports. Album copies sharing a capture timestamp are consolidated, while remaining same-name candidates are ranked only by equivalent date types: EXIF-to-capture time and filesystem-to-modification time. Creation time remains informational and unrelated date types are never compared. Resolution logs now report the selected distance as dd days hh:mm:ss.
  • Made the Web Interface header collapsible. Its title and version remain available in the compact state, while session controls, documentation actions, and the logo can be restored through the persisted header collapse control.
  • Aligned the Web Interface header collapse control with the padded positioning of the other panel controls and reserved its corner space for the Admin and Logout session row.
  • Redirected the Web Interface to Output whenever the current user opens or reloads Features or Configuration while one of their jobs is running or stopping, while preserving direct navigation through the page tabs.
  • Improved Automatic Migration Immich asset logs for --import-people: pushed and duplicate assets now report the labels found and successfully assigned, together with structured album and queue context. Album-association retries now also queue assets with already-known target IDs instead of finalizing them immediately.
  • Added Start Time to the Web Interface Output Panel run metadata, displaying the local HH:MM:SS at which the current execution began before its elapsed-time and last-update indicators.
  • Expanded Immich Google Takeout people-import reporting in Automatic Migration. Ambiguous same-name entries with identical or unavailable comparable dates now merge their labels instead of being skipped; empty per-asset people blocks are omitted; Album Pushed reports that album's found/assigned labels; and the final summary reports distinct assets with labels found, distinct assets with labels assigned, and total unique people assigned.
  • Refined Web Interface Automatic Migration Live Dashboard transfer headers. Pull and Push now retain the explicit backend service type (Local Folder, Google Takeout Folder, iCloud Takeout Folder, or cloud service) and display the local path relative to the app/container root or the cloud account as a compact, truncated parenthesized detail in the same title line.
  • Refined Automatic Migration per-asset queue logging for dynamically populated staging folders. Push workers now atomically reserve the claimed asset and report the same physical staging state as waiting, in flight, and completed/known without changing transfer counters; album assets use Album / Album Queue, while non-album assets use their full input-relative Folder / Folder Queue scope. A duplicate response is recorded as completed for its source queue scope before any later album-association recovery, so moving it to Album_Association_Queue cannot make the displayed denominator decrease.
  • Local-folder Automatic Migration now keeps Live Photo components in one consistent physical-file accounting model. HEIC/JPEG and MOV files are already independently enumerated by local sources, so PhotoMigrator no longer scans the local staging folder for same-stem MOV companions while processing an HEIC/JPEG; this prevents duplicate physical counts in queue states, album summaries, and final transfer totals.
  • Added Total Stacks Created to the final summaries of Immich Automatic Migration, Upload Albums, and Upload All. Upload All aggregates stacks created from both its album and no-album upload phases.
  • Improved Automatic Migration Live Photo logging: a queued MOV companion now reports the HEIC/JPEG it is waiting for and the same album or folder queue state as other pushed assets.
  • Styled Automatic Migration Live Companion log entries as a muted variant of Asset Pushed across the CLI, TUI, desktop dashboard, and Web Interface.
  • Made the Web Interface Automatic Migration Live Dashboard responsive on mobile screens: transfer and queue bars now stack their label, progress bar, and counters vertically, while long panel context and outcome rows wrap inside their cards.
  • Refined date-prefix album consolidation keeper selection: a more specific dated album is retained when at least 95% of its assets fall within that date range; otherwise the compatible broader date prefix remains the keeper.
  • Added visible progress phases after album-family scanning during Consolidate Albums Names: date-prefix families and truncated-name candidates now report their own progress while any required asset metadata is read.
  • Clarified Consolidate Albums Names previews for end-truncated Videos variants: groups that retain the equivalent non-Videos album now display Truncated Name (Grouping Videos) as their match rule.
  • Added redundant-date handling to truncated album-name consolidation. When an album repeats a date already covered by its leading date or year range, the non-redundant name is retained and the preview reports Truncated Name (Redundant Date).
  • Replaced the Consolidate Albums Names preview's Assets Date Considered column with Comments. It now explains the applicable keeper decision, including date-coverage threshold results, video grouping, redundant dates, canonical equivalent names, and shared dominant years.
  • Refined Consolidate Albums Names preview comments to align with each album being merged. A special comment now appears only beside the candidate to which it applies, allowing a group to show multiple independent decisions such as Video Grouping and Redundant Date.
  • Expanded truncated-name preview comments to identify the normal longest-name decision and indicate when the candidates' asset-date metadata was matched to confirm their dominant year.
  • Fixed delayed confirmation prompts under redirected stdout. Do you want to continue? (yes/no): is now flushed before PhotoMigrator waits for input in Web, TUI, and other job-runner executions.
  • Added determinate Consolidating album families progress bars after confirmation in Consolidate Albums Names for Google Photos, Synology Photos, Immich Photos, NextCloud Photos, and Local Folder.
  • Persisted Consolidate Albums Names preview tables to the configured .log file while retaining their immediate console and Web output before confirmation.
  • Relaxed date-prefixed truncated album matching: a valid leading date now counts as one meaningful component, so one-word date-led names such as 2011-04 - Panamá and 2011-04 - Panamá Videos can consolidate after their dominant asset year is confirmed.
  • Extended protected terminal album suffixes for truncated-name consolidation with Private, Privado, and Privada, preventing private variants from merging into otherwise equivalent public/plain albums.
  • Added Selection and Selección to the protected terminal suffixes for truncated-name consolidation, preventing curated-selection albums from merging into their full albums.
  • Refined protected truncated-name suffix matching into semantic categories: Public/Publico/Público/Shared may merge with one another; Private/Privado/Privada/Guay/X may merge with one another; and Selection/Selección remains separate. Different categories never merge.
  • Added Small Album Date Match consolidation across Google Photos, Synology Photos, Immich Photos, NextCloud Photos, and Local Folder. An album with up to three assets can merge into a larger, similarly named album when its complete capture-date range fits inside the keeper range; the preview identifies this asset-date validation for each proposed merge.
  • Added independent, default-enabled Consolidate Albums Names controls for equivalent names, date prefixes, truncated names, and small-album date matches. The switches are available in CLI, Web, GUI, and TUI, and each disabled rule is skipped entirely during analysis.
  • Optimized Immich small-album date matching by reusing AlbumResponseDto.assetCount, startDate, and endDate. Full paginated asset reads are no longer performed for this rule; the album metadata directly determines whether the small range fits the keeper range.
  • Hardened Immich album-family consolidation metadata handling. A keeper retains its own non-empty description, otherwise receives the longest family description; direct sharing is restricted to users common to every album, with viewer selected whenever any source grants that more restrictive role. A public keeper link is removed whenever any source album has no public link. A metadata-reconciliation failure now leaves the family intact instead of removing a redundant album with unpreserved access or description data.
  • Made the small-album threshold configurable through -smallAlbMax, --small-album-max-assets <COUNT> (default 3) for Consolidate Albums Names. The control appears directly below --try-small-albums-grouping in CLI help, Web, GUI, and TUI, is disabled and omitted from interactive commands when that detector is off, and applies consistently across Google Photos, Synology Photos, Immich Photos, NextCloud Photos, and Local Folder.
  • Expanded the Consolidate Albums Names final summary with a successful-family breakdown by matching rule, including equivalent names, date prefixes, truncated-name variants, and small-album date matches.
  • Improved Automatic Migration end-of-run diagnostics for retained work. Before the final summary, PhotoMigrator now lists every pull failure from Pull_Failed/pull_failed_assets.csv with its album and reason, plus every physical file left in Push_Failed, Album_Association_Failed, and pending push, delayed-push, or album-association queues. The final statistics now report the retained record/file count for each temporary subfolder.
  • Made Immich burst auto-stacking idempotent. Automatic Migration and Immich uploads now deduplicate repeated candidate groups discovered through multiple source albums and skip groups whose assets already belong to a remote stack, avoiding redundant /api/stacks requests and their misleading 400 Bad Request warnings. Remaining stack-creation errors now include Immich's response body for direct diagnosis.
  • Added visible final-phase feedback for Immich burst auto-stacking. Automatic Migration and Immich uploads now announce the consecutive-capture stacking pass, show determinate progress by candidate group, and bound each stack-membership and stack-creation request to 30 seconds so a stalled Immich response cannot indefinitely delay the final summary.
  • Completed Local Photos Folder documentation across CLI, Web, GUI, TUI, help, and the README service matrix, which now documents every supported Local Photos Folder module.

🐛 Bug fixes:

  • Fixed Immich people import during Automatic Migration for mapped duplicate assets. PhotoMigrator now resolves the existing Immich asset ID only for assets with Takeout labels, attempts the import, and logs the map load, person count, and resulting import/skip outcome at INFO level.
  • Fixed Automatic Migration desktop GUI flag alignment: conditional --import-people and --one-time-password controls are now added to the shared three-column flags grid and use the remaining slot in the preceding row when available.
  • Fixed Immich Remove Duplicates Assets detection to use the current exifInfo.fileSizeInByte response field, with fallback support for older size fields. Duplicate groups are no longer silently discarded when the legacy fileSize field is absent, and the analysis now reports assets that genuinely lack a usable size.
  • Fixed Immich duplicate-review metadata names for face associations. The preview now resolves the associated person ID rather than the face-record ID and accepts the wrapped /people response used by current Immich versions, so named people are shown instead of unresolved UUIDs. Its metadata dictionary now uses keeper and remove_N labels instead of repeating asset UUIDs already displayed in the proposed deletion list.
  • Fixed Immich duplicate-review completeness by loading each candidate's album memberships through the stable GET /albums?assetId=... API, which is not included in AssetResponseDto. The review now also falls back to GET /people/{id} when the paginated people list omits a referenced person, so album and person names remain visible and the guarded manual merge receives the full album set.
  • Fixed the cloud upload contextual help for --prefer-canonical-album-names to describe uploaded albums consistently in the Web Interface, GUI, and TUI.
  • Fixed the Web Interface Immich Remove Duplicates Assets controls so --dup-immich-native-algorithm and --dup-immich-native-deletion are rendered as required selections, while an explicit false value is accepted and emitted instead of being mistaken for a missing argument.
  • Fixed --request-user-confirmation rendering as a boolean toggle in Web, GUI, and TUI. The foldername-* fields now render as plain text with their effective default names and no longer expose folder-picker controls.
  • Fixed GUI/TUI command generation for omitted boolean values with a true default. They now inherit the parser default instead of incorrectly emitting an explicit false option, preventing unrelated modules from receiving --request-user-confirmation false.
  • Fixed Web Interface log Auto Scroll so large incremental output batches and delayed browser layout scroll events cannot disable it. It now changes to manual review only after an upward vertical wheel or touch scroll, while scrolling down toward the newest log lines keeps it enabled and re-enables it at the tail.
  • Corrected Immich manual duplicate metadata merges to omit the invalid rating=0 value, which Immich rejects with 400 Bad Request. Any remaining metadata-merge failure now includes Immich's response body and the bounded asset-update payload in the warning for direct diagnosis.
  • Fixed Immich manual duplicate metadata merges to send lower-case API visibility values (archive, timeline, hidden, locked) instead of invalid upper-case values. Transient connection resets and timeouts during stack, asset, and tag merge requests now retry with exponential backoff up to five times; validation errors are not retried.
  • Fixed Synology Photos Shared Space assets without albums being omitted from Download All and Automatic Migration when asset filters were active (issue #1173). The global inventory now follows the browser-observed Shared Space timeline request: POST /webapi/entry.cgi/SYNO.FotoTeam.Browse.Item, version=7, method=list, with start_time / end_time filters. Its results are filtered using the configured criteria and merged by stable Synology asset ID with the personal-space inventory before assets already represented by albums are excluded. This retrieves the Shared Space owner_user_id=0 assets that SYNO.Foto.Browse.Item does not expose.
  • Fixed the Web Interface omitting --one-time-password from Synology module commands. The OTP field is now included in the Synology schema as well as Automatic Migration, so an enabled 2FA control is rendered and passed to Download All and every other Synology module.
  • Fixed Synology Web Interface OTP prompts being hidden until a later line of process output arrived. Prompts without a trailing newline, including Enter SYNOLOGY OTP Token:, are now rendered immediately and mark the job input control as waiting. The web output now discards ANSI-coloured empty log prefixes and recognises ANSI-coloured INFO prefixes before replacing tqdm progress entries, preventing blank lines, duplicated INFO labels, and stale nested download progress bars. Synology now preserves shared_with_me scope, normal_share_with_me metadata, and passphrases when a shared album is also returned by the normal album list. True shared albums follow the browser-observed POST SYNO.Foto.Browse.Item, version=7, passphrase-only listing request (without album_id); Shared Space remains on its own Team endpoint and personal-space fallbacks remain available.
  • Fixed Synology Photos Shared Space non-album downloads for issue #1173. Assets enumerated through SYNO.FotoTeam.Browse.Item now retain their Team download provenance and use SYNO.FotoTeam.Download, with a controlled personal-API fallback for DSM variants that reject the Team endpoint. Successful HTTP responses containing JSON/HTML error bodies are rejected and removed instead of being saved as invalid media files.
  • Fixed Synology Photos Download All date filtering for issue #1173. Every personal and Shared Space inventory variant is now locally filtered before merging, preventing v7 fallback responses that ignore the legacy server-side time format from downloading personal assets outside the configured date range.
  • Fixed Immich Remove Duplicates Assets argument consistency across the Web Interface, GUI, and TUI. Disabling --dup-immich-native-algorithm now explicitly forces --dup-immich-native-deletion=false in command previews, execution, and startup logging.
  • Fixed the Web Interface Immich duplicate-keeper selector so better-quality is unavailable when native duplicate detection is disabled, persisted invalid selections are normalized to newest, and enabling native detection resets the editable selection to Immich's recommended better-quality keeper.
  • Removed the redundant Enable selected action label beside Web Interface feature checkboxes.
  • Fixed the Web Interface Automatic Migration Live Dashboard so its Elapsed Time and Last Updated counters refresh every second throughout execution, including periods with no new log or progress snapshot.
  • Fixed Google Takeout people-map collision handling for existing maps. Repeated album sidecars with the same taken_at are now consolidated when the map is loaded as well as when it is created, preventing redundant zero-distance candidates; date-resolution logs now identify the comparison source and display distances as dd days hh:mm:ss.
  • Fixed Automatic Migration Push dashboard denominators in Web and terminal interfaces. Push Assets, Photos, and Videos now use the same physical totals as Pull instead of the current queued count, so their progress bars no longer appear nearly complete while source assets are still being pulled.
  • Hardened Immich duplicate-inventory retrieval against transient connection closures. Each metadata page now has bounded timeouts and retries only connection, timeout, rate-limit, and gateway failures with exponential backoff.
  • Fixed Immich duplicate cleanup safety: duplicate-review metadata must now return the requested asset ID, and groups with missing or repeated asset IDs are skipped before preview, native resolution, or deletion.
  • Fixed the Web Interface Output Panel run metadata for Automatic Migration. Elapsed Time and Last Updated above the Live Dashboard now refresh throughout the running job instead of remaining at their initial values.
  • Fixed the Web Interface theme flash when changing pages. The server now renders the saved user theme on the initial <body> element instead of briefly showing the default Emerald palette before client state is loaded.
  • Fixed local-folder analysis when the selected source is nested below a hidden ancestor such as .web-dev. Folder and file exclusions are now evaluated relative to the selected source root, so the default .* rule still excludes hidden folders inside the source without silently discarding every asset because of an external parent directory.
  • Fixed Automatic Migration physical queue-state counters for assets without a Live Photo companion. Empty companion paths were normalized as a spurious . entry, inflating In flight, Completed, and their denominator by one file per scope.
  • Fixed local-folder to Immich Automatic Migration Live Photo handling. Same-stem HEIC/JPEG and MOV files are now paired deterministically from the source inventory and uploaded through Immich's Live Photo endpoint as one transfer job while all queue, album, and migration counters continue to count both physical files exactly once.
  • Fixed Immich burst auto-stacking in Automatic Migration to retain duplicate photo candidates. Existing Immich asset IDs are now resolved only after filename, capture-time, and size heuristics identify a qualifying burst group, preserving the fast duplicate path for unrelated assets. The final burst evaluation is logged even when it creates no stacks.
  • Fixed Immich stack summary logging: Total Stacks Created is now omitted from Automatic Migration, Upload Albums, and Upload All when --create-stacks=false.
  • Fixed Immich burst auto-stacking to group same-folder photos by consecutive capture times rather than by matching filename stems or compressed file sizes. Timestamped phone filenames and variable image compression no longer prevent valid burst stacks.
  • Fixed Automatic Migration album-association workers losing the per-album statistics references while flushing a batch. Takeout people accounting no longer raises NameError, allowing the worker to complete the target album membership request; exhausted association retries now finalize the asset as an explicit album-association failure instead of leaving an untracked staged item.
  • Fixed partial album consolidation across Google Photos, Synology Photos, Immich Photos, NextCloud Photos, and Local Folder. Assets verified in the keeper are now removed from the redundant album while that album remains available with only its unconfirmed assets.
  • Added physical asset counts beside keeper and redundant album names in Consolidate Albums Names preview tables.
  • Fixed Web Interface confirmation detection for Do you want to continue? (yes/no): prompts. Preview confirmations now appear in the Output Panel and enable the input controls before the user responds.
  • Fixed Immich Automatic Migration with --consolidate-similar-albums bypassing the album metadata policy used by Upload Albums and Upload All. Existing target album families now use the same description preservation, restrictive direct-sharing intersection, public-link restriction, and fail-closed deletion behavior.
  • Fixed Immich Download All with filters failing after the first metadata-search page on Immich v3 (400 Bad Request). The global filtered search now converts string nextPage values to the integer page required by Immich, matching album pagination; incomplete filtered results are discarded rather than cached as a complete selection. Resolves issue #1207.

📚 Documentation:

  • Updated documentation with all changes.
  • Documented Remove Duplicates Assets in the cloud-feature matrix and all cloud-service guides, including keeper selection, confirmation, backend-specific metadata limitations, and deletion safeguards.
  • Documented the Google Takeout people-processing flag, Immich-only people-import visibility, and Synology-only OTP visibility in the relevant interface and feature guides.
  • Documented Google Takeout people-map processing, including its dedicated pre-GPTH Step 4.1 capture phase, Immich --import-people uploads, and the corresponding Automatic Migration behavior and limitations.
  • Added Remove Duplicates Assets and --dup-asset-keeper {oldest, newest} to the CLI syntax, full/short arguments references, and Automatic Migration guide, including its independent-module scope.
  • Added the Google Takeout people-processing and Immich people-import flags to the CLI syntax and both full/short argument references, and updated the Automatic Migration guide with their scope, map lifecycle, duplicate-resolution behavior, and logging details.
  • Updated CLI, cloud-feature, and Docker deployment documentation for --request-user-confirmation=true|false.
  • Documented the Immich API-key permissions required by native duplicate detection and native duplicate resolution, including the additional album/tag permissions needed for complete server-side metadata merging.
  • Documented the --dup-immich-native-deletion trade-off across the Immich guide and CLI argument references: native resolution merges Immich's documented fields and moves assets to trash, while disabling it invokes PhotoMigrator's guarded manual merge with additional capture-date, stack, and safe face/person preservation before permanent deletion.

💾 Download

Download the tool either for Linux, MacOS or Windows (for both x64 and arm64 architectures) or Docker version (platform & architecture independent) as you prefer, directly from following links:

Linux::

Mac OS:

Windows:

Docker Launcher:

Full Changelog: v4.5.0...v4.6.0