Skip to content

Immich integration: import the Immich trash as duplicate decisions - #525

Merged
markusressel merged 1 commit into
masterfrom
feature/immich-integration
Oct 31, 2026
Merged

markusressel merged 1 commit into
masterfrom
feature/immich-integration

Conversation

@markusressel

Copy link
Copy Markdown
Owner

Turns Immich's duplicate review into py-image-dedup decisions, via the Immich API (works for any Immich setup, no DB access).

  • Config: immich.url, immich.api_key (secret, asset.read permission; env PY_IMAGE_DEDUP_IMMICH_API_KEY), immich.path_mappings ([{immich: /mnt/photos, local: /data/photos}]).
  • ImmichClient (py_image_dedup/integrations/immich.py): pages through POST /api/search/metadata (withDeleted, trashedAfter), keeps trashed, non-offline assets. Tested against Immich v3.3.5's OpenAPI spec.
  • API: GET /api/integrations/immich, POST /api/integrations/immich/import-trash ({apply}), reusing StateStore.import_discarded_paths from Import decisions from other tools, execute user decisions in dry run #524. Immich errors become HTTP 502 with a readable message.
  • Web UI: an "Immich" card on the dashboard (only when configured) with preview and apply.
  • Docs and tests (client paging/filtering/errors/mapping, API).

🤖 Generated with Claude Code

New immich.url, immich.api_key and immich.path_mappings config. The web UI
dashboard gets an Immich card that previews and applies the import: open groups
where all but one copy are trashed in Immich keep the remaining copy, the daemon
moves the others to the duplicates directory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@markusressel
markusressel merged commit cb60a2d into master Oct 31, 2026
8 checks passed
@markusressel
markusressel deleted the feature/immich-integration branch October 31, 2026 00:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant