Skip to content

chore: merge upstream immich-app/immich (2026-03-12)#80

Merged
Deeds67 merged 60 commits intomainfrom
worktree-upstream-merge
Mar 13, 2026
Merged

chore: merge upstream immich-app/immich (2026-03-12)#80
Deeds67 merged 60 commits intomainfrom
worktree-upstream-merge

Conversation

@Deeds67
Copy link
Collaborator

@Deeds67 Deeds67 commented Mar 12, 2026

Summary

Merges 55 upstream commits from immich-app/immich into our fork.

Key upstream changes

Conflicts resolved (28 files)

  • .github/workflows/docker.yml — kept fork's custom GHCR workflow
  • server/src/services/media.service.ts — preserved S3 storage integration (try/finally cleanup), adopted upstream's asset_files table pattern (upsertFile/deleteFiles)
  • server/src/services/metadata.service.ts — preserved S3 local file handling, applied upstream's Sony make/model + type fixes
  • server/src/dtos/person.dto.ts — kept fork's type/species fields, adopted upstream's asDateString wrapper
  • server/test/small.factory.ts — preserved fork factories (partner, session, shared space, person, asset edit, album), merged upstream's structural changes
  • server/src/services/*.spec.ts (11 files) — restored factory imports lost during merge, added type casts for Kysely ShallowDehydrateObject mismatches
  • server/src/repositories/storage-migration.repository.ts — updated to query asset_file table instead of removed encodedVideoPath column
  • Web components (8 files) — merged upstream's progressive loading, zoom features, face tagging; preserved fork's local Logo/LoadingSpinner, S3/editing extensions
  • pnpm-lock.yaml — regenerated from upstream base + fork deps
  • mobile/ (2 files) — adopted upstream's migration v25, video control shadows

Verification

  • Server TypeScript: 0 errors
  • Web TypeScript + Svelte check: 0 errors, 0 warnings
  • Server unit tests: 3314 passed, 0 failed

Test plan

  • CI passes (server tests, web tests, static analysis, OpenAPI check)
  • Verify shared spaces still work (create space, add assets, members)
  • Verify image editing (rotate, crop) still works
  • Verify video transcoding with S3 storage
  • Verify pet detection still appears in person responses

🤖 Generated with Claude Code

uhthomas and others added 30 commits March 5, 2026 17:45
The background of the photo view does not extend below the height of the
viewport, and so the asset details fade in over black with the photo
view, and the standard surface colour scheme of the scaffold for the
rest. This leads to a janky animation. We can't change the background of
the scaffold to black, as it in turn makes the iOS bouncing scroll
physics cut off incorrectly. The best fix is to remove background
decoration from the photo view, and defer to the parent to colour the
background.

Co-authored-by: Alex <alex.tran1502@gmail.com>
* feat(mobile): SyncAssetEditV1

* fix: websocket handling

* fix: server version requirement

* fix: revert pubspec changes
Search results use a different provider than the main timeline, and they
appear appear to have diverged a bit. This means that assets can
sometimes look wrong or different in search compared to the main
timeline or albums.
…cing glide exposure (immich-app#26747)

* feat(android): enhance playback style detection using MIME type

* feat(android): improve playback style detection for GIF and WebP formats

* fix(android): make playback style detection faster

* refactor(android): simplify XMP reading logic for API 29 and below

* update playback style detection documentation

* use DefaultImageHeaderParser instead of all available ones for webp playbackStyle type detection
* fix(mobile): correct local asset dimensions

We are constraining the size of videos so that they play nicely with
hero animations, and don't stretch in weird ways. This however caused a
regression as we are not account for local assets on Android which have
un-oriented dimensions.

* post-orientation width and height in local sync

* migration

* no need to handle it in asset viewer

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
Co-authored-by: Alex <alex.tran1502@gmail.com>
immich-app#26736)

* Fix opus handling as accepted audio codec in transcode policy

Fix the issue when opus is among accepted audio codecs in transcode policy
(which is default) but it still triggers transcoding because the codec name
from ffprobe (opus) does not match `libopus` literal in Immich.

Make a distinction between a codec name and encoder:
- codec name: switch to `opus` as the audio codec name. This matches what ffprobe
returns for a media file with opus audio.
- encoder: continue using the `libopus` encoder in ffmpeg.

* Add unit tests for accepted audio codecs and for libopus encoder

* Add db migration for ffmpeg.targetAudioCodec opus

* backward compatibility

* tweak

* noisy logs

* full mapping

* make check happy

* mark deprecated

* update api

* indexOf

---------

Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
* Enable OpenVINO CPU acceleration in Immich

* Remove unnecessary debug log

* Removing checking for device_ids for openvino since cpu will always be available

* Find OpenVINOExecutionProvider index instead of assuming index 0

* Fix openvino tests

* Fix failing test mock. OpenVINO expects provider options, but cuda provide doesn't so use that for mocked tests.

* Support empty provider options in OrtSessions in which case ONNXRuntime will use its own defaults

* Use OpenVINOExecutionProvider for test_sets_provider_options_kwarg

* fix mock

* simplify

* unused variable

---------

Co-authored-by: Aleksander <pejcic@adobe.com>
Co-authored-by: mertalev <101130780+mertalev@users.noreply.github.com>
…x selectDay selector scoping (immich-app#26776)

fix(e2e): optimize resetDatabase with TRUNCATE and fix selectDay selector scoping
…mich-app#26726)

* fix(migration): restrict trashed asset migration to Android platform

* playbackStyle migration add different log depending on platform
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
It's not being used right now; can always add it back :P
Videos have recently been changed to support zooming, but this can make
the controls in the centre of the screen unergonomic as they will either
stay in the centre when dismissing, or stick to the video when zooming.
Neither is great. We should align the behaviour with other apps which
has the play/pause toggle at the bottom of the screen with the seeker
bar instead.

Co-authored-by: Alex <alex.tran1502@gmail.com>
immich-app#26807)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
The numbers in the backup page are not monospace, and so changes cause
the layout to shift. Using tabular figures (monospace) will prevent
that.

Refs: immich-app#25021
* feat(mobile): use material design 3 slider

The new slider is easier to use, and looks more modern.

* chore: add shadow to button and text for better visibility

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
LeLunZ and others added 21 commits March 11, 2026 12:07
* Add support for showing animated images in AssetViewer with AnimatedImageStreamCompleter

* Add GIF overlay to thumbnail tile for animated assets

* formatting

* require isAnimated parameter in image providers for better asset handling

* feat: refactor AnimatedImageStreamCompleter to use streams for codec loading and initial image handling

* formatting

* add isAnimatedImage property to BaseAsset

* remove ApiService.getRequestHeaders() usage
* use cookiejar

* cookie duping hook

* remove old pref

* handle network switching on logout

* remove bootstrapCookies

* dead code

* fix cast

* use constants

* use new event name

* update api
Co-authored-by: Your Name <brendan.ngo@okendo.io>
Co-authored-by: Daniel Dietzler <mail@ddietzler.dev>
…app#26813)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…h-app#26851)

We recently changed the asset viewer to use a gradient. The circle
button looks out of place now.
fix(web): fix zoom touch event handling and add clarifying comments

- Suppress Safari's synthetic dblclick on double-tap which conflicts with zoom-image's touchstart-based zoom
- Add comment explaining pointer-events-none on zoom transform wrapper
- Add comments for touchAction and overflow style overrides
…mmich-app#26868)

* fix(server): restrict individual shared link asset removal to owners

* make open-api
* refactor: move encoded video to asset files table

* chore: update
…-app#26831)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…erge

# Conflicts:
#	.github/workflows/docker.yml
#	mobile/lib/utils/migration.dart
#	mobile/lib/widgets/asset_viewer/video_controls.dart
#	pnpm-lock.yaml
#	server/src/dtos/person.dto.ts
#	server/src/services/asset-media.service.spec.ts
#	server/src/services/cli.service.spec.ts
#	server/src/services/media.service.ts
#	server/src/services/memory.service.spec.ts
#	server/src/services/metadata.service.ts
#	server/src/services/person.service.spec.ts
#	server/src/services/search.service.spec.ts
#	server/src/services/session.service.spec.ts
#	server/src/services/shared-link.service.spec.ts
#	server/src/services/sync.service.spec.ts
#	server/src/services/user.service.spec.ts
#	server/test/factories/types.ts
#	server/test/small.factory.ts
#	web/src/lib/actions/zoom-image.ts
#	web/src/lib/components/admin-settings/StorageTemplateSettings.svelte
#	web/src/lib/components/asset-viewer/asset-viewer.svelte
#	web/src/lib/components/asset-viewer/editor/transform-tool/crop-area.spec.ts
#	web/src/lib/components/asset-viewer/photo-viewer.svelte
#	web/src/lib/components/assets/thumbnail/video-thumbnail.svelte
#	web/src/lib/components/memory-page/memory-photo-viewer.svelte
#	web/src/lib/components/share-page/individual-shared-viewer.svelte
#	web/src/lib/managers/edit/transform-manager.svelte.ts
#	web/src/lib/services/asset.service.ts
@Deeds67 Deeds67 merged commit d6fa559 into main Mar 13, 2026
32 checks passed
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.