Changeset f79a471 in Klonkt for src/middleware/render.js


Ignore:
Timestamp:
06/28/2026 04:32:37 PM (2 months ago)
Author:
Robin Genis <roboburr@…>
Branches:
main
Children:
74c5abc
Parents:
1ff0043
git-author:
Robin Genis <roboburr@…> (06/28/2026 04:31:09 PM)
git-committer:
Robin Genis <roboburr@…> (06/28/2026 04:32:37 PM)
Message:

feat(images): on-demand lanczos cover thumbnails for crisp grid/list

High-res covers (esp. line-art) looked jagged because the browser downscaled them to
the grid/list size. Downscale server-side with ffmpeg lanczos to a small cached WebP
instead. No re-upload/backfill: reads the existing original lazily on first request.

  • services/ThumbnailService.js — ffmpeg lanczos downscale -> WebP, disk-cached
  • server.js — GET /media/thumb/:w/* route (whitelist 320/480/640) before the /media static
  • middleware/render.js — thumb(url,w) helper (rewrites local /media covers)
  • views/partials/post-tile.ejs (grid 480) + post-card.ejs (list 320)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/middleware/render.js

    r1ff0043 rf79a471  
    160160    formatDate,
    161161    formatDateTime,
     162    // Rewrite a local /media/<file> cover to its on-demand downscaled thumbnail
     163    // (crisp grid/list images). External URLs + already-thumb URLs pass through.
     164    thumb: (url, w) => (typeof url === 'string' && url.startsWith('/media/') && !url.startsWith('/media/thumb/'))
     165      ? `/media/thumb/${w || 480}/${url.slice(7)}`
     166      : url,
    162167    pageTitle: data.pageTitle || (data.site && data.site.title) || 'Klonkt',
    163168    appVersion: APP_VERSION,
Note: See TracChangeset for help on using the changeset viewer.