Files
hyperframes/docs/guides/performance.mdx
ukimsanov ad4c6a9b6e docs: light-theme videos on nine guides, plus two rewritten pages
**Nine guide videos rebuilt in the light house style.** They were dark — a reader
clicking between sibling guides watched the theme flip. mcp, performance,
rendering, skills, html-in-canvas and remove-background were restyled to the bone
field; faceless-explainer, product-launch and voice-and-audio were re-narrated
with River, the house voice the user-journey films use. Measured luma is 177-230,
matching the journey films, and every one carries audio.

The restyle also surfaced a real bug in the frame itself: the house coral
#D96A4F is 2.95:1 on bone, under the WCAG large-text floor, and `hyperframes
check` failed on it. Darkened to #B44E33 (4.43:1) before any of these rendered.

**canary-rollouts trimmed from 2,443 words to 520.** The statistical-calibration
essay — pre-registered experiment design, a probability formula, rejected
hardware-fingerprinting alternatives — was never documentation for someone
shipping a staged rollout. Cut to Add one / Override one / Remove one / Where it
lives, the part that was already good.

**thirty-days now shows the films.** It was 431 words and 30 links to x.com for a
series entirely about videos, with no thumbnails. It now leads with real preview
clips where a film exists and marks the rest with a visual placeholder rather
than a dead off-site link.
2026-08-04 16:09:33 -07:00

77 lines
3.3 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Fix a slow preview or render
description: Find the expensive part of a composition and make it cheaper.
---
import { DocsVideo } from "/snippets/docs-video.jsx";
A finished render can be smooth even when preview stutters. Preview must draw each frame in real time; render can take as long as it needs to capture the same frames.
<DocsVideo
title="The same composition built two ways, timed on this machine"
src="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/render-performance-demo-v2.mp4"
poster="https://static.heygen.ai/hyperframes-oss/docs/images/showcase/render-performance-demo-v2.jpg"
/>
Real numbers, not estimates: 25.0s against 9.8s, taken as the median of three
runs at 1920x1080 over 300 frames. One CSS declaration is the whole difference,
and a pixel comparison confirms the picture did not change.
## Start with the symptom
| What you see | Check first |
| --- | --- |
| Preview stutters in one scene | Large blurs, masks, shadows, or many animated layers in that scene |
| Preview pauses the first time an image appears | Oversized source images or image decoding |
| The whole page becomes slow | Script work, layout thrashing, or too many DOM nodes |
| Render is slow but the result is correct | Source-video extraction, frame capture, or encoding |
| WebM takes much longer than MP4 | VP9 encoding; transparent WebM is CPU-heavy |
## Reduce expensive browser work
- Use fewer large `backdrop-filter` and `filter: blur()` layers.
- Avoid animating dozens of shadowed elements at once.
- Replace a static blur or texture stack with a pre-rendered image.
- Size images near their actual delivery dimensions. A very large JPEG still decodes into a very large bitmap.
- Keep work inside animation callbacks small. Do not repeatedly read layout and write styles in the same frame.
For a 1920×1080 composition, a 3840×2160 source already provides enough detail for a 2× display. Larger sources usually add memory and decode work without improving the frame.
## Measure instead of guessing
1. Run `npx hyperframes preview`.
2. Open Chrome DevTools and select **Performance**.
3. Record the part that stutters.
4. Inspect the longest tasks:
- **Paint** or **Composite Layers** points to filters, shadows, masks, or large layers.
- **Layout** or **Recalculate Style** points to layout work.
- **Script** points to author code.
Change one expensive feature, record again, and keep the version that moves the bottleneck.
## Make a fast review render
If the composition is intentionally too heavy for real-time playback, review an encoded file:
```bash
npx hyperframes render --quality draft --output review.mp4
```
Use `standard` or `high` for delivery. Draft changes capture and encoder quality; it does not change the composition's timing.
## Tune transparent WebM only when needed
WebM uses the CPU-heavy VP9 encoder. The default is suitable for most work. To trade more encoding time for compression quality:
```bash
npx hyperframes render --format webm --vp9-cpu-used 2 --output overlay.webm
```
`--vp9-cpu-used` accepts integers from `-8` to `8`; higher values are faster with a larger quality/size tradeoff.
## Related topics
- [Diagnose a failed or stalled render](/guides/troubleshooting)
- [Render from the command line](/guides/rendering)
- [Render at 4K](/guides/4k-rendering)