• Stefy Lanza (nextime / spora )'s avatar
    14c + 14d: wrap text instead of shrinking it, and let a clip's sound come from its own file · 3ebc2bd5
    Stefy Lanza (nextime / spora ) authored
    14c. A text overlay was one drawtext line sized from the frame height, so a
    long text ran off a vertical frame, and a pre-wrapped text was drawn as a
    single line because an explicit newline was never a break. `overlays[].fit`
    takes none (the default, today's behaviour) | wrap | shrink, and a newline now
    breaks whatever the fit. Wrapping emits one drawtext per line, placed as a
    single left-aligned block measured from the widest line, rather than letting
    each line centre itself ragged. `captions.fit` takes shrink (the default) |
    wrap, folding a too-wide row's trailing words onto a new row instead of
    shrinking that event -- on a vertical video shrinking can go below readable.
    Word order is preserved, so the karaoke highlight still walks the words in the
    order they are spoken.
    
    Both fitters now MEASURE the result instead of scaling the size by the width
    ratio. Advance is very nearly linear in size, which is why the shortcut looks
    right, but hinting rounds each glyph's advance to whole pixels and the error
    compounds over a long string: a 95-character line computed to fit at size 8
    measured 440 px against a 300 px budget. A test caught it. _fit_size carried
    the same assumption and shrink is its default, so it is fixed the same way.
    
    14d. `visuals[].audio_src` names a separate audio-only file -- DASH sites serve
    picture and sound as separate streams, so the best video of a clip often has no
    audio track and a caller that cannot mux had to skip it. The picture path is
    deliberately left alone: stage 3 reuses it as the visual's video, and an
    audio-only file there would render a scene with no image. Lengths in
    audio_mix="clip" come from whatever carries the sound.
    
    Also: the dialogue tests no longer depend on a TTS model being installed. They
    test how a dialogue scene is VALIDATED and say so -- their portraits are inline
    "so the test does not depend on what is saved on this install" -- but three of
    them failed standalone with 501 "narration needs a TTS model" without reaching
    the validation they exercise. Only the inventory is faked, not the check.
    Co-Authored-By: 's avatarClaude Opus 5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_014T3rZnLhydX9QqUcfBbqLu
    3ebc2bd5
test_compose_text_fit.py 8.63 KB