Ultimate Motion DesignUMD v0.10.0
Français
Menu

Commands

/umd:go is all you need day to day. The other commands drive one specific step.

CommandFor
/umd:go [what you want to make]The command to remember. Runs the next step and chains until the next decision. /umd:go audit, /umd:go deliver… forces a step
/umd:kickoff [what you want to make]Set up or update the project: brief, profile, format, route, engine, licence policy, tools
/umd:storyboard [notes]Write the beats and validate the look on stills before animating
/umd:build [beats or notes]Build the piece, with drafts reviewed over up to 3 rounds
/umd:render · /umd:render draftFinal render, done twice to prove determinism, then analysed · quick draft
/umd:auditIncremental audit: only what a change can affect is re-checked. It runs in full on the first audit, after a plugin update, or when the last full audit is older than 30 days
/umd:audit quickAutomatic checks only, no agent: the cheapest
/umd:audit fullRe-check everything from scratch
/umd:audit storyOne group: story, motion, sound or delivery
/umd:audit TXT · /umd:audit TXT-01 SAF-01 · /umd:audit blockersOne domain, specific checks, or blockers only
/umd:fix · /umd:fix blockers · /umd:fix AUD-01Fix by priority (blockers then majors), blockers only, or one issue
/umd:deliver [name]Deliver the audited render, then the platform versions you ask for
/umd:tokens [days]Token use per command, and the one change that would save the most
/umd:doctor · /umd:doctor fixCheck or install the tools
/umd:handoffWrite .motion/handoff.md to resume in another session

All these commands rely on a zero-dependency CLI that you can also run yourself: node <plugin>/scripts/umd.mjs (with no argument it prints its help). It includes:

  • rendering: capture, still, render;
  • analysis: analyze (cuts, motion, dead air, flashes, loudness, contact sheet), frames (--cuts: 12 frames around each cut), compare, vmaf, webperf, lint, licenses;
  • sound: mix (ducking, loudness, --backtime to land the music's ending on the end card), hits (a track's final hits), sync (each sound against its picture), normalize, loudness, captions, burn;
  • resources: styles (1 323 styles, prompts and blocks; styles match picks from the brief), moves (120 named techniques), commons (free images from Wikimedia Commons), sounds (free effects and music), sfx (effects made on the spot), characters (free characters, rigs, motion and 2D kits), lipsync (mouth shapes from a voice);
  • tracking: next, status, tokens, estimate (render time from one test frame), adopt (runs a video rendered by your own pipeline through analysis, audit and delivery).

What it creates in your project

BRIEF.md                         the brief (written by /umd:kickoff)
.motion/
  project.json                   profile, route, engine, format, render, licence policy, thresholds
  storyboard.md                  the beats, events, sound cues and the dated "Stills validated" line
  motion-tokens.json             durations and curves (DTCG format)
  assets.lock.json               every asset with its source and licence
  styles/                        the chosen style's prompt, with its credit line
  LEDGER.md                      every critique round: what was found, changed and measured
  stills/                        the key stills
  renders/<id>/                  video, render.json, analysis.json, sheet.jpg, determinism.json, logs
  renders/latest.json            the latest render
  AUDIT.md                       the latest audit report
  audits/<date>.json             every audit, to track the score over time
  audits/<date>/                 evidence.json, plan.json, parts/ (auditor results)
  token-savings.json             tokens saved by compact output
  handoff.md                     the handoff between sessions
assets/commons/                  images downloaded by umd commons
deliverables/                    deliverables, with their manifest and credits.txt

Commit BRIEF.md and .motion/, except the renders, to keep the score history. LEDGER.md and the audit report show the care taken: you can attach them to a client delivery. /umd:kickoff adds the renders, audit logs and token counter to your .gitignore.

The umd CLI

Every command relies on node <plugin>/scripts/umd.mjs, with no dependency. You can run it yourself; it is also what the agents use.

Setup
  next                                The next step for this project (what /umd:go runs), from local files only
  doctor [--fix] [--blender] [--rhubarb]         Check FFmpeg, Playwright, Chromium and the route's tools (--blender: Blender and the GPU Cycles sees); --fix installs what it safely can
  detect                              Guess engine, route and profile from the current folder
  init [--force]                      Create .motion/ (project.json, storyboard, tokens, assets lock) and BRIEF.md from templates
  rules [domain|group...]             Build rules of the domains that apply to this project (compact)
