mirror of
https://github.com/hanzoai/frames.git
synced 2026-09-24 00:08:03 +00:00
Every SKILL.md already declared the new name — name: frames, frames-cli, frames-core, and so on — but the directories were never moved, so the tree carried frames-* in content and hyperframes-* on disk. Everything that resolves a skill by path missed: the core-skill list, the plugin marketplace pin, and the docs the CLI reads at runtime. Eight tests failed on main because the files they open do not exist. The directories now match what the files say they are, and the guide the claude-design contract reads takes the name that contract already used.
2.7 KiB
2.7 KiB
doctor, browser
Environment diagnosis and bundled-Chrome management. Run these first when a render or preview fails.
doctor
npx @hanzo/frames doctor
npx @hanzo/frames doctor --json # CI / agent output (always exit 0; gate on payload `ok`)
Runs independent checks and reports each as ok/warn/fail:
- Version — installed CLI vs latest on npm (hints upgrade when stale)
- Node.js — ≥ 22 required
- CPU, Memory, Disk — host resources
- Environment — env vars that affect the renderer
- FFmpeg / FFprobe — found, version, codecs
- Chrome — bundled or system, version, path
- Docker / Docker running — required only for
render --docker - /dev/shm — inside containers only
Run doctor first when:
renderfails with a Chrome or FFmpeg error.previewopens but the composition fails to load.- A fresh machine has never run Frames.
Common issues:
- Missing FFmpeg — install via
brew install ffmpeg(macOS) or your package manager. - Missing bundled Chrome — run
npx @hanzo/frames browser ensure. - Low memory — close other Chromes, reduce
--workers, or use--quality draft. - Chrome exits instantly inside an agent sandbox (macOS) — seatbelt-style sandboxes
(e.g. codex
workspace-write) block Chromium's Mach port bootstrap (MachPortRendezvous; openai/codex#21292), so every Chrome — bundled, system, or headless shell — dies at startup. This is a host-level block, not a Frames or Chrome install problem: compile checks and audio still pass, only rendering is unavailable. State the blocker and deliver the checked composition; render outside the sandbox or viarender --docker/ cloud rendering where available. Do not build a substitute rasterizer (magick/PIL/SVG frame pipelines) — on a blocked-browser host the deliverable IS the checked composition plus this blocker note, and rendering is handed to--docker, cloud, or the user. Write your final summary the moment the blocker is identified, BEFORE any optional fallback work: a later session failure must not erase the report of work already done.
browser
npx @hanzo/frames browser ensure # find or download the pinned Chrome
npx @hanzo/frames browser path # print the browser executable path (for scripting)
npx @hanzo/frames browser clear # remove the cached Chrome download
Manage the Chrome build Frames uses for rendering. The pinned version exists because pixel output drifts across Chrome versions — using the bundled build keeps rendered output reproducible across machines.
Use path to embed the binary in scripts: $(npx @hanzo/frames browser path).