Skip to content

v0.2.1 — block delivery: full-volume original blocks + one-line subtitle band

Choose a tag to compare

@worldwonderer worldwonderer released this 17 Jun 00:47
· 41 commits to main since this release
961390f

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_volume now defaults to 1.0 and duck_bridge_seconds to 1.5 (was 12) — 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 with IDLE_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. voiceover sized a segment against the raw TTS duration, ignoring the narration_speed (1.3×) atempo assemble applies before placement — clipping well-sized blocks into fragments. The truncation budget now accounts for narration_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