| name | hyperframes |
| description | Use for a concrete request to create, render, or deliver a video when the user chooses HyperFrames (including the common shorthand or typo hypergen), HTML-based video, browser-rendered video, or motion graphics. Distinguish actionable creation from discussion, brainstorming, hypotheticals, and capability questions; those should not trigger generation or a method question. |
| license | Apache-2.0 |
HivemindOS Integration
- This skill and every HyperFrames router, domain, and workflow skill it references are already bundled as sibling skills under
packaged-skills/auto-install/<slug>/SKILL.md and the Shared Brain skill shelf.
- Resolve sibling skills by slug through the active skill shelf. Never invent a nested
packaged-skills/hyperframes/<slug> path, and never run npx skills add, npx skills update, or a curl-to-shell installer to obtain a bundled workflow.
- Treat upstream commands as proposed steps only after the user selects HTML / HyperFrames and the command fits the requested build. Existing HivemindOS permission and side-effect gates remain authoritative.
- Use an already installed HyperFrames CLI when available. Installing or updating executable third-party code requires explicit approval and pinned provenance; do not silently fetch mutable latest code.
- Never relay raw authentication command output. Report credential names and set or missing status only; cloud login, publish, upload, and paid-provider actions require the user's explicit request.
HivemindOS method boundary
Infer the user's speech act before routing. Discussion, brainstorming, hypotheticals, capability questions, and statements such as "I'm thinking about generating a video" remain ordinary conversation. Do not treat the presence of words such as โgenerateโ or โvideoโ as authorization, start generation, or ask for a method on that basis.
For a concrete creation request, respect the selected production method:
- Cloud AI video generation uses an explicitly selected connected hosted provider.
- Local AI video generation uses an explicitly selected machine or private-fleet provider.
- HTML / HyperFrames rendering uses these bundled HyperFrames skills.
When a concrete request leaves the method open, ask which of those three the user intends. Upstream wording that calls HyperFrames a default does not override this HivemindOS multi-provider boundary.
Upstream Method
HyperFrames โ start here
HyperFrames renders video from HTML โ a composition is an HTML file whose DOM declares timing with data-* attributes, whose animation runtime is seekable, and whose media playback is owned by the framework. The full authoring contract lives in /hyperframes-core; read it before writing composition HTML.
Below: a capability map (the domain skills, loaded on demand) and the intent router (pick a workflow for any "make me a video" request).
Capability map โ the domain skills
Atomic capabilities you load on demand โ not full video workflows. For "make me a video", use the intent router below.
| You want toโฆ | Skill |
|---|
Author / edit an HTML composition โ the data-* contract, clips, tracks, sub-compositions, variables | /hyperframes-core |
| Animate โ atomic motion, scene blueprints, transitions, runtime adapters (GSAP / Lottie / Three.js / Anime.js / CSS / WAAPI / TypeGPU) | /hyperframes-animation |
Creative direction โ frame.md / design.md, palettes, typography, narration, beat planning, audio-reactive | /hyperframes-creative |
| Media โ TTS voiceover, background music, transcription, background removal, captions | /hyperframes-media |
Media resolve โ find + freeze BGM, SFX, images, icons from HeyGen catalog into .media/ with manifest tracking | /media-use |
| CLI dev loop โ init, lint, validate, inspect, preview, render, publish, doctor | /hyperframes-cli |
Install registry blocks / components (hyperframes add) | /hyperframes-registry |
Intent routing โ pick a workflow
This section knows only the top-level workflows; it does not load their internal references or the domain skills above.
Before routing โ confirm the input, not the spec
Routing needs to know what the video is about โ its input and subject. If that's unspecified ("make a video about our thing" with no URL, product, topic, or asset), ask before entering any workflow โ committing to a workflow IS the routing decision. At most two questions:
- Input โ a product (URL / brief), a general website, a GitHub PR, a topic to explain, or an existing talking-head video?
Spec defaults โ state, don't ask (they never change the route): aspect 16:9 (use 9:16 only for a named vertical destination โ TikTok / Reels / Shorts); narration / caption language = the user's. The chosen workflow re-confirms its own specifics at its first step.
Workflow cheat-sheet
| Workflow | Use it for |
|---|
/product-launch-video | Marketing / launching / promoting a product โ from its URL, a brief, or a script (even if the site is only named) |
/website-to-video | Turning a general website into a video โ site tour, portfolio / landing-page showcase, social clip from the site's visuals |
/faceless-explainer | Explaining a topic / concept from text โ no product, no URL; every visual is LLM-invented |
/pr-to-video | A GitHub PR / code change โ changelog / feature-reveal / fix / refactor explainer |
/embedded-captions | Adding captions / subtitles to an existing talking-head video (footage untouched) |
/talking-head-recut | Packaging an existing talking-head video with designed graphic overlays โ lower-thirds, data callouts, kinetic titles, pull-quotes |
/motion-graphics | A short, unnarrated, design-led motion graphic โ kinetic type, a stat / chart hit, a logo sting, a lower-third overlay |
/music-to-video | A music track โ a beat-synced video โ lyric video, slideshow, or kinetic promo; the music drives pacing (optional user images / videos cut onto the beat grid) |
/slideshow | A presentation / pitch deck / interactive deck โ discrete slides, fragments, branching, hotspots; output is a navigable deck, not a rendered video |
/general-video | Anything else โ longer or multi-scene pieces, a static loop / poster, a custom composition |
/remotion-to-hyperframes | Porting an existing Remotion (React) composition to HyperFrames (migration, not creation) |
Disambiguation (only where confusable):
- Motion-first & unnarrated (under ~10s, the motion is the message) โ
/motion-graphics, regardless of input.
- A URL or script โ markets a specific product (even just naming the site) โ
/product-launch-video; a general non-product site โ /website-to-video; a GitHub PR link โ /pr-to-video; explains a concept with no product / site โ /faceless-explainer. Genuinely unclear product-vs-topic, or launch-vs-general-site โ ask one question.
- Existing footage โ plain spoken-word subtitles โ
/embedded-captions; designed overlay cards โ /talking-head-recut. Neither edits the footage itself (re-timing / recolor / reframe / reorder / audio is NLE editing โ out of scope).
- A music track is the input (an audio file, or a video to pull audio from) with no narration โ
/music-to-video โ the music's beats/energy drive the pacing. (Narrated pieces stay with the input-matched workflow above; /motion-graphics is for short unnarrated motion that isn't music-driven.)
- A presentation / pitch deck / interactive deck (discrete slides, navigation, presenter mode) โ
/slideshow โ output is a navigable deck, not a rendered video. An explicit "slideshow" request proceeds directly; an adjacent trigger ("deck / slides / presentation / convert this page") makes /slideshow confirm it's a slideshow before authoring, and switch to the appropriate non-slideshow workflow if not.
- Length is a guide, not a gate โ intent picks the workflow; go to
/general-video only when the piece is clearly longer than ~3 min, or is a static / loop / custom format.
HivemindOS packaged workflow resolution
All workflows in the cheat-sheet are packaged as sibling auto-install skills. Resolve the selected slug from the active skill shelf or packaged-skills/auto-install/<slug>/SKILL.md, read it, and continue. Do not ask the user to install or update skills.
Workflow details
/product-launch-video
- Input: A product being marketed โ (a) a product URL (crawled with headless Chrome for assets + brand tokens), (b) a script / brief that names the product's site even without a link (PLV resolves + crawls it, unless the user opts out), or (c) a script with no derivable site / "don't scrape" (no-capture mode โ pick a style preset that supplies palette + design system). A supplied script can be the verbatim voice-over or restructured per scene โ PLV asks.
- Output: product launch / SaaS promo as a HyperFrames composition โ MP4. (sweet spot 30โ90s).
- Triggers: "launch video for X", "promo for our site", "explain my SaaS in a minute", "turn my script into a 60s promo", "text-only launch video, don't scrape".
/website-to-video
- Input: A general website / URL to turn into a video โ when the goal is a video of the site, not a product launch. Captured with headless Chrome for real screenshots + brand assets.
- Output: a site tour / portfolio / landing-page showcase / social clip built from the site's own visuals โ MP4.
- Triggers: "turn this website into a video", "site tour from ", "social clip from our homepage", "I just have a URL โ make something".
/faceless-explainer
- Input: Arbitrary text โ a topic, article, or notes โ being explained, with no product being marketed and no site to capture. (Forked from
/product-launch-video; no headless Chrome.)
- Output: faceless explainer โ MP4, every visual LLM-invented per scene (typography / abstract / diagram / data-viz); ships the
pin-and-paper preset. (sweet spot 30โ90s).
- Triggers: "faceless explainer about X", "explain how DNS works as a video", "turn this article into an explainer", "explainer from my notes".
/pr-to-video
- Input: A GitHub pull request โ a PR URL, an
owner/repo#N ref, or "this PR" โ read via the gh CLI (not a site to scrape).
- Output: code-change explainer (changelog / feature-reveal / fix / refactor) โ MP4 โ diff highlights, before/after, file-tree + impact scenes. โค (sweet spot 30โ90s).
- Triggers: "make a video about this PR", "turn PR #1187 into a changelog video", "release-notes video from github.com/org/repo/pull/123".
/embedded-captions
- Input: An existing talking-head video (MP4) to caption โ actual footage, not a URL or brief. Transcribed locally (Whisper, no API key) and matted (RVM) so the subject can occlude captions.
- Output: the same footage untouched, with a caption layer โ Standard (verbatim lower-third rail + an embedded climax behind the subject) or Cinematic (every caption composited behind the subject). Any length.
- Triggers: "add captions / subtitles to this video", "captions behind the subject", "cinematic captions for my clip".
/talking-head-recut
- Input: An existing talking-head / interview / podcast video (MP4) to package with on-screen graphics โ actual footage. Transcribed locally (Whisper). The clip plays in full underneath, untouched.
- Output: the same footage with timed graphic-overlay cards โ kinetic titles, lower-thirds, data callouts, pull-quotes, side panels, picture-in-picture โ synced to the transcript. Any length.
- Triggers: "package this video", "add graphic overlays / lower-thirds / data callouts to my talk", "turn this interview into a graphics-packaged edit".
/motion-graphics
- Input: A short, design-led motion graphic where the motion is the message โ typically under ~10s, no narration. Genres: kinetic typography, a stat / number count-up, a chart hit, a logo sting, a lower-third / overlay, or a search-driven page / tweet / headline shot.
- Output: a short motion graphic โ MP4 or a transparent overlay (alpha WebM / MOV) for a lower-third / callout.
- Triggers: "an 8s logo sting", "animate this stat", "a kinetic-type intro", "turn this tweet into a motion graphic", "a transparent lower-third overlay".
/music-to-video
- Input: A music track โ an audio file, or a video to pull the audio from โ with no narration and no website capture. Optionally, user-supplied images / videos to weave in. The track is analyzed once into a deterministic beat / energy map (
audiomap.json) the whole video is built on.
- Output: a beat-synced HyperFrames composition โ MP4 where the music drives pacing. Typography and templates are the floor (a complete video needs zero assets); any supplied media is cut onto the same beat grid (beat-cut / ken-burns). The genre โ lyric video, slideshow, kinetic promo โ emerges from the per-frame choices; the pipeline never branches on it.
- Triggers: "make a video for this song", "beat-synced video from this track", "lyric video", "turn this music into a video", "music visualizer / kinetic promo to this beat".
/slideshow
- Input: A presentation / pitch deck / interactive deck to author โ a brief, an outline, or an existing page to convert to slides. Not a request for a rendered video; if the intent is ambiguous, the skill confirms "do you want this as a HyperFrames slideshow?" before authoring.
- Output: a runnable HyperFrames composition + a JSON island the player's
SlideshowController reads to turn the GSAP timeline into a navigable deck โ discrete slides, fragment reveals, branching sequences, hotspot navigation, presenter mode, and speaker notes. The deliverable is a deck, not an MP4.
- Triggers: "make a pitch deck / presentation / slide deck", "an interactive deck", "convert this page into slides", "a slideshow with presenter mode".
/general-video
- Input: Anything not above โ a creative brief, a single element to animate, an edit to a composition you're building. Input- and length-agnostic.
- Output: a HyperFrames composition (any length / format) via the original flow: design system โ prompt expansion โ plan โ layout-before-animation โ build (delegating to the
hyperframes-* skills) โ validate.
- Triggers: "make a title card", "animate this", "a longer brand / sizzle reel", "a multi-scene composition", "a static loop / poster", any "make a video" that fits no row above.
/remotion-to-hyperframes
- Input: An existing Remotion (React) composition's source โ the user explicitly asks to port / convert / migrate it. One-way (Remotion โ HyperFrames); not creation-from-input. A passing mention of Remotion is not a trigger.
- Output: a HyperFrames HTML composition translated from the Remotion source, graded against the Remotion render (SSIM eval harness + tiered test corpus).
- Triggers: "port my Remotion project to HyperFrames", "convert this Remotion comp", "migrate from Remotion".