Implement advanced preview/upload using Immich-Go option flags #13

Closed
opened 2026-10-24 14:08:46 +00:00 by jchapman · 4 comments
Owner

There are numerous flags and options with Immich-Go. These should be exposed for end-users to choose in an advanced section. Default options still apply without using "Advanced import"

There are numerous flags and options with Immich-Go. These should be exposed for end-users to choose in an advanced section. Default options still apply without using "Advanced import"
Author
Owner

Starting owner-requested issue #13 after reading #13, #14 and all coordination comments. Scope: typed, allowlisted advanced Immich-Go options; an initially closed, accessible advanced section with interactive controls and explanations; recommended defaults that users can review and confirm; server-side validation for conflicting or incompatible choices; persisted settings shared by preview and import. I will verify the pinned importer options, add focused backend and browser coverage, and document the behavior. Existing safe defaults and held issue #12/PR #19 will be preserved. Work is isolated from running services; no deployment or active upload/task interruption is planned.

Starting owner-requested issue #13 after reading #13, #14 and all coordination comments. Scope: typed, allowlisted advanced Immich-Go options; an initially closed, accessible advanced section with interactive controls and explanations; recommended defaults that users can review and confirm; server-side validation for conflicting or incompatible choices; persisted settings shared by preview and import. I will verify the pinned importer options, add focused backend and browser coverage, and document the behavior. Existing safe defaults and held issue #12/PR #19 will be preserved. Work is isolated from running services; no deployment or active upload/task interruption is planned.
Author
Owner

Implementation findings: the pinned v0.32.0 Google Takeout adapter ignores its media-type flag and applies extension filters before reading JSON. Real-importer regressions exposed both behaviors. Bridge now translates photo/video choices into reviewed extension sets and always preserves JSON/XMP sidecars for included-extension filters. The reviewed allowlist contains explained inclusion, album/tag, type/extension/date and bounded processing controls; unsafe operational flags remain fixed. Grouping/stacking is deliberately excluded because the Takeout command shadows the upload grouping flags and reliable behavior has not been established. All advanced controls start closed; defaults/custom choices require explicit confirmation, edits invalidate confirmation, and each attempt saves a canonical snapshot used for preview/import matching. Focused backend and 320px/browser checks pass. Broader integration, race and security policy validation is in progress. No running service or real library has been touched.

Implementation findings: the pinned v0.32.0 Google Takeout adapter ignores its media-type flag and applies extension filters before reading JSON. Real-importer regressions exposed both behaviors. Bridge now translates photo/video choices into reviewed extension sets and always preserves JSON/XMP sidecars for included-extension filters. The reviewed allowlist contains explained inclusion, album/tag, type/extension/date and bounded processing controls; unsafe operational flags remain fixed. Grouping/stacking is deliberately excluded because the Takeout command shadows the upload grouping flags and reliable behavior has not been established. All advanced controls start closed; defaults/custom choices require explicit confirmation, edits invalidate confirmation, and each attempt saves a canonical snapshot used for preview/import matching. Focused backend and 320px/browser checks pass. Broader integration, race and security policy validation is in progress. No running service or real library has been touched.
Author
Owner

Implemented and published for review in draft PR #23, commit bae39615514f4d0376fdb871f8152c7ee7590b80, based on current main 09085fa. The branch is pushed and the committed checkout is clean. No merge, release-image publication or deployment was performed; this issue remains open for review.

Behavior delivered:

  • An initially closed advanced section with 17 explained interactive controls covering inclusion, albums/tags, media type, extensions, inclusive UTC dates and bounded processing. The existing defaults remain available without opening it and require explicit user confirmation.
  • Browser and server validation of conflicting album/partner/type/extension/date choices. No silent dependent-setting changes. Editing settings clears confirmation, including when another session changes the restored snapshot.
  • Canonical per-attempt settings and a versioned options digest, preserved through reload/history and passed through the app, runner and processor. A real import requires a successful qualifying preview for the same owner, account, collection, verified ZIP receipts and options. Old previews must be rerun.
  • Strict allowlisting and preserved connection/TLS/original/preview protections. Real-importer tests exposed ignored media-type selection and lost JSON under extension filtering; Bridge now expands the reviewed type mappings and preserves sidecars. Grouping/stacking and other unverified/unsafe flags remain excluded, as documented.

