fix(thumbs): size thumbnails for the tile's width at 2x, not 512 on the long side
The operator on sindra-nude-final: "the images look blurry until they're selected and blown up." The cap was 512px on the LONGEST side, which the comment called "comfortably above any tile size", and it was, for a square. A gallery tile is sized by its WIDTH, though, and a 704x1408 portrait got 256px of width for a tile Chromium renders at 361 CSS px. That is 1.4x stretched at 1x density and 2.8x on a 2x screen. The review stage serves the original, which is why it looked sharp once opened. - THUMB_WIDTH = 768: the widest desktop tile (3 columns, 1440px and up, measured at 321-361 CSS px across viewports) doubled for a 2x screen. THUMB_HEIGHT_MAX = 4096 stops a long screenshot going through at full height. - An original that fits the bounds is served as-is only when it is also light (<= 64 KB; 768-wide thumbnails average 39 KB over the 381 live images) or animated, since a thumbnail is one frame. Fitting a tile in pixels is not being cheap in bytes: these portraits are ~1.1 MB PNGs. - The size rule is in the cache name (`<rel>.768w.webp`). The live 512-cap thumbnails are newer than their sources, so the mtime check alone would have served them forever. The old files are orphans, swept with their booth. - tests/test_thumbs_browser.py holds THUMB_WIDTH against the rendered grid at 1440, 1920 and 2560. The constant is a layout number, and a redesign that widens the tiles turns it red instead of soft. Measured cost, all 381 live images: 4.8 MB -> 14.2 MB of thumbnails, still ~27x under the 386 MB of originals. Known limit: the 2-column (<=472px) and 1-column (<=650px) reflows are softer than 768 covers at 2x. tests/mutations/thumbs.toml proves 7 falsifiers.
This commit is contained in:
+12
-3
@@ -43,9 +43,18 @@ _As of 2026-09-23:_
|
||||
/b/<name>/blurbooth`, and **`booth blur <name>` with NO files fogs the whole
|
||||
booth**. COMPOSES with `.blurred`, never overrides. All 17 handles can
|
||||
self-blur at post time.
|
||||
- ✅ **THUMBNAILS ARE LIVE.** 77.5 MB → 0.78 MB on the biggest gallery; the Desk
|
||||
~100 MB → 1.12 MB. Four surfaces (tile, Desk strip, flag tray, filmstrip); the
|
||||
review stage keeps the original.
|
||||
- ✅ **THUMBNAILS ARE LIVE, AND SIZED FOR THE TILE'S WIDTH** (operator,
|
||||
2026-09-23: "blurry until selected"). The first cut capped the LONGEST side at
|
||||
512, so a 704x1408 portrait got 256px of width for a 361px tile, stretched
|
||||
1.4x at 1x and 2.8x on a 2x screen. Now they are 768 wide (2x the widest
|
||||
desktop tile) and capped at 4096 tall, and an original that fits but weighs
|
||||
over 64 KB is still re-encoded. Measured on the 381 live images: all
|
||||
thumbnails 4.8 → 14.2 MB, still ~27x under the originals. ⚠ **768 is a LAYOUT
|
||||
number:** `tests/test_thumbs_browser.py` holds it against the rendered grid,
|
||||
so if a redesign widens the tiles, that test goes red. The 2-column (≤472px)
|
||||
and 1-column (≤650px) reflows are softer than 768 covers at 2x; 1024 would
|
||||
cover 2 columns for 18.5 MB total. Four surfaces (tile, Desk strip, flag tray,
|
||||
filmstrip); the review stage keeps the original.
|
||||
→ `persistent-memory.d/2026-09-23-the-cache-that-aged-the-thing-it-cached.md`
|
||||
- ✅ **CREATION + UPDATE DATES ARE ON THE RECORD** for all 30 booths
|
||||
(`created_at` via `statx`, `landed_at` already existed). design-dev renders
|
||||
|
||||
Reference in New Issue
Block a user