Skip to content

Pass the speed waiver to blurred variants, let Words own its line breaks - #4

Open
ThomasKirst wants to merge 2 commits into
Leonxlnx:mainfrom
ThomasKirst:feat/variant-accept-fast-words
Open

ThomasKirst wants to merge 2 commits into
Leonxlnx:mainfrom
ThomasKirst:feat/variant-accept-fast-words

Conversation

@ThomasKirst

@ThomasKirst ThomasKirst commented Oct 17, 2026 •

Copy link
Copy Markdown

Hi, this is the second, smaller PR from our film project (the colour fix is in #3). There are two independent things in it. Happy to split them, adjust them or drop either one if it doesn't fit how you see the starter.

Like the first PR, this was made together with Claude (Opus 5.5) in Claude Code.

deliver.sh --variant-accept-fast A-B

Our master had a few fast frames that we checked at full size and waived with render.sh --blur --accept-fast A-B. The blurred variants (--variant-samples) reuse the master's samples, so they hit the same speed gate and stopped before their sub-frame pass. deliver.sh had no way to pass the waiver on.

  • --variant-accept-fast A-B forwards the range to each variant's render.sh.
  • Without --variant-samples the flag is refused, since sharp variants have no speed gate.

Words

  • No audit tag outside its window. Before its first word starts and after its exit has finished, a Words line is invisible but kept its data-text tag, so layout-audit.sh reported it as overlapping whatever later sat in the same place. We had 27 such false positives, from two copy lines sharing one place across a shot. Like MaskRise, the line now carries data-text only while some of it is on screen. It keeps its box, so nothing laid out around it moves. (A first version returned null, which would have shifted neighbours in flow layout; fixed in the second commit.)
  • breaks. Word indices that start a new line. Our 9:16 cuts needed statements on two lines, and it felt cleaner to make the break a layout decision per aspect ([2] in 9:16, [] in 1:1) than to depend on the box width.
    • Without breaks, the line renders as before, as one row.
    • The lines are left-aligned; style={{ alignItems: 'center' }} centres each one.
    • The rows sit in an inline-flex column, and the data-text box still spans the whole statement.

references/copy-and-type.md and references/finishing.md mention both. The CHANGELOG.md entries are under [Unreleased].

This PR and the colour PR both add to [Unreleased] in CHANGELOG.md, so whichever merges second has a small conflict there. I'll rebase this one once the other is in.

Checks

  • lint-film.test.mjs passes.
  • pick.test.py passes.
  • py_compile passes for all scripts.
  • bash -n scripts/deliver.sh passes.
  • tsc --noEmit passes on the starter.
  • In use in our film, layout-audit.sh passes on both variants (0 issues on 44 frames each).

- deliver.sh: --variant-accept-fast passes the master's --accept-fast range to blurred variants.
- Words: render nothing outside its window, so layout-audit.sh stops reporting invisible lines;
  add breaks for layout-owned line breaks.
Returning null made anything laid out in flow around the line move when it appeared or left.
Like MaskRise, the line now keeps its box and carries data-text only while some of it is on
screen. Document alignItems for centring broken lines.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant