v0.2.1 — block delivery: full-volume original blocks + one-line subtitle band
A delivery-quality release: narration now plays in blocks with the original audio breathing between them at full volume, and the burned-in subtitle band no longer compresses the picture.
Changed
- Narration is delivered in BLOCKS, ~7:3. Each beat is a few sentences written as one continuous thought and synthesized as a single fluent TTS utterance — fixing the choppy, sentence-by-sentence delivery. Between blocks the recap leaves deliberate original-audio blocks (~30% of the timeline) where the original scene plays at full volume.
- Original-audio blocks play at full volume.
idle_orig_volumenow defaults to1.0andduck_bridge_secondsto1.5(was12) — the original is ducked only under a narration block and swells back to full in the gaps, instead of one permanent low bed. Reverses the 0.2.0 "continuous bed". Tune withIDLE_ORIG_VOLUME/DUCK_BRIDGE_SECONDS. - Burned-in subtitles split into short one-line chunks timed karaoke-style across each block; the source-subtitle masking band sizes for ONE line (~14% of height) instead of two (~23%) — no longer compresses the picture.
- Brief + lint steer block authoring, with a block-coverage lint (
no_original_blocks/under_narrated/no_original_breaks/fragmented_beats) replacing the per-sentence density lint.
Fixed
- Blocks are no longer truncated by the speed-up.
voiceoversized a segment against the raw TTS duration, ignoring thenarration_speed(1.3×) atempo assemble applies before placement — clipping well-sized blocks into fragments. The truncation budget now accounts fornarration_speed.
275 tests green on macOS / Linux / Windows; brief.py⇄narration.py parity preserved. See PR #17.
Full changelog: v0.2.0...v0.2.1