optional-skills/creative/hyperframes/references/troubleshooting.md
HeadlessExperimental.beginFrame' wasn't found (first thing to check)Symptom: npx hyperframes render fails with:
✗ Render failed
Protocol error (HeadlessExperimental.beginFrame):
'HeadlessExperimental.beginFrame' wasn't found
Cause: Chromium 147+ removed the HeadlessExperimental.beginFrame CDP command. This affected sandbox environments (e.g., OpenClaw, some containerized agent hosts) that ship modern Chromium as the system browser. See hyperframes#294.
Fix (permanent — preferred): upgrade.
npx hyperframes upgrade -y
# or
npm install -g hyperframes@latest
hyperframes >= 0.4.2 auto-detects whether the resolved browser supports beginFrame (checks for chrome-headless-shell in the binary path) and falls back to screenshot capture mode when it doesn't. Commit 4c72ba4 (March 2026) shipped this auto-detect.
Fix (escape hatch — if you can't upgrade):
export PRODUCER_FORCE_SCREENSHOT=true
npx hyperframes render
This forces screenshot mode regardless of the binary. Screenshot mode is slightly slower but visually identical.
Fix (prevent — recommended): install chrome-headless-shell so the engine can use the fast BeginFrame path:
npx puppeteer browsers install chrome-headless-shell
# or let the CLI do it
npx hyperframes browser --install
scripts/setup.sh runs this automatically.
npx hyperframes render hangs for 120s then times outCause: the resolved browser is system Chrome (e.g., /usr/bin/google-chrome) and doesn't support the BeginFrame path, but auto-detect also missed it (older hyperframes version).
Fix:
npx hyperframes browser --pathchrome-headless-shell: npx hyperframes browser --install, ORexport PRODUCER_FORCE_SCREENSHOT=true, ORnpx hyperframes upgrade -yffmpeg: command not foundInstall FFmpeg via your system package manager:
| OS / distro | Command |
|---|---|
| Ubuntu / Debian | sudo apt-get install -y ffmpeg |
| Fedora / RHEL | sudo dnf install -y ffmpeg |
| Arch | sudo pacman -S ffmpeg |
| macOS | brew install ffmpeg |
| Windows | winget install Gyan.FFmpeg |
Verify: ffmpeg -version.
Node version X is not supportedHyperFrames requires Node.js >= 22. Check with node --version.
nvm install 22 && nvm use 22brew install node@22 && brew link --overwrite node@22ENOSPC: no space left on device or OOM kills during renderRenders are memory- and disk-hungry. Minimums:
--quality high)/tmp during captureMitigations:
--quality draft.--fps 24.--workers 1.TMPDIR to a volume with more space: export TMPDIR=/mnt/scratch.Check the browser console in preview — usually:
__timelines["typo"] instead of __timelines["root"]).<template> (only sub-compositions use <template>).Run npx hyperframes lint --verbose to see info-level findings.
hyperframes validate⚠ WCAG AA contrast warnings (3):
· .subtitle "secondary text" — 2.67:1 (need 4.5:1, t=5.3s)
--no-contrast if iterating rapidly, but clear it before delivery.Font family 'X' not supported by compilerThe compiler embeds a curated set of web-safe + open-source fonts. If a font isn't supported, either:
@font-face pointing to a .woff2 in the project directory (the compiler embeds referenced @font-face files).Check:
<video> element has muted playsinline (required — browser autoplay policy).<audio> element, not the video element.data-volume is set (defaults to 1).Add --privileged or pass --cap-add=SYS_ADMIN:
npx hyperframes render --docker --docker-args "--cap-add=SYS_ADMIN"
The headless browser needs namespace permissions for sandboxing.
Include npx hyperframes info output + the full error log. File at github.com/heygen-com/hyperframes.