Skip to content

Conversation

@bwees
Copy link
Member

@bwees bwees commented Nov 25, 2025

Description

Image editing in Immich 👏 .

Supported operations:

  • Cropping
  • Rotating
  • Mirroring

Editing is not supported on live photos, videos, panoramas, or GIFs at this time.

How Has This Been Tested?

  • Tested on web with OCR and face data for image, bounding boxes remain correct
  • Testing sync/functionality with mobile

Screenshots (if appropriate)

Checklist:

  • I have performed a self-review of my own code
  • I have made corresponding changes to the documentation if applicable
  • I have no unrelated changes in the PR.
  • I have confirmed that any new dependencies are strictly necessary.
  • I have written tests for new code (if applicable)
  • I have followed naming conventions/patterns in the surrounding code
  • All code in src/services/ uses repositories implementations for database calls, filesystem operations, etc.
  • All code in src/repositories/ is pretty basic/simple and does not have any immich specific logic (that belongs in src/services/)

Please describe to which degree, if any, an LLM was used in creating this pull request.

LLM used in test case generation

@bwees bwees force-pushed the feat/editing branch 4 times, most recently from ca37a26 to ad14ef6 Compare December 1, 2025 07:09
@bwees bwees marked this pull request as ready for review December 2, 2025 02:42
@bwees bwees requested review from jrasm91 and mertalev December 2, 2025 02:43
@bwees bwees force-pushed the feat/editing branch 2 times, most recently from a5d28ce to 6f4bacb Compare December 2, 2025 16:57
@bwees bwees force-pushed the feat/editing branch 4 times, most recently from ba0b0ba to c2fb6cb Compare December 4, 2025 14:51
@jrasm91 jrasm91 mentioned this pull request Dec 15, 2025
@bwees bwees added the preview label Dec 16, 2025
@github-actions
Copy link
Contributor

Deploying preview environment to https://pr-24155.preview.internal.immich.build/

thumbnailFile: getAssetFile(files, AssetFileType.Thumbnail),
sidecarFile: getAssetFile(files, AssetFileType.Sidecar),

editedFullsizeFile: getAssetFile(files, AssetFileType.EditedFullSize),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess another convention could be something like previewFileWithEdits

bwees added 18 commits December 23, 2025 12:15
feat: db insertions for edits

feat: get asset edits endpoint

feat: wip apply edits

feat: finish asset files changes

feat: wip

feat: wip

fix: openapi

fix: tests

the failing tests were so scuffed. Simply solved by adding [] to the param list

feat: more wip

feat: more wip

feat: some more tests and fixes

chore: fix default for getting thumbnail and add todo for tests

feat: LRTB validation

chore: code cleanup

chore: more test checks for cleanup

feat: show edit pane

fix: state issues

chore: restructure web editor

feat: restructure edit manager

feat: refactor cropManager

chore: combine all editing

chore: web editing improvements

fix: handling when no crops

fix: openapi enum

chore: more edit refactoring

fix: make image decoding more efficient

chore: more refactoring

fix: getCrop LRTB algorithm

fix: missing await

chore: use relative coordinates for edit

chore: update sql

fix: use resize observer instead of svelte:doc resize hook

chore: simplify quad box generation

fix: light mode styling

chore: refactor to not be a recursive job call

this simplifies the logic and the job only completes once thumbhash and others are properly updated

chore: more refactoring

feat: use affine transforms for most operations

feat: bounding box edit transformation

feat: tests

chore: sql and openapi sync

fix: medium tests

fix: rotated OCR

chore: cleanup transform test

fix: remove rebase issue

fix(server): block edits for live photos, gifs, panoramic photos

fix: openapi enum validation

chore: rename edit endpoint

chore: remove public modifiers

feat: delete endpoint

chore: use === and !== explicitly

fix: require 1 edit for the editAsset endpoint

fix: remove thumbnail edit notification and use on_upload_success instead

fix: primary key on asset edit table

chore: refactor to isPanorama

chore: rename editRepository to assetEditRepository

fix: missing toLowerCase

fix: db migrations

chore: update sql files
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants