diff --git a/docs/guides/troubleshooting.mdx b/docs/guides/troubleshooting.mdx index 41de0d82af..26d97f5074 100644 --- a/docs/guides/troubleshooting.mdx +++ b/docs/guides/troubleshooting.mdx @@ -186,8 +186,39 @@ Use Docker when you need a pinned rendering environment: npx hyperframes render --docker --output output.mp4 ``` +### Every render takes about 45 seconds longer than expected + +A composition that never registers a GSAP timeline still makes the producer wait +for one. The producer polls `window.__timelines[]` until the composition +player reports ready, then gives up after `player-ready-timeout` (45 s by +default). The wait is a fixed cost paid on every render, so it does not shrink +when you lower quality or resize media. + +Declare that the composition has no timeline: + +```html +
+``` + +`npx hyperframes lint` reports the missing attribute as +`missing_data_no_timeline`. Compositions that do register a timeline are +unaffected: the poll returns as soon as the timeline appears, long before the +timeout. + +To register a timeline instead of skipping the wait, see +[GSAP animation](/guides/gsap-animation). + ### The render is slow +The causes below scale with the project. For a constant penalty on every render, +check the timeline poll above first. + During iteration: - use draft quality; diff --git a/docs/reference/html-schema.mdx b/docs/reference/html-schema.mdx index b44f9bd104..2c445aabcb 100644 --- a/docs/reference/html-schema.mdx +++ b/docs/reference/html-schema.mdx @@ -80,7 +80,7 @@ timeline registry key. | `data-start="0"` | Yes on the top-level root | Start of the composition | | `data-width` and `data-height` | Yes | Authored frame dimensions in pixels | | `data-duration` | Usually | Total render duration in seconds | -| `data-no-timeline` | Only for a timeline-free composition | Tells the runtime not to wait for a timeline | +| `data-no-timeline` | Only for a timeline-free composition | Tells the runtime not to wait for a timeline. Without it a composition that never registers one still waits out `player-ready-timeout` (45 s by default) on every render; `hyperframes lint` reports this as `missing_data_no_timeline` | An explicit root `data-duration` is the render length. The compiler reads it before composition scripts run, so a script or variable override cannot change