Agent skill

Motion Direction

by nodetool-ai in nodetool-ai/nodetool

Set the motion language for a piece before anything is animated — one easing family, one timing unit, one transition family, one stagger rhythm — and audit a timeline against it.

AGPL-3.0Auto-check passedMedia & Creative

Install Motion Direction

skills CLI
$ npx skills add nodetool-ai/nodetool --skill motion-direction -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install nodetool-ai/nodetool motion-direction --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-direction .claude/skills/motion-direction && rm -rf skills-src

Use ~/.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/

Facts

Skill name
motion-direction
GitHub stars
560
Token cost
~3.3k tokens
SKILL.md length
1,807 words
Files
1
Skills in repo
127
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Set the motion language for a piece before anything is animated — one easing family, one timing unit, one transition family, one stagger rhythm — and audit a timeline against it.

  • Starting a title pass
  • SKILL.md covers The one rule, The motion-language spec, Match depth to the brief and Typography, plus 8 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md
  • Animation feels busy

What it does

Motion Direction is an agent skill from nodetool-ai/nodetool. Set the motion language for a piece before anything is animated — one easing family, one timing unit, one transition family, one stagger rhythm — and audit a timeline against it. Use when starting a title pass or a whole cut, when animation feels busy, cheap or inconsistent across shots, or when turning a brand or brief into motion rules an agent can follow. Not for individual clip mechanics — that is motion-graphics.

Its SKILL.md is about 3.3k 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.

When your agent uses it

  • Starting a title pass
  • Animation feels busy
  • Inconsistent across shots
  • Turning a brand

Example prompts

  • “/motion-direction”

What it can do on your machine

Read from SKILL.md and the folder at commit 58765d3. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are json).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Motion Direction loads about 3.3k tokens when it runs. Until then it costs about 110 tokens; SKILL.md has 1,807 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~110
When it runs · the whole SKILL.md, loaded when a task matches
~3.3k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from nodetool-ai/nodetool at commit 58765d3, republished under its AGPL-3.0 licence (© nodetool-ai). 1,807 words, ~3,315 tokens.

