HyperFrames Animation
heygen-com/hyperframes
Collects motion rules, scene blueprints, transitions and runtime adapters for HyperFrames video compositions, with GSAP as the default animation runtime.
Build and review a NodeTool timeline piece — the motion agent's entry point.
$ npx skills add nodetool-ai/nodetool --skill motion-graphics -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install nodetool-ai/nodetool motion-graphics --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/nodetool-ai/nodetool.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/system-skills/motion-graphics .claude/skills/motion-graphics && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "motion-graphics" agent skill from https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/motion-graphics into .claude/skills/motion-graphics/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "motion-graphics", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/motion-graphicsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add nodetool-ai/nodetool --skill motion-graphics -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install nodetool-ai/nodetool motion-graphics --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nodetool-ai/nodetool.git skills-src && mkdir -p .agents/skills && cp -r skills-src/packages/system-skills/motion-graphics .agents/skills/motion-graphics && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "motion-graphics" agent skill from https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/motion-graphics into .agents/skills/motion-graphics/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "motion-graphics", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add nodetool-ai/nodetool --skill motion-graphics -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install nodetool-ai/nodetool motion-graphics --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nodetool-ai/nodetool.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/packages/system-skills/motion-graphics .cursor/skills/motion-graphics && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "motion-graphics" agent skill from https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/motion-graphics into .cursor/skills/motion-graphics/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "motion-graphics", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/nodetool-ai/nodetool.git --path packages/system-skills/motion-graphics--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add nodetool-ai/nodetool --skill motion-graphics -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install nodetool-ai/nodetool motion-graphics --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nodetool-ai/nodetool.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/packages/system-skills/motion-graphics .gemini/skills/motion-graphics && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "motion-graphics" agent skill from https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/motion-graphics into .gemini/skills/motion-graphics/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "motion-graphics", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install nodetool-ai/nodetool motion-graphicsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add nodetool-ai/nodetool --skill motion-graphics -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/nodetool-ai/nodetool.git skills-src && mkdir -p .github/skills && cp -r skills-src/packages/system-skills/motion-graphics .github/skills/motion-graphics && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "motion-graphics" agent skill from https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/motion-graphics into .github/skills/motion-graphics/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "motion-graphics", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add nodetool-ai/nodetool --skill motion-graphics -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install nodetool-ai/nodetool motion-graphics --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nodetool-ai/nodetool.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/packages/system-skills/motion-graphics .opencode/skills/motion-graphics && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "motion-graphics" agent skill from https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/motion-graphics into .opencode/skills/motion-graphics/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "motion-graphics", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
motion-graphicsBuild and review a NodeTool timeline piece — the motion agent's entry point.
Motion Graphics is an agent skill from nodetool-ai/nodetool. Build and review a NodeTool timeline piece — the motion agent's entry point. Covers the build loop, choosing between the code pack and edit ops, the revise-by-editing-the-script loop, and the review pass. Use for title cards, kinetic text, lower thirds, clip entrances and exits, and layered motion.
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Media & Creative, covering Motion graphics. The repository describes itself as: Agent-first Creative Workspace. The licence is AGPL-3.0.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 58765d3. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are json and javascript).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Motion Graphics loads about 2.8k tokens when it runs. Until then it costs about 79 tokens; SKILL.md has 1,408 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from nodetool-ai/nodetool at commit 58765d3, republished under its AGPL-3.0 licence (© nodetool-ai). 1,408 words, ~2,836 tokens.
.claude/skills/motion-graphics/SKILL.md (or your agent's skills folder).When starting a piece from a brief, load motion-direction and
motion-principles with load_skill before the first timeline edit. Use them
to set the motion language and timing for the whole piece. Do not start
animating from this file alone.
If the piece has a title layout or an end card, also load frame-composition
before that first edit. If it has an end card, load logo-reveal too. These
loads are required even when this skill was the only one selected from the
catalog.
For showcase, hero, launch, or "best" briefs, follow motion-direction's
depth plan and example timelines before writing scenes.
Motion is built, then checked. Author with the pack or with ops (below), then
look at the frames with preview_timeline_frame. A change you have not looked
at is not done.
This file is the build loop and the entry point, not the op contract. After the required loads above, load other relevant craft skills for the job and come back here to pick the authoring surface.
| The question | Skill |
|---|---|
| Where do the cuts land, how do I pace it, how do I ramp a hit | beat-sync-editing |
| Which colours, in what order do I grade, what can actually move | color-motion |
| A preset is close but not right; overshoot, decay, wiggle, arc, draw-on | motion-curves |
| An ambient bed behind the content | motion-background |
Three are neighbours rather than layers. caption-titles decides what text
says and when it appears. video-audio-continuity decides, before the first
clip renders, whether a multi-scene piece's sound comes from one generated clip
or from a track of your own — a decision this file's ops cannot undo. The
board skills (explainer-storyboard, commercial-beat-sheet,
launch-commercial, music-video-treatment, trailer-template) decide the
shots before there is a timeline to animate; assemble_storyboard_timeline is
where their board becomes this file's document.
Anything generated for the timeline — a bed, a sting, a voice, a clip — has a
model line with its own guide. find_model returns prompting_skill on a
route it covers; load_skill it before writing that prompt.
Build a piece in four moves: direct (fix the motion language and the
scene list before writing anything — motion-direction and, when there is a
title or end card, frame-composition/logo-reveal), build (write the
scenes in code, one v.scene per beat), save (v.save() attaches the code; read
saved.code and saved.warnings), review (the
pass below). Revise by editing that script — see below — and repeat the
last two steps. A piece that renders clean on the first save has not been
looked at yet.
Two ways to touch a timeline document. Pick by what changed, not by habit.
| Situation | Surface |
|---|---|
| A new cut, or a scene with more than a few clips | @nodetool-ai/sandbox-timeline (code) |
| A few edits to a cut that already exists — retiming a clip, swapping a preset, nudging a stagger | edit_timeline ops |
Code, for a new cut. In a JS script or a Code node, import { video } from "@nodetool-ai/sandbox-timeline". Its video() builds a document of scenes
(v.scene(name, seconds, fn), local time in seconds), lays them out with
v.series([...]), and v.save(nodetool.timelines, {...}) writes the whole
document in one call and returns {timeline_id, errors, warnings}. A cut
with hundreds of keyframed clips costs a handful of API calls this way,
instead of one edit_timeline op per clip. NodeTool's shipped example
timelines (Cadence, Kite, Prism, Voltra, Tidewater, T minus 30) are built with it. Its
full signatures, options and gotchas are the pack's own skill — read
nodetool.packs.docs("@nodetool-ai/sandbox-timeline") before writing scenes,
not this file. frame-composition covers how to lay out what goes inside a
scene; this file covers the build loop and the ops surface below.
Ops, for an edit. edit_timeline takes a timeline ID and an ops array,
run in order, up to 60 per call:
{"timeline_id":"<id>","ops":[{"op":"animate_clip","target":"Title","animations":[{"role":"in","preset":"fade","durationMs":400}]}]}Its full op shapes, what each op refuses, and when a change instead needs a
whole-document set_timeline_document write are timeline-edit-ops — load it
before a batch of ops, not this file.
The build loop end to end: a backdrop, a laid-out title block, a counter, a transition, a finish pass, save, then read the warnings.
import { video } from "@nodetool-ai/sandbox-timeline";
const v = video({
width: 1920, height: 1080, fps: 30,
palette: { ink: "#06110e", ink2: "#0c2a21", text: "#f4fbf8", accent: "#34d399" },
fonts: { display: "Space Grotesk", body: "Inter" }
});
const hello = v.scene("Hello", 2.5, (s) => {
s.backdrop();
const kicker = s.kicker("LIVE");
const title = s.text("Round-ups", { size: 120, weight: 700, font: "display" });
const sub = s.text("on every card", { size: 40, color: "#8fb3a6" });
s.stack([kicker, title, sub], { gap: 20 }); // frame-composition: a title block
title.enter({ from: { scale: 1.2, opacity: 0 }, dur: 0.3, ease: "outExpo" });
sub.enter({ from: { offsetY: 24, opacity: 0 }, at: 0.15, dur: 0.25 });
});
const outro = v.scene("Outro", 1.8, (s) => {
s.backdrop({ colors: ["#0f3b2e", "#06110e"] });
const counter = s.text("$0.00", { size: 96, font: "display" });
counter.count({ from: 0, to: 1.6, dur: 1.2, prefix: "$", decimals: 2 });
s.finish({ vignette: 0.2, grain: 0.05 });
});
v.series([hello, v.transition("wipe", 0.3, { direction: "left" }), outro]);
const saved = await v.save(nodetool.timelines, { name: "Round-ups", showcase: true });
if (saved.warnings.length) {
// read them before calling this done — see Review pass below
}v.save(nodetool.timelines, {...}) attaches the code that rebuilds the
timeline as its source — no separate code.set call. The stored code is the
retained program: the scene callbacks and the helpers they use, with every
research result, generated asset id and loop value written in as a literal.
The calls that produced those values ran once, in your action, and a rebake
never repeats them. saved.code.embedded is false, with the reason in
saved.code.warnings, when a scene callback calls nodetool.*, uses
Math.random()/Date.now(), or reads a value that is not plain data. Do the
research and generation at the top level, then build the scenes from the
results. To attach code after the fact,
nodetool.timelines.code.set(timeline_id, code) bakes the code, which must
build the timeline without a capability call.
Revising a code-backed timeline is: code.get(id) → code.edit(id, edits)
with a few small exact string replacements (each old matches exactly once)
→ read the conflicts and warnings it answers → look at frames. This is
the review → revise → rerun loop from the build loop above, made cheap — a
two-line diff instead of a 500-line resend. edit_timeline ops still apply
for a timeline with no code, or a deliberate hand tweak — timeline-edit-ops
owns that contract and what it costs a code-backed scene. The pack's own
skill (@nodetool-ai/sandbox-timeline) covers what code-backed identity
means for scene names and clip ids; api-timelines owns the full code.*
call contract.
For a showcase, hero, launch, or "best" piece, critique like a director before calling it done. A render with no errors is not a finished piece — this pass is part of the job, not a step to skip when the frames look clean. Reserve rounds for it: the run budget is shared with authoring, so budget for at least one full pass plus one revision, not just the build.
preview_timeline_frame with sheet: true, sampling
every scene at its entrance, its hero hold, and its exit.showcase_frame_underfilled check is a bounding-box proxy and can miss a
thin outline or ring that reads as sparse against an empty backdrop.examples.list() / examples.get(slug). Render matching-beat sheets of
your piece and that example with preview_timeline_frame, sheet: true,
mapping beats across differing durations and sampling the middle of a
move. Call view_image on both with this explicit question: "Compared
with the example, what is missing in layer count, secondary motion,
texture and light, and camera depth? Name the beat and the gap." Read how
the example scene was actually built with examples.source(slug) when the
clip excerpt alone does not explain a moment — a repeater's phase offsets,
a two-pass text effect, a shared id scheme. compare_timeline_frames
cannot target a shipped example — both its sides must be your own timeline
(an id, version or document) — so use it after a revision to prove which
frames actually changed, not to judge against a reference.validate_timeline(id, {tier: "showcase"}) returns errors and warnings — there is no issues field.
Every showcase_* warning is a hard stop: resolve it, or state the
specific artistic exclusion to the user before rendering. Expect
showcase_scene_groups_missing, showcase_custom_motion_missing,
showcase_finish_missing, showcase_camera_missing,
showcase_layer_density_low, showcase_scene_group_density_low,
showcase_custom_animation_density_low, showcase_effect_variety_low,
showcase_clip_density_low, showcase_motion_blur_missing, plus
showcase_frame_underfilled, showcase_text_collision,
showcase_motion_range_narrow and showcase_dead_motion. Each names a
shipped example to study. Zero warnings is a structural floor, not a
craft verdict — the medians in the warning text are the design target.© nodetool-ai, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in packages/system-skills/motion-graphics of nodetool-ai/nodetool.
Open the folder on GitHubat commit 58765d3
Motion Graphics next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Motion Graphics this skillnodetool-ai/nodetool | 560 | — | ~2.8k | Automated safety check: Pass | AGPL-3.0 | |
| HyperFrames Animationheygen-com/hyperframes | 59k | 3 repos | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| Slack GIF Creatoranthropics/skills | 180k | 29 repos | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Stitch to Remotion Walkthrough Videosgoogle-labs-code/stitch-skills | 8.4k | 6 repos | ~3.2k | Automated safety check: Notes | Apache-2.0 | |
| Faceless Explainer Videoheygen-com/hyperframes | 59k | 3 repos | ~7.7k | Automated safety check: Notes | Apache-2.0 | |
| Video ShotcraftVincentwei1021/video-shotcraft | 11k | — | ~2.6k | Automated safety check: Pass | Apache-2.0 |
heygen-com/hyperframes
Collects motion rules, scene blueprints, transitions and runtime adapters for HyperFrames video compositions, with GSAP as the default animation runtime.
anthropics/skills
Provides Slack size and frame limits, Python animation helpers and validators for building animated GIFs sized for emoji and messages.
google-labs-code/stitch-skills
Builds walkthrough videos from Stitch design projects using Remotion, with transitions, zoom effects and text overlays on each screen.
heygen-com/hyperframes
Turns an article, notes or a topic brief into an explainer video whose visuals are invented per scene, built frame by frame in HyperFrames with no footage.
Vincentwei1021/video-shotcraft
Makes cinematic product videos with Remotion from shot recipe cards, a ready template, real page screenshots, camera moves and sound design, or builds a single animated shot.
heygen-com/hyperframes
Imports Figma assets, brand tokens, components and motion into a HyperFrames video composition, using the Figma REST API with a connector or native export for shaders.
nodetool-ai/nodetool
Cut a NodeTool timeline to music and shape its pacing — detect the beat grid, place cuts on phrases, pick a cut type, build speed ramps with time remap, and give the piece an arc.
nodetool-ai/nodetool
Add and animate a consistent text layer on an existing NodeTool timeline.
nodetool-ai/nodetool
Choose and animate colour on a NodeTool timeline, including shape and text gradients, colour grades, 3D LUTs, and dither.
nodetool-ai/nodetool
Write a shootable, precisely timed commercial beat sheet and store it as a NodeTool storyboard, with a consistent entity roster behind every shot.
nodetool-ai/nodetool
Direct ElevenLabs speech, dialogue, sound effects and music — the bracketed audio tags v3 acts on and why the voice decides whether a tag lands, stability as the delivery dial, punctuation instead…
nodetool-ai/nodetool
Stage the frame on a NodeTool timeline — grids, focal placement, safe areas per aspect ratio, depth layers and parallax, camera moves, and where elements enter and leave.
Categories
Build and review a NodeTool timeline piece — the motion agent's entry point. Motion Graphics is an agent skill from nodetool-ai/nodetool. Build and review a NodeTool timeline piece — the motion agent's entry point.
Motion Graphics fits situations like: clip entrances and exits; tasks that involve Motion graphics.
Run `npx skills add nodetool-ai/nodetool --skill motion-graphics -a claude-code`. Or copy the skill folder (packages/system-skills/motion-graphics in nodetool-ai/nodetool) into .claude/skills/motion-graphics in your project. Claude Code loads it when a task matches its description.
Run `npx skills add nodetool-ai/nodetool --skill motion-graphics -a codex`. Or copy the skill folder (packages/system-skills/motion-graphics in nodetool-ai/nodetool) into .agents/skills/motion-graphics in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add nodetool-ai/nodetool --skill motion-graphics -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/motion-graphics, .gemini/skills/motion-graphics, .github/skills/motion-graphics and .opencode/skills/motion-graphics in your project.
SKILL.md names no scripts, command-line tools or credentials: Motion Graphics is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Motion Graphics is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Motion Graphics: HyperFrames Animation (heygen-com/hyperframes, 59k stars), Slack GIF Creator (anthropics/skills, 180k stars), Stitch to Remotion Walkthrough Videos (google-labs-code/stitch-skills, 8.4k stars) and Faceless Explainer Video (heygen-com/hyperframes, 59k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
nodetool-ai (a GitHub organization) maintains it in nodetool-ai/nodetool, which has 560 GitHub stars. The repository holds 127 skills in this directory. The repository was last updated on October 9, 2026.
Source: nodetool-ai/nodetool on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.