Skip to content

Studio changes authored caption group boundaries on import #3899

Description

@AksharP5

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions