agentleFS
LangChainKnown publisherlangchain-ai/design-agent/skills/motion-direction/SKILL.md

motion-direction

Skill2 starsChanged 14 days agoApache-2.0View on GitHub

Direct and review motion built in HyperFrames, from a sting to a film. The idea and its turn, timing on a grid, craft, named moves, sound on the picture, and the review rubric.

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 2 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    One sentence a stranger could repeat after one viewing: If you cannot say it, there is no film yet.

    line 33
  2. Very specific:

    Write the timing down before you animate, as a named beat table at the top of the composition's script for a short piece, or as timeline.js …

    line 57
  3. Distinctive:

    Run it on every beat before defending the pacing.

    line 68
  4. Very specific:

    Every event the eye follows gets its own designed sound on the same timeline constant.

    line 93
  5. Very specific:

    The final: only after the person approved the preview (hyperframes-cli), then artifact-contract.mjs --expect <file>:<W>x<H>@<seconds> and …

    line 119

≈ “Common” is an estimate: at least 1 in 5 of the 308,232 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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Motion direction

How to make motion worth watching. HyperFrames is the engine: the composition contract, the CLI, GSAP adapters and the catalog are in the vendored hyperframes, hyperframes-core, hyperframes-cli and hyperframes-animation skills, and this skill does not repeat them. The storyboard comes first (storyboard); a 1-3 minute film with helpers runs through launch-film; the sound is made with sound. This is the director's judgment that sits across all of them.

Everything here is a default to weigh unless it names its evidence. The brand pack outranks it.

JobPage
The idea, the hook, the turn, proof, the final frame, structure, pacingreferences/directing.md
Easing, springs, type in motion, camera, transitions, composition, rhythm, polishreferences/craft.md
Named moves: when, timing, sound, how to build themreferences/techniques.md
The grid, a sound for each event, the cull, balance, loudness, syncreferences/sound.md
Brand decisions in motion and who wins a conflictreferences/brand-in-motion.md
Scoring a film at a gate; how to look; failure patternsreferences/review.md

The one difference

A deck is a sequence of frames. A film is a sequence of frames with something crossing between them. A film is an argument with a turn, and a frame asks for at most two things at once. Everything below serves that.

1. The idea, before any code

  • One sentence a stranger could repeat after one viewing. If you cannot say it, there is no film yet. Read the beats aloud as one continuous sentence: if each beat is a self-contained label, you have a deck.
  • The concept gate (brand-design): a real thing shown, a specific idea, or bold type. Decorative nodes, dots and glows are never the idea.
  • The hook is complete inside the first second: something on frame 0 already moving, the statement readable with the sound off. Frame 0 is also the poster. artifact-contract's --allow-blank-ends is for a fade from or to a flat ground the person asked for, never to get a blank opening past the gate.
  • The turn is the one concrete thing the film pivots on, as an image: a before and after, many becoming one, the impossible made possible.
  • Proof on screen: the real product surface, the real number with its source. A claim with no proof on screen is a slide.
  • The final frame is big and calm: the logo or the one line, landing on a downbeat or the last word, held long enough to read.
  • One motif threads the film and resolves on the last frame. Moves come from the subject: derive each move from what the product does, never from the last film's moves.

Decide early whether the film is voiceover-led (cut to the words; copy lands on or just before its word) or music-led (cut to the beat grid; something visible changes on the beats). A film with a voiceover is cut to the voiceover, not the music. Details: directing.

2. The grid: one clock for picture and sound

Write the timing down before you animate, as a named beat table at the top of the composition's script for a short piece, or as timeline.js in the project when there is a soundtrack grid or more than one file. It holds the frame rate and length, the tempo and beats (or the voiceover's word starts), the cuts, the hits, the storyboard frame times, and the holds you mean (AUDIT, below). Scenes read their times from it and never type them, so a re-time is one number.

  • From a reference film or a supplied track: film-breakdown drafts it (breakdown.mjs writes timeline.draft.js; analyze-audio.mjs --js writes the grid of a track).
  • From a mood: pick a tempo (cinematic around 60-80 BPM, smooth 90-110, kinetic 115-128) and fill whole bars: BPM = 240 × bars ÷ seconds.
  • Holds are arithmetic: settled hold = next event start − (entrance start + entrance duration). Run it on every beat before defending the pacing; a reading hold follows reading speed (design-wiki, type on screen over time).
  • AUDIT = { preset, holds: [[t0, t1, "reason"]] } declares the stillness the film means: an end card, a copy read. The preset (reel, launch, explainer, loop) says how much stillness its format expects (directing). video-score reports frozen runs and shots that never develop; a finding inside a declared hold is named in the delivery note, any other is a fix.

