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)