Skip to content

2026-08-03 — Media pipeline pass

Brief mark, not a full changelog — see code comments for detail.

Added - Video normalize step (mdat defrag + AV duration trim + loudnorm -23 LUFS), overwrites source key - Passthrough media transcoding profile (seeded, empty renditions = skip ladder) - PPT/PPTX/ODP thumbnails via LibreOffice headless → PDF → existing ghostscript path (new libreoffice image dependency) - GET /media/storage-audit — orphan/missing object report vs. SeaweedFS - Error logging across most of domain/media/handlers (was mostly silent on failure before)

Fixed - DELETE /media/:id now purges SeaweedFS by default (was DB-only; even opt-in purge missed the hls/smil trees) - Playback TranscodingPreset.ForceClean couldn't persist false (GORM zero-value skip) - Scheduled channel + single media file produced no playable content (missing bundling branch) - Playback passthrough no longer forces a full transcoding-preset selection (own ingest-tuning fields instead)

Removed - PlayoutAdmin/media/pages/MediaUpload.jsx (dead, unrouted) - Media.RetainSource field + its frontend toggle (never read, never sent)

Flagged, not touched - PlayoutAdmin/components/legacy/** — dead - utils/api.js's API_MONO_URL-based functions — broken (undefined var), unused - handler_pdf.go's HandleConvertPdf — dead, hardcoded staging URLs - domain/catalogue scheduler — live but broken (timestamptz/time comparison, every tick fails)

See: Media Upload & Consumption Guide, Assets Guide