3. Build it in HyperFrames

  • Search before you author: hyperframes catalog --query "<the move in plain words>", then hyperframes add; write by hand only when nothing fits (hyperframes-registry).
  • One paused timeline per composition, seek-driven; scenes as sub-compositions mounted by a thin index.html (hyperframes-core). Elements a later move needs get stable ids, scene-prefixed (#s3-card), and a carrier that crosses scenes is unprefixed (#carrier-report) on its own track.
  • One easing family per film. scripts/motion-presets.js holds the frame presets and five families (silk, snap, spring, float, pulse) with enter, exit, a seeded hash, log-space zoom and frame snapping; copy it next to the composition and load it after GSAP.
  • Offline: copy GSAP and every asset next to the composition (media-production says where GSAP lives); HyperFrames examples that load from a CDN fail in the sandbox.
  • Brand: tokens from /workspace/brand/tokens.css, the real logo from /workspace/brand/logos/, fonts through local @font-face (hyperframes lint requires it).

4. Sound on the same grid

Every event the eye follows gets its own designed sound on the same timeline constant; silence is a choice. With a voiceover, generate the lines first (generate_voiceover) and cut to their word timings. Mixing, levels, mastering to -14 LUFS and the audio-lint gate are sound's job; what to put where is references/sound.md.

5. Look, render, look again

The loop you run on code, run on pixels:

  1. Before any render: node /workspace/tools/video-gate.mjs projects/<slug>/index.html at zero errors, node /workspace/tools/brand-lint.mjs projects/<slug>/index.html, and hyperframes check in the project folder (it lints first; a lint error turns its layout and contrast audits off). The gates take paths relative to /workspace.
  2. Strips through every cut, not settled frames: hyperframes snapshot --at <t−0.06>,<t+0.10>,<t+0.28> around each boundary, tiled with review-thumb.mjs --sheet, then one look per sheet. A perfect endpoint can hide a broken journey.
  3. The artifact: node /workspace/tools/video-score.mjs projects/<slug>/index.html measures what is on screen at every sample: blank or thin frames, cuts that carry nothing, shots that never develop or never rest, crops, collisions, flat hierarchy. Its six axis numbers are a reading aid, never a target.
  4. A draft render with start_render_job (hyperframes render --quality draft): it outlives your turn and wakes you when it exits. Then frames from the file (film-breakdown/scripts/grab.mjs --sheet), and against a reference or the animatic, compare.mjs.
  5. Review against the rubric. For anything over about 30 s, or any film you are not sure of, have a helper review it with the critic brief (launch-film/briefs/critic.md, xhigh) before delivery.
  6. The final only after the person approved the preview (hyperframes-cli), then artifact-contract.mjs --expect <file>:<W>x<H>@<seconds> and audio-lint. Deliver with upload_files and one line naming the calls they would not expect.

Iterating on your own sheets and draft renders is how a film gets made, not a correction round; the two-round stop is for notes from people.

Formats

16:9 at 1920×1080 by default; 9:16 and 1:1 are re-laid out on the same grid and score, never cropped from 16:9. HyperFrames renders at 30 fps unless told otherwise; render a film that matches a reference at the reference's rate, and prefer 30 fps for long films (60 doubles the render). The aspect presets are in motion-presets.js; placement specs in design-wiki.

When something is off

SymptomLikely cause and fix
A sub-composition renders as tiny unstyled textIts <style> or <script> sits outside the <template> (hyperframes-core, sub-compositions)
A scene shows its initial state for the whole slotThe host's data-composition-id does not match the file's and its timeline key
A frame dips to grey or black at a cutA dissolve between unrelated grounds, or separate clips on alternating tracks; see transitions in craft
A number or word lands one frame late in one render and not anotherA time not snapped to its frame (MotionPresets.onFrame)
A counter or a text swap is wrong when scrubbedA callback that increments instead of writing state derived from its time (video-gate warns)
Motion looks fine in preview, dead in the renderSomething runs on the wall clock (CSS animation, a standalone tween, a timer): video-gate names it
The render is slowFewer motion-blurred elements or lower blur samples; check the render summary's second line (hyperframes-cli)

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

Reviews can't be read right now.

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.