release: v0.20.0

This commit is contained in:
Ralksta
2026-10-02 18:14:23 +02:00
committed by GitHub
parent 81ce886b01
commit 5f831f719a
209 changed files with 13807 additions and 803 deletions

View File

@@ -18,6 +18,8 @@ For the quick path — clone, `npm run dev`, open `/install` — see the
- [Behaviour when Immich is Unreachable](#behaviour-when-immich-is-unreachable)
- [Reverse Proxy](#reverse-proxy)
- [CDN Mode](#cdn-mode)
- [Edits made in Immich](#edits-made-in-immich)
- [Colour Profiles](#colour-profiles)
## What the Setup Wizard Writes
@@ -230,8 +232,9 @@ Folio URL, then:
- **Cache `/api/image/*` and `/api/video/*`**, and nothing else. Pages are
rendered per request, and other routes check cookies.
- **Include the full query string in the cache key.** `size`, `w` and the
`IMAGE_CACHE_VERSION` buster `v` all select a different file.
- **Include the full query string in the cache key.** `size`, `w`, the edit
marker `e` and the `IMAGE_CACHE_VERSION` buster `v` all select a different
file.
- **Respect the origin's `Cache-Control`.** Photos come back
`public, max-age=31536000, immutable`; errors (429, 503, 404) come back
`no-store` and must not be cached.
@@ -256,7 +259,63 @@ links, not the image URLs themselves.
**Changing a photo.** A CDN keeps immutable responses for as long as a browser
does. Bump `IMAGE_CACHE_VERSION` after regenerating thumbnails in Immich, which
changes every URL at once, or purge the CDN.
changes every URL at once, or purge the CDN. Edits made in Immich's editor need
neither: see [Edits made in Immich](#edits-made-in-immich).
The Content-Security-Policy allows the CDN's origin for `img-src` and
`media-src` automatically.
## Edits made in Immich
Photos edited in Immich's own editor (crop, rotate) appear as edited
everywhere: in the grid, the lightbox, the zoom, share images, the map and
downloads. Immich keeps an edit apart from the file and applies it only when
asked to, so Folio always asks for the edited rendition (for a photo that is
not edited, Immich returns the same file either way; the parameter exists
since Immich 2.5, below the 3.0 that Folio requires), and lays the grid out
with the edited proportions.
The image URL of an edited photo carries an extra `e` parameter, derived from
when the photo last changed in Immich, to the second. Image responses are cached as
`immutable` for a year and the asset ID stays the same through an edit, so
without it browsers and CDNs would keep showing the photo as it was before.
Only edited photos get a new URL; all other URLs stay as they are. A later
edit changes the parameter again, once Folio's album cache has picked it up
(`CACHE_TTL`).
Downloads of an edited photo are Immich's rendition of the edit: a
full-resolution JPEG without EXIF, named `.jpg`. Should Immich hand out the
edit in a format the location scrubber does not handle (WebP, PNG), the photo
is not downloaded rather than sent unchecked; a ZIP goes on without it and the
server log names it.
## Colour Profiles
Visitors only ever get Immich's own renditions: the `thumbnail` for grid tiles
and the `preview` for everything larger. Folio streams those bytes unchanged.
It never decodes or re-encodes a photo, so whatever colour profile Immich
embeds is what the browser sees, and colour fidelity is decided by how Immich
builds its renditions.
Immich's relevant setting is `image.colorspace` (Administration → Settings →
Image Settings), `p3` by default. Measured on Immich 3.2.0 with `p3`, thumbnail
as WebP and preview as JPEG:
| Original | Thumbnail | Preview | Colours |
| ------------------------------------------------ | ---------------------------- | ---------------------------- | ------------------------ |
| JPEG, sRGB ICC profile | sRGB | sRGB | correct |
| HEIC from an iPhone, Display P3 ICC profile | Display P3 | Display P3 | correct, wide gamut kept |
| AVIF, no ICC profile, CICP (`nclx`) BT.2020 tags | sRGB (P3 for an iPhone shot) | sRGB (P3 for an iPhone shot) | 13–37% less saturated |
The last row is a loss in Immich, not in Folio. Immich ignores the CICP colour
description of these AVIF files and labels the BT.2020 pixel values as sRGB (or
Display P3) without converting them, so the browser shows them flatter than the
original (mean chroma, compared with the decoded original). The files measured
were AVIF exports, two of them confirmably from Lightroom. Exporting with an
embedded ICC profile, or as JPEG or HEIC, should avoid it, since ICC-tagged
originals came through correctly, but that has not been tested. Adobe RGB
originals were not part of the measurement.
After changing `image.colorspace` or replacing originals, regenerate thumbnails
in Immich and bump `IMAGE_CACHE_VERSION`, since browsers and CDNs keep the old
renditions as `immutable`.