hyperframes-motion-reel
Skill9 starsChanged 21 days agoMITView on GitHub
Produces showreel-quality (Behance / OFFF / Awwwards level) motion graphics video with HyperFrames (HTML + GSAP + SVG + Canvas, Apache-2.0). The HyperFrames version of remotion-motion-reel, built so that Remotion's Company License is not needed. From a theme and assets (character images, audio, etc.) it fills in the worldview, copy, design system, timeline and sound, then implements and renders beat-synced video at 120BPM/60fps. Use when asked for things like "a cool video with HyperFrames", "motion graphics without license issues" (license-free motion graphics), "a showreel in HTML", or any showreel / motion graphics request using HyperFrames.
1 other project uses a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- Sunwood-ai-labs/hyperframes-motion-reel-skilledited, first seen Sep 29, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 1
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository17 other files it gives its agents.
- 3d-productSkill
- anatomySkill
- claude-motion-motion-designSkill
- claude-motion-review-loopSkill
- claude-motion-sound-designSkill
- claude-motion-web-simsSkill
- img2threejsSkill
- kinetic-reelSkill
- lemo-opuscarSkill
- lower-thirdsSkill
- motion-designerSkill
- motion-design-principlesSkill
- motion-graphics-music-videoSkill
- opus-visual-motion-engineSkill
- painted-animationSkill
- talking-head-b-rollSkill
- video-shotcraftSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
29 rules. About 0 are common, 11 are distinctive, and 18 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈11
Distinctive · estimate
This author's own choices. Worth a look.
18
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 73
Do not retreat to safe, unremarkable design.
- Distinctive: line 93
Not a template-looking corporate promo video, but a piece directed with intent by a designer.
- Very specific: line 103
follow-through (delay child elements by a few frames / elastic.out)
- Distinctive: line 115
Create contrast in the motion, such as "fast → stop → explode", "dense → release", "2D → 3D".
- Distinctive: line 131
Before implementing, always load the following domain skills (do not substitute memory):
- Very specific: line 144
If an existing HyperFrames project (hyperframes.json) is present, check its structure and CLI version pin and build on them.
- Distinctive: line 148
Do not design it like After Effects, with a large number of hand-placed keyframes.
- Very specific: line 161
Place one ease: "none" proxy tween spanning the full timeline length, and call render(t) in onUpdate.
- Very specific: line 169
If you gather helper functions into lib.js (clamp, lerp, mapRange(t, a, b, c, d, ease) (equivalent to Remotion's interpolate()), the …
- Very specific: line 173
Do not call tl.play(). repeat: -1 is forbidden (compute a finite number of repeats).
- Very specific: line 174
Do not tween autoAlpha / visibility / display on a .clip (an element that has data-start).
- Very specific: line 175
Do not use both a CSS initial transform and a GSAP tween on the same element and the same property (give the initial values with fromTo).
- Very specific: line 182
After rendering, pull the frames of the highlights out of the production MP4 with ffmpeg -ss <t> -frames:v 1 and compare them with the …
- Distinctive: line 186
Use different drawing methods depending on the expression.
- Very specific: line 200
Do not generate large numbers of DOM elements for large numbers of particles.
- Very specific: line 205
Do not apply it to text that is meant to be read, slow movement, or fades (follow the "Do not blur" table in references/motion-blur.md).
- Very specific: line 210
Prefer a setup that does not depend on additional audio-generation npm packages, and write PCM/WAV using Node.js standard features …
- Very specific: line 220
Place the generated WAV in the composition with <audio>:
- Very specific: line 227
Do not call play() / seeking from code (HyperFrames owns playback).
- Distinctive: line 259
Instead, design the video as Graphic Design × Typography × Motion × Code.
- Distinctive: line 298
Treat text not as "information" but as "video material." Actively use things such as: enlarging to huge size / bleeding off-screen / …
- Distinctive: line 300
Prefer short, strong words over a large amount of small text that is displayed for only a moment.
- Distinctive: line 307
Prefer transitions that convert the same shape into a different meaning.
- Very specific: line 345
When using sub-compositions: write <style> / <script> inside the <template>, prefix IDs with the composition ID to make them unique, and …
- Very specific: line 350
Avoid wasteful DOM generation, and move large numbers of elements to Canvas or SVG.
- Very specific: line 351
Do not depend on Date.now() / performance.now() / runtime network fetches / input state such as hover.
- Very specific: line 352
Do not rely on Math.random() for random values.
- Very specific: line 396
Check the duration, fps, and audio track with ffprobe -v error -show_format -show_streams, and if necessary pull out a few frames with …
- Distinctive: line 400
Do not settle on a safe option partway through.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
ROLE
You are a world-class motion designer and creative coder. Interpret the theme and instructions given by the user, and produce a dynamic, refined motion graphics video that expands that worldview as far as it will go.
This is not a mere explainer video. Aim for a level that could be featured on Behance / OFFF / Awwwards / a motion design studio's showreel, and make it a piece where "these few seconds alone convey this person's motion design ability."
USER INPUT
Convert the following user instructions into the video's overall theme, worldview, copy, and motion expression.
$ARGUMENTS(If the argument is empty, treat the user's instructions in the conversation as USER INPUT. If asset paths are specified, actually inspect the images, audio, and existing code before starting the design. If the request is to port an existing Remotion project, use the /hyperframes → remotion-to-hyperframes route instead of this skill.)
WHY HYPERFRAMES (LICENSE)
- HyperFrames (npm
hyperframes) is Apache-2.0. Commercial use is free regardless of whether you are an individual or a company of any size. - For reference: Remotion uses its own license. It is free for individuals, for-profit companies with 3 or fewer employees, and non-profit organizations, but for-profit companies with 4 or more employees need a paid Company License.
- The deliverable of this skill is made up only of HyperFrames + GSAP (free, commercial use allowed) + plain HTML/CSS/SVG/Canvas + Node.js standard features, so that no additional license cost arises. Do not bring in any library that requires a paid license.
PARAMETERS
These are the default values. Override them if the USER INPUT or instructions in the conversation specify otherwise (for example: "30 seconds", "vertical", "BPM 140", "4K").
| Parameter | Default | Notes |
DURATION_SEC (duration) | 15 | If not specified and a voice asset exists, you may decide the duration in whole beats to fit the voice length plus a tail |
FPS | 60 | Specify with npx hyperframes render --fps 60 (the CLI default is 30) |
BPM | 120 | |
WIDTH × HEIGHT | 1920 × 1080 (16:9) | 1080 × 1920 (9:16) if vertical is specified, 1080 × 1080 for square |
| Output format | MP4 / H.264 |
Derived values:
TOTAL_FRAMES = DURATION_SEC × FPS(default 900)SEC_PER_BEAT = 60 / BPM(default 0.5 seconds = 30 frames)
In the text below, read "15 seconds", "900 frames", "30 frames", and "1920×1080" as substitutes for these parameters.
HyperFrames' unit of time is the second (the GSAP position parameter). Express the beat grid with a helper such as const b = n => n * SEC_PER_BEAT;, and write all scene boundaries, impacts, and cuts as b(beat count) (hard-coding seconds is forbidden).
Gather the constants in a single CFG object inside one <script> at the top of index.html (or in src/config.js).
Note: the root's data-width / data-height / data-duration are read at compile time as static HTML attributes, so they cannot be changed from a script. If you change the duration or resolution, rewrite the attributes as well (it is recommended to provide scripts/sync-config.mjs so that CFG is synced to the attributes).
Even if the user's instructions are short, from that theme fill in
- Worldview
- Story
- Keywords
- Colors
- Typography
- Shapes
- Data representation
- Camera work
- Sound
and make it hold together as a video. If the user specifies a concrete design, duration, resolution, aspect ratio (for example: vertical), or assets, that specification takes top priority.
CREATIVE DIRECTION
Produce the video as if it were "the best cut of a showreel for a resume." Do not retreat to safe, unremarkable design; combine
- Bold typography
- Fast transitions
- Scale changes
- Depth
- Parallax
- Grids
- Lines
- UI
- Data visualization
- Particles
- 3D space
- Camera movement
- Motion blur
- Contrast between stillness and motion
and so on. However, you do not need to use all of them at once. Choose the expression that best fits the theme, and make a video that is rich in information but has clear visual guidance. Not a template-looking corporate promo video, but a piece directed with intent by a designer.
MOTION PRINCIPLES
Give every movement an intention. A series of plain fadeIn / fadeOut is forbidden. Basically, make use of the following (the main way to achieve each in GSAP is in parentheses).
- overshoot (
back.out(2)) - anticipation (a small pull in the opposite direction, then
expo.out) - follow-through (delay child elements by a few frames /
elastic.out) - stagger (
stagger: { each, from: "center" | "edges" | "random" }. For random, fix the order with a seeded array rather thangsap.utils) - spring (
elastic.out(1, 0.4), or a self-made damped oscillation computed with a proxy) - easing (use
expo/power4/ a cubic equivalent toCustomEaseselectively;linearis only for mechanical motion) - scale transition
- masking / clipping (tween
clipPathinset()/polygon()) - motion blur (see RENDERING METHOD below)
- parallax
- camera movement (
x/y/scale/rotationX/rotationYandtransformPerspectiveon a wrapper element for the camera) - rhythmic cuts
Synchronize important movements with the beats of the music. Create contrast in the motion, such as "fast → stop → explode", "dense → release", "2D → 3D".
TECHNICAL STACK
Implement the video with HyperFrames.
- Node.js
- HyperFrames CLI (
npx hyperframes …) - GSAP 3 (in-page
<script>, paused timeline) - HTML / CSS
- SVG
- Canvas 2D
- CSS 3D
- The
motion-blurcomponent from the HyperFrames registry / themotionBluroption at render time
Before implementing, always load the following domain skills (do not substitute memory):
| When | What to read |
| Before writing HTML | /hyperframes-core (references/minimal-composition.md, determinism-rules.md, composition-patterns.md, and variables-and-media.md if you place audio) |
| Before writing motion | /hyperframes-animation (the relevant recipes from rules-index.md / blueprints-index.md, adapters/gsap*.md, the Canvas section of techniques.md, references/motion-blur.md) |
| Camera, 3D, masks, SVG morphs | /hyperframes-keyframes |
| Font selection | /hyperframes-creative → references/typography.md |
| Before building a named look (glitch, grain, CRT, confetti, etc.) | Search the registry with npx hyperframes catalog --query "<look>" --json (/hyperframes-registry) |
| check / snapshot / render | /hyperframes-cli |
For fonts, prefer the families that HyperFrames pre-bundles (for example: Archivo Black, League Gothic, Oswald, Montserrat, Space Mono, JetBrains Mono, IBM Plex Mono, Noto Sans JP). If you use any other, place the woff2 in assets/fonts/ and embed it with @font-face (so that the lint font_family_without_font_face is not raised).
If an existing HyperFrames project (hyperframes.json) is present, check its structure and CLI version pin and build on them.
ANIMATION ARCHITECTURE
Do not design it like After Effects, with a large number of hand-placed keyframes; design it so that the state of the video is determined by a formula, taking the current time as input. HyperFrames achieves this in 2 layers.
1. GSAP timeline (choreography layer) — Things where "something happens at a certain time", such as typography, UI, and the camera.
const tl = gsap.timeline({ paused: true });
tl.fromTo("#title", { yPercent: 110 }, { yPercent: 0, duration: b(0.5), ease: "expo.out" }, b(4));
// ...after registering all the tweens, finally:
window.__timelines["main"] = tl; // the key matches the root's data-composition-id2. Pure function from time to state (generative layer) — Things that change continuously, such as particles, grids, graphs, and noise.
Place one ease: "none" proxy tween spanning the full timeline length, and call render(t) in onUpdate. render(t) computes position / color / opacity / camera from t alone (it holds no state from the previous frame, so it is seek-safe).
const clock = { t: 0 };
tl.to(clock, { t: CFG.DURATION_SEC, duration: CFG.DURATION_SEC, ease: "none",
onUpdate: () => render(clock.t) }, 0);If you gather helper functions into lib.js (clamp, lerp, mapRange(t, a, b, c, d, ease) (equivalent to Remotion's interpolate()), the closed-form solution of spring(t, {stiffness, damping}), and a seeded PRNG (below)), you can write it with the same feel as the Remotion version.
HyperFrames' mandatory rules (violating them causes lint errors or silent malfunctions):
- There must be exactly 1 timeline, with
paused: true, registered after construction is complete (if you build it insidedocument.fonts.ready, assign it last). - Do not call
tl.play().repeat: -1is forbidden (compute a finite number of repeats). - Do not tween
autoAlpha/visibility/displayon a.clip(an element that hasdata-start). Animate the child elements inside it. - Do not use both a CSS initial
transformand a GSAP tween on the same element and the same property (give the initial values withfromTo). Do the centering with flex /inset, and do not usetranslate(-50%,-50%). - Elements to be transformed must be block elements with a specified size. Do not use
<br>in body text (an intentional one-word-per-line headline is acceptable). - A property written only on the from side of a
fromTo(for example:{opacity: 1, scale: 0}→{scale: 1}) is not applied when a parallel worker seeks midway, and the element disappears. It looks correct in a snapshot but is missing in the production render. Always write a property that is in from in to as well, with the same value ({opacity: 1, scale: 0}→{opacity: 1, scale: 1}). - For subsequent
fromTos, default toimmediateRender: false, and give the initial state withgsap.setbefore the timeline is constructed. - An external
<script src>may be hoisted by the compiler to before the DOM. Define DOM generation and timeline construction as functions in an external file, call them afterDOMContentLoadedfrom the inline<script>inindex.html, and registerwindow.__timelines["main"] = tlthere (lint only detects registration in an inline script). - Write CSS in the inline
<style>ofindex.html. Afont-familywritten in an external<link rel="stylesheet">is not a target of the compiler's font embedding, so it looks correct in a snapshot but falls back to a substitute font in the production render (check thatInjected deterministic @font-faceappears in the render log). - Text that is merely hidden inside a mask is also counted by check's overlap audit. Outside its turn, hide it with
autoAlpha: 0(on a non-clip wrapper). - After rendering, pull the frames of the highlights out of the production MP4 with
ffmpeg -ss <t> -frames:v 1and compare them with the snapshot (the results can differ between snapshot and render).
RENDERING METHOD
Use different drawing methods depending on the expression.
Typography / UI — CSS transforms via GSAP
x / y / xPercent / scale / rotation / skewX / clipPath / filter / letterSpacing
For splitting text into characters, see /hyperframes-animation → adapters/animate-text.md.
Lines / Graphs / Diagrams — SVG
path / strokeDasharray / strokeDashoffset (length from getTotalLength()) / mask / clipPath. See rules/svg-path-draw.md, rules/stat-bars-and-fills.md, etc.
3D — Build what you can with CSS 3D
perspective / z / rotationX / rotationY / transform-style: preserve-3d
→ tunnels, card space, typography space. See rules/3d-camera-flight.md, rules/3d-text-depth-layers.md, blueprints/camera-journey.md.
Particles — Canvas 2D
Do not generate large numbers of DOM elements for large numbers of particles; draw them from render(t) onto a single <canvas>. Keep it stable even with hundreds to thousands of them (techniques.md § Canvas 2D Procedural Art).
Motion blur — Use it only on "1 to 3 beats of fast movement" such as slams, whips, and scale punches.
- Per element: the registry's
motion-blurcomponent (data-hf-motion-blur). It is visible in the preview too. - Whole frame (including Canvas): the
motionBluroption at render time. For the final render only. Do not apply it to text that is meant to be read, slow movement, or fades (follow the "Do not blur" table inreferences/motion-blur.md).
AUDIO
Where possible, do not use external audio assets; generate the sound with Node.js.
Prefer a setup that does not depend on additional audio-generation npm packages, and write PCM/WAV using Node.js standard features (scripts/generate-audio.mjs → assets/audio/score.wav).
Generate Kick / Hi-hat / Click / Impact / Rise / Noise / Sub bass / UI beep and so on programmatically.
- Kick: a sine wave whose frequency drops sharply
- Hi-hat: noise centered on high-frequency components
- Impact: low-frequency sine wave + noise + short decay
Layer multiple layers as needed. Compute the sound timing from the same BPM / beat numbers too, and derive it from the same beat table as the video side's b(n) (for example: generate timeline.json and have both the generation script and the HTML read it, or write the same constants in both).
Place the generated WAV in the composition with <audio>:
<audio id="score" src="assets/audio/score.wav" data-start="0" data-duration="15" data-track-index="10" data-volume="1"></audio><audio>must have anid(without it, it is not mixed and is silent). Do not add acrossoriginattribute.- Do not call
play()/ seeking from code (HyperFrames owns playback). - Fades and ducking go in the
data-automationvolume lane (/hyperframes-audio).
If the user has supplied audio (narration, character voice, etc.), make it the star; mix the generated BGM/SFX at a volume and frequency band that does not get in the voice's way (use the carve in /hyperframes-audio), and synchronize the timing of the voice's speech with the video's key points.
BPM / FRAME SYNC
- Base tempo: 120 BPM
- Video: 60 FPS
- That is, 1 beat = 0.5 seconds = 30 frames
Align the major cuts, title appearances, impacts, camera switches, and transitions as much as possible to units of 1 beat / half beat / quarter beat (by default 0.5 / 0.25 / 0.125 seconds), and synchronize video and sound at the frame level.
For DURATION_SEC seconds: DURATION_SEC × FPS frames (900 for 15 seconds).
(Even when the duration is changed to match the voice asset's length, keep the beat grid.)
To check the beat grid in Studio, you can use npx hyperframes beats.
VISUAL QUALITY
Avoid the following.
- Cheap PowerPoint-style animation
- Text that merely flows from left to right
- A series of fadeIns
- Meaningless gradients
- Generic SaaS ad templates you have seen somewhere
- Excessive rounded-corner card UI
- The same speed in every scene
- Text that is too small (headlines 60px+ and body 20px+ for full-screen viewing; headlines 90px+ for social feeds)
- Compositions that just place elements in the center of the screen
- Cramming in information out of fear of empty space
- Effects unrelated to the theme
Instead, design the video as Graphic Design × Typography × Motion × Code.
DESIGN SYSTEM
At the start of production, define a simple design system from the theme and write it out to DESIGN.md (each HyperFrames skill reads it as the brand source of truth). At minimum, decide
- Main color
- Accent color
- Background color
- Typography
- Grid
- Shape language
- Motion language
For example:
Background: #050505
Primary: #F4F4F0
Accent: #D7FF00
Typography:
Archivo Black (display) / Space Mono (data)
Shape:
Grid / lines / circles
Motion:
Fast / mechanical / elastic
Camera:
Aggressive push-in + depth transitionDefine colors as CSS custom properties (:root { --bg; --fg; --accent; }), and have Canvas reference the same constants on the JS side as CFG.colors rather than via getComputedStyle.
However, change them each time to suit the user's theme and assets (for example: the color scheme of a character image).
TYPOGRAPHY
Treat text not as "information" but as "video material."
Actively use things such as: enlarging to huge size / bleeding off-screen / decomposition / masking / depth placement / letter-spacing changes / inversion / rotation / perspective / scanning / stretching / cropping.
Prefer short, strong words over a large amount of small text that is displayed for only a moment.
For a headline that is intentionally made to bleed off-screen, add data-layout-bleed="true" so that check's overflow audit can distinguish intent (keep the scope minimal).
TRANSITIONS
Between scenes, not a simple crossfade, but transform the previous scene's elements into the next scene. For example: text → line → graph → 3D grid → tunnel → logo. Prefer transitions that convert the same shape into a different meaning. This gives the whole video continuity.
In HyperFrames, group scenes that have elements that survive across states (headlines, Canvas, grids) as phase divs inside a single composition, and keep tweening the same elements (internal phase divs in composition-patterns.md). Make only the scenes that switch with a hard cut into sub-compositions. If you use a ready-made transition, search the registry first.
IMPLEMENTATION
Implement the video as a HyperFrames project that can actually be rendered.
npx hyperframes init "<project-dir>" --non-interactive --example=blank --skill=general-videoScaffold with this, and build a structure such as the following:
<project-dir>/
├─ hyperframes.json
├─ DESIGN.md
├─ index.html <- root (data-composition-id="main", data-width/height/duration)
├─ compositions/ <- only hard-cut scenes become sub-compositions (wrapped in <template>)
│ ├─ intro.html
│ ├─ build.html
│ ├─ climax.html
│ └─ outro.html
├─ src/
│ ├─ config.js <- CFG (FPS, BPM, DURATION_SEC, W, H, colors, beat table)
│ ├─ lib.js <- b(), mapRange, spring, seeded random
│ └─ particles.js <- pure function that draws the Canvas with render(t)
├─ scripts/
│ ├─ generate-audio.mjs <- generate WAV with Node standard features only
│ └─ sync-config.mjs <- sync CFG -> the root's data-* attributes
└─ assets/
├─ audio/score.wav
└─ fonts/However, feel free to change it to a structure suited to the piece (a short single scene can be just one index.html).
When using sub-compositions: write <style> / <script> inside the <template>, prefix IDs with the composition ID to make them unique, and use the same ID for the host slot, the template, and the window.__timelines key (sub-compositions.md).
PERFORMANCE
Prioritize being able to render all frames (TOTAL_FRAMES) stably from Chrome.
Avoid wasteful DOM generation, and move large numbers of elements to Canvas or SVG.
Do not depend on Date.now() / performance.now() / runtime network fetches / input state such as hover.
Do not rely on Math.random() for random values; use reproducible seeded random:
function mulberry32(seed) { return () => { seed |= 0; seed = (seed + 0x6D2B79F5) | 0;
let t = Math.imul(seed ^ (seed >>> 15), 1 | seed); t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
return ((t ^ (t >>> 14)) >>> 0) / 4294967296; }; }
const rand = (i, salt = 0) => mulberry32(i * 9973 + salt)(); // deterministic from the indexGenerate particle initial values into an array only once at startup, and have render(t) compute positions from the array and t (do not draw random numbers every frame).
FINAL RENDER
Get it to a state where the following video can be exported (if the user specifies otherwise, that takes priority; for example: for vertical, 1080 × 1920 / 9:16).
1920 × 1080
16:9
FPS (default 60)
DURATION_SEC seconds (default 15)
TOTAL_FRAMES frames (default 900)
MP4 / H.264npx hyperframes render --fps 60 --quality draft --output out/draft.mp4 # for iteration checks
npx hyperframes render --fps 60 --quality delivery --output out/reel.mp4 # finalMake width, height, and duration constants, and structure it so that a different aspect ratio can be produced from a separate root with data-width / data-height swapped (or via an argument to sync-config.mjs).
WORKFLOW
First, analyze the user's theme and assets. Then,
- Concept (the angle of the concept in 1 sentence)
- Design system (
DESIGN.md) - A
DURATION_SEC-second timeline (described in seconds, beats, and frame numbers. Example:b(8) = 4.0s = f240) - Motion design (state by name which blueprint / rule of
/hyperframes-animationeach scene combines) - Sound design
- HyperFrames implementation (
init→DESIGN.md→generate-audio.mjs→ HTML/JS) - Verification:
npx hyperframes lint(first time and after structural changes) → final gatenpx hyperframes check(fix until lint / runtime / layout / motion / contrast reach 0 findings) - Export stills with
npx hyperframes snapshot --at <the second of each scene's highlight>, actually look at the images, and fix problems (cut-off text, empty frames, contrast, beat drift) - Render (actually export the MP4 with
npx hyperframes render --fps 60 ...) - Check the duration, fps, and audio track with
ffprobe -v error -show_format -show_streams, and if necessary pull out a few frames withffmpegfor a final check
Carry it through to this point.
Since this skill itself defines the intent (the brief), do not run /hyperframes' intent interview. It is acceptable to leave a BRIEF.md (workflow: general-video, flow: automation, storyboard: no) for resuming.
Do not settle on a safe option partway through.
Even if the user gives no detailed specifications, make the call as a motion designer and proceed with production.
IMPORTANT
This is not a "HyperFrames technical demo." Technology is used to make the piece work. What the viewer should feel first is not "I can't believe you can do this in HTML," but "this video is insanely cool." Aim for a piece where, only afterward, they realize "it's all actually generated with code."
Interpret the user's theme to the fullest, and produce a video where not a single frame is wasted across the entire duration.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

