HyperFrames: Make a Video End to End
Activated Cloud✓ Officialactivated/hyperframes
Free · Apache-2.0
About
The front door and end-to-end workflow for any video job made with HyperFrames (video rendered from HTML): promos, launch videos, explainers, captioned clips, title cards, overlays, slideshows, beat-synced music videos, PR explainers and Remotion ports. Reads the project's state, runs the brief interview, picks the route, plans and storyboards, builds, checks every frame itself and hands the owner a finished MP4. Not for composition rules (hyperframes-core), single commands (hyperframes-cli) or one camera move (hyperframes-keyframes).
Documentation
HyperFrames: Make a Video End to End
HyperFrames renders video from HTML: a composition is an HTML file whose elements declare timing with data-* attributes, whose animation runs on a seekable timeline, and whose media playback the framework owns. This skill is where every video job starts. It works out what state the project is in, turns "make me a video" into a confirmed brief, chooses the route that fits the deliverable, and runs the production from plan to a finished MP4. The standard: the message is clear by the second beat, every frame was looked at by you before the owner sees it, the scope is exactly what was asked, and nothing is rendered as final before the owner says go (unless they told you to just make it).
When to use
- "Make a 30-second promo for our site", "a launch video for the new feature", "explain how DNS works as a video", "animate this stat", "add captions to my clip", "a pitch deck we can click through", "a video for this song", "turn PR #1187 into a changelog video", "port my Remotion project".
- Any request to edit, inspect, check, preview or render an existing HyperFrames project.
- Inputs can be a website URL, a GitHub pull request, a script or brief, notes, footage, music, or exported design files.
- HyperFrames is the default way to make the video unless the owner chooses another tool or only wants a screen recording.
What you need
- Your computer set up for HyperFrames: run the check in
references/computer-setup.mdfirst (Node 22+ and FFmpeg are not installed by default) and start every CLI call with its environment line. Work goes in~/Desktop/<your name> - Work space/<job>/<project>/. - The request in the owner's words, and any material they gave (files, links, a script, brand guidelines). If you cannot find an attached file on your computer, ask with
clarify. - The owner's remembered video preferences and saved recipes from
memory(destination, aspect, language, voice, style preset, review preference). - Access, per route: a website is captured on your own computer (
npx hyperframes capture) or read in your browser; a private GitHub PR needs the connected GitHub app or your browser signed in by the owner (a public PR's diff downloads without either); footage and music come from the owner. When none of these is available, ask the owner viaclarifyor work from files they provide. - Voice comes from your
text_to_speechtool and pictures fromimage_generate. Music and sound effects only from sources whose licence allows commercial use, checked and recorded (seemedia-use). No hosted rendering, no third-party AI service, no API keys.
Method
1. Start from the project's state
Apply the first row that matches; do not evaluate lower rows.
| State | Action |
|---|---|
| The owner explicitly asks to port existing Remotion source | Route remotion-to-hyperframes (see references/routes.md). Skip the interview. |
| A specific operation on an existing project: inspect, diagnose, check, preview, render, batch-render | Do only that operation; load hyperframes-cli. |
| A question, a hold, an idea with no concrete change, or a felt note on a built film | Follow hyperframes-studio, step 1: classify the message before touching files. |
| A new film asked for inside an existing project | Follow hyperframes-studio, step 6 (a follow-on stays; a new aspect or route is a new project). |
| A specific edit to an existing project | Make the edit; no interview. Read npx hyperframes timeline --json instead of opening every file. |
BRIEF.md exists |
Read its workflow, flow and storyboard, then execute that route. Ask no brief questions. |
No brief, but hyperframes.json or STORYBOARD.md exists |
Resume from the files and remembered preferences. If the route cannot be told apart, ask one routing question only. |
| Fresh creation | Run the intent interview (references/intent-interview.md), then route once with step 3's table. |
If a fresh request does not say what the video is about, ask that before routing, after checking memory and saved recipes.
2. Keep the project's CLI current
A scaffolded project pins hyperframes@<version> in its package.json scripts, and the pin never advances by itself. When you resume a project with a pin, probe once before the first command that affects the render:
npx hyperframes@latest upgrade --project . --check
Keep the explicit . (older releases read the next flag as the directory). If the project is behind, apply with npx hyperframes@latest upgrade --project . and verify with npx hyperframes check. A passing check proves the compositions still validate, not that frames are identical, so name the old and new version in your summary. If the check fails, revert the package.json change, stay on the pin, and say why.
3. Route fresh creation
Match the deliverable the owner wants, not a word they used in passing. Use the first matching row, then read that route's entry in references/routes.md (its contract, interview questions and how to run it here). If the request does not satisfy the route's contract, keep routing.
| Priority | Request | Route |
|---|---|---|
| 1 | Explicitly port existing Remotion source | remotion-to-hyperframes |
| 2 | A presentation, pitch deck or navigable interactive deck | slideshow |
| 3 | Plain captions or subtitles on existing talking-head footage, footage unchanged | embedded-captions |
| 4 | Designed overlays on existing talking-head, interview or podcast footage, footage unchanged | talking-head-recut |
| 5 | A beat-synced video from a music track, no narration or site capture | music-to-video |
| 6 | An explicitly short, unnarrated, motion-first unit, typically under 10 s | motion-graphics |
| 7 | Explain a GitHub pull request or code change | pr-to-video |
| 8 | Market or show a website, product, app or company from a URL or site brief | product-launch-video |
| 9 | Explain a topic, article or notes with invented visuals, no product or site | faceless-explainer |
| 10 | Any other custom video or composition | general-video |
Resolving common ambiguities:
- A short animated title, logo sting, stat hit, chart hit, map hit or standalone lower-third is
motion-graphicswhen it is unnarrated and motion is the message. A static title card, a narrated sequence, a longer montage or a custom loop isgeneral-video. - A short motion graphic may use a URL, tweet or article as source material; a generic "make a video from this site" is
product-launch-video. A launch video from the owner's own code project (no live site): seebrag. - Footage plus captions is
embedded-captions; footage plus designed cards istalking-head-recut. Retiming, reordering, recolouring or remixing footage is a custom edit:general-video. - A music file selects
music-to-videoonly when its beat grid drives the piece. Music as a bed does not change the route. - "I want a storyboard" changes the review, not the route; with no other signal, use
general-video. A confirmed storyboard sheet may itself be the deliverable. - The narrative routes work up to about 3 minutes and are strongest at 30 to 90 s. Route a clearly longer piece to
general-video. Length never overrides a port, deck, caption, overlay or music-driven deliverable.
4. Confirm the brief once, then build from it
For fresh creation the interview (references/intent-interview.md) runs the whole conversation: memory and recipes first, triage, the pitch round for unformed requests (references/pitch-round.md), the route's must-have questions, the two run-shape questions (storyboard review? automation or companion?), one capability offer (references/capability-menu.md), and a hand-off summary that separates what the owner said from what you inferred. Scaffold the project, then write BRIEF.md (references/brief-format.md). From then on BRIEF.md is the only routing record: answer every later "what did we agree?" from it, and write each confirmed change back into it.
5. Plan, review, produce, deliver
- Plan. Write
STORYBOARD.md: the decisions (message, audience, arc, format, the spine that threads every beat), then one## Frame Nblock per scene with its on-screen content, voiceover, duration, motion citation and why (references/storyboard.md). WriteSCRIPT.mdwhen there is narration. Establish the design (frame.md, seehyperframes-creative) before any HTML. Search the registry for every named look before planning to hand-build it (hyperframes-registry). - Review the plan when
storyboard: yes: the plan in chat, then a sketchedstoryboard.htmlrendered to stills for the owner (references/review-loop.md). Autonomous runs post the same summary as a heads-up and continue. - Produce in dependency order (
references/production-loop.md): registry blocks installed once, assets staged, voice lines made withtext_to_speechand measured, scenes built (inline for up to about six short scenes; withdelegate_taskworkers beyond that, perreferences/scene-workers.md), durations synced to the real voice, the index assembled, transitions, captions, thennpx hyperframes checkpassing and a contact sheet you have looked at withvision_analyze. - Final look. The owner cannot open a preview on your computer. Send key frames and a
--quality draftrender withMEDIA:/absolute/pathand ask one thing: render the final, or what changes? Render--quality deliveryonly on a yes (an autonomous run asks this one question too, unless the owner said not to ask anything). - Deliver the MP4 attached with
MEDIA:/absolute/path, verified withffprobe, with the summary below. Offer once to save the run as a recipe (references/review-loop.md).
6. Load the domain skills you need
Load with skill_view only what the current stage needs. They inform the work; this skill keeps ownership of the deliverable.
| Need | Skill |
|---|---|
| Composition structure, timing attributes, tracks, sub-compositions, variables, media, determinism | hyperframes-core |
| Init, lint, check, snapshot, compare, batch and local render, diagnostics | hyperframes-cli |
| Zoom, punch-in, reframe, Ken Burns, camera moves, masks, paths, SVG, 3D keyframes | hyperframes-keyframes |
| Registry blocks and components; any named look (CRT, glitch, grain, shimmer, confetti, chart, code window, map) before hand-building it | hyperframes-registry |
| Talking with the owner about a built film; timeline layout; safe zones | hyperframes-studio |
| Motion rules, scene blueprints, transitions, runtime adapters | hyperframes-animation |
| Design spec, palette, typography, narration, beat planning, storyboard recipe | hyperframes-creative |
| Voice, music, sound effects, images, logos, captions, transcripts, grades, media treatments | media-use |
| Fades, ducking, carving the music under a voice, audio effects | hyperframes-audio |
Edit requests that cross domains need every skill in their row: a cut, trim, splice or reorder is hyperframes-core (copy its creator-editing-recipes.md); a zoom or camera move adds hyperframes-keyframes (animate the inner wrapper, not the timed clip); a match cut or whip pan adds hyperframes-animation and hyperframes-registry; fades, ducking or audio effects add hyperframes-audio; laying a project out to read well adds hyperframes-studio; sourcing or generating media is media-use. A constant data-playback-rate is render-safe; a speed ramp is a rate lane in data-automation. Feedback that footage looks dark, flat or dull, should feel retro, or needs a face hidden is a media treatment: media-use, not a CSS filter. When a build carries important photographic media, include one media-polish look in the final pass; leaving it unchanged is a valid result.
Output
- The finished video attached in your reply with
MEDIA:/absolute/path/to/renders/<name>.mp4, plus a delivery note:
**<Title>** (<route>), <duration> s, <width>x<height>, <fps> fps, <size> MB
File: ~/Desktop/<name> - Work space/<job>/<project>/renders/<name>.mp4
Message: "<the one sentence>" for <audience>, made for <destination>.
Scenes: 01 Hook (0 to 4.2 s), 02 Problem (4.2 to 9 s), ... (contact sheet attached)
Decisions I made: <inferred choices with their reasons>
Sources and licences: voice <tool/voice>, music <title, source, licence>, footage <owner's>
Next: say which frame to change by number, or "save as recipe".
- The project folder stays in your work space (
BRIEF.md,STORYBOARD.md,SCRIPT.md,index.html,compositions/,assets/,assets/LICENSES.md,renders/). Copy the final to~/Desktop/Team/too when teammates need it.
Checks before you finish
- The scope is exactly what was asked: a title card is not a title card plus three scenes and music.
npx hyperframes checkpasses (lint included, contrast resolved, 0 layout errors) and you looked at a contact sheet of scene midpoints and every cut.- The owner approved the final look, or said to just make it; the delivery render used
--quality delivery. - The MP4 exists, is non-empty, and
ffprobeshows the expected duration (equal to the rootdata-duration), size, fps and an audio stream when the film has sound. BRIEF.mdandSTORYBOARD.mdmatch what was built, the stated runtime is the real one, and every third-party asset's licence is recorded.
Pitfalls
- Asking what memory already knows. Check
memoryand recipes before the first question; recommend the remembered value and name where it came from. - A form question for an unformed request. "What's the message?" hands the owner the blank they came to have filled. Pitch five concepts instead.
- Rendering because checks passed. Checks are not approval. Send the review package and wait for the answer.
- A localhost link for the owner. They cannot open it. Send frames and a draft MP4.
- Approximating the product. Use real captures and recordings, or hold the slot with a labelled placeholder.
- The slideshow and the screensaver. Every beat a fresh card, or motion that says nothing: both read as generic. Reveal on the voice, keep one world, give one beat a held frame.
- Silent hosted dependencies. Never set an API key, never run
cloud,publishorfeedback, never send frames to a hosted model. Everything renders on your computer.
Versions
Listed from the source repository.
Reviews
No reviews yet. Be the first.