Download SKILL.mdSave it as .claude/skills/motion-direction/SKILL.md (or your agent's skills folder).
name
motion-direction
description
Set the motion language for a piece before anything is animated — one easing family, one timing unit, one transition family, one stagger rhythm — and audit a timeline against it. Use when starting a title pass or a whole cut, when animation feels busy, cheap or inconsistent across shots, or when turning a brand or brief into motion rules an agent can follow. Not for individual clip mechanics — that is motion-graphics.
featured
true

Motion Direction → the rules everything else obeys

Direction is the judgment layer above craft. It turns a brief into a short set of motion rules, so every shot reads as one hand. Most of the work is subtraction: deciding what does not move.

motion-principles gives the numbers. This decides which numbers the whole piece is allowed to use.

The one rule

Lock the motion language first, then animate to it. Pick one of each row below and reuse it. Consistency reads as confidence; variety reads as noise. When in doubt, repeat rather than invent.

The motion-language spec

Fill every row once, at the top of the job, and state it back to the user before you animate. The rows guide the timeline document; motion-graphics owns the tool calls.

RowPick oneExample
Easing familyThe easing string for roughly nine moves in tencubic-bezier(0.22,1,0.36,1)
Base timing unitThe atomic durationMs; everything else is a multiple400 — micro 200, hero 800
Transition familyWhich cut style this piece usescrossfade only, hard cuts elsewhere
Stagger rhythmOne offsetMs and one from80ms, from: "start"
Motion intensityThe travel, scale and overshoot budgetdistance ≤ 0.15, overshoot ≤ 1.05
Hold disciplineMinimum stillness between moves≥ 400ms with nothing animating
Type family and weightsOne bundled family and a weight for each text tierInter 800 for the hero, 400 for support
Space and focusOne camera path and a depth plan, if the piece needs 2.5DHero at depthPx: 0, background farther away
Shutter and textureWhich layers blur, echo, or stepHero blur on the impact, background held

Two easings maximum: one for entrances and landings, one for exits. A third has to justify itself.

Match depth to the brief

For a showcase, hero, launch, or "best" piece, plan each scene with a background bed, midground, foreground, and a grain or grade finish. Group each scene. Use path shapes, masks, repeaters, style tracks, animation links, and effects where they give the composition depth. Read the full document with get_timeline and use set_timeline_document for fields edit_timeline cannot write, including styleTracks and repeater.

Study a shipped reference before building. Call list_example_timelines to choose a slug, then get_example_timeline to read its stats, scene catalog and first scene excerpt. Use scene_id to choose another scene and clip_offset / clip_limit to page through its layers. The CodeAct forms are nodetool.timelines.examples.list() and nodetool.timelines.examples.get("kite", {clip_limit: 12}). No library install or repository filesystem is needed. Kite, Prism, Voltra and Tidewater show different ways to group scenes and combine keyframed layers. Cadence shows a vertical data story built from the chart helpers and a reusable component.

Build with the craft methods, not hand-keyframed fades. video({palette, fonts, ...}) from @nodetool-ai/sandbox-timeline gives every scene s.backdrop(), s.glow(), s.flash(), s.kicker(), s.pill(), s.streaks() and s.finish() — the vocabulary the shipped examples build scenes from. A slam, a rise or a grow is el.enter()/el.animate() with the right from/props (title.enter({from: {scale: 1.35, blur: 26, opacity: 0}}) is a slam), a count-up is el.count(), a draw-on is el.draw(). The depth plan below maps directly onto the API — reach for one of these before a bare animate() custom curve:

PlaneBuilt with
Background beds.backdrop(), s.streaks(), a low-amplitude el.loop()
Midgroundsupporting elements, laid out in a container (frame-composition's s.stack/s.row)
Herothe one element with the boldest el.enter()/el.animate(), on the beat
Finishs.finish() inside each scene, or v.adjust() for a whole-video grade after v.series()

Plan every showcase scene across all four before writing the hero's animation. Read the pack documentation (nodetool.packs.docs("@nodetool-ai/sandbox-timeline")) for every method's signature. Budget for a generated still or music bed in a showcase unless the user sets a cost limit.

After saving a showcase, call validate_timeline with {"timeline_id":"<id>","tier":"showcase"}, or nodetool.timelines.validate(id, {tier: "showcase"}). Address its warnings about scene groups, custom keyframes, finish, camera and concurrent visual layers. These checks inspect document structure. Preview the result to judge composition and readability. Standard validation remains appropriate for ordinary edits and intentionally minimal pieces.

Typography

Choose the family and weights in the motion-language spec before building text clips. NodeTool ships Inter, Space Grotesk, Bebas Neue, Playfair Display, Lora, and JetBrains Mono. Use one family across a piece and make the hero visibly heavier than support, such as Inter 800 against 400. Bebas Neue ships only at 400, so use size and spacing for contrast if you choose it.

On a 1920×1080 frame, start a hero title at 96–160 fontSizePx, support at 42–64, and a short kicker at 28–36. Keep large display tracking tight (letterSpacingPx −2 to 1); open an uppercase kicker to 2–5px. Check the actual words at the target frame size and adjust for fit and legibility.

For an existing text clip, edit_timeline can set the type as a set_clip_params patch:

json
{"timeline_id":"<id>","ops":[{"op":"set_clip_params","target":"Hero title","textStyle":{"fontFamily":"Inter","fontWeight":800,"letterSpacingPx":-1,"fontSizePx":128}}]}

timeline-edit-ops owns the full op contract. frame-composition handles placement and safe areas for each aspect ratio.

Tone and energy

Place the piece on two axes and commit. Mixing cells inside one piece is the usual cause of "inconsistent".

Soft (organic, eased)Sharp (precise, snappy)
CalmLuxury, wellness, editorial: long windows, generous holds, minimal staggerPremium tech, finance: deliberate, clean, unhurried, no overshoot
KineticLifestyle, playful, kids: overshoot and spring, loose timingSports, hype, gaming: short windows, hard cuts, accents on beats

Motion personality

The named preset that fills the spec's easing, timing and intensity rows. Pick one per project and hand it to every later step by name.

PersonalitydurationMseasingOvershootPresets it lives on
Playful150–300easeOutBack or cubic-bezier(0.34,1.56,0.64,1)overshoot 1.1–1.2pop, bounce, squash, float
Premium350–600cubic-bezier(0.4,0,0.2,1)nonefade, blur, kenBurns, breathe
Corporate200–400cubic-bezier(0.2,0,0,1)overshoot ≤ 1.03fade, slide, wipe
Energetic100–250easeOut with short windowsovershoot 1.15–1.3pop, flash, shake, spin

Premium sits calm-soft, Corporate calm-sharp, Playful kinetic-soft, Energetic kinetic-sharp. Default to Corporate for product and Playful for lifestyle. easeOutElastic and easeOutBounce belong to Playful alone.

Motion hierarchy

Rank every element, animate down the list, and stop early.

TierWhat it isHow it moves
HeroThe one thing the moment is aboutThe boldest, longest, most-eased move; lands on the beat
SupportContext that helps the hero landSmaller and faster, out of the way, never competing
TextureBed, grain, ambient driftA loop preset at low amplitude; no hard events

These are the three layers motion-principles names Primary, Secondary and Ambient. If two elements compete for the eye in one frame, the direction failed: demote one before touching its keyframes.

Hierarchy is also a track decision. Lowest track index renders on top, so the hero belongs on a low index and the bed on a high one; a scrim sits between the picture it darkens and the text it carries. For a camera move, set clip transform.depthPx separately from track order. The sequence's camera2d can keyframe position and depth while focusDepthPx and aperturePx decide which plane softens. Keep one plane legible while the others move.

Use layout (a flex container on a group clip, its real children via parentId) for elements whose spacing should survive a text or shape change: flexDirection: "row" | "column" with gap keeps siblings apart, and a plate sized from live text is a flexItem: {position: "absolute", inset: 0} sibling in a padded container. Use animationLinks when one clip should follow another's authored position, scale, rotation, or opacity. Linked followers share one motion decision; they do not chain through a second link.

Show full SKILL.md (600 more words)Show less

Restraint

For every element ask whether the motion carries meaning. If not, hold it still.

  • Do not animate the whole frame at once. Leave the eye an anchor.
  • Do not stack a transition on a transition — a wipe cut under a spin in under a flash is three ideas competing for 500ms.
  • Do not loop-animate text somebody is still reading.
  • Do not give overshoot to serious content.
  • One outsized moment per piece. A second cancels the first.
  • A clip that both dissolves in and carries a fade in ramps twice and reads slower than either alone. Pick one.

Pacing

Map energy across the whole timeline before timing any single move: a low open, a build, one peak, a settled end. Vary it on purpose — tension, then release. Stillness is pacing, not a gap. beat-sync-editing turns this shape into cut points.

An animation's beat anchor follows the document tempo: one-based index, scope: "clip" or "sequence", and optional offsetMs. A measured audio curve from bake_audio_animation follows the audio source instead. Use the former for a rhythmic rule and the latter when a real onset or envelope must drive the picture. stagger_animations offsets existing animations across an ordered list of clip IDs while leaving media timing fixed.

Choose motion texture deliberately. repeater makes positioned, delayed copies of one clip; temporalEcho trails it with fading delayed copies; steppedTime quantizes its clock. Per-clip motionBlur controls its own shutter angle and minimum sample count. When layers request different counts, the scene uses the highest count up to 32 and samples each layer evenly across its own shutter. Give blur to the fast hero when it clarifies direction, then inspect the held frame for readability.

Direction notes, per shot

Write intent, not keyframes. One line per shot is enough for someone else — or a later turn — to animate it:

Shot 3, 4s. Hero: the price plate, pop in on the downbeat, Corporate. Support: the caption 80ms behind it, fade. Texture: bed holds kenBurns from shot 2. Nothing else moves.

For a repeated title or logo system, inspect list_compositions before building bare clips. title-slam, word-cards, and logo-sting are starting rigs when their timing matches the brief. motion-graphics owns the tool contract. set_clip_params does not accept the new camera, layout, link, repeat, echo, step, or per-clip blur fields; author those through the full document with set_timeline_document after reading it with get_timeline.

The consistency audit

Before calling a pass done, read the document back with get_timeline and check every clip against the spec. A miss is a direction defect, not a preference.

  • Same easing family on comparable moves, and no stray linear outside loops.
  • Every durationMs a multiple of the base unit.
  • Only the chosen transition types on the cut.
  • One text stagger rhythm, and one offset_ms order for cross-clip builds.
  • Hold discipline respected: no two moves stacked with no rest between them.
  • Exactly one hero animating at any instant.
  • One font family, and it is a bundled one — Inter, Space Grotesk, Bebas Neue, Playfair Display, Lora, JetBrains Mono. Anything else reports font_not_portable and resolves differently per host.

Then look: preview_timeline_frame over the midpoints of the moves you just audited. An audit that only read the document has checked the spec, not the picture.

Required example comparison

Run the review pass motion-graphics owns (its ## Review pass) once, not twice per piece — contact sheet, per-scene checklist, example comparison, tier: "showcase" validation, and a real revision. Judge what comes back against this page's spec too: does the busiest scene still respect Motion hierarchy, does Restraint survive under the example's density, is the chosen Motion personality still legible once the gaps are closed.

© 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

Files

Just SKILL.md in packages/system-skills/motion-direction of nodetool-ai/nodetool.

Open the folder on GitHubat commit 58765d3

Compare with similar skills

Motion Direction 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.

Motion Direction compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Motion Direction this skillnodetool-ai/nodetool560—~3.3kAutomated safety check: PassAGPL-3.0
HyperFrames Animationheygen-com/hyperframes59k3 repos~2.1kAutomated safety check: PassApache-2.0
Slack GIF Creatoranthropics/skills180k29 repos~2kAutomated safety check: PassApache-2.0
Stitch to Remotion Walkthrough Videosgoogle-labs-code/stitch-skills8.4k6 repos~3.2kAutomated safety check: NotesApache-2.0
Faceless Explainer Videoheygen-com/hyperframes59k3 repos~7.7kAutomated safety check: NotesApache-2.0
Video ShotcraftVincentwei1021/video-shotcraft11k—~2.6kAutomated safety check: PassApache-2.0

Similar skills

  • 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.

    59k GitHub starsUsed in 3 repos~2.1k tokens
    Media & CreativeAuto-check passed
  • Slack GIF Creator

    anthropics/skills

    Official

    Provides Slack size and frame limits, Python animation helpers and validators for building animated GIFs sized for emoji and messages.

    180k GitHub starsUsed in 29 repos~2k tokens
    Media & CreativeAuto-check passed
  • Stitch to Remotion Walkthrough Videos

    google-labs-code/stitch-skills

    Official

    Builds walkthrough videos from Stitch design projects using Remotion, with transitions, zoom effects and text overlays on each screen.

    8.4k GitHub starsUsed in 6 repos~3.2k tokens
    Media & CreativeAuto-check: notes
  • Faceless Explainer Video

    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.

    59k GitHub starsUsed in 3 repos~7.7k tokens
    Media & CreativeAuto-check: notes
  • Video Shotcraft

    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.

    11k GitHub stars~2.6k tokensUpdated 4 days ago
    Media & CreativeAuto-check passed
  • Figma to HyperFrames

    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.

    59k GitHub starsUsed in 3 repos~4.5k tokens
    Media & CreativeAuto-check: notes

More from nodetool-ai/nodetool

All 127 skills in this repo
  • Beat Sync Editing

    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.

    560 GitHub stars~2.6k tokensUpdated today
    Auto-check passed
  • Caption Titles

    nodetool-ai/nodetool

    Add and animate a consistent text layer on an existing NodeTool timeline.

    560 GitHub stars~1.9k tokensUpdated today
    Auto-check passed
  • Color Motion

    nodetool-ai/nodetool

    Choose and animate colour on a NodeTool timeline, including shape and text gradients, colour grades, 3D LUTs, and dither.

    560 GitHub stars~2.3k tokensUpdated today
    Auto-check passed
  • Commercial Beat Sheet

    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.

    560 GitHub stars~4.6k tokensUpdated today
    Auto-check passed
  • Elevenlabs Audio Prompting

    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…

    560 GitHub stars~1.9k tokensUpdated today
    Auto-check passed
  • Frame Composition

    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.

    560 GitHub stars~3.5k tokensUpdated today
    Auto-check passed

Questions about Motion Direction

What does Motion Direction do?

Set the motion language for a piece before anything is animated — one easing family, one timing unit, one transition family, one stagger rhythm — and audit a timeline against it. Motion Direction is an agent skill from nodetool-ai/nodetool. Set the motion language for a piece before anything is animated — one easing family, one timing unit, one transition family, one stagger rhythm — and audit a timeline against it.

When should I use Motion Direction?

Motion Direction fits situations like: starting a title pass; animation feels busy; inconsistent across shots; turning a brand.

How do I install Motion Direction in Claude Code?

Run `npx skills add nodetool-ai/nodetool --skill motion-direction -a claude-code`. Or copy the skill folder (packages/system-skills/motion-direction in nodetool-ai/nodetool) into .claude/skills/motion-direction in your project. Claude Code loads it when a task matches its description.

How do I install Motion Direction in Codex?

Run `npx skills add nodetool-ai/nodetool --skill motion-direction -a codex`. Or copy the skill folder (packages/system-skills/motion-direction in nodetool-ai/nodetool) into .agents/skills/motion-direction in your project. Codex loads it when a task matches its description.

Can I use Motion Direction in Cursor, Gemini CLI or GitHub Copilot?

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-direction -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-direction, .gemini/skills/motion-direction, .github/skills/motion-direction and .opencode/skills/motion-direction in your project.

What does Motion Direction need to run?

SKILL.md names no scripts, command-line tools or credentials: Motion Direction is instructions for the agent only.

Does Motion Direction access the network?

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.

Is Motion Direction safe to install?

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.

What licence does Motion Direction use?

Motion Direction 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.

How many tokens does Motion Direction use?

About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Motion Direction?

Skills that share tags, products or a category with Motion Direction: 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.

Who maintains Motion Direction?

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.