Skip to content

fix(render): seek single-composition (-c) renders at the requested fps#1714

Open
func25 wants to merge 1 commit into
heygen-com:mainfrom
func25:func25/fix-single-composition-render-fps
Open

fix(render): seek single-composition (-c) renders at the requested fps#1714
func25 wants to merge 1 commit into
heygen-com:mainfrom
func25:func25/fix-single-composition-render-fps

Conversation

@func25

@func25 func25 commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

What

render -c <scene> -f 60 outputs a 60fps file whose motion only advances at 30fps (every other frame is a duplicate). The same scene in the full reel is fine. Verified it is not dedup and not VFR.

Why

A single <template> composition rendered with -c mounts under a synthetic wrapper root that has no timeline of its own; only the inner composition registers in window.__timelines. So:

  1. The export poll waits for the root host's own timeline, times out, and the child timeline is never nested/seeked — the scene free-runs at the capture tick rate.
  2. The deterministic seek quantizes to the runtime's default canonicalFps (30), not the export fps.

How

  • runtime: when a wrapper root resolves a composite timeline but its host id has no registered timeline, publish it under that id so the poll resolves and the seek drives the nested children. No-op for full reels.
  • engine: inject the export fps (window.__hfCanonicalFps) before page scripts so the runtime seeks on the export grid. Honors --fps.

Test plan

How was this tested?

  • Unit tests added/updated
  • Manual testing performed
  • Documentation updated (if applicable)

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