Best for
- An image is locked (operator picked one candidate via
- The blueprint exists in scenes//blueprint.json but the
- A provider switch (Veo → Kling, Sora → Higgsfield) requires the
event4u-app/agent-config/src/skills/motion-choreographer/SKILL.md
Use when turning a locked still + blueprint into a provider-tuned motion prompt — camera, primary + secondary motion, physics, native-audio sync. Triggers 'motion prompt for Veo/Kling/Sora'.
Decision brief
Turn an approved still + the 12-block scene blueprint into a provider-tuned motion prompt that the target video adapter consumes. Camera choreography, primary subject motion, secondary environment motion, physics constraints, and — when the adapter declares audio: native — a syn…
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/event4u-app/agent-config --skill "src/skills/motion-choreographer"Inspect the Agent Skill "motion-choreographer" from https://github.com/event4u-app/agent-config/blob/0adf49a8ae84b0ff6e2de8759eea43257e020eff/src/skills/motion-choreographer/SKILL.md at commit 0adf49a8ae84b0ff6e2de8759eea43257e020eff. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
1. Read scenes//blueprint.json — fail loud if missing. 2. Read scenes//selection.json — fail loud if missing; the locked image path is required as the motion anchor. 3. Read the target adapter's capability via scripts/ai-video/adapters/.sh capability. Cache audio= for Step 3. 4.…
1. Read scenes//blueprint.json — fail loud if missing. 2. Read scenes//selection.json — fail loud if missing; the locked image path is required as the motion anchor. 3. Read the target adapter's capability via scripts/ai-video/adapters/.sh capability. Cache audio= for Step 3. 4.…
Emit a CAMERA MOTION block with the move type, distance, speed in seconds, and start-end framing.
1. PRIMARY MOTION — what the subject does, beat-counted, with physics anchors (mass, contact points, momentum). Reuse ACTION from the blueprint; refine for the adapter's preferred verb density. 2. SECONDARY MOTION — what the world does (hair, fabric, foliage, water, dust, partic…
If adapter capability is audio: native AND the blueprint's audio.enablenativeaudio is true:
Permission review
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 92/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 7 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Turn an approved still + the 12-block scene blueprint into a provider-tuned motion prompt that the target video adapter consumes. Camera choreography, primary subject motion, secondary environment motion, physics constraints, and — when the adapter declares
audio: native— a synchronized audio direction block. Reads adapter capabilities fromadapter-contract.md; never speaks to a network API.
operator-pick.sh) and the next step is motion + audio direction
for the video adapter.scenes/<id>/blueprint.json but the
motion prompt has not been emitted yet.Do NOT use when:
scene-expander → parse-blueprint.sh
first.canvas-design.scenes/<id>/blueprint.json — fail loud if missing.scenes/<id>/selection.json — fail loud if missing; the
locked image path is required as the motion anchor.scripts/ai-video/adapters/<id>.sh capability. Cache audio=*
for Step 3.character.json lock exists, load it verbatim — identity
tokens are immutable.Emit a CAMERA MOTION block with the move type, distance, speed
in seconds, and start-end framing.
0.4s push, hold 1.6s, 0.4s pull).MS → CU, WS → MS).Blueprint intent-class decoding — the blueprint CAMERA block names one of six provider-agnostic intent classes; map it to the move types above before encoding:
| Intent class | Move-type mapping |
|---|---|
| static hold | lock-off |
| push-in | push / dolly-in |
| pull-back | pull / dolly-out |
| lateral track | truck / pan |
| handheld drift | handheld / gimbal-glide |
| orbit | crane / arc via truck+pan |
Adapter quirks (per-provider encoding of the mapped move):
review.md (a
silent clamp is a drift bug).Two blocks:
ACTION
from the blueprint; refine for the adapter's preferred verb
density.If adapter capability is audio: native AND the blueprint's
audio.enable_native_audio is true:
Emit an AUDIO DIRECTION block with:
DIALOGUE TIMING — speaker @ 0.4s: "line" per dialogue entry.AMBIENT LAYERS — copy from blueprint; one layer per line.SYNC CUES — which action beat maps to which audio cue
(footstep @ 1.2s, door close @ 2.1s).If adapter capability is audio: none:
# AUDIO: ffmpeg-mux fallback comment with the
blueprint's audio paths queued for stitch-time mux.enable_native_audio: false in the motion-prompt JSON.AUDIO DOWNGRADE warning block in
motion-prompt.txt AND adapter-notes.md listing every dialogue
line that will not render. The decision whether that is acceptable
belongs to the orchestrator gate (adapter-contract § Audio
ownership) — this skill translates, it never validates, and it
NEVER silently strips dialogue.Emit PHYSICS — a short list of what the model must respect:
gravity direction, contact friction, fluid behavior, hair / cloth
inertia, lens parallax. Single line per constraint.
Write scenes/<id>/motion-prompt.json with the adapter-contract
stdin shape. The orchestrator pipes this into the video adapter's
submit subcommand.
jq .).requires.audio_native is consistent with the chosen adapter's
capability.character.json exists) are verbatim.scenes/<id>/motion-prompt.json — adapter-contract stdin.scenes/<id>/motion-prompt.txt — labeled prose blocks
(CAMERA MOTION · PRIMARY MOTION · SECONDARY MOTION · AUDIO
DIRECTION · PHYSICS) for operator review.scenes/<id>/adapter-notes.md — which adapter, which
capability, which preset / model, with rationale.SUBJECT block —
identity tokens are immutable; refuse the temptation.audio: native on an adapter that returns audio: none
produces silent video — always read capability first, never
guess from the adapter name.character.json.Motion prompts inherit every constraint the upstream blueprint carries. Before emitting provider-tuned prose:
agents/settings/policies/media/disclosure.md — every distributed clip carries the non-removable AI-generation disclosure; refuse adapter flags that would suppress it.agents/settings/policies/media/transparency.md — provider provenance (C2PA / SynthID) is preserved; refuse re-encode flags whose effect is to strip provenance.agents/settings/policies/media/voice-cloning.md — when the motion prompt requests audio: native narration in a named voice.agents/settings/policies/media/brand-impersonation.md — when the motion prompt copies a recognised brand's chyron / mascot / signature transition.Refuse-and-surface; the motion prompt cannot launder a policy gap upstream skills should have caught.