Skip to content

fix(ml): read CLIP model configs as UTF-8 - #31075

Merged
mertalev merged 1 commit into
immich-app:mainfrom
justadityaraj:fix/ml-config-encoding
Aug 28, 2026
Merged

mertalev merged 1 commit into
immich-app:mainfrom
justadityaraj:fix/ml-config-encoding

Conversation

@justadityaraj

Copy link
Copy Markdown
Contributor

Description

Fixes #30914

The CLIP encoders load their JSON configs with Path.open() and no encoding, so the text codec comes from locale.getpreferredencoding(). A container started without a locale resolves that to ASCII, and any non-ASCII byte in the config raises UnicodeDecodeError.

ViT-SO400M-16-SigLIP2-384__webli hits this through tokenizer_config.json. The failure is quiet: only the textual encoder loads those files, so visual embedding keeps working, /ping stays healthy and the container stays Ready while every smart-search request returns 500.

The issue names the three reads in clip/textual.py. clip/visual.py loads config.json and preprocess_cfg.json the same way from the same model directories, so all five now pass encoding="utf-8". Nothing else in the config-loading path changes — these files are UTF-8 JSON as published.

I left sessions/rknn/rknnpool.py alone: it reads /proc/device-tree/compatible, which is not a model config and has its own error handling.

How Has This Been Tested?

  • New TestCLIP::test_reads_model_configs_as_utf8 writes non-ASCII configs for both encoders and reads them with Path.open defaulting to ASCII, standing in for the unset-locale container
  • It fails on main with UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 and passes with the change
  • pytest test_main.py: 102 passed, 3 skipped
  • ruff check and ruff format --check clean

Checklist:

  • I have carefully read CONTRIBUTING.md
  • 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.

An LLM assisted with locating the sibling reads in the visual encoder and drafting the test. The decision on scope and the final code were mine, and I ran the suite and the linters locally.

The CLIP encoders load their model, tokenizer and preprocessing configs
with Path.open() and no encoding, so the text codec comes from the locale.
A container with no locale set resolves that to ASCII, and any non-ASCII
byte in the config then raises UnicodeDecodeError.

ViT-SO400M-16-SigLIP2-384__webli hits this: its tokenizer_config.json
carries non-ASCII bytes, so every smart search returns 500 while visual
embedding keeps working and the health check stays green.

The visual encoder reads its configs the same way, so both are fixed.
@mertalev
mertalev merged commit c1a88dd into immich-app:main Aug 28, 2026
85 of 87 checks passed
@immich-push-o-matic

immich-push-o-matic Bot commented Aug 31, 2026 •

Copy link
Copy Markdown
Contributor

Backport-action backported this pull request in workflow run 33410015139.

Target Status
release/v3.2 ✅ Created #31152

