fix(server): file uploads for files with extension only filenames - #30024
Merged
danieldietzler merged 7 commits intoJul 21, 2026
Conversation
danieldietzler
approved these changes
Jul 20, 2026
jrasm91
reviewed
Jul 21, 2026
jrasm91
left a comment
Member
There was a problem hiding this comment.
Please add tests that demonstrate what was broken and how it is now fixed.
Contributor
Author
Sure thing. I'm just not familiar with the testing conventions for this part of the codebase yet, so I'm not sure where to add tests for this bug fix. Is there an existing test file or test you'd recommend I follow? |
… during asset upload
rename filename parameter to path Co-authored-by: Daniel Dietzler <36593685+danieldietzler@users.noreply.github.com>
danieldietzler
force-pushed
the
fix-dotfile-extension
branch
from
July 21, 2026 11:45
c66f714 to
525a954
Compare
danieldietzler
force-pushed
the
fix-dotfile-extension
branch
from
July 21, 2026 11:47
525a954 to
f226137
Compare
Member
|
I took the liberty of rebasing this and adding a test. If you're interested; I simply added a small unit test for the asset-media service (in |
danieldietzler
enabled auto-merge (squash)
July 21, 2026 11:48
Deeds67
added a commit
to open-noodle/gallery
that referenced
this pull request
Jul 22, 2026
Upstream immich-app#30092 bumped eslint-plugin-unicorn to v72 and swept its own files, disabling the noisy new unicorn/prefer-simple-condition-first rule in the server, web and cli configs. Fork-only files were not in that sweep, so the zero-error gate failed on five of them: - web timeline-bucket getMonthBucket: unicorn/prefer-split-limit (the result is destructured to two elements, so split('-', 2) is equivalent) - the #813 Recently Added filter specs: unicorn/prefer-string-repeat on the three-space blank-input fixtures Also drops the now-unused `extname` import in asset-media.service.ts. Upstream immich-app#30024 replaced its only call site with getFilenameExtension(); tsc does not flag it but eslint --max-warnings 0 does. Verified: server lint/tsc/tsc6 exit 0, web lint 0 errors, and the two touched spec files pass (44 tests). The 8 remaining web warnings are unused eslint-disable directives in upstream-owned files, left for upstream.
Deeds67
added a commit
to open-noodle/gallery
that referenced
this pull request
Jul 22, 2026
Upstream immich-app#30092 bumped eslint-plugin-unicorn to v72 and swept its own files, disabling the noisy new unicorn/prefer-simple-condition-first rule in the server, web and cli configs. Fork-only files were not in that sweep, so the zero-error gate failed on five of them: - web timeline-bucket getMonthBucket: unicorn/prefer-split-limit (the result is destructured to two elements, so split('-', 2) is equivalent) - the #813 Recently Added filter specs: unicorn/prefer-string-repeat on the three-space blank-input fixtures Also drops the now-unused `extname` import in asset-media.service.ts. Upstream immich-app#30024 replaced its only call site with getFilenameExtension(); tsc does not flag it but eslint --max-warnings 0 does. Verified: server lint/tsc/tsc6 exit 0, web lint 0 errors, and the two touched spec files pass (44 tests). The 8 remaining web warnings are unused eslint-disable directives in upstream-owned files, left for upstream.
Deeds67
added a commit
to open-noodle/gallery
that referenced
this pull request
Jul 23, 2026
Upstream immich-app#30092 bumped eslint-plugin-unicorn to v72 and swept its own files, disabling the noisy new unicorn/prefer-simple-condition-first rule in the server, web and cli configs. Fork-only files were not in that sweep, so the zero-error gate failed on five of them: - web timeline-bucket getMonthBucket: unicorn/prefer-split-limit (the result is destructured to two elements, so split('-', 2) is equivalent) - the #813 Recently Added filter specs: unicorn/prefer-string-repeat on the three-space blank-input fixtures Also drops the now-unused `extname` import in asset-media.service.ts. Upstream immich-app#30024 replaced its only call site with getFilenameExtension(); tsc does not flag it but eslint --max-warnings 0 does. Verified: server lint/tsc/tsc6 exit 0, web lint 0 errors, and the two touched spec files pass (44 tests). The 8 remaining web warnings are unused eslint-disable directives in upstream-owned files, left for upstream.
Deeds67
added a commit
to open-noodle/gallery
that referenced
this pull request
Jul 23, 2026
Upstream immich-app#30092 bumped eslint-plugin-unicorn to v72 and swept its own files, disabling the noisy new unicorn/prefer-simple-condition-first rule in the server, web and cli configs. Fork-only files were not in that sweep, so the zero-error gate failed on five of them: - web timeline-bucket getMonthBucket: unicorn/prefer-split-limit (the result is destructured to two elements, so split('-', 2) is equivalent) - the #813 Recently Added filter specs: unicorn/prefer-string-repeat on the three-space blank-input fixtures Also drops the now-unused `extname` import in asset-media.service.ts. Upstream immich-app#30024 replaced its only call site with getFilenameExtension(); tsc does not flag it but eslint --max-warnings 0 does. Verified: server lint/tsc/tsc6 exit 0, web lint 0 errors, and the two touched spec files pass (44 tests). The 8 remaining web warnings are unused eslint-disable directives in upstream-owned files, left for upstream.
Deeds67
added a commit
to open-noodle/gallery
that referenced
this pull request
Jul 24, 2026
Upstream immich-app#30092 bumped eslint-plugin-unicorn to v72 and swept its own files, disabling the noisy new unicorn/prefer-simple-condition-first rule in the server, web and cli configs. Fork-only files were not in that sweep, so the zero-error gate failed on five of them: - web timeline-bucket getMonthBucket: unicorn/prefer-split-limit (the result is destructured to two elements, so split('-', 2) is equivalent) - the #813 Recently Added filter specs: unicorn/prefer-string-repeat on the three-space blank-input fixtures Also drops the now-unused `extname` import in asset-media.service.ts. Upstream immich-app#30024 replaced its only call site with getFilenameExtension(); tsc does not flag it but eslint --max-warnings 0 does. Verified: server lint/tsc/tsc6 exit 0, web lint 0 errors, and the two touched spec files pass (44 tests). The 8 remaining web warnings are unused eslint-disable directives in upstream-owned files, left for upstream.
Deeds67
added a commit
to open-noodle/gallery
that referenced
this pull request
Jul 25, 2026
Upstream immich-app#30092 bumped eslint-plugin-unicorn to v72 and swept its own files, disabling the noisy new unicorn/prefer-simple-condition-first rule in the server, web and cli configs. Fork-only files were not in that sweep, so the zero-error gate failed on five of them: - web timeline-bucket getMonthBucket: unicorn/prefer-split-limit (the result is destructured to two elements, so split('-', 2) is equivalent) - the #813 Recently Added filter specs: unicorn/prefer-string-repeat on the three-space blank-input fixtures Also drops the now-unused `extname` import in asset-media.service.ts. Upstream immich-app#30024 replaced its only call site with getFilenameExtension(); tsc does not flag it but eslint --max-warnings 0 does. Verified: server lint/tsc/tsc6 exit 0, web lint 0 errors, and the two touched spec files pass (44 tests). The 8 remaining web warnings are unused eslint-disable directives in upstream-owned files, left for upstream.
ajgon
pushed a commit
to deedee-ops/home-ops
that referenced
this pull request
Jul 29, 2026
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/immich-app/immich-machine-learning](https://github.com/immich-app/immich) | minor | `v3.0.3` → `v3.1.0` | | [ghcr.io/immich-app/immich-server](https://github.com/immich-app/immich) | minor | `v3.0.3` → `v3.1.0` | --- ### Release Notes <details> <summary>immich-app/immich (ghcr.io/immich-app/immich-machine-learning)</summary> ### [`v3.1.0`](https://github.com/immich-app/immich/releases/tag/v3.1.0) [Compare Source](immich-app/immich@v3.0.3...v3.1.0) Welcome to Immich `v3.1.0`! This release includes several quality of life improvements and another round of bug fixes. Keep reading below for the complete highlights. ##### Highlights - Upload wakelock (web) - Undo archive (web) - Filter assets by server filepath (workflows) - Quick navigate to maintenance page (web) - Better slideshow button accessibility (web) - OIDC role claim sync improvements (OAuth) - Invalidate sessions on password reset (admin-cli) ##### Upload wakelock (web) Similar to mobile, the web application will now automatically acquire a wakelock to prevent the screen from dimming while uploads are happening. This feature will require an HTTPS connection. ##### Undo archive (web) After archiving assets, the success notification now has an “undo” button to undo the action.  ##### Filter assets by server filepath (workflows) The asset file filter has a new option “Use path”. When set to true, it will filter based on the actual path on the server rather than the original file name.  ##### Filter assets by EXIF metadata (workflows) A new workflow filter has been added that allows you to filter assets based on their EXIF metadata fields. For now it only supports string comparisons, with numerical comparisons expected to come soon. <img width="700" alt="Filter by EXIF metadata step configuration options" src="https://static.immich.cloud/blog/48ff8c50-260a-4114-a8a0-117d8989f622/10dbcaddcbeb9bfa7cab1e4029e0f70b.webp" /> ##### Quick navigate to maintenance page (web) The command palette (`CTRL+K` or `/`) now includes an item for the maintenance page. <img width="600" alt="Command palette with a maintenance page item" src="https://static.immich.cloud/blog/48ff8c50-260a-4114-a8a0-117d8989f622/28134831c6b1a5f1919ceecdadc1ae54.webp" /> ##### Better slideshow button visibility (web) The slideshow buttons on the web are now wrapped in a container with a backdrop blur, making them easier to view when the current asset is very light.  ##### OIDC role claim sync improvements (OAuth) The OAuth integration in Immich supports setting an initial `isAdmin` value for new users via a role claim. This same process has been updated to now *sync* `isAdmin` on subsequent logins. Additionally, the role claim now supports both single values (`immich_role: 'admin'`) in addition to lists of values ( `immich_role: ["admin", "user"]`), making in more flexible. ##### Invalidate sessions on password reset (admin-cli) When using the admin command line interface to reset a password, there is now a new option to invalidate existing sessions. ```none immich-admin reset-admin-password Found Admin: - ID=e65e6f88-2a30-4dbe-8dd9-1885f4889b53 - OAuth ID= - Email=admin@example.com - Name=Immich Admin ? Please choose a new password (optional) immich-is-cool ? Invalidate existing sessions? Yes The admin password has been updated. ``` ##### Date range for map (mobile) Similar to web, mobile now also supports filtering the map for assets within a given date range. <img width="500" alt="Mobile map settings page date range options" src="https://static.immich.cloud/blog/48ff8c50-260a-4114-a8a0-117d8989f622/be25f538bcb69574ff21c15c2aa64b27.webp" /> *** <!-- Release notes generated using configuration in .github/release.yml at v3.1.0 --> ##### What's Changed ##### 🚨 Breaking Changes - chore(mobile): drop support for iOS 14 by [@​agg23](https://github.com/agg23) in [#​29780](immich-app/immich#29780) ##### 🚀 Features - feat(cli): Add --visibility flag to immich CLI upload subcommand by [@​yuxincs](https://github.com/yuxincs) in [#​29614](immich-app/immich#29614) - feat(mobile): custom date range for map by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​26205](immich-app/immich#26205) ##### 🌟 Enhancements - feat(web): Keep show more open on duplicates by [@​MontejoJorge](https://github.com/MontejoJorge) in [#​29734](immich-app/immich#29734) - fix(server/workflow): add trigger for external libraries AssetCreate by [@​cratoo](https://github.com/cratoo) in [#​29597](immich-app/immich#29597) - chore(seo): remove redundant twitter metadata tags by [@​cevdetta](https://github.com/cevdetta) in [#​29801](immich-app/immich#29801) - feat(web): add wake lock when uploading assets by [@​diogotcorreia](https://github.com/diogotcorreia) in [#​29820](immich-app/immich#29820) - feat(web): undo archive from toast by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​27061](immich-app/immich#27061) - feat: workflow filter assets by upload path by [@​benbeckford](https://github.com/benbeckford) in [#​30000](immich-app/immich#30000) - feat(web): add maintenance link to command palette by [@​yamishi13](https://github.com/yamishi13) in [#​30016](immich-app/immich#30016) - feat: add album asset event handling by [@​timonrieger](https://github.com/timonrieger) in [#​29008](immich-app/immich#29008) - fix(web): improve slideshow controls visibility on bright backgrounds by [@​tech00exploere](https://github.com/tech00exploere) in [#​29950](immich-app/immich#29950) - fix: re-evaluate OIDC role claim on every login and support array values by [@​ImperatorRuscal](https://github.com/ImperatorRuscal) in [#​29991](immich-app/immich#29991) - feat: exif metadata workflow filter by [@​benbeckford](https://github.com/benbeckford) in [#​29295](immich-app/immich#29295) - feat: password invalidate sessions by [@​jrasm91](https://github.com/jrasm91) in [#​30125](immich-app/immich#30125) ##### 🐛 Bug fixes - fix(mobile): apply exif orientation to remote raw photos on android by [@​santoshakil](https://github.com/santoshakil) in [#​29906](immich-app/immich#29906) - fix(web): hide stack thumbnail tray in slideshow mode by [@​tech00exploere](https://github.com/tech00exploere) in [#​29918](immich-app/immich#29918) - fix(web): use Container component for responsive admin maintenance la… by [@​tech00exploere](https://github.com/tech00exploere) in [#​29917](immich-app/immich#29917) - fix(server): updated default CSP config to support videos from V3 player by [@​l0ll098](https://github.com/l0ll098) in [#​29830](immich-app/immich#29830) - fix(server): workflow date filter, make end date inclusive by [@​kigrup](https://github.com/kigrup) in [#​29876](immich-app/immich#29876) - fix(web): URI encode slug and reduce confusion for users by [@​meesfrensel](https://github.com/meesfrensel) in [#​29796](immich-app/immich#29796) - fix(web): clear birth date by [@​danieldietzler](https://github.com/danieldietzler) in [#​29959](immich-app/immich#29959) - fix(server): disable heif security limit by [@​mertalev](https://github.com/mertalev) in [#​29954](immich-app/immich#29954) - fix: zero byte image uploads by [@​rrrockey](https://github.com/rrrockey) in [#​29426](immich-app/immich#29426) - fix(server): return workflow steps in ascending order by [@​benbeckford](https://github.com/benbeckford) in [#​29999](immich-app/immich#29999) - fix(mobile): update album creation to use user-defined name from dialog by [@​LeLunZ](https://github.com/LeLunZ) in [#​30002](immich-app/immich#30002) - fix: long press share quality override preference settings by [@​alextran1502](https://github.com/alextran1502) in [#​30030](immich-app/immich#30030) - fix(web): align ContextMenu z-index with design-system token by [@​tech00exploere](https://github.com/tech00exploere) in [#​30015](immich-app/immich#30015) - fix(web): refresh folder view after asset deletion by [@​tech00exploere](https://github.com/tech00exploere) in [#​29899](immich-app/immich#29899) - fix: do not show the whats new page on fresh login by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​30072](immich-app/immich#30072) - fix(mobile): prevent crash on video widget dispose by [@​agg23](https://github.com/agg23) in [#​30078](immich-app/immich#30078) - fix(web): attach file picker input to DOM so iOS Safari fires change … by [@​mrxder](https://github.com/mrxder) in [#​29660](immich-app/immich#29660) - fix: timebuckets locked permissions by [@​danieldietzler](https://github.com/danieldietzler) in [#​30066](immich-app/immich#30066) - fix: search statistics locked folder permissions by [@​danieldietzler](https://github.com/danieldietzler) in [#​30063](immich-app/immich#30063) - fix(web): fix Country/State filters when set to Unknown by [@​compscitwilight](https://github.com/compscitwilight) in [#​30026](immich-app/immich#30026) - fix(server): file uploads for files with extension only filenames by [@​compscitwilight](https://github.com/compscitwilight) in [#​30024](immich-app/immich#30024) - fix(mobile): stop double close animation when dismissing an asset by [@​santoshakil](https://github.com/santoshakil) in [#​29413](immich-app/immich#29413) - fix(mobile): back up files moved into a watched folder on android by [@​santoshakil](https://github.com/santoshakil) in [#​29872](immich-app/immich#29872) - fix(web): lens model search by [@​jrasm91](https://github.com/jrasm91) in [#​30088](immich-app/immich#30088) - fix(mobile): add album picker to the partner view bottom sheet by [@​santoshakil](https://github.com/santoshakil) in [#​30099](immich-app/immich#30099) - fix(mobile): prevent duplicate album creation during submission by [@​LeLunZ](https://github.com/LeLunZ) in [#​30003](immich-app/immich#30003) - fix(mobile): properly group download tasks for Live Photos by [@​agg23](https://github.com/agg23) in [#​29952](immich-app/immich#29952) - fix(mobile): show real error when an asset can't be added to an album by [@​santoshakil](https://github.com/santoshakil) in [#​29754](immich-app/immich#29754) - fix(mobile): treat wired ethernet as unmetered on ios by [@​santoshakil](https://github.com/santoshakil) in [#​29351](immich-app/immich#29351) - fix(server): send id\_token\_hint on OIDC logout by [@​lorypota](https://github.com/lorypota) in [#​29720](immich-app/immich#29720) - fix(mobile): refresh asset stack after deleting viewer item by [@​PeterOmbodi](https://github.com/PeterOmbodi) in [#​28164](immich-app/immich#28164) - fix: limit ocr overlay to images by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30116](immich-app/immich#30116) - fix: disable slideshow crossfade on reduced motion by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​29826](immich-app/immich#29826) - fix(mobile): map unresponsive after viewing asset by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​27036](immich-app/immich#27036) - fix(mobile): send date-only value for memories query param by [@​ajuijas](https://github.com/ajuijas) in [#​30049](immich-app/immich#30049) - fix: admin user details responsive layout by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30114](immich-app/immich#30114) - fix: backup delay translation key parsing by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30112](immich-app/immich#30112) - fix(web): use correct date field for shift-click range in Recently Added by [@​okxint](https://github.com/okxint) in [#​30071](immich-app/immich#30071) - fix(server): dissolve stack when its non-primary assets are deleted by [@​justadityaraj](https://github.com/justadityaraj) in [#​29354](immich-app/immich#29354) - fix: always set extension from provided file by [@​bo0tzz](https://github.com/bo0tzz) in [#​29839](immich-app/immich#29839) - fix: locked view and asset view provider by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​30136](immich-app/immich#30136) - fix(mobile): birthday picker date order follows locale by [@​santoshakil](https://github.com/santoshakil) in [#​29419](immich-app/immich#29419) - fix(web): restore correct back route when opening person asset via direct URL by [@​okxint](https://github.com/okxint) in [#​30129](immich-app/immich#30129) - fix(web): mirror asset viewer navigation icons in RTL by [@​noboike](https://github.com/noboike) in [#​30151](immich-app/immich#30151) - fix(mobile): allow URL validation to pass when scheme is not provided by [@​agg23](https://github.com/agg23) in [#​30142](immich-app/immich#30142) - fix: run background tasks in root isolate by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​30101](immich-app/immich#30101) - fix(web): mirror onboarding navigation icons in RTL by [@​noboike](https://github.com/noboike) in [#​30158](immich-app/immich#30158) - fix: min faces user preference by [@​jrasm91](https://github.com/jrasm91) in [#​30177](immich-app/immich#30177) - fix(web): use RTL transform origin in AdaptiveImage by [@​noboike](https://github.com/noboike) in [#​30182](immich-app/immich#30182) - fix: don't skip person thumbnail generation if ML is disabled by [@​bo0tzz](https://github.com/bo0tzz) in [#​30194](immich-app/immich#30194) - fix: shared by user detail panel by [@​danieldietzler](https://github.com/danieldietzler) in [#​30187](immich-app/immich#30187) - fix(mobile): prevent timeline scroll to top on unrelated pages by [@​agg23](https://github.com/agg23) in [#​30281](immich-app/immich#30281) ##### 📚 Documentation - chore(security.txt): bump expired Expires field (RFC 9116) by [@​kobihikri](https://github.com/kobihikri) in [#​29932](immich-app/immich#29932) - fix(docs): remove ref to synology channel by [@​mmomjian](https://github.com/mmomjian) in [#​30051](immich-app/immich#30051) - fix: hypertext link to example docker-compose.rootless.yml by [@​upmcplanetracker](https://github.com/upmcplanetracker) in [#​30155](immich-app/immich#30155) ##### 🌐 Translations - feat(docs): add bulgarian readme by [@​nedevski](https://github.com/nedevski) in [#​29427](immich-app/immich#29427) - chore(web): update translations by [@​weblate](https://github.com/weblate) in [#​29781](immich-app/immich#29781) ##### New Contributors - [@​kobihikri](https://github.com/kobihikri) made their first contribution in [#​29932](immich-app/immich#29932) - [@​kigrup](https://github.com/kigrup) made their first contribution in [#​29876](immich-app/immich#29876) - [@​yuxincs](https://github.com/yuxincs) made their first contribution in [#​29614](immich-app/immich#29614) - [@​cevdetta](https://github.com/cevdetta) made their first contribution in [#​29801](immich-app/immich#29801) - [@​mrxder](https://github.com/mrxder) made their first contribution in [#​29660](immich-app/immich#29660) - [@​compscitwilight](https://github.com/compscitwilight) made their first contribution in [#​30026](immich-app/immich#30026) - [@​nedevski](https://github.com/nedevski) made their first contribution in [#​29427](immich-app/immich#29427) - [@​yamishi13](https://github.com/yamishi13) made their first contribution in [#​30016](immich-app/immich#30016) - [@​lorypota](https://github.com/lorypota) made their first contribution in [#​29720](immich-app/immich#29720) - [@​ImperatorRuscal](https://github.com/ImperatorRuscal) made their first contribution in [#​29991](immich-app/immich#29991) - [@​ajuijas](https://github.com/ajuijas) made their first contribution in [#​30049](immich-app/immich#30049) - [@​justadityaraj](https://github.com/justadityaraj) made their first contribution in [#​29354](immich-app/immich#29354) - [@​pavel-miniutka](https://github.com/pavel-miniutka) made their first contribution in [#​29939](immich-app/immich#29939) - [@​noboike](https://github.com/noboike) made their first contribution in [#​30151](immich-app/immich#30151) - [@​upmcplanetracker](https://github.com/upmcplanetracker) made their first contribution in [#​30155](immich-app/immich#30155) **Full Changelog**: <immich-app/immich@v3.0.3...v3.1.0> </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Warsaw) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yODUuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI4NS4yIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=--> Reviewed-on: https://git.ajgon.casa/deedee/mark13/pulls/471
eleboucher
pushed a commit
to eleboucher/homelab
that referenced
this pull request
Jul 29, 2026
…1.0) (#1759) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [immich-app/immich](https://github.com/immich-app/immich) | minor | `v3.0.3` → `v3.1.0` | --- ### Release Notes <details> <summary>immich-app/immich (immich-app/immich)</summary> ### [`v3.1.0`](https://github.com/immich-app/immich/releases/tag/v3.1.0) [Compare Source](immich-app/immich@v3.0.3...v3.1.0) Welcome to Immich `v3.1.0`! This release includes several quality of life improvements and another round of bug fixes. Keep reading below for the complete highlights. ##### Highlights - Upload wakelock (web) - Undo archive (web) - Filter assets by server filepath (workflows) - Quick navigate to maintenance page (web) - Better slideshow button accessibility (web) - OIDC role claim sync improvements (OAuth) - Invalidate sessions on password reset (admin-cli) ##### Upload wakelock (web) Similar to mobile, the web application will now automatically acquire a wakelock to prevent the screen from dimming while uploads are happening. This feature will require an HTTPS connection. ##### Undo archive (web) After archiving assets, the success notification now has an “undo” button to undo the action.  ##### Filter assets by server filepath (workflows) The asset file filter has a new option “Use path”. When set to true, it will filter based on the actual path on the server rather than the original file name.  ##### Filter assets by EXIF metadata (workflows) A new workflow filter has been added that allows you to filter assets based on their EXIF metadata fields. For now it only supports string comparisons, with numerical comparisons expected to come soon. <img width="700" alt="Filter by EXIF metadata step configuration options" src="https://static.immich.cloud/blog/48ff8c50-260a-4114-a8a0-117d8989f622/10dbcaddcbeb9bfa7cab1e4029e0f70b.webp" /> ##### Quick navigate to maintenance page (web) The command palette (`CTRL+K` or `/`) now includes an item for the maintenance page. <img width="600" alt="Command palette with a maintenance page item" src="https://static.immich.cloud/blog/48ff8c50-260a-4114-a8a0-117d8989f622/28134831c6b1a5f1919ceecdadc1ae54.webp" /> ##### Better slideshow button visibility (web) The slideshow buttons on the web are now wrapped in a container with a backdrop blur, making them easier to view when the current asset is very light.  ##### OIDC role claim sync improvements (OAuth) The OAuth integration in Immich supports setting an initial `isAdmin` value for new users via a role claim. This same process has been updated to now *sync* `isAdmin` on subsequent logins. Additionally, the role claim now supports both single values (`immich_role: 'admin'`) in addition to lists of values ( `immich_role: ["admin", "user"]`), making in more flexible. ##### Invalidate sessions on password reset (admin-cli) When using the admin command line interface to reset a password, there is now a new option to invalidate existing sessions. ```none immich-admin reset-admin-password Found Admin: - ID=e65e6f88-2a30-4dbe-8dd9-1885f4889b53 - OAuth ID= - Email=admin@example.com - Name=Immich Admin ? Please choose a new password (optional) immich-is-cool ? Invalidate existing sessions? Yes The admin password has been updated. ``` ##### Date range for map (mobile) Similar to web, mobile now also supports filtering the map for assets within a given date range. <img width="500" alt="Mobile map settings page date range options" src="https://static.immich.cloud/blog/48ff8c50-260a-4114-a8a0-117d8989f622/be25f538bcb69574ff21c15c2aa64b27.webp" /> *** <!-- Release notes generated using configuration in .github/release.yml at v3.1.0 --> ##### What's Changed ##### 🚨 Breaking Changes - chore(mobile): drop support for iOS 14 by [@​agg23](https://github.com/agg23) in [#​29780](immich-app/immich#29780) ##### 🚀 Features - feat(cli): Add --visibility flag to immich CLI upload subcommand by [@​yuxincs](https://github.com/yuxincs) in [#​29614](immich-app/immich#29614) - feat(mobile): custom date range for map by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​26205](immich-app/immich#26205) ##### 🌟 Enhancements - feat(web): Keep show more open on duplicates by [@​MontejoJorge](https://github.com/MontejoJorge) in [#​29734](immich-app/immich#29734) - fix(server/workflow): add trigger for external libraries AssetCreate by [@​cratoo](https://github.com/cratoo) in [#​29597](immich-app/immich#29597) - chore(seo): remove redundant twitter metadata tags by [@​cevdetta](https://github.com/cevdetta) in [#​29801](immich-app/immich#29801) - feat(web): add wake lock when uploading assets by [@​diogotcorreia](https://github.com/diogotcorreia) in [#​29820](immich-app/immich#29820) - feat(web): undo archive from toast by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​27061](immich-app/immich#27061) - feat: workflow filter assets by upload path by [@​benbeckford](https://github.com/benbeckford) in [#​30000](immich-app/immich#30000) - feat(web): add maintenance link to command palette by [@​yamishi13](https://github.com/yamishi13) in [#​30016](immich-app/immich#30016) - feat: add album asset event handling by [@​timonrieger](https://github.com/timonrieger) in [#​29008](immich-app/immich#29008) - fix(web): improve slideshow controls visibility on bright backgrounds by [@​tech00exploere](https://github.com/tech00exploere) in [#​29950](immich-app/immich#29950) - fix: re-evaluate OIDC role claim on every login and support array values by [@​ImperatorRuscal](https://github.com/ImperatorRuscal) in [#​29991](immich-app/immich#29991) - feat: exif metadata workflow filter by [@​benbeckford](https://github.com/benbeckford) in [#​29295](immich-app/immich#29295) - feat: password invalidate sessions by [@​jrasm91](https://github.com/jrasm91) in [#​30125](immich-app/immich#30125) ##### 🐛 Bug fixes - fix(mobile): apply exif orientation to remote raw photos on android by [@​santoshakil](https://github.com/santoshakil) in [#​29906](immich-app/immich#29906) - fix(web): hide stack thumbnail tray in slideshow mode by [@​tech00exploere](https://github.com/tech00exploere) in [#​29918](immich-app/immich#29918) - fix(web): use Container component for responsive admin maintenance la… by [@​tech00exploere](https://github.com/tech00exploere) in [#​29917](immich-app/immich#29917) - fix(server): updated default CSP config to support videos from V3 player by [@​l0ll098](https://github.com/l0ll098) in [#​29830](immich-app/immich#29830) - fix(server): workflow date filter, make end date inclusive by [@​kigrup](https://github.com/kigrup) in [#​29876](immich-app/immich#29876) - fix(web): URI encode slug and reduce confusion for users by [@​meesfrensel](https://github.com/meesfrensel) in [#​29796](immich-app/immich#29796) - fix(web): clear birth date by [@​danieldietzler](https://github.com/danieldietzler) in [#​29959](immich-app/immich#29959) - fix(server): disable heif security limit by [@​mertalev](https://github.com/mertalev) in [#​29954](immich-app/immich#29954) - fix: zero byte image uploads by [@​rrrockey](https://github.com/rrrockey) in [#​29426](immich-app/immich#29426) - fix(server): return workflow steps in ascending order by [@​benbeckford](https://github.com/benbeckford) in [#​29999](immich-app/immich#29999) - fix(mobile): update album creation to use user-defined name from dialog by [@​LeLunZ](https://github.com/LeLunZ) in [#​30002](immich-app/immich#30002) - fix: long press share quality override preference settings by [@​alextran1502](https://github.com/alextran1502) in [#​30030](immich-app/immich#30030) - fix(web): align ContextMenu z-index with design-system token by [@​tech00exploere](https://github.com/tech00exploere) in [#​30015](immich-app/immich#30015) - fix(web): refresh folder view after asset deletion by [@​tech00exploere](https://github.com/tech00exploere) in [#​29899](immich-app/immich#29899) - fix: do not show the whats new page on fresh login by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​30072](immich-app/immich#30072) - fix(mobile): prevent crash on video widget dispose by [@​agg23](https://github.com/agg23) in [#​30078](immich-app/immich#30078) - fix(web): attach file picker input to DOM so iOS Safari fires change … by [@​mrxder](https://github.com/mrxder) in [#​29660](immich-app/immich#29660) - fix: timebuckets locked permissions by [@​danieldietzler](https://github.com/danieldietzler) in [#​30066](immich-app/immich#30066) - fix: search statistics locked folder permissions by [@​danieldietzler](https://github.com/danieldietzler) in [#​30063](immich-app/immich#30063) - fix(web): fix Country/State filters when set to Unknown by [@​compscitwilight](https://github.com/compscitwilight) in [#​30026](immich-app/immich#30026) - fix(server): file uploads for files with extension only filenames by [@​compscitwilight](https://github.com/compscitwilight) in [#​30024](immich-app/immich#30024) - fix(mobile): stop double close animation when dismissing an asset by [@​santoshakil](https://github.com/santoshakil) in [#​29413](immich-app/immich#29413) - fix(mobile): back up files moved into a watched folder on android by [@​santoshakil](https://github.com/santoshakil) in [#​29872](immich-app/immich#29872) - fix(web): lens model search by [@​jrasm91](https://github.com/jrasm91) in [#​30088](immich-app/immich#30088) - fix(mobile): add album picker to the partner view bottom sheet by [@​santoshakil](https://github.com/santoshakil) in [#​30099](immich-app/immich#30099) - fix(mobile): prevent duplicate album creation during submission by [@​LeLunZ](https://github.com/LeLunZ) in [#​30003](immich-app/immich#30003) - fix(mobile): properly group download tasks for Live Photos by [@​agg23](https://github.com/agg23) in [#​29952](immich-app/immich#29952) - fix(mobile): show real error when an asset can't be added to an album by [@​santoshakil](https://github.com/santoshakil) in [#​29754](immich-app/immich#29754) - fix(mobile): treat wired ethernet as unmetered on ios by [@​santoshakil](https://github.com/santoshakil) in [#​29351](immich-app/immich#29351) - fix(server): send id\_token\_hint on OIDC logout by [@​lorypota](https://github.com/lorypota) in [#​29720](immich-app/immich#29720) - fix(mobile): refresh asset stack after deleting viewer item by [@​PeterOmbodi](https://github.com/PeterOmbodi) in [#​28164](immich-app/immich#28164) - fix: limit ocr overlay to images by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30116](immich-app/immich#30116) - fix: disable slideshow crossfade on reduced motion by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​29826](immich-app/immich#29826) - fix(mobile): map unresponsive after viewing asset by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​27036](immich-app/immich#27036) - fix(mobile): send date-only value for memories query param by [@​ajuijas](https://github.com/ajuijas) in [#​30049](immich-app/immich#30049) - fix: admin user details responsive layout by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30114](immich-app/immich#30114) - fix: backup delay translation key parsing by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30112](immich-app/immich#30112) - fix(web): use correct date field for shift-click range in Recently Added by [@​okxint](https://github.com/okxint) in [#​30071](immich-app/immich#30071) - fix(server): dissolve stack when its non-primary assets are deleted by [@​justadityaraj](https://github.com/justadityaraj) in [#​29354](immich-app/immich#29354) - fix: always set extension from provided file by [@​bo0tzz](https://github.com/bo0tzz) in [#​29839](immich-app/immich#29839) - fix: locked view and asset view provider by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​30136](immich-app/immich#30136) - fix(mobile): birthday picker date order follows locale by [@​santoshakil](https://github.com/santoshakil) in [#​29419](immich-app/immich#29419) - fix(web): restore correct back route when opening person asset via direct URL by [@​okxint](https://github.com/okxint) in [#​30129](immich-app/immich#30129) - fix(web): mirror asset viewer navigation icons in RTL by [@​noboike](https://github.com/noboike) in [#​30151](immich-app/immich#30151) - fix(mobile): allow URL validation to pass when scheme is not provided by [@​agg23](https://github.com/agg23) in [#​30142](immich-app/immich#30142) - fix: run background tasks in root isolate by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​30101](immich-app/immich#30101) - fix(web): mirror onboarding navigation icons in RTL by [@​noboike](https://github.com/noboike) in [#​30158](immich-app/immich#30158) - fix: min faces user preference by [@​jrasm91](https://github.com/jrasm91) in [#​30177](immich-app/immich#30177) - fix(web): use RTL transform origin in AdaptiveImage by [@​noboike](https://github.com/noboike) in [#​30182](immich-app/immich#30182) - fix: don't skip person thumbnail generation if ML is disabled by [@​bo0tzz](https://github.com/bo0tzz) in [#​30194](immich-app/immich#30194) - fix: shared by user detail panel by [@​danieldietzler](https://github.com/danieldietzler) in [#​30187](immich-app/immich#30187) - fix(mobile): prevent timeline scroll to top on unrelated pages by [@​agg23](https://github.com/agg23) in [#​30281](immich-app/immich#30281) ##### 📚 Documentation - chore(security.txt): bump expired Expires field (RFC 9116) by [@​kobihikri](https://github.com/kobihikri) in [#​29932](immich-app/immich#29932) - fix(docs): remove ref to synology channel by [@​mmomjian](https://github.com/mmomjian) in [#​30051](immich-app/immich#30051) - fix: hypertext link to example docker-compose.rootless.yml by [@​upmcplanetracker](https://github.com/upmcplanetracker) in [#​30155](immich-app/immich#30155) ##### 🌐 Translations - feat(docs): add bulgarian readme by [@​nedevski](https://github.com/nedevski) in [#​29427](immich-app/immich#29427) - chore(web): update translations by [@​weblate](https://github.com/weblate) in [#​29781](immich-app/immich#29781) ##### New Contributors - [@​kobihikri](https://github.com/kobihikri) made their first contribution in [#​29932](immich-app/immich#29932) - [@​kigrup](https://github.com/kigrup) made their first contribution in [#​29876](immich-app/immich#29876) - [@​yuxincs](https://github.com/yuxincs) made their first contribution in [#​29614](immich-app/immich#29614) - [@​cevdetta](https://github.com/cevdetta) made their first contribution in [#​29801](immich-app/immich#29801) - [@​mrxder](https://github.com/mrxder) made their first contribution in [#​29660](immich-app/immich#29660) - [@​compscitwilight](https://github.com/compscitwilight) made their first contribution in [#​30026](immich-app/immich#30026) - [@​nedevski](https://github.com/nedevski) made their first contribution in [#​29427](immich-app/immich#29427) - [@​yamishi13](https://github.com/yamishi13) made their first contribution in [#​30016](immich-app/immich#30016) - [@​lorypota](https://github.com/lorypota) made their first contribution in [#​29720](immich-app/immich#29720) - [@​ImperatorRuscal](https://github.com/ImperatorRuscal) made their first contribution in [#​29991](immich-app/immich#29991) - [@​ajuijas](https://github.com/ajuijas) made their first contribution in [#​30049](immich-app/immich#30049) - [@​justadityaraj](https://github.com/justadityaraj) made their first contribution in [#​29354](immich-app/immich#29354) - [@​pavel-miniutka](https://github.com/pavel-miniutka) made their first contribution in [#​29939](immich-app/immich#29939) - [@​noboike](https://github.com/noboike) made their first contribution in [#​30151](immich-app/immich#30151) - [@​upmcplanetracker](https://github.com/upmcplanetracker) made their first contribution in [#​30155](immich-app/immich#30155) **Full Changelog**: <immich-app/immich@v3.0.3...v3.1.0> </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9naXRodWItcmVsZWFzZSIsInR5cGUvbWlub3IiXX0=--> Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/1759
dadezzz
pushed a commit
to dadezzz/infra_docker-compose
that referenced
this pull request
Jul 30, 2026
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/immich-app/immich-machine-learning](https://github.com/immich-app/immich) | minor | `v3.0.3` → `v3.1.0` | | [ghcr.io/immich-app/immich-server](https://github.com/immich-app/immich) | minor | `v3.0.3` → `v3.1.0` | --- ### Release Notes <details> <summary>immich-app/immich (ghcr.io/immich-app/immich-machine-learning)</summary> ### [`v3.1.0`](https://github.com/immich-app/immich/releases/tag/v3.1.0) [Compare Source](immich-app/immich@v3.0.3...v3.1.0) Welcome to Immich `v3.1.0`! This release includes several quality of life improvements and another round of bug fixes. Keep reading below for the complete highlights. ##### Highlights - Upload wakelock (web) - Undo archive (web) - Filter assets by server filepath (workflows) - Quick navigate to maintenance page (web) - Better slideshow button accessibility (web) - OIDC role claim sync improvements (OAuth) - Invalidate sessions on password reset (admin-cli) ##### Upload wakelock (web) Similar to mobile, the web application will now automatically acquire a wakelock to prevent the screen from dimming while uploads are happening. This feature will require an HTTPS connection. ##### Undo archive (web) After archiving assets, the success notification now has an “undo” button to undo the action.  ##### Filter assets by server filepath (workflows) The asset file filter has a new option “Use path”. When set to true, it will filter based on the actual path on the server rather than the original file name.  ##### Filter assets by EXIF metadata (workflows) A new workflow filter has been added that allows you to filter assets based on their EXIF metadata fields. For now it only supports string comparisons, with numerical comparisons expected to come soon. <img width="700" alt="Filter by EXIF metadata step configuration options" src="https://static.immich.cloud/blog/48ff8c50-260a-4114-a8a0-117d8989f622/10dbcaddcbeb9bfa7cab1e4029e0f70b.webp" /> ##### Quick navigate to maintenance page (web) The command palette (`CTRL+K` or `/`) now includes an item for the maintenance page. <img width="600" alt="Command palette with a maintenance page item" src="https://static.immich.cloud/blog/48ff8c50-260a-4114-a8a0-117d8989f622/28134831c6b1a5f1919ceecdadc1ae54.webp" /> ##### Better slideshow button visibility (web) The slideshow buttons on the web are now wrapped in a container with a backdrop blur, making them easier to view when the current asset is very light.  ##### OIDC role claim sync improvements (OAuth) The OAuth integration in Immich supports setting an initial `isAdmin` value for new users via a role claim. This same process has been updated to now *sync* `isAdmin` on subsequent logins. Additionally, the role claim now supports both single values (`immich_role: 'admin'`) in addition to lists of values ( `immich_role: ["admin", "user"]`), making in more flexible. ##### Invalidate sessions on password reset (admin-cli) When using the admin command line interface to reset a password, there is now a new option to invalidate existing sessions. ```none immich-admin reset-admin-password Found Admin: - ID=e65e6f88-2a30-4dbe-8dd9-1885f4889b53 - OAuth ID= - Email=admin@example.com - Name=Immich Admin ? Please choose a new password (optional) immich-is-cool ? Invalidate existing sessions? Yes The admin password has been updated. ``` ##### Date range for map (mobile) Similar to web, mobile now also supports filtering the map for assets within a given date range. <img width="500" alt="Mobile map settings page date range options" src="https://static.immich.cloud/blog/48ff8c50-260a-4114-a8a0-117d8989f622/be25f538bcb69574ff21c15c2aa64b27.webp" /> *** <!-- Release notes generated using configuration in .github/release.yml at v3.1.0 --> ##### What's Changed ##### 🚨 Breaking Changes - chore(mobile): drop support for iOS 14 by [@​agg23](https://github.com/agg23) in [#​29780](immich-app/immich#29780) ##### 🚀 Features - feat(cli): Add --visibility flag to immich CLI upload subcommand by [@​yuxincs](https://github.com/yuxincs) in [#​29614](immich-app/immich#29614) - feat(mobile): custom date range for map by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​26205](immich-app/immich#26205) ##### 🌟 Enhancements - feat(web): Keep show more open on duplicates by [@​MontejoJorge](https://github.com/MontejoJorge) in [#​29734](immich-app/immich#29734) - fix(server/workflow): add trigger for external libraries AssetCreate by [@​cratoo](https://github.com/cratoo) in [#​29597](immich-app/immich#29597) - chore(seo): remove redundant twitter metadata tags by [@​cevdetta](https://github.com/cevdetta) in [#​29801](immich-app/immich#29801) - feat(web): add wake lock when uploading assets by [@​diogotcorreia](https://github.com/diogotcorreia) in [#​29820](immich-app/immich#29820) - feat(web): undo archive from toast by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​27061](immich-app/immich#27061) - feat: workflow filter assets by upload path by [@​benbeckford](https://github.com/benbeckford) in [#​30000](immich-app/immich#30000) - feat(web): add maintenance link to command palette by [@​yamishi13](https://github.com/yamishi13) in [#​30016](immich-app/immich#30016) - feat: add album asset event handling by [@​timonrieger](https://github.com/timonrieger) in [#​29008](immich-app/immich#29008) - fix(web): improve slideshow controls visibility on bright backgrounds by [@​tech00exploere](https://github.com/tech00exploere) in [#​29950](immich-app/immich#29950) - fix: re-evaluate OIDC role claim on every login and support array values by [@​ImperatorRuscal](https://github.com/ImperatorRuscal) in [#​29991](immich-app/immich#29991) - feat: exif metadata workflow filter by [@​benbeckford](https://github.com/benbeckford) in [#​29295](immich-app/immich#29295) - feat: password invalidate sessions by [@​jrasm91](https://github.com/jrasm91) in [#​30125](immich-app/immich#30125) ##### 🐛 Bug fixes - fix(mobile): apply exif orientation to remote raw photos on android by [@​santoshakil](https://github.com/santoshakil) in [#​29906](immich-app/immich#29906) - fix(web): hide stack thumbnail tray in slideshow mode by [@​tech00exploere](https://github.com/tech00exploere) in [#​29918](immich-app/immich#29918) - fix(web): use Container component for responsive admin maintenance la… by [@​tech00exploere](https://github.com/tech00exploere) in [#​29917](immich-app/immich#29917) - fix(server): updated default CSP config to support videos from V3 player by [@​l0ll098](https://github.com/l0ll098) in [#​29830](immich-app/immich#29830) - fix(server): workflow date filter, make end date inclusive by [@​kigrup](https://github.com/kigrup) in [#​29876](immich-app/immich#29876) - fix(web): URI encode slug and reduce confusion for users by [@​meesfrensel](https://github.com/meesfrensel) in [#​29796](immich-app/immich#29796) - fix(web): clear birth date by [@​danieldietzler](https://github.com/danieldietzler) in [#​29959](immich-app/immich#29959) - fix(server): disable heif security limit by [@​mertalev](https://github.com/mertalev) in [#​29954](immich-app/immich#29954) - fix: zero byte image uploads by [@​rrrockey](https://github.com/rrrockey) in [#​29426](immich-app/immich#29426) - fix(server): return workflow steps in ascending order by [@​benbeckford](https://github.com/benbeckford) in [#​29999](immich-app/immich#29999) - fix(mobile): update album creation to use user-defined name from dialog by [@​LeLunZ](https://github.com/LeLunZ) in [#​30002](immich-app/immich#30002) - fix: long press share quality override preference settings by [@​alextran1502](https://github.com/alextran1502) in [#​30030](immich-app/immich#30030) - fix(web): align ContextMenu z-index with design-system token by [@​tech00exploere](https://github.com/tech00exploere) in [#​30015](immich-app/immich#30015) - fix(web): refresh folder view after asset deletion by [@​tech00exploere](https://github.com/tech00exploere) in [#​29899](immich-app/immich#29899) - fix: do not show the whats new page on fresh login by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​30072](immich-app/immich#30072) - fix(mobile): prevent crash on video widget dispose by [@​agg23](https://github.com/agg23) in [#​30078](immich-app/immich#30078) - fix(web): attach file picker input to DOM so iOS Safari fires change … by [@​mrxder](https://github.com/mrxder) in [#​29660](immich-app/immich#29660) - fix: timebuckets locked permissions by [@​danieldietzler](https://github.com/danieldietzler) in [#​30066](immich-app/immich#30066) - fix: search statistics locked folder permissions by [@​danieldietzler](https://github.com/danieldietzler) in [#​30063](immich-app/immich#30063) - fix(web): fix Country/State filters when set to Unknown by [@​compscitwilight](https://github.com/compscitwilight) in [#​30026](immich-app/immich#30026) - fix(server): file uploads for files with extension only filenames by [@​compscitwilight](https://github.com/compscitwilight) in [#​30024](immich-app/immich#30024) - fix(mobile): stop double close animation when dismissing an asset by [@​santoshakil](https://github.com/santoshakil) in [#​29413](immich-app/immich#29413) - fix(mobile): back up files moved into a watched folder on android by [@​santoshakil](https://github.com/santoshakil) in [#​29872](immich-app/immich#29872) - fix(web): lens model search by [@​jrasm91](https://github.com/jrasm91) in [#​30088](immich-app/immich#30088) - fix(mobile): add album picker to the partner view bottom sheet by [@​santoshakil](https://github.com/santoshakil) in [#​30099](immich-app/immich#30099) - fix(mobile): prevent duplicate album creation during submission by [@​LeLunZ](https://github.com/LeLunZ) in [#​30003](immich-app/immich#30003) - fix(mobile): properly group download tasks for Live Photos by [@​agg23](https://github.com/agg23) in [#​29952](immich-app/immich#29952) - fix(mobile): show real error when an asset can't be added to an album by [@​santoshakil](https://github.com/santoshakil) in [#​29754](immich-app/immich#29754) - fix(mobile): treat wired ethernet as unmetered on ios by [@​santoshakil](https://github.com/santoshakil) in [#​29351](immich-app/immich#29351) - fix(server): send id\_token\_hint on OIDC logout by [@​lorypota](https://github.com/lorypota) in [#​29720](immich-app/immich#29720) - fix(mobile): refresh asset stack after deleting viewer item by [@​PeterOmbodi](https://github.com/PeterOmbodi) in [#​28164](immich-app/immich#28164) - fix: limit ocr overlay to images by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30116](immich-app/immich#30116) - fix: disable slideshow crossfade on reduced motion by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​29826](immich-app/immich#29826) - fix(mobile): map unresponsive after viewing asset by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​27036](immich-app/immich#27036) - fix(mobile): send date-only value for memories query param by [@​ajuijas](https://github.com/ajuijas) in [#​30049](immich-app/immich#30049) - fix: admin user details responsive layout by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30114](immich-app/immich#30114) - fix: backup delay translation key parsing by [@​YarosMallorca](https://github.com/YarosMallorca) in [#​30112](immich-app/immich#30112) - fix(web): use correct date field for shift-click range in Recently Added by [@​okxint](https://github.com/okxint) in [#​30071](immich-app/immich#30071) - fix(server): dissolve stack when its non-primary assets are deleted by [@​justadityaraj](https://github.com/justadityaraj) in [#​29354](immich-app/immich#29354) - fix: always set extension from provided file by [@​bo0tzz](https://github.com/bo0tzz) in [#​29839](immich-app/immich#29839) - fix: locked view and asset view provider by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​30136](immich-app/immich#30136) - fix(mobile): birthday picker date order follows locale by [@​santoshakil](https://github.com/santoshakil) in [#​29419](immich-app/immich#29419) - fix(web): restore correct back route when opening person asset via direct URL by [@​okxint](https://github.com/okxint) in [#​30129](immich-app/immich#30129) - fix(web): mirror asset viewer navigation icons in RTL by [@​noboike](https://github.com/noboike) in [#​30151](immich-app/immich#30151) - fix(mobile): allow URL validation to pass when scheme is not provided by [@​agg23](https://github.com/agg23) in [#​30142](immich-app/immich#30142) - fix: run background tasks in root isolate by [@​shenlong-tanwen](https://github.com/shenlong-tanwen) in [#​30101](immich-app/immich#30101) - fix(web): mirror onboarding navigation icons in RTL by [@​noboike](https://github.com/noboike) in [#​30158](immich-app/immich#30158) - fix: min faces user preference by [@​jrasm91](https://github.com/jrasm91) in [#​30177](immich-app/immich#30177) - fix(web): use RTL transform origin in AdaptiveImage by [@​noboike](https://github.com/noboike) in [#​30182](immich-app/immich#30182) - fix: don't skip person thumbnail generation if ML is disabled by [@​bo0tzz](https://github.com/bo0tzz) in [#​30194](immich-app/immich#30194) - fix: shared by user detail panel by [@​danieldietzler](https://github.com/danieldietzler) in [#​30187](immich-app/immich#30187) - fix(mobile): prevent timeline scroll to top on unrelated pages by [@​agg23](https://github.com/agg23) in [#​30281](immich-app/immich#30281) ##### 📚 Documentation - chore(security.txt): bump expired Expires field (RFC 9116) by [@​kobihikri](https://github.com/kobihikri) in [#​29932](immich-app/immich#29932) - fix(docs): remove ref to synology channel by [@​mmomjian](https://github.com/mmomjian) in [#​30051](immich-app/immich#30051) - fix: hypertext link to example docker-compose.rootless.yml by [@​upmcplanetracker](https://github.com/upmcplanetracker) in [#​30155](immich-app/immich#30155) ##### 🌐 Translations - feat(docs): add bulgarian readme by [@​nedevski](https://github.com/nedevski) in [#​29427](immich-app/immich#29427) - chore(web): update translations by [@​weblate](https://github.com/weblate) in [#​29781](immich-app/immich#29781) ##### New Contributors - [@​kobihikri](https://github.com/kobihikri) made their first contribution in [#​29932](immich-app/immich#29932) - [@​kigrup](https://github.com/kigrup) made their first contribution in [#​29876](immich-app/immich#29876) - [@​yuxincs](https://github.com/yuxincs) made their first contribution in [#​29614](immich-app/immich#29614) - [@​cevdetta](https://github.com/cevdetta) made their first contribution in [#​29801](immich-app/immich#29801) - [@​mrxder](https://github.com/mrxder) made their first contribution in [#​29660](immich-app/immich#29660) - [@​compscitwilight](https://github.com/compscitwilight) made their first contribution in [#​30026](immich-app/immich#30026) - [@​nedevski](https://github.com/nedevski) made their first contribution in [#​29427](immich-app/immich#29427) - [@​yamishi13](https://github.com/yamishi13) made their first contribution in [#​30016](immich-app/immich#30016) - [@​lorypota](https://github.com/lorypota) made their first contribution in [#​29720](immich-app/immich#29720) - [@​ImperatorRuscal](https://github.com/ImperatorRuscal) made their first contribution in [#​29991](immich-app/immich#29991) - [@​ajuijas](https://github.com/ajuijas) made their first contribution in [#​30049](immich-app/immich#30049) - [@​justadityaraj](https://github.com/justadityaraj) made their first contribution in [#​29354](immich-app/immich#29354) - [@​pavel-miniutka](https://github.com/pavel-miniutka) made their first contribution in [#​29939](immich-app/immich#29939) - [@​noboike](https://github.com/noboike) made their first contribution in [#​30151](immich-app/immich#30151) - [@​upmcplanetracker](https://github.com/upmcplanetracker) made their first contribution in [#​30155](immich-app/immich#30155) **Full Changelog**: <immich-app/immich@v3.0.3...v3.1.0> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yODEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjI4MS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
ya4ept
pushed a commit
to ya4ept/Noodle_gallery
that referenced
this pull request
Jul 30, 2026
Upstream immich-app#30092 bumped eslint-plugin-unicorn to v72 and swept its own files, disabling the noisy new unicorn/prefer-simple-condition-first rule in the server, web and cli configs. Fork-only files were not in that sweep, so the zero-error gate failed on five of them: - web timeline-bucket getMonthBucket: unicorn/prefer-split-limit (the result is destructured to two elements, so split('-', 2) is equivalent) - the open-noodle#813 Recently Added filter specs: unicorn/prefer-string-repeat on the three-space blank-input fixtures Also drops the now-unused `extname` import in asset-media.service.ts. Upstream immich-app#30024 replaced its only call site with getFilenameExtension(); tsc does not flag it but eslint --max-warnings 0 does. Verified: server lint/tsc/tsc6 exit 0, web lint 0 errors, and the two touched spec files pass (44 tests). The 8 remaining web warnings are unused eslint-disable directives in upstream-owned files, left for upstream.
1 task
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Fix the handling of files whose names consist solely of a recognized file extension. Previously, Node's
path.extname()was used but returns an empty string for filenames such as.png, causing the server to reject these files during upload. The changes in my commits replace the extension detection logic so that extension-only filenames are correctly recognized while preserving the existing behavior for regular filenames and dotfiles.Fixes #29514
How Has This Been Tested?
.pngthrough the Immich WebUI.IMAGErather thanOTHER. This works for videos as well.image.pngorvideo.mp4continue to work as expected.Checklist:
src/services/uses repositories implementations for database calls, filesystem operations, etc.src/repositories/is pretty basic/simple and does not have any immich specific logic (that belongs insrc/services/)Please describe to which degree, if any, an LLM was used in creating this pull request.
...