Checks actually passed:

  • Full Linux AMD64 backend tests and Go vet with the pinned importer; advanced custom HTTP admission, every setting's preview identity, legacy/ownership/persistence, actual media/extension/date filtering and preview-to-write matching.
  • Focused advanced/API/lifecycle/authorization/diagnostic races, auth/configuration/diagnostics/options/notification race tests and the complete runner race suite.
  • Real Docker processor isolation/cancellation/cleanup; disposable browser/upload-resume/queue/SQLite/settings walkthrough. Test containers, networks and volumes were removed.
  • UI lint/build, focused advanced-option/activity/task-email browser suites, initially closed controls and descriptions, conflicts, normalization, reload, escaped names, active/offline protection, cross-session confirmation invalidation and visually reviewed 320px screenshots.
  • Nine CI policy tests and documentation/workflow/source contracts; npm audit with zero reported advisories; staged and full-history redacted secret scans with no leaks.
  • Fresh final-commit source gosec/govulncheck policy checks: 41 production files, the existing 29 reviewed gosec findings, zero suppressions. Baselines unchanged; passing policy is not a zero-findings claim.

Documentation: advanced options/defaults/logic and flag boundaries, updated import/testing guidance and unchecked installation checks. The existing UI bundle-size advisory remains.

Next step: review PR #23, complete native AMD64/ARM64 Forgejo validation and the aggregate release gate, then coordinate an idle installation of all three matching images and verify a small synthetic preview/import on the actual destination. Run 21 is waiting; no native/full-release pass is claimed. Actual-destination pilot behavior and large-library capacity remain unverified. No running service, active upload/task, real library or email relay was touched. Held #12/PR #19 remain unchanged.

