Motion Recipes
Four tools for the register-neutral DS motion-token layer. Distinct from the cinematography primitives in Primitives & Reference: motion recipes are catalogued in catalog/motion-recipes.json and apply across all personalities, scoped by the camera-guardrails spring_physics constraint.
get_motion_recipe
Get a single motion recipe by ID from the motion-tokens catalog. Returns the full record: tokens, interrupt contract, reduced-motion fallback, runtime scope.
- Name
recipe_id- Type
- string
- Description
Required. Recipe ID, e.g.
enter.fade-up,attention.pulse. Use search_motion_recipes to discover IDs.
Returns: Full recipe record with tokens, interrupt contract, reduced-motion fallback, and runtime scope.
Try asking your AI:
"Get the enter.fade-up motion recipe"
search_motion_recipes
Search the motion-recipe catalog by intent, context, and personality. Motion recipes are register-neutral, so personality applies the camera-guardrails spring_physics constraint. A montage query excludes spring/framer-only recipes, and excluded recipes are reported rather than silently dropped.
- Name
intent- Type
- string
- Description
Free-text intent, e.g. "element appearing on scroll".
- Name
context- Type
- string
- Description
Surface/context the motion applies to, e.g.
card,modal-body,toast,nav-item.
- Name
personality- Type
- string
- Description
Optional personality. Applies the spring_physics guardrail (montage and any custom personality whose derived boundaries forbid spring exclude spring/framer-only recipes).
Returns: Ranked matches with reasons, plus any recipes excluded by the personality guardrail.
Try asking your AI:
"Find motion recipes for an element appearing on scroll, in a card surface, montage personality"
validate_motion_token
Validate a motion usage against the motion-token rules. Reports only, never mutates. Rule vocabulary: raw_duration and raw_easing (literal values instead of var(--duration-*) / var(--ease-*) tokens), and recipe_match (the usage matches a catalogued recipe). Same rule names the ANI-135 source scanner reuses.
- Name
usage- Type
- object
- Description
Required. A motion usage:
{ duration?, easing?, properties? }— e.g.{ "duration": "0.3s", "easing": "ease-out", "properties": ["opacity", "transform"] }.
Returns: Per-rule findings on the supplied usage, with matched recipe (if any).
Try asking your AI:
"Validate this motion usage: 0.3s ease-out on opacity and transform"
audit_motion_coverage
Scan a directory or file and report motion-token coverage. Returns total motion usages, how many use recipes/tokens vs raw durations/easings, a coverage percentage, and a per-file breakdown. Stopgap in-repo scanner (the full source scanner is ANI-135 in the Preset repo); the output flags this.
- Name
path- Type
- string
- Description
Required. Directory or file path to scan. Skips node_modules/.git/dist/build; scans .css/.scss/.ts/.tsx/.js/.jsx.
Returns: Coverage summary and per-file breakdown. Skips node_modules / .git / dist / build; scans .css/.scss/.ts/.tsx/.js/.jsx.
Try asking your AI:
"Audit motion coverage in apps/animatic-docs/src"