screentinker/server
Rob K bfe8a4c907 Backfill missing thumbnails at boot, and say when ffmpeg is absent
Ingest-time thumbnail generation is best-effort by contract, so a row that
misses it stays bare forever: video uploads on a host without ffmpeg (a
SYSTEM dependency nothing surfaced), or content from before thumbnails
existed. Operators read that as "thumbnails don't work".

Two additions. A [MEDIA] startup diagnostic (async probe, cached) states
loudly whether ffmpeg/ffprobe were found, mirroring the [EMAIL] block. And
a once-per-boot sweep re-derives metadata for local image/video rows with
no thumbnail — serial, paced, delayed past boot, unref'd. The sweep's row
UPDATE re-checks that thumbnail_path is still empty so it never clobbers a
thumbnail written concurrently by the replace flow, removes its just-written
file when the row vanished mid-derive, salvages probed dims/duration even
when the thumbnail itself failed, and stops after 25 failures per boot so a
library of undecodable clips can't turn every restart into subprocess churn.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0131RYmVh8ePEhparD3mXBhU
2026-08-07 09:30:32 +01:00
..
config fix(logging): gate CF-Connecting-IP on a Cloudflare peer, not any trusted proxy 2026-07-26 10:23:04 -05:00
db The checkpointer startup line no longer describes a policy it stopped having 2026-08-06 22:12:01 -05:00
lib Backfill missing thumbnails at boot, and say when ffmpeg is absent 2026-08-07 09:30:32 +01:00
middleware Merge branch 'fix/recovery-grants' into release/auth-campaign 2026-07-26 16:22:59 -05:00
player Merge 1.9.30: fail loudly on a missing asset; stop an empty playlist wiping the cache 2026-08-06 17:45:34 -05:00
routes #240: stop the morning wave buying itself a blocking checkpoint 2026-08-06 20:22:21 -05:00
scripts fix(content+android): rotation-aware media — portrait upright on dashboard AND player (#170) (#172) 2026-07-12 22:05:11 -05:00
services #240: stop the morning wave buying itself a blocking checkpoint 2026-08-06 20:22:21 -05:00
test Backfill missing thumbnails at boot, and say when ffmpeg is absent 2026-08-07 09:30:32 +01:00
ws QA: close four ways a control or an asset lied about itself 2026-08-06 16:12:29 -05:00
.gitignore feat(email): Microsoft Graph send + alert spam protection + preferences UI 2026-05-12 18:16:40 -05:00
config.js #240: stop the morning wave buying itself a blocking checkpoint 2026-08-06 20:22:21 -05:00
package-lock.json chore(release): v1.9.31 2026-08-06 21:08:14 -05:00
package.json chore(release): v1.9.31 2026-08-06 21:08:14 -05:00
server.js Backfill missing thumbnails at boot, and say when ffmpeg is absent 2026-08-07 09:30:32 +01:00
smoke-ui.js Keep the smoke test out of npm test, and update the lockfile 2026-07-28 20:34:34 -05:00
version.js chore(version): single-source VERSION, env-configurable data paths, bump tooling 2026-06-10 12:56:03 -05:00