## Summary **Skill install targets (original):** - Add project-level skill install targets: Windsurf, Cline, Roo Code, Trae (opt-in via flag) - Split install logic into global vs project-level - Fix lint false positive: timed tags with `data-composition-id` no longer flagged by media rule **Skill system cleanup (folded from #189):** - Delete `install-skills.ts` (~485 lines) — remove custom installation wrapper entirely - Strip skill logic from `init` — no more project-level `.claude/skills/` copies, no `--skip-skills` flag; replaced with post-scaffold message: `npx skills add heygen-com/hyperframes` - Front-load SKILL.md trigger words — all 5 skill descriptions rewritten so activation language comes first (~150 chars) - Update CLAUDE.md — install instructions now point to [vercel-labs/skills](https://github.com/vercel-labs/skills) - Fix `.claude/settings.json` — pre-commit hook changed from `pnpm` to `bun` ## Test plan - [ ] `npx hyperframes skills` → "Unknown command skills" - [ ] `npx hyperframes init test --template blank --non-interactive --skip-transcribe` → prints `npx skills add heygen-com/hyperframes` - [ ] `grep -r "install-skills" packages/cli/src/` → no results - [ ] All 5 `skills/*/SKILL.md` have front-loaded descriptions 🤖 Generated with [Claude Code](https://claude.com/claude-code)
5.7 KiB
name, description
| name | description |
|---|---|
| hyperframes-cli | Preview, render, lint, validate, scaffold, or troubleshoot HyperFrames compositions. Also use after finishing a composition — lint and preview are the natural next steps. |
HyperFrames CLI
The CLI turns HTML compositions into previews and rendered video. Everything runs through npx hyperframes.
npx hyperframes <command>
Requires Node.js >= 22 and FFmpeg. Run npx hyperframes doctor if anything fails.
Workflow
The natural sequence when building a composition:
- Scaffold —
npx hyperframes init my-video(new projects only) - Write — author HTML composition (see
compose-videoskill) - Lint —
npx hyperframes lintto catch structural errors - Preview —
npx hyperframes previewto see it live in the studio - Render —
npx hyperframes renderto export video
Lint before preview. It catches missing data-composition-id, overlapping tracks on the same data-track-index, unregistered timelines, and other structural issues that silently produce broken output. A 2-second lint saves minutes debugging a blank screen. Both preview and render auto-lint, but linting explicitly after editing gives you a chance to fix issues without waiting for the server or renderer to spin up.
Scaffolding New Projects
npx hyperframes init my-video # interactive wizard
npx hyperframes init my-video --template warm-grain # pick a template
npx hyperframes init my-video --video clip.mp4 # with video file
npx hyperframes init my-video --audio track.mp3 # with audio file
npx hyperframes init my-video --non-interactive # skip prompts (CI/agents)
Templates: blank, warm-grain, play-mode, swiss-grid, vignelli, decision-tree, kinetic-type, product-promo, nyt-graph.
init creates the right file structure, copies media, transcribes audio with Whisper, and installs AI coding skills. Use it instead of creating files by hand — the template includes boilerplate that's easy to forget.
Linting
npx hyperframes lint # current directory
npx hyperframes lint ./my-project # specific project
npx hyperframes lint --verbose # include info-level findings
npx hyperframes lint --json # machine-readable output for scripting
Lints index.html and all files in compositions/. Reports errors (must fix), warnings (should fix), and info (with --verbose).
When to lint:
- After writing or editing any composition file — always
- Before rendering —
renderblocks on errors with--strict, but linting first is faster - After timing changes — overlapping clips on the same track are a common mistake
Previewing in the Studio
npx hyperframes preview # serve current directory
npx hyperframes preview ./my-project # specific project
npx hyperframes preview --port 4567 # custom port (default 3002)
Opens the studio in your browser automatically. Hot-reloads on file changes. Run from the project root (directory containing index.html).
Rendering to Video
npx hyperframes render # standard MP4
npx hyperframes render --output final.mp4 # named output
npx hyperframes render --quality draft # fast iteration
npx hyperframes render --fps 60 --quality high -o hd.mp4 # high quality
npx hyperframes render --format webm -o overlay.webm # transparent WebM
npx hyperframes render --docker -o deterministic.mp4 # reproducible
| Flag | Options | Default | Notes |
|---|---|---|---|
--output |
path | renders/name_timestamp.mp4 | Output file path |
--fps |
24, 30, 60 | 30 | 60fps doubles render time |
--quality |
draft, standard, high | standard | Use draft while iterating |
--format |
mp4, webm | mp4 | WebM supports transparency |
--workers |
1-8 or auto | auto (half CPU cores, max 4) | Each spawns a Chrome process |
--docker |
flag | off | Byte-identical output across machines |
--gpu |
flag | off | GPU-accelerated encoding |
--strict |
flag | off | Fail on lint errors |
--strict-all |
flag | off | Fail on errors AND warnings |
Quality guidance:
draftwhile iterating on timing and layout — fast feedbackstandardfor review and most deliverableshighonly for final delivery where render time doesn't matter
Troubleshooting
npx hyperframes doctor # check environment (Chrome, FFmpeg, Node, memory, disk)
npx hyperframes browser # manage bundled Chrome installation
npx hyperframes info # version and environment details
npx hyperframes upgrade # check for updates
Run doctor first if rendering fails or produces unexpected results. Common issues:
- Missing FFmpeg →
brew install ffmpeg - Missing Chrome →
npx hyperframes browser ensure - Low memory → close other apps (each render worker uses ~256MB)
Other Commands
npx hyperframes compositions # list compositions in current project
npx hyperframes docs # open documentation in browser
npx hyperframes benchmark . # benchmark render performance