immich-push-o-matic Bot added a commit that referenced this pull request Aug 31, 2026
fix(ml): read CLIP model configs as UTF-8 (#31075)

(cherry picked from commit c1a88dd)

Co-authored-by: Aditya Raj Singh <[email protected]>
nemerytamimi added a commit to nemerytamimi/immich that referenced this pull request Sep 1, 2026
* fix: don't swallow fetch errors (immich-app#30496)

* fix: thumbnail generation for specific SVGs (immich-app#30908)

* chore(deps): update ghcr.io/jdx/mise docker tag to v2026.8.12 (immich-app#30985)

* fix(deps): update typescript-projects (immich-app#30990)

Co-authored-by: Daniel Dietzler <[email protected]>

* chore(deps): update docker.io/valkey/valkey:9 docker digest to 70739f8 (immich-app#30980)

* fix(mobile): aspect ratio change (immich-app#30939)

* fix(mobile): aspect ratio change

* chore: explain the change

* feat(mobile): show asset owner in asset details (immich-app#29302)

* feat(mobile): show asset owner in asset details

* refactor(mobile): fetch asset owner from local DB instead of API

* cleanup

* review changes

---------

Co-authored-by: shenlong-tanwen <[email protected]>

* fix: throw a typed error on malformed api responses (immich-app#31006)

* fix: throw a typed error on malformed api responses

* fix: drop response body parse check

* fix(web): keep json response validation when overriding fetch (immich-app#31008)

* fix(cli): report malformed api responses (immich-app#31007)

* refactor(ml): direct ocr processing (immich-app#31016)

* feat(mobile): map asset number (immich-app#28911)

* feat(mobile): map asset number

* chore: use totalAssets from service

* refactor: separate widget

* fix: async dispose

* chore: i18n

* chore: add back old i18n key

* bring back reactivity

---------

Co-authored-by: shenlong-tanwen <[email protected]>

* chore: bump sql-tools (immich-app#31000)

* fix(server): point the migrations mise task at sql-tools (immich-app#30996)

* feat(server): document and guard migration ORDER maintenance (immich-app#30997)

feat(server): add a migrations ORDER manifest

* feat: verify migration ORDER on every PR (immich-app#30998)

* chore(deps): update dependency pillow to v12.3.0 [security] (immich-app#30084)

* chore(deps): update dependency pydantic-settings to v2.14.2 [security] (immich-app#29252)

* chore(mobile): remove Drift* prefixes from classes and variables (immich-app#31038)

* chore(mobile): remove Drift* prefixes from classes and variables

* Remove *Drift* from related mocks

* feat: only move floating docker tags for the newest release (immich-app#31030)

* chore(deps): update dependency github:extism/js-pdk to v1.7.0 (immich-app#30987)

* chore(deps): update grafana/grafana docker tag to v12.4.9-ubuntu (immich-app#30986)

* chore(deps): update prom/prometheus docker digest to 5ce7540 (immich-app#30981)

* chore(deps): update dependency opentofu to v1.12.6 (immich-app#30984)

* fix(web): restore timeline scroll when the asset id cannot be resolved (immich-app#30916)

Co-authored-by: Daniel Dietzler <[email protected]>
Co-authored-by: Daniel Dietzler <[email protected]>

* chore: bump openapi-generator version to v7.25 (immich-app#30995)

* feat: split release preparation from drafting (immich-app#31024)

* feat: gate release publishing behind an approval (immich-app#31025)

* feat: cut releases from release branches (immich-app#31033)

* feat: backport pull requests to release branches (immich-app#31035)

* fix(web): do not play memory video if the `MemoryVideoViewer` element is not visible (immich-app#30947)

* feat: allow users to re-run facial recognition for their group (immich-app#30965)

* fix: only run backport for labelled pull requests (immich-app#31052)

* fix(web): preserve slideshow pause state when viewing video slides (immich-app#30278)

Co-authored-by: priyanshuANDcoad <[email protected]>

* chore(deps): update ghcr.io/immich-app/base-server-dev docker tag to v202608251107 (immich-app#31054)

* fix: draggable Immich logo (immich-app#31055)

* fix(server): kill pg_dump when a backup fails so it stops holding table locks (immich-app#30851)

* fix(server): kill the child process when a spawned duplex stream is destroyed

A failed database backup left pg_dump running. The stream was destroyed but
the child was not, so the dump sat idle in transaction holding AccessShareLock
on every table until someone terminated it by hand. One report had it survive
five days and block DDL from another application on the same Postgres.

Destroying the duplex now kills the child, which also covers pipeline()
tearing every stream down when one of them fails.

The backup service additionally holds references to the streams it spawns so
the error path can destroy them. createWriteStream can throw before pipeline()
takes ownership, which is how the reported ENOENT on an unmounted backup volume
left nothing referencing the running pg_dump.

* chore(server): drop the explanatory comments from the backup teardown fix

Requested in review. The reasoning lives in the commit message and the PR
body, which is where it belongs.

* fix(web): misleading toast notification  (immich-app#30976)

* Added the proper toast for each scenario in the if/else statement instead of only having toastManager.primary() for all scenarios.

* Created a test file for album.service.ts.

* chore: cleanup

---------

Co-authored-by: Daniel Dietzler <[email protected]>

* fix(web): map (immich-app#31056)

* fix(web): map without set start/end dates

* fix(web): invalid timeline map options

* docs: update remote-machine-learning.md (immich-app#28728)

Update remote-machine-learning.md

To include the default URL, should someone need it (as the default entry is not easily recreated otherwise).

* fix: external library statistics for excluded assets (immich-app#28462)

Fix external library statistics for excluded assets

* feat: same-second photos now sub-sort by filename (immich-app#29528)

* Update sorting

Updates the sorting to sort
1. First by timeCreatedAt, but then
2. By filename.

* Push tsts

* Sync SQL

* Formatting fixes

---------

Co-authored-by: Daniel Dietzler <[email protected]>

* feat(web): view assets in map viewport (immich-app#27492)

* feat(server): new search API (immich-app#30179)

* fix: ios map settings sheet (immich-app#31060)

fix: ios map settings

Co-authored-by: shenlong-tanwen <[email protected]>

* chore(web): update translations (immich-app#30296)

Translate-URL: https://hosted.weblate.org/projects/immich/immich/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/be/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/bg/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/bn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ca/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/cs/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/de/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/de_CH/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/en_GB/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/eo/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/es/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/et/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/eu/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fa/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ga/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/gl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/hu/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/id/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/it/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ja/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/km/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/kn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ko/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lt/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/lv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ml/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/mn/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ms/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nb_NO/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ne/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt_BR/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ro/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ru/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sq/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sv/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/th/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/tl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/tr/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/uk/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/vi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/yue_Hant/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/zh_Hant/
Translation: Immich/immich

Co-authored-by: 4liceD <[email protected]>
Co-authored-by: 4liceD <[email protected]>
Co-authored-by: Adam Havránek <[email protected]>
Co-authored-by: Aindriú Mac Giolla Eoin <[email protected]>
Co-authored-by: Akhil Raj <[email protected]>
Co-authored-by: Arco <[email protected]>
Co-authored-by: Ardev Prisec <[email protected]>
Co-authored-by: Arif Budiman <[email protected]>
Co-authored-by: Arkaitz Ortega <[email protected]>
Co-authored-by: Arnie97 <[email protected]>
Co-authored-by: Arseniy <[email protected]>
Co-authored-by: Azharul Haque <[email protected]>
Co-authored-by: Bat-Uyanga Batdelger <[email protected]>
Co-authored-by: Brady87 <[email protected]>
Co-authored-by: Brian <[email protected]>
Co-authored-by: Bruno Silva <[email protected]>
Co-authored-by: Colin <[email protected]>
Co-authored-by: CoolAEW <[email protected]>
Co-authored-by: Denis Pacquier <[email protected]>
Co-authored-by: DevServs <[email protected]>
Co-authored-by: Eduard Ereza Martínez <[email protected]>
Co-authored-by: Emil Warelius <[email protected]>
Co-authored-by: Fjuro <[email protected]>
Co-authored-by: Frank Paul Silye <[email protected]>
Co-authored-by: HackingAll <[email protected]>
Co-authored-by: Hans Cats <[email protected]>
Co-authored-by: Happy <[email protected]>
Co-authored-by: Henry Wong <[email protected]>
Co-authored-by: Hurricane_32 <[email protected]>
Co-authored-by: Håkon Antonsen <[email protected]>
Co-authored-by: Hồ Nhất Duy <[email protected]>
Co-authored-by: Indrek Haav <[email protected]>
Co-authored-by: Ivan Dimitrov <[email protected]>
Co-authored-by: Izoret <[email protected]>
Co-authored-by: Jonatan Nyberg <[email protected]>
Co-authored-by: Jozef Gaal <[email protected]>
Co-authored-by: Kanchnak Khorn <[email protected]>
Co-authored-by: Klenner Martins Barros <[email protected]>
Co-authored-by: Leo Bottaro <[email protected]>
Co-authored-by: Li-Sheng Chou <[email protected]>
Co-authored-by: Linas Samuchovas <[email protected]>
Co-authored-by: Liviu Roman <[email protected]>
Co-authored-by: Lucas Pinto <[email protected]>
Co-authored-by: Luis Fernando Illapa <[email protected]>
Co-authored-by: Marco C. <[email protected]>
Co-authored-by: Matjaž T. <[email protected]>
Co-authored-by: Michal Šmahel <[email protected]>
Co-authored-by: Mārtiņš Bruņenieks <[email protected]>
Co-authored-by: Nagy Krisztián <[email protected]>
Co-authored-by: Natale Daniele Musumeci <[email protected]>
Co-authored-by: Nicola Bortoletto <[email protected]>
Co-authored-by: Olaf Nielsen <[email protected]>
Co-authored-by: Oğuz Ersen <[email protected]>
Co-authored-by: PIRANY <[email protected]>
Co-authored-by: PPNplus <[email protected]>
Co-authored-by: PalmyreB <[email protected]>
Co-authored-by: Pavel Borecki <[email protected]>
Co-authored-by: Pavel Miniutka <[email protected]>
Co-authored-by: Radoslav <[email protected]>
Co-authored-by: Shawn <[email protected]>
Co-authored-by: Shayan <[email protected]>
Co-authored-by: Simone Ognibene <[email protected]>
Co-authored-by: Skanda <[email protected]>
Co-authored-by: Syahmi Azhar <[email protected]>
Co-authored-by: Sylvain Pichon <[email protected]>
Co-authored-by: Tacyd <[email protected]>
Co-authored-by: Thiago S. Marcelino <[email protected]>
Co-authored-by: Tim Morley <[email protected]>
Co-authored-by: Timon Fiedler <[email protected]>
Co-authored-by: Tom Haelbich <[email protected]>
Co-authored-by: Tomislav Renić <[email protected]>
Co-authored-by: User 123456789 <[email protected]>
Co-authored-by: Usinouv <[email protected]>
Co-authored-by: Yoshi <[email protected]>
Co-authored-by: Yusaku Mizobuchi <[email protected]>
Co-authored-by: Zadkiel AHARONIAN <[email protected]>
Co-authored-by: bittin1ddc447d824349b2 <[email protected]>
Co-authored-by: deva <[email protected]>
Co-authored-by: hunnguye <[email protected]>
Co-authored-by: lanew <[email protected]>
Co-authored-by: muziqaz <[email protected]>
Co-authored-by: noob translator <[email protected]>
Co-authored-by: reducedradius <[email protected]>
Co-authored-by: rubes <[email protected]>
Co-authored-by: santhosh kumar <[email protected]>
Co-authored-by: tikg <[email protected]>
Co-authored-by: tulioveneno <[email protected]>
Co-authored-by: waclaw66 <[email protected]>
Co-authored-by: zurachu <[email protected]>
Co-authored-by: 정동걸 <[email protected]>

* fix: check out the branch tip when preparing a release (immich-app#31061)

* chore: version v3.2.0-rc.0

* fix: build release branch images instead of re-tagging main (immich-app#31063)

* fix: run codeql and weblate checks on release branches (immich-app#31065)

* fix: avoid a concurrency deadlock when drafting a release (immich-app#31069)

* chore: drop backport label description (immich-app#31062)

* chore: drop backport description header (immich-app#31067)

* fix(ml): read CLIP model configs as UTF-8 (immich-app#31075)

* fix(web): face editor coordinates on a not-yet-loaded video (immich-app#31083)

* fix(e2e): wait out the duplicate #asset-grid during navigation (immich-app#31088)

* fix(mobile): handle transient loading states for map timelines (immich-app#29735)

* fix(mobile): handle transient loading states for map timelines

* fix(mobile): handle transient loading states for map timelines

* Add support for new method

* Rewrote map options notifier to be more Riverpody

* fix: generate release notes from the previous release on the line (immich-app#31080)

* chore(deps): update base-image to v202608300913 (immich-app#31128)

* chore: tune map icon size (immich-app#31108)

* fix(mobile): keep the original filename when sharing downloaded assets (immich-app#30267)

* fix(mobile): keep the original filename when sharing downloaded assets

* use ordinal suffixes for duplicate share filenames

* rename display name maps to totals and duplicates seen

* drop the display name totals map and keep the first copy name clean

* fold the ordinal suffix into the share display name derivation

* resolve share names after download and test through the public flow

* use the renamed store repository in the share tests

* add docstrings to the share file helpers

* simplify the share name resolver to a single set

* note the share_plus cache folder behavior on the resolver

* drop the version pin from the resolver comment

* pin the share_plus version in the resolver comment

* undo the accidental reformat, keep the version pin

* explain the test harness and cut the teardown and wait noise

* say why the storage is stubbed, drop the platform override and busy wait for the share cleanup

* spy on the cleanup in the share tests instead of waiting for it

* fix(mobile): refresh server info when the websocket connects (immich-app#31144)

refresh the server features and config when the websocket connects

* fix: do not move faces of users other than the current owner (immich-app#31145)

* fix(server): allow an empty assetIds array when creating an album shared link (immich-app#31098)

* fix: Build SDK in dev container (immich-app#31096)

* fix(web): interaction with some filter elements closes the search panel (immich-app#31107)

* fix: open an announcement discussion for each release line (immich-app#31101)

---------

Co-authored-by: bo0tzz <[email protected]>
Co-authored-by: Daniel Dietzler <[email protected]>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <[email protected]>
Co-authored-by: Damiano Ferrari <[email protected]>
Co-authored-by: Lauritz Tieste <[email protected]>
Co-authored-by: shenlong-tanwen <[email protected]>
Co-authored-by: Mert <[email protected]>
Co-authored-by: Yaros <[email protected]>
Co-authored-by: Jason Rasmussen <[email protected]>
Co-authored-by: Adam Gastineau <[email protected]>
Co-authored-by: thejeff77 <[email protected]>
Co-authored-by: Timon <[email protected]>
Co-authored-by: Zlendy <[email protected]>
Co-authored-by: Priyanshu <[email protected]>
Co-authored-by: priyanshuANDcoad <[email protected]>
Co-authored-by: Aditya Raj Singh <[email protected]>
Co-authored-by: brn-lin <[email protected]>
Co-authored-by: Aviatorpaal <[email protected]>
Co-authored-by: Mimi <[email protected]>
Co-authored-by: andy.mp3 <[email protected]>
Co-authored-by: rickytrevor <[email protected]>
Co-authored-by: shenlong <[email protected]>
Co-authored-by: Weblate (bot) <[email protected]>
Co-authored-by: 4liceD <[email protected]>
Co-authored-by: 4liceD <[email protected]>
Co-authored-by: Adam Havránek <[email protected]>
Co-authored-by: Aindriú Mac Giolla Eoin <[email protected]>
Co-authored-by: Akhil Raj <[email protected]>
Co-authored-by: Arco <[email protected]>
Co-authored-by: Ardev Prisec <[email protected]>
Co-authored-by: Arif Budiman <[email protected]>
Co-authored-by: Arkaitz Ortega <[email protected]>
Co-authored-by: Arnie97 <[email protected]>
Co-authored-by: Arseniy <[email protected]>
Co-authored-by: Azharul Haque <[email protected]>
Co-authored-by: Bat-Uyanga Batdelger <[email protected]>
Co-authored-by: Brady87 <[email protected]>
Co-authored-by: Brian <[email protected]>
Co-authored-by: Bruno Silva <[email protected]>
Co-authored-by: Colin <[email protected]>
Co-authored-by: CoolAEW <[email protected]>
Co-authored-by: Denis Pacquier <[email protected]>
Co-authored-by: DevServs <[email protected]>
Co-authored-by: Eduard Ereza Martínez <[email protected]>
Co-authored-by: Emil Warelius <[email protected]>
Co-authored-by: Fjuro <[email protected]>
Co-authored-by: Frank Paul Silye <[email protected]>
Co-authored-by: HackingAll <[email protected]>
Co-authored-by: Hans Cats <[email protected]>
Co-authored-by: Happy <[email protected]>
Co-authored-by: Henry Wong <[email protected]>
Co-authored-by: Hurricane_32 <[email protected]>
Co-authored-by: Håkon Antonsen <[email protected]>
Co-authored-by: Hồ Nhất Duy <[email protected]>
Co-authored-by: Indrek Haav <[email protected]>
Co-authored-by: Ivan Dimitrov <[email protected]>
Co-authored-by: Izoret <[email protected]>
Co-authored-by: Jonatan Nyberg <[email protected]>
Co-authored-by: Jozef Gaal <[email protected]>
Co-authored-by: Kanchnak Khorn <[email protected]>
Co-authored-by: Klenner Martins Barros <[email protected]>
Co-authored-by: Leo Bottaro <[email protected]>
Co-authored-by: Li-Sheng Chou <[email protected]>
Co-authored-by: Linas Samuchovas <[email protected]>
Co-authored-by: Liviu Roman <[email protected]>
Co-authored-by: Lucas Pinto <[email protected]>
Co-authored-by: Luis Fernando Illapa <[email protected]>
Co-authored-by: Marco C. <[email protected]>
Co-authored-by: Matjaž T. <[email protected]>
Co-authored-by: Michal Šmahel <[email protected]>
Co-authored-by: Mārtiņš Bruņenieks <[email protected]>
Co-authored-by: Nagy Krisztián <[email protected]>
Co-authored-by: Natale Daniele Musumeci <[email protected]>
Co-authored-by: Nicola Bortoletto <[email protected]>
Co-authored-by: Olaf Nielsen <[email protected]>
Co-authored-by: Oğuz Ersen <[email protected]>
Co-authored-by: PIRANY <[email protected]>
Co-authored-by: PPNplus <[email protected]>
Co-authored-by: PalmyreB <[email protected]>
Co-authored-by: Pavel Borecki <[email protected]>
Co-authored-by: Pavel Miniutka <[email protected]>
Co-authored-by: Radoslav <[email protected]>
Co-authored-by: Shawn <[email protected]>
Co-authored-by: Shayan <[email protected]>
Co-authored-by: Simone Ognibene <[email protected]>
Co-authored-by: Skanda <[email protected]>
Co-authored-by: Syahmi Azhar <[email protected]>
Co-authored-by: Sylvain Pichon <[email protected]>
Co-authored-by: Tacyd <[email protected]>
Co-authored-by: Thiago S. Marcelino <[email protected]>
Co-authored-by: Tim Morley <[email protected]>
Co-authored-by: Timon Fiedler <[email protected]>
Co-authored-by: Tom Haelbich <[email protected]>
Co-authored-by: Tomislav Renić <[email protected]>
Co-authored-by: User 123456789 <[email protected]>
Co-authored-by: Usinouv <[email protected]>
Co-authored-by: Yoshi <[email protected]>
Co-authored-by: Yusaku Mizobuchi <[email protected]>
Co-authored-by: Zadkiel AHARONIAN <[email protected]>
Co-authored-by: bittin1ddc447d824349b2 <[email protected]>
Co-authored-by: deva <[email protected]>
Co-authored-by: hunnguye <[email protected]>
Co-authored-by: lanew <[email protected]>
Co-authored-by: muziqaz <[email protected]>
Co-authored-by: noob translator <[email protected]>
Co-authored-by: reducedradius <[email protected]>
Co-authored-by: rubes <[email protected]>
Co-authored-by: santhosh kumar <[email protected]>
Co-authored-by: tikg <[email protected]>
Co-authored-by: tulioveneno <[email protected]>
Co-authored-by: waclaw66 <[email protected]>
Co-authored-by: zurachu <[email protected]>
Co-authored-by: 정동걸 <[email protected]>
Co-authored-by: immich-push-o-matic[bot] <179150890+immich-push-o-matic[bot]@users.noreply.github.com>
Co-authored-by: Alex <[email protected]>
Co-authored-by: Santo Shakil <[email protected]>
Co-authored-by: Ufuk <[email protected]>
Co-authored-by: Ray <[email protected]>
Co-authored-by: Nemer Tamimi <[email protected]>
Co-authored-by: Claude Opus 5 <[email protected]>
nemerytamimi added a commit to nemerytamimi/immich that referenced this pull request Sep 11, 2026
* fix: run codeql and weblate checks on release branches (immich-app#31066)

fix: run codeql and weblate checks on release branches (immich-app#31065)

(cherry picked from commit bbf201d)

Co-authored-by: bo0tzz <[email protected]>

* fix: build release branch images instead of re-tagging main (immich-app#31064)

fix: build release branch images instead of re-tagging main (immich-app#31063)

(cherry picked from commit 5baf181)

Co-authored-by: bo0tzz <[email protected]>

* fix: avoid a concurrency deadlock when drafting a release (immich-app#31070)

fix: avoid a concurrency deadlock when drafting a release (immich-app#31069)

(cherry picked from commit b912dcf)

Co-authored-by: bo0tzz <[email protected]>

* chore: version v3.2.0-rc.1

* fix(web): face editor coordinates on a not-yet-loaded video (immich-app#31085)

fix(web): face editor coordinates on a not-yet-loaded video (immich-app#31083)

(cherry picked from commit 1a8fcf1)

Co-authored-by: bo0tzz <[email protected]>

* fix: generate release notes from the previous release on the line (immich-app#31094)

fix: generate release notes from the previous release on the line (immich-app#31080)

(cherry picked from commit 469a870)

Co-authored-by: bo0tzz <[email protected]>

* chore(deps): update base-image to v202608300913 (immich-app#31129)

chore(deps): update base-image to v202608300913 (immich-app#31128)

(cherry picked from commit 1fd3d87)

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

* fix: do not move faces of users other than the current owner (immich-app#31149)

fix: do not move faces of users other than the current owner (immich-app#31145)

(cherry picked from commit 0628f8b)

Co-authored-by: Daniel Dietzler <[email protected]>

* fix(server): allow an empty assetIds array when creating an album shared link (immich-app#31151)

fix(server): allow an empty assetIds array when creating an album shared link (immich-app#31098)

(cherry picked from commit 9e5dcc5)

Co-authored-by: Ufuk <[email protected]>

* chore: tune map icon size (immich-app#31150)

chore: tune map icon size (immich-app#31108)

(cherry picked from commit 015e5f2)

Co-authored-by: Alex <[email protected]>

* fix(mobile): keep the original filename when sharing downloaded assets (immich-app#31154)

fix(mobile): keep the original filename when sharing downloaded assets (immich-app#30267)

* fix(mobile): keep the original filename when sharing downloaded assets

* use ordinal suffixes for duplicate share filenames

* rename display name maps to totals and duplicates seen

* drop the display name totals map and keep the first copy name clean

* fold the ordinal suffix into the share display name derivation

* resolve share names after download and test through the public flow

* use the renamed store repository in the share tests

* add docstrings to the share file helpers

* simplify the share name resolver to a single set

* note the share_plus cache folder behavior on the resolver

* drop the version pin from the resolver comment

* pin the share_plus version in the resolver comment

* undo the accidental reformat, keep the version pin

* explain the test harness and cut the teardown and wait noise

* say why the storage is stubbed, drop the platform override and busy wait for the share cleanup

* spy on the cleanup in the share tests instead of waiting for it

(cherry picked from commit 006e7fd)

Co-authored-by: Santo Shakil <[email protected]>

* fix(mobile): handle transient loading states for map timelines (immich-app#31153)

fix(mobile): handle transient loading states for map timelines (immich-app#29735)

* fix(mobile): handle transient loading states for map timelines

* fix(mobile): handle transient loading states for map timelines

* Add support for new method

* Rewrote map options notifier to be more Riverpody

(cherry picked from commit dc813e2)

Co-authored-by: Adam Gastineau <[email protected]>

* fix(web): interaction with some filter elements closes the search panel (immich-app#31160)

fix(web): interaction with some filter elements closes the search panel (immich-app#31107)

(cherry picked from commit 9dead78)

Co-authored-by: Alex <[email protected]>

* fix(ml): read CLIP model configs as UTF-8 (immich-app#31152)

fix(ml): read CLIP model configs as UTF-8 (immich-app#31075)

(cherry picked from commit c1a88dd)

Co-authored-by: Aditya Raj Singh <[email protected]>

* fix(mobile): refresh server info when the websocket connects (immich-app#31155)

fix(mobile): refresh server info when the websocket connects (immich-app#31144)

refresh the server features and config when the websocket connects

(cherry picked from commit c17a119)

Co-authored-by: Santo Shakil <[email protected]>

* fix: open an announcement discussion for each release line (immich-app#31163)

fix: open an announcement discussion for each release line (immich-app#31101)

(cherry picked from commit 5666d57)

Co-authored-by: bo0tzz <[email protected]>

* chore: version v3.2.0-rc.2

* chore(deps): update github-actions (immich-app#31192)

chore(deps): update github-actions (immich-app#31182)


(cherry picked from commit 40e6abc)

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

* fix: add discussions perm to release publish token (immich-app#31193)

fix: add discussions perm to release publish token (immich-app#31167)

(cherry picked from commit 9e1e595)

Co-authored-by: bo0tzz <[email protected]>

* fix(server): never unlink an untracked-file path that an asset now references (immich-app#31194)

fix(server): never unlink an untracked-file path that an asset now references (immich-app#31074)

(cherry picked from commit c1f2756)

Co-authored-by: Aditya Raj Singh <[email protected]>

* fix: fdroid link (immich-app#31221)

fix: fdroid link (immich-app#31219)

(cherry picked from commit a68937c)

Co-authored-by: Jason Rasmussen <[email protected]>

* chore: require number format (immich-app#31226)

chore: require number format (immich-app#31222)

(cherry picked from commit 2c53b76)

Co-authored-by: Jason Rasmussen <[email protected]>

* fix: don't force builds on release-base PRs (immich-app#31231)

fix: don't force builds on release-base PRs (immich-app#31225)

(cherry picked from commit b48266c)

Co-authored-by: bo0tzz <[email protected]>

* fix: incorrect edit's openapi type (immich-app#31233)

fix: incorrect edit's openapi type (immich-app#31218)

* fix: incorrect edit's openapi type

* patch

* remove type changes

(cherry picked from commit fa8a191)

Co-authored-by: Alex <[email protected]>

* fix(web): album date range formatting (immich-app#31238)

fix(web): album date range formatting (immich-app#28564)

(cherry picked from commit da8131d)

Co-authored-by: Mees Frensel <[email protected]>

* fix(mobile): switch to new OpenAPI int in RotateParameters (immich-app#31248)

fix(mobile): switch to new OpenAPI int in RotateParameters (immich-app#31246)

(cherry picked from commit 6d85f20)

Co-authored-by: Adam Gastineau <[email protected]>

* fix: face detection of edited assets (immich-app#31243)

fix: face detection of edited assets (immich-app#31240)

(cherry picked from commit 399217b)

Co-authored-by: Daniel Dietzler <[email protected]>

* chore(mobile): log app resume and pause (immich-app#31224)

chore(mobile): log app resume and pause (immich-app#31207)

(cherry picked from commit 7211efa)

Co-authored-by: Santo Shakil <[email protected]>

* fix(mobile): prevent inner mutability on Freezed classes (immich-app#31251)

fix(mobile): prevent inner mutability on Freezed classes (immich-app#31229)

* fix(mobile): prevent inner mutability on Freezed classes

* Minor fixes

(cherry picked from commit 8e04e6e)

Co-authored-by: Adam Gastineau <[email protected]>

* fix(web): partner sharing timeline (immich-app#31252)

fix(web): partner sharing timeline (immich-app#31241)

* fix(web): prevent websocket assets from  leaking into scoped timelines

* test: add 1 more test case to make sure the changes didnt break the logic

(cherry picked from commit 040ae6b)

Co-authored-by: Yohanes Kirana <[email protected]>

* fix(mobile): refresh the memory lane after resume (immich-app#31260)

fix(mobile): refresh the memory lane after resume (immich-app#31239)

(cherry picked from commit b1a9368)

Co-authored-by: Santo Shakil <[email protected]>

* chore: version v3.2.0-rc.3

* fix: memory page navigation (immich-app#31368)

fix: memory page navigation (immich-app#31334)

(cherry picked from commit d2245c7)

Co-authored-by: Daniel Dietzler <[email protected]>

* fix(server): live photo transcode visibility (immich-app#31374)

fix(server): live photo transcode visibility (immich-app#31319)

* allow live photos to be transcoded on queue trigger

* new gen sql

* add test to check hidden assets are returned

(cherry picked from commit 58fb1ed)

Co-authored-by: Jake Bybee <[email protected]>

* fix(deps): update dependency maplibre-gl to v6 [security] (immich-app#31375)

* BACKPORT-CONFLICT

* fix: pnpm lockfile conflicts

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <[email protected]>

* fix(web): use RTL-friendly layout for people panel buttons (immich-app#31378)

fix(web): use RTL-friendly layout for people panel buttons (immich-app#31266)

(cherry picked from commit 95bfed1)

Co-authored-by: Mees Frensel <[email protected]>

* fix(web): word-wrap long album names (immich-app#31379)

fix(web): word-wrap long album names (immich-app#31265)

(cherry picked from commit d7ae4ae)

Co-authored-by: Mees Frensel <[email protected]>

* fix(mobile): hide negative age (immich-app#31381)

fix(mobile): hide negative age (immich-app#31341)

(cherry picked from commit 9563309)

Co-authored-by: Yaros <[email protected]>

* fix(mobile): make shared link download toggle depend on metadata toggle (immich-app#31382)

fix(mobile): make shared link download toggle depend on metadata toggle (immich-app#31264)


(cherry picked from commit 31943fb)

Co-authored-by: Arthur <[email protected]>
Co-authored-by: Arthur <[email protected]>

* chore: version v3.2.0

---------

Co-authored-by: immich-push-o-matic[bot] <179150890+immich-push-o-matic[bot]@users.noreply.github.com>
Co-authored-by: bo0tzz <[email protected]>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Dietzler <[email protected]>
Co-authored-by: Ufuk <[email protected]>
Co-authored-by: Alex <[email protected]>
Co-authored-by: Santo Shakil <[email protected]>
Co-authored-by: Adam Gastineau <[email protected]>
Co-authored-by: Aditya Raj Singh <[email protected]>
Co-authored-by: Jason Rasmussen <[email protected]>
Co-authored-by: Mees Frensel <[email protected]>
Co-authored-by: Yohanes Kirana <[email protected]>
Co-authored-by: Jake Bybee <[email protected]>
Co-authored-by: Daniel Dietzler <[email protected]>
Co-authored-by: Yaros <[email protected]>
Co-authored-by: Arthur <[email protected]>
Co-authored-by: Arthur <[email protected]>
Co-authored-by: Claude Opus 5 <[email protected]>
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.

ML: text encoder fails with UnicodeDecodeError when tokenizer config contains non-ASCII bytes (json.load without encoding)

3 participants