Describe the bug
Opening existing captions in Studio changes which words belong together. The importer averages the number of words across all caption groups, so even a normal final, shorter group shifts a word into the wrong group.
| Caption group |
Authored |
Imported on main |
| 1 |
We asked what you needed. |
We asked what you |
| 2 |
Forty-seven percent |
needed. Forty-seven percent |
Seven words grouped as 5 + 2 become 4 + 3. Nonuniform 2 + 4 + 1 groups become 2 + 2 + 2 + 1. Generating HTML from the imported model then writes those changed boundaries.
Reproduction
Minimal regression fixture. The fix and tests are already prepared on this branch.
To reproduce the failure in a fresh clone using the original parser:
git clone --branch fix/caption-group-import https://github.com/AksharP5/hyperframes.git caption-group-repro
cd caption-group-repro
bun install --frozen-lockfile
git restore --source=ee73b282a^ --worktree packages/studio/src/captions/parser.ts
bunx vitest run packages/studio/src/captions/parser.dom.test.ts
The first test fails with expected [4, 3] to deeply equal [5, 2]. The fixture supplies a transcript and matching DOM word spans to parseCaptionComposition, the same boundary Studio uses when detecting captions.
Expected behavior
Import preserves the authored group boundaries, word order, IDs, and timing. Layout lines nested inside a caption group do not count as separate timed groups.
Environment
Reproduced against main at 51a88b956, Studio 0.8.35, Linux, Node 26.8.1, Bun 1.3.13. Regression tests use Vitest and happy-dom; the fixed generator/import round trip was also checked in Chromium with real iframe DOM and GSAP.
Describe the bug
Opening existing captions in Studio changes which words belong together. The importer averages the number of words across all caption groups, so even a normal final, shorter group shifts a word into the wrong group.
Seven words grouped as
5 + 2become4 + 3. Nonuniform2 + 4 + 1groups become2 + 2 + 2 + 1. Generating HTML from the imported model then writes those changed boundaries.Reproduction
Minimal regression fixture. The fix and tests are already prepared on this branch.
To reproduce the failure in a fresh clone using the original parser:
git clone --branch fix/caption-group-import https://github.com/AksharP5/hyperframes.git caption-group-repro cd caption-group-repro bun install --frozen-lockfile git restore --source=ee73b282a^ --worktree packages/studio/src/captions/parser.ts bunx vitest run packages/studio/src/captions/parser.dom.test.tsThe first test fails with
expected [4, 3] to deeply equal [5, 2]. The fixture supplies a transcript and matching DOM word spans toparseCaptionComposition, the same boundary Studio uses when detecting captions.Expected behavior
Import preserves the authored group boundaries, word order, IDs, and timing. Layout lines nested inside a caption group do not count as separate timed groups.
Environment
Reproduced against main at
51a88b956, Studio0.8.35, Linux, Node26.8.1, Bun1.3.13. Regression tests use Vitest and happy-dom; the fixed generator/import round trip was also checked in Chromium with real iframe DOM and GSAP.