Implemented and published for review in [draft PR #23](https://git.sharedroot.net/jchapman/Immich-Bridge/pulls/23), commit `bae39615514f4d0376fdb871f8152c7ee7590b80`, based on current main `09085fa`. The branch is pushed and the committed checkout is clean. No merge, release-image publication or deployment was performed; this issue remains open for review. Behavior delivered: - An initially closed advanced section with 17 explained interactive controls covering inclusion, albums/tags, media type, extensions, inclusive UTC dates and bounded processing. The existing defaults remain available without opening it and require explicit user confirmation. - Browser and server validation of conflicting album/partner/type/extension/date choices. No silent dependent-setting changes. Editing settings clears confirmation, including when another session changes the restored snapshot. - Canonical per-attempt settings and a versioned options digest, preserved through reload/history and passed through the app, runner and processor. A real import requires a successful qualifying preview for the same owner, account, collection, verified ZIP receipts and options. Old previews must be rerun. - Strict allowlisting and preserved connection/TLS/original/preview protections. Real-importer tests exposed ignored media-type selection and lost JSON under extension filtering; Bridge now expands the reviewed type mappings and preserves sidecars. Grouping/stacking and other unverified/unsafe flags remain excluded, as documented. Checks actually passed: - Full Linux AMD64 backend tests and Go vet with the pinned importer; advanced custom HTTP admission, every setting's preview identity, legacy/ownership/persistence, actual media/extension/date filtering and preview-to-write matching. - Focused advanced/API/lifecycle/authorization/diagnostic races, auth/configuration/diagnostics/options/notification race tests and the complete runner race suite. - Real Docker processor isolation/cancellation/cleanup; disposable browser/upload-resume/queue/SQLite/settings walkthrough. Test containers, networks and volumes were removed. - UI lint/build, focused advanced-option/activity/task-email browser suites, initially closed controls and descriptions, conflicts, normalization, reload, escaped names, active/offline protection, cross-session confirmation invalidation and visually reviewed 320px screenshots. - Nine CI policy tests and documentation/workflow/source contracts; npm audit with zero reported advisories; staged and full-history redacted secret scans with no leaks. - Fresh final-commit source gosec/govulncheck policy checks: 41 production files, the existing 29 reviewed gosec findings, zero suppressions. Baselines unchanged; passing policy is not a zero-findings claim. Documentation: [advanced options/defaults/logic and flag boundaries](https://git.sharedroot.net/jchapman/Immich-Bridge/src/branch/codex/issue-13-advanced-import/docs/advanced-import.md), updated import/testing guidance and unchecked installation checks. The existing UI bundle-size advisory remains. Next step: review PR #23, complete native AMD64/ARM64 Forgejo validation and the aggregate release gate, then coordinate an idle installation of all three matching images and verify a small synthetic preview/import on the actual destination. [Run 21](https://git.sharedroot.net/jchapman/Immich-Bridge/actions/runs/21) is waiting; no native/full-release pass is claimed. Actual-destination pilot behavior and large-library capacity remain unverified. No running service, active upload/task, real library or email relay was touched. Held #12/PR #19 remain unchanged.
Author
Owner

Owner-approved PR #23 is merged into main in 44c36de10d3c4c8a4a72c01750e20bd2e88ab969, preserving feature commit bae39615514f4d0376fdb871f8152c7ee7590b80 and its branch. The owner confirmed documentation and initial code reviews were complete, requested merge, and explicitly authorized closing this issue after the merge.

No conflicts or resolution changes were needed: main was still the original base 09085fa. The remote merge commit has both original parents, and its Git tree a02a51057d9a09bf499ee1610b217ad8f9d663e8 exactly equals the validated feature tree. Existing functionality and the new advanced controls are preserved in the merged source. No force merge, branch deletion or gate change was used.

Validation evidence in comment 338 applies to this identical source: full backend tests/vet with the pinned importer, focused advanced/lifecycle/security and runner races, real Docker isolation/cancellation/cleanup, the disposable browser/upload/queue/SQLite/settings walkthrough, advanced/mobile/activity/email browser checks, source security policies, npm audit and redacted secret scans. During merge, source-tree equality, both-parent ancestry, remote branch identities, clean checkout, diff and documentation/workflow/source contracts were rechecked successfully. No unnecessary code changes or repeat tests were introduced.

Development is complete and this issue is now being closed at the owner's request. This supersedes the earlier instruction to keep it open for review. Source is merged, not deployed or release-image-published. Final-main Forgejo run 22 is waiting; native AMD64/ARM64 validation and the aggregate release gate remain outstanding and are not waived by closure. Actual-destination pilot checks, coordinated idle installation of all three images and large-library capacity remain separate next steps. See the advanced import guide and installation checks.

No running service or active upload/task was interrupted. Held #12/PR #19 remain open and unchanged at dc6003743056822cca9c4e81fc1f436bc5ac8635. No work on #5 was started.

Owner-approved PR #23 is merged into main in `44c36de10d3c4c8a4a72c01750e20bd2e88ab969`, preserving feature commit `bae39615514f4d0376fdb871f8152c7ee7590b80` and its branch. The owner confirmed documentation and initial code reviews were complete, requested merge, and explicitly authorized closing this issue after the merge. No conflicts or resolution changes were needed: main was still the original base `09085fa`. The remote merge commit has both original parents, and its Git tree `a02a51057d9a09bf499ee1610b217ad8f9d663e8` exactly equals the validated feature tree. Existing functionality and the new advanced controls are preserved in the merged source. No force merge, branch deletion or gate change was used. Validation evidence in comment 338 applies to this identical source: full backend tests/vet with the pinned importer, focused advanced/lifecycle/security and runner races, real Docker isolation/cancellation/cleanup, the disposable browser/upload/queue/SQLite/settings walkthrough, advanced/mobile/activity/email browser checks, source security policies, npm audit and redacted secret scans. During merge, source-tree equality, both-parent ancestry, remote branch identities, clean checkout, diff and documentation/workflow/source contracts were rechecked successfully. No unnecessary code changes or repeat tests were introduced. Development is complete and this issue is now being closed at the owner's request. This supersedes the earlier instruction to keep it open for review. Source is merged, not deployed or release-image-published. Final-main [Forgejo run 22](https://git.sharedroot.net/jchapman/Immich-Bridge/actions/runs/22) is waiting; native AMD64/ARM64 validation and the aggregate release gate remain outstanding and are not waived by closure. Actual-destination pilot checks, coordinated idle installation of all three images and large-library capacity remain separate next steps. See the [advanced import guide](https://git.sharedroot.net/jchapman/Immich-Bridge/src/branch/main/docs/advanced-import.md) and [installation checks](https://git.sharedroot.net/jchapman/Immich-Bridge/src/branch/main/docs/deployment.md). No running service or active upload/task was interrupted. Held #12/PR #19 remain open and unchanged at `dc6003743056822cca9c4e81fc1f436bc5ac8635`. No work on #5 was started.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jchapman/Immich-Bridge#13
No description provided.