[claude] Automated Episode Compiler — Highlights to Published Video (#880) #1318
Reference in New Issue
Block a user
Delete Branch "claude/issue-880"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes #880
What this does
Implements the full end-to-end content pipeline from highlight clips to published episode:
src/content/extraction/clipper.py— FFmpeg frame-accurate clip extraction; async concurrent multi-clip extraction; graceful degradation whenffmpegnot on PATHsrc/content/composition/episode.py— MoviePy v2 episode builder: intro card, crossfade highlight montage, TTS narration mix, background music loop, outro card; wrapped inasyncio.to_threadto never block the event loopsrc/content/narration/narrator.py— TTS narration generation with Kokoro-82M (mlx_audio, Apple Silicon) → Piper fallback chain;build_episode_script()helper for generating full episode scriptssrc/content/publishing/youtube.py— YouTube Data API v3 upload with 6-uploads/day quota enforcement via sidecar JSON counter; thumbnail upload; OAuth2 credentials from filesrc/content/publishing/nostr.py— Blossom (NIP-B7) blob upload + NIP-94 file-metadata event publication; partial success when Blossom succeeds but relay event failssrc/content/archive/indexer.py— Meilisearch indexing with searchable/filterable/sortable attributes;search_episodes()for full-text archive searchsrc/config.py— 18 new settings: output dirs, TTS backend/voice/model, intro/outro assets, music library, YouTube credentials + counter, Nostr/Blossom keys + relay, Meilisearch URL + API keyGraceful degradation
All optional dependencies (ffmpeg, moviepy, mlx_audio, google-api-python-client, meilisearch) are checked at runtime. Missing deps log a warning and return failure results — the app never crashes.
Tests
90 unit tests across 5 new test files. All 647 unit tests pass.