Make
  styles match [words] [--project p] [--limit 6]    Rank the library against BRIEF.md and project.json: looks and blocks, with reasons
  styles <words> [--project promo|presentation|explainer|social|logo|film|web|3d] [--mood m] [--medium m] [--format 9:16]
         [--tier 2] [--kind style|prompt|block|component] [--source lemo|oscar|mg|opus|hf]   Search 1323 styles, prompts and blocks (no tokens)
  styles get <id>                                   Copy that style prompt (or block card) into .motion/styles/
  moves <words> [--family transitions|camera|type|...]   120 named motion techniques (match cut, whip pan, split-flap…)
  commons <words> [--allow-sa] [--limit 12]         Wikimedia Commons media under PD, CC0 or CC BY (BY-SA on request)
  commons get "File:Name.jpg" [--dir assets/commons] [--width 1920]   Download it and record it in assets.lock.json
  still <html|url> --at 0,1.5 [--out dir] [--width W --height H] [--hero "#tv"] [--hero-min 170] [--seek-check]
        Key stills on virtual time; measures the hero's width (an element, or window.umdHero(t) for canvas/WebGL) and
        checks that each frame drawn cold equals the same frame drawn in sequence
  capture <html|url> --out f.mp4 [--fps 30] [--duration s] [--width 1920 --height 1080] [--from s]
          [--draft] [--transparent] [--format mp4|webm|mov|gif|png] [--audio f] [--seed n] [--subframes 16 --shutter 0.5]
          Deterministic HTML → video; --subframes averages that many sub-frames per frame over the shutter (motion blur)
  adopt <video> [--draft]                         Make a video rendered by your own pipeline the latest render (analysis, audit, deliver apply)
  render [--draft] [--twice] [--no-analyze] [--engine eevee|cycles]  Render the project (project.json "render"), then analyze; --engine reaches a
          Blender command as UMD_ENGINE (default: render.engine)
  mix --voice v.wav --music m.wav [--sfx a.wav@1.2 ...] --out mix.wav [--duck 9] [--lufs -14] [--length s]  (length defaults to duration_s)
      [--backtime | --hit s --card s | --music-start s]   Back-time the music: its own ending lands on the end card, one continuous piece
  hits <music>                                    Strong attacks near the end of a track (candidates for its final hit)
  sounds <words> [--music] [--max 8] [--cc0]      Free sound effects (Freesound, Wikimedia) or music (Jamendo) via Openverse: CC0, CC BY, public domain only
  sounds get <id> [--dir assets/audio]            Download as 48 kHz WAV, record author, licence and credit line in assets.lock.json
  characters [words] [--dims 3d|2d] [--style anime|film|low-poly|flat…] [--age child|senior…] [--face visemes|full] [--kind pack|avatars|generator|rig|motion|kit2d|code|tool] [--route blender|threejs|html]
             Free characters, rigs, animation clips and 2D kits for commercial work (catalogue + live lists: Mesh2Motion, KayKit, Open Source Avatars)
  characters get <id> | info <id> | add <file> --id <entry> [--licence --author --url]   Download (or record a manual download) with its licence in assets.lock.json
  lipsync <voice.wav> [--text script.txt] [--fps 30]   Mouth shapes A–H, X per frame (Rhubarb, MIT) for character.py and the 2D puppet
  sfx [<kind>] [--dur s] [--seed n] [--gain dB]   Synthesise an effect (whoosh, swipe, riser, impact, subdrop, click, tick, pop, chime, shimmer, glitch, roomtone)
  normalize <in> <out> [--lufs -14] [--tp -1]      loudness <file>
  captions <words.json> --out subs.ass|srt|vtt [--style karaoke|pop|line] [--max-chars 32] [--width --height --font --color --highlight]
  burn <video> <subs.ass> --out f.mp4             Burn captions in (libass)
Check
  analyze <video> [--out dir] [--loop]            Probe, cuts, freezes, dead air, black, flashes, loudness, contact sheet; --loop checks the seam
  frames <video> --at 1,2.5 | --every 2 | --cuts | --sheet [--out dir] [--width 960]   (--cuts: 12 frames around each cut)
  sync <video> [--timing timing.json | --cues storyboard.md] [--tolerance-ms 45]   Do the sound hits land on their visual events?
       (.motion/timing.json, the master clock, when it exists; else the storyboard's "## Sound cues")
  compare <a> <b>                                 Frame-hash equality + SSIM       vmaf <encode> <master>
  lint [dir]   licenses   webperf <url>   captions-check <subs> <words.json>
  evidence [--date D]                             All automatic checks for the audit + statuses of auto criteria
  plan [scope...] [--incremental]                 Criteria left for the auditors      assemble [--date D]      status
Deliver and account
  deliver [--name n]                              Copy the audited render to deliverables/ (refused while a blocker is open)
  tokens [--days 30] [--session id] [--json]      Token use per /umd:* command, from the session transcripts
  run <label> "<command>"                         Run a command, keep the log on disk, print a compact summary
  estimate --frames N [--parallel P] -- <command rendering one frame>   Time one frame, multiply: render time before committing
  version                                         Plugin version
a path to show: relative inside the project, absolute outside it (never ......AppData…)
everything after a lone "--" is a command line for umd estimate, never parsed as options
boolean flags never take a value, so `umd capture --draft page.html` keeps page.html as the input
"music" is a switch only for `umd sounds --music`; `umd mix --music file.wav` takes a file
Compact output for large results: full JSON on disk, summary on stdout.
the per-second motion timeline stays in analysis.json; stdout gets its shape
---------- audit pipeline ----------
A film rendered outside umd (the project's own scripts, Blender, After Effects…) becomes the project's latest render,
so analyze, the audit and deliver judge it like any other. It never replaces the checks: it lets them run.