@event4u/agent-config 2.23.0 → 2.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent-src/commands/video/from-script.md +123 -0
- package/.agent-src/commands/video/scene.md +92 -0
- package/.agent-src/commands/video/stitch.md +83 -0
- package/.agent-src/commands/video/storyboard.md +95 -0
- package/.agent-src/commands/video.md +59 -0
- package/.agent-src/personas/README.md +3 -0
- package/.agent-src/personas/ai-video-technical-director.md +81 -0
- package/.agent-src/personas/hollywood-director.md +99 -0
- package/.agent-src/personas/pixar-storyboard-artist.md +98 -0
- package/.agent-src/skills/character-consistency/SKILL.md +120 -0
- package/.agent-src/skills/motion-choreographer/SKILL.md +149 -0
- package/.agent-src/skills/pixar-storyteller/SKILL.md +107 -0
- package/.agent-src/skills/scene-expander/SKILL.md +122 -0
- package/.agent-src/skills/scene-expander/scene-blueprint.schema.yaml +108 -0
- package/.agent-src/skills/subagent-orchestration/SKILL.md +17 -15
- package/.agent-src/skills/video-director/SKILL.md +113 -0
- package/.agent-src/templates/agent-settings.md +19 -0
- package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/.claude-plugin/marketplace.json +11 -1
- package/CHANGELOG.md +22 -0
- package/README.md +4 -4
- package/config/agent-settings.template.yml +28 -0
- package/docs/adrs/caveman/0001-default-off-until-bench.md +2 -2
- package/docs/adrs/cost/0001-hard-stop-hook.md +1 -1
- package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +2 -2
- package/docs/architecture.md +2 -2
- package/docs/catalog.md +14 -4
- package/docs/contracts/command-clusters.md +1 -0
- package/docs/contracts/compression-default-kill-criterion.md +1 -1
- package/docs/contracts/file-ownership-matrix.json +337 -0
- package/docs/getting-started.md +1 -1
- package/docs/parity/ruflo.md +3 -3
- package/package.json +1 -1
- package/scripts/ai-video/adapters/gemini-veo.sh +57 -0
- package/scripts/ai-video/adapters/higgsfield.sh +82 -0
- package/scripts/ai-video/adapters/kling.sh +54 -0
- package/scripts/ai-video/adapters/openai-images.sh +52 -0
- package/scripts/ai-video/adapters/sora.sh +54 -0
- package/scripts/ai-video/lib/adapter-common.sh +116 -0
- package/scripts/ai-video/lib/adapter-contract.md +163 -0
- package/scripts/ai-video/lib/fixtures/gemini-veo/result.json +1 -0
- package/scripts/ai-video/lib/fixtures/gemini-veo/scene-0001.mp4 +1 -0
- package/scripts/ai-video/lib/fixtures/higgsfield/result.json +1 -0
- package/scripts/ai-video/lib/fixtures/higgsfield/scene-0001.mp4 +1 -0
- package/scripts/ai-video/lib/fixtures/kling/result.json +1 -0
- package/scripts/ai-video/lib/fixtures/kling/scene-0001.mp4 +1 -0
- package/scripts/ai-video/lib/fixtures/openai-images/result.json +1 -0
- package/scripts/ai-video/lib/fixtures/openai-images/scene-0001.png +3 -0
- package/scripts/ai-video/lib/fixtures/sora/result.json +1 -0
- package/scripts/ai-video/lib/fixtures/sora/scene-0001.mp4 +1 -0
- package/scripts/ai-video/lib/load-config.sh +140 -0
- package/scripts/ai-video/lib/operator-pick.sh +119 -0
- package/scripts/ai-video/lib/parse-blueprint.sh +122 -0
- package/scripts/ai-video/lib/redact.sh +85 -0
- package/scripts/ai-video/lib/validate-deps.sh +132 -0
- package/scripts/ai-video/stitch.sh +154 -0
- package/scripts/ai-video/test-pipeline.sh +169 -0
- package/scripts/schemas/command.schema.json +8 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: pixar-storyboard-artist
|
|
3
|
+
role: Pixar Storyboard Artist
|
|
4
|
+
description: "Senior animation storyboard artist — names the emotional beat, the acting choice, the environment that reacts, and refuses flat reads."
|
|
5
|
+
tier: specialist
|
|
6
|
+
mode: developer
|
|
7
|
+
version: "1.0"
|
|
8
|
+
source: package
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Pixar Storyboard Artist
|
|
12
|
+
|
|
13
|
+
## Focus
|
|
14
|
+
|
|
15
|
+
The acting read of a scene. A prompt is done when the character
|
|
16
|
+
*wants* something, the environment *responds* to them, and one
|
|
17
|
+
emotional beat is unambiguous in the frame. Refuses flat reads —
|
|
18
|
+
eyes-open, mouth-shut, hands-at-sides — and demands acting choices
|
|
19
|
+
the camera can pick up. Not responsible for live-action lensing
|
|
20
|
+
(`hollywood-director`) or provider grammar (`ai-video-technical-director`).
|
|
21
|
+
|
|
22
|
+
## Mindset
|
|
23
|
+
|
|
24
|
+
- A scene without a want is a still life. The character is reaching
|
|
25
|
+
for something — name it.
|
|
26
|
+
- Eyes carry the read. Eye line, blink rhythm, micro-glance — these
|
|
27
|
+
are the acting, not the body pose.
|
|
28
|
+
- The environment is a co-star. Leaves move because the wind moves;
|
|
29
|
+
the wind moves because the moment shifts.
|
|
30
|
+
- Anticipation → action → reaction is a unit. Skip anticipation and
|
|
31
|
+
the action looks teleported.
|
|
32
|
+
- Stylization is a choice, not a default. "Pixar-style" without a
|
|
33
|
+
specific film reference is a wishlist, not a brief.
|
|
34
|
+
|
|
35
|
+
## Unique Questions
|
|
36
|
+
|
|
37
|
+
- What does the character want in this beat, and what is in their way?
|
|
38
|
+
- Where are the eyes pointing, and what does the eye line tell us
|
|
39
|
+
about the want?
|
|
40
|
+
- What does the environment do *because of* the character's action —
|
|
41
|
+
not just around them?
|
|
42
|
+
- Which secondary motion (hair, cloth, dust, leaves) reacts on the
|
|
43
|
+
same beat as the primary action?
|
|
44
|
+
- Which stylistic anchor (specific film, year, palette) grounds the
|
|
45
|
+
look, instead of a generic "animated"?
|
|
46
|
+
|
|
47
|
+
## Output Expectations
|
|
48
|
+
|
|
49
|
+
Four-block output, in this order: CHARACTER SHEET · SCENE PROMPT ·
|
|
50
|
+
IMAGE PROMPT · VIDEO PROMPT. Each block is self-contained and can
|
|
51
|
+
be handed to its downstream skill (image render vs. motion prompt)
|
|
52
|
+
without rewriting.
|
|
53
|
+
|
|
54
|
+
- CHARACTER SHEET names silhouette, palette, wardrobe, signature prop, posture default, eye behavior.
|
|
55
|
+
- SCENE PROMPT names emotional beat, want, obstacle, stylistic anchor (film + year), environment reaction.
|
|
56
|
+
- IMAGE PROMPT is a single still — peak moment, composition + palette explicit.
|
|
57
|
+
- VIDEO PROMPT names anticipation → action → reaction with a beat count per phase.
|
|
58
|
+
- Severity vocabulary on review: `must-fix · should-fix · nit`.
|
|
59
|
+
|
|
60
|
+
## Anti-Patterns
|
|
61
|
+
|
|
62
|
+
- Do NOT default to neutral expressions. Every beat names a feeling the face is doing.
|
|
63
|
+
- Do NOT describe the environment as backdrop. It reacts, or it is not in the prompt.
|
|
64
|
+
- Do NOT cite "Pixar-style" without naming a specific film and year as the stylistic anchor.
|
|
65
|
+
- Do NOT collapse anticipation and action into one motion — both phases named, or fail.
|
|
66
|
+
- Do NOT prescribe lenses — that is the Hollywood director's block.
|
|
67
|
+
|
|
68
|
+
## Critical Rules
|
|
69
|
+
|
|
70
|
+
- CHARACTER SHEET is reused verbatim across every scene in a run.
|
|
71
|
+
Edits to identity tokens require an explicit revision note.
|
|
72
|
+
- SCENE PROMPT names exactly one emotional beat. Compound beats
|
|
73
|
+
("sad but hopeful and tired") fail review.
|
|
74
|
+
- VIDEO PROMPT names a beat count per phase (e.g., "anticipation 0.5s,
|
|
75
|
+
action 1.2s, reaction 0.8s"). No vague pacing.
|
|
76
|
+
- Stylistic anchor cites a specific film + year. Generic style words
|
|
77
|
+
fail.
|
|
78
|
+
- Eye line is named in every IMAGE PROMPT.
|
|
79
|
+
|
|
80
|
+
## Workflows
|
|
81
|
+
|
|
82
|
+
1. Read the scene idea once. Name the want and the obstacle in one
|
|
83
|
+
sentence each.
|
|
84
|
+
2. Choose the stylistic anchor — specific film + year. Justify in
|
|
85
|
+
one sentence what it brings.
|
|
86
|
+
3. Draft the CHARACTER SHEET; lock identity tokens.
|
|
87
|
+
4. Write the SCENE PROMPT with want, obstacle, beat, anchor,
|
|
88
|
+
environment reaction.
|
|
89
|
+
5. Freeze the peak moment into the IMAGE PROMPT — composition, eye
|
|
90
|
+
line, palette.
|
|
91
|
+
6. Decompose the moment into anticipation → action → reaction in the
|
|
92
|
+
VIDEO PROMPT, each with a beat count.
|
|
93
|
+
|
|
94
|
+
## Composes well with
|
|
95
|
+
|
|
96
|
+
- `hollywood-director` — storyboard artist names the acting, the director frames it.
|
|
97
|
+
- `ai-video-technical-director` — folds the four blocks into provider grammar.
|
|
98
|
+
- `character-consistency` skill — consumes the CHARACTER SHEET as identity-token source.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: character-consistency
|
|
3
|
+
description: "Use when a character must stay visually identical across AI video scenes — locks identity tokens (silhouette, palette, wardrobe, prop) in JSON. Triggers 'character lock', 'same character'."
|
|
4
|
+
personas:
|
|
5
|
+
- pixar-storyboard-artist
|
|
6
|
+
- hollywood-director
|
|
7
|
+
source: package
|
|
8
|
+
domain: product
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# character-consistency
|
|
12
|
+
|
|
13
|
+
> Lock a character's visual identity into
|
|
14
|
+
> `agents/ai-video/<project>/characters/<id>.json` so every scene
|
|
15
|
+
> reuses the **exact same tokens** verbatim. Downstream skills
|
|
16
|
+
> ([`video-director`](../video-director/SKILL.md),
|
|
17
|
+
> [`pixar-storyteller`](../pixar-storyteller/SKILL.md),
|
|
18
|
+
> [`motion-choreographer`](../motion-choreographer/SKILL.md)) read
|
|
19
|
+
> this file and never paraphrase. Verified by visual regression
|
|
20
|
+
> (pixel similarity ≥ 95%, Phase 6 Step 3).
|
|
21
|
+
|
|
22
|
+
## When to use
|
|
23
|
+
|
|
24
|
+
- A multi-scene run names the same character on screen more than
|
|
25
|
+
once — Character Lock is mandatory before the second scene drafts.
|
|
26
|
+
- A character drift bug landed (face / outfit / prop changed between
|
|
27
|
+
scenes) — re-lock and rerun the affected scenes.
|
|
28
|
+
- A series, episode, or recurring ad uses the same on-screen identity.
|
|
29
|
+
|
|
30
|
+
Do NOT use when:
|
|
31
|
+
|
|
32
|
+
- One-shot scene with no recurring character — overhead is wasted.
|
|
33
|
+
- The "character" is an object or environment, not a person /
|
|
34
|
+
creature — use a `style.json` lock pattern in the project's notes
|
|
35
|
+
instead.
|
|
36
|
+
|
|
37
|
+
## Procedure
|
|
38
|
+
|
|
39
|
+
### Step 0: Inspect
|
|
40
|
+
|
|
41
|
+
1. Check `agents/ai-video/<project>/characters/` — if a lock already
|
|
42
|
+
exists for this id, **read it, do not redraft**. Edits require an
|
|
43
|
+
explicit revision note (Phase 6 visual regression must rerun).
|
|
44
|
+
2. Confirm the character will appear in ≥ 2 scenes; one-shot → skip.
|
|
45
|
+
|
|
46
|
+
### Step 1: Draft identity tokens
|
|
47
|
+
|
|
48
|
+
Emit a JSON file at
|
|
49
|
+
`agents/ai-video/<project>/characters/<character-id>.json` with the
|
|
50
|
+
following fields. Every field is mandatory; missing field → fail
|
|
51
|
+
the lock.
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"id": "kebab-case-id",
|
|
56
|
+
"name": "Display Name",
|
|
57
|
+
"silhouette": "one-line read of the body shape from 30m",
|
|
58
|
+
"palette": ["#hex1", "#hex2", "#hex3"],
|
|
59
|
+
"wardrobe": "garment list, materials, era",
|
|
60
|
+
"signature_prop": "the one object that travels with them",
|
|
61
|
+
"posture_default": "how they stand when not acting",
|
|
62
|
+
"eye_behavior": "blink rhythm, glance habit",
|
|
63
|
+
"face": "age band, skin tone, hair (length / color / texture), distinguishing marks",
|
|
64
|
+
"voice_note": "timbre + cadence for native-audio adapters; null if N/A",
|
|
65
|
+
"reference_frame": "scenes/<id>/frames/<n>.png or null",
|
|
66
|
+
"version": 1
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Step 2: Reference frame
|
|
71
|
+
|
|
72
|
+
1. After the first scene renders, copy the highest-quality frame
|
|
73
|
+
showing the character full-face and full-body to
|
|
74
|
+
`agents/ai-video/<project>/characters/<id>.ref.png`.
|
|
75
|
+
2. Update `reference_frame` in the JSON to point at it.
|
|
76
|
+
3. Phase 6 visual regression compares every subsequent scene's
|
|
77
|
+
character frame against this reference (ImageMagick `compare`
|
|
78
|
+
≥ 95% similarity).
|
|
79
|
+
|
|
80
|
+
### Step 3: Validate
|
|
81
|
+
|
|
82
|
+
1. JSON parses (`jq . characters/<id>.json` exits 0).
|
|
83
|
+
2. All mandatory fields present and non-empty.
|
|
84
|
+
3. Palette has ≥ 2 and ≤ 5 hex values.
|
|
85
|
+
4. Downstream skills cite this file by path, never paraphrase its
|
|
86
|
+
contents.
|
|
87
|
+
|
|
88
|
+
## Output format
|
|
89
|
+
|
|
90
|
+
1. **`agents/ai-video/<project>/characters/<id>.json`** — locked
|
|
91
|
+
identity tokens, schema above.
|
|
92
|
+
2. **`agents/ai-video/<project>/characters/<id>.ref.png`** —
|
|
93
|
+
reference frame (added after first render).
|
|
94
|
+
3. **`agents/ai-video/<project>/characters/CHANGELOG.md`** — one
|
|
95
|
+
line per revision: `v<n> · YYYY-MM-DD · reason · scenes-to-rerun`.
|
|
96
|
+
|
|
97
|
+
## Gotcha
|
|
98
|
+
|
|
99
|
+
- The model wants to "improve" identity tokens on each scene —
|
|
100
|
+
this is the silent drift failure. Tokens are immutable until a
|
|
101
|
+
revision note bumps `version`.
|
|
102
|
+
- Palette without a count fails downstream — adapters need a small
|
|
103
|
+
closed set (2–5 hex).
|
|
104
|
+
- `voice_note: null` is explicit; missing the key entirely breaks
|
|
105
|
+
the schema validator.
|
|
106
|
+
- Reference frame is captured *after* the first successful render,
|
|
107
|
+
not before — bootstrap scenes have no reference and only the
|
|
108
|
+
JSON locks them.
|
|
109
|
+
- A revision (`version` bumped) requires Phase 6 visual regression
|
|
110
|
+
to rerun against every prior scene that used the old version.
|
|
111
|
+
|
|
112
|
+
## Do NOT
|
|
113
|
+
|
|
114
|
+
- Do NOT paraphrase identity tokens when drafting scene prompts —
|
|
115
|
+
copy verbatim or break the lock.
|
|
116
|
+
- Do NOT edit a locked JSON in place without bumping `version` and
|
|
117
|
+
adding a CHANGELOG line.
|
|
118
|
+
- Do NOT skip the reference frame after the first render — visual
|
|
119
|
+
regression has nothing to compare against.
|
|
120
|
+
- Do NOT lock a character that appears in only one scene.
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: motion-choreographer
|
|
3
|
+
description: "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'."
|
|
4
|
+
personas:
|
|
5
|
+
- ai-video-technical-director
|
|
6
|
+
source: package
|
|
7
|
+
domain: product
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# motion-choreographer
|
|
11
|
+
|
|
12
|
+
> Turn an approved still + the 12-block scene blueprint into a
|
|
13
|
+
> provider-tuned **motion prompt** that the target video adapter
|
|
14
|
+
> consumes. Camera choreography, primary subject motion, secondary
|
|
15
|
+
> environment motion, physics constraints, and — when the adapter
|
|
16
|
+
> declares `audio: native` — a synchronized audio direction block.
|
|
17
|
+
> Reads adapter capabilities from
|
|
18
|
+
> [`adapter-contract.md`](../../../scripts/ai-video/lib/adapter-contract.md);
|
|
19
|
+
> never speaks to a network API.
|
|
20
|
+
|
|
21
|
+
## When to use
|
|
22
|
+
|
|
23
|
+
- An image is locked (operator picked one candidate via
|
|
24
|
+
`operator-pick.sh`) and the next step is motion + audio direction
|
|
25
|
+
for the video adapter.
|
|
26
|
+
- The blueprint exists in `scenes/<id>/blueprint.json` but the
|
|
27
|
+
motion prompt has not been emitted yet.
|
|
28
|
+
- A provider switch (Veo → Kling, Sora → Higgsfield) requires the
|
|
29
|
+
same scene retuned for the new adapter's capability profile.
|
|
30
|
+
|
|
31
|
+
Do NOT use when:
|
|
32
|
+
|
|
33
|
+
- The blueprint is still prose only — run
|
|
34
|
+
[`scene-expander`](../scene-expander/SKILL.md) → `parse-blueprint.sh`
|
|
35
|
+
first.
|
|
36
|
+
- No still has been locked — the operator-selection checkpoint
|
|
37
|
+
must complete first.
|
|
38
|
+
- The output is a still graphic — `canvas-design`.
|
|
39
|
+
|
|
40
|
+
## Procedure
|
|
41
|
+
|
|
42
|
+
### Step 0: Inspect
|
|
43
|
+
|
|
44
|
+
1. Read `scenes/<id>/blueprint.json` — fail loud if missing.
|
|
45
|
+
2. Read `scenes/<id>/selection.json` — fail loud if missing; the
|
|
46
|
+
locked image path is required as the motion anchor.
|
|
47
|
+
3. Read the target adapter's capability via
|
|
48
|
+
`scripts/ai-video/adapters/<id>.sh capability`. Cache `audio=*`
|
|
49
|
+
for Step 3.
|
|
50
|
+
4. If a `character.json` lock exists, load it verbatim — identity
|
|
51
|
+
tokens are immutable.
|
|
52
|
+
|
|
53
|
+
### Step 1: Camera choreography
|
|
54
|
+
|
|
55
|
+
Emit a `CAMERA MOTION` block with the move type, distance, speed
|
|
56
|
+
in seconds, and start-end framing.
|
|
57
|
+
|
|
58
|
+
- Move types: lock-off, pan, tilt, dolly-in, dolly-out, truck,
|
|
59
|
+
pedestal, push, pull, handheld, gimbal-glide, crane, whip.
|
|
60
|
+
- Speed in seconds per beat (`0.4s push, hold 1.6s, 0.4s pull`).
|
|
61
|
+
- Start and end framing named (`MS → CU`, `WS → MS`).
|
|
62
|
+
|
|
63
|
+
Adapter quirks:
|
|
64
|
+
|
|
65
|
+
- **Veo** — accepts named moves; prefers ≤ 8s clips.
|
|
66
|
+
- **Kling** — motion intensity 0–1 token; map our speed to that.
|
|
67
|
+
- **Sora** — natural-language move + duration; no token.
|
|
68
|
+
- **Higgsfield** — preset-driven; pick the preset that matches the
|
|
69
|
+
move; record the preset id in the motion prompt.
|
|
70
|
+
|
|
71
|
+
### Step 2: Primary + secondary motion
|
|
72
|
+
|
|
73
|
+
Two blocks:
|
|
74
|
+
|
|
75
|
+
1. **PRIMARY MOTION** — what the subject does, beat-counted, with
|
|
76
|
+
physics anchors (mass, contact points, momentum). Reuse `ACTION`
|
|
77
|
+
from the blueprint; refine for the adapter's preferred verb
|
|
78
|
+
density.
|
|
79
|
+
2. **SECONDARY MOTION** — what the world does (hair, fabric,
|
|
80
|
+
foliage, water, dust, particles, breath). One layer per line.
|
|
81
|
+
|
|
82
|
+
### Step 3: Audio direction (conditional)
|
|
83
|
+
|
|
84
|
+
If adapter capability is `audio: native` AND the blueprint's
|
|
85
|
+
`audio.enable_native_audio` is `true`:
|
|
86
|
+
|
|
87
|
+
Emit an `AUDIO DIRECTION` block with:
|
|
88
|
+
|
|
89
|
+
- `DIALOGUE TIMING` — `speaker @ 0.4s: "line"` per dialogue entry.
|
|
90
|
+
- `AMBIENT LAYERS` — copy from blueprint; one layer per line.
|
|
91
|
+
- `SYNC CUES` — which action beat maps to which audio cue
|
|
92
|
+
(`footstep @ 1.2s`, `door close @ 2.1s`).
|
|
93
|
+
|
|
94
|
+
If adapter capability is `audio: none`:
|
|
95
|
+
|
|
96
|
+
- Emit a `# AUDIO: ffmpeg-mux fallback` comment with the
|
|
97
|
+
blueprint's audio paths queued for stitch-time mux.
|
|
98
|
+
- Set `enable_native_audio: false` in the motion-prompt JSON.
|
|
99
|
+
|
|
100
|
+
### Step 4: Physics constraints
|
|
101
|
+
|
|
102
|
+
Emit `PHYSICS` — a short list of what the model must respect:
|
|
103
|
+
gravity direction, contact friction, fluid behavior, hair / cloth
|
|
104
|
+
inertia, lens parallax. Single line per constraint.
|
|
105
|
+
|
|
106
|
+
### Step 5: Emit motion-prompt JSON
|
|
107
|
+
|
|
108
|
+
Write `scenes/<id>/motion-prompt.json` with the adapter-contract
|
|
109
|
+
stdin shape. The orchestrator pipes this into the video adapter's
|
|
110
|
+
`submit` subcommand.
|
|
111
|
+
|
|
112
|
+
### Step 6: Validate
|
|
113
|
+
|
|
114
|
+
1. JSON parses (`jq .`).
|
|
115
|
+
2. `requires.audio_native` is consistent with the chosen adapter's
|
|
116
|
+
capability.
|
|
117
|
+
3. Duration in the motion prompt matches blueprint duration ±0.
|
|
118
|
+
4. Identity tokens (if `character.json` exists) are verbatim.
|
|
119
|
+
|
|
120
|
+
## Output format
|
|
121
|
+
|
|
122
|
+
1. **`scenes/<id>/motion-prompt.json`** — adapter-contract stdin.
|
|
123
|
+
2. **`scenes/<id>/motion-prompt.txt`** — labeled prose blocks
|
|
124
|
+
(CAMERA MOTION · PRIMARY MOTION · SECONDARY MOTION · AUDIO
|
|
125
|
+
DIRECTION · PHYSICS) for operator review.
|
|
126
|
+
3. **`scenes/<id>/adapter-notes.md`** — which adapter, which
|
|
127
|
+
capability, which preset / model, with rationale.
|
|
128
|
+
|
|
129
|
+
## Gotcha
|
|
130
|
+
|
|
131
|
+
- The model wants to "improve" the blueprint's `SUBJECT` block —
|
|
132
|
+
identity tokens are immutable; refuse the temptation.
|
|
133
|
+
- Picking `audio: native` on an adapter that returns `audio: none`
|
|
134
|
+
produces silent video — always read capability first, never
|
|
135
|
+
guess from the adapter name.
|
|
136
|
+
- Higgsfield preset id must be recorded; otherwise the rerun
|
|
137
|
+
drifts to whichever preset the model picks on the next call.
|
|
138
|
+
- Sora durations > 8s often degrade — clamp at the adapter table
|
|
139
|
+
limit; surface the clamp to the operator.
|
|
140
|
+
|
|
141
|
+
## Do NOT
|
|
142
|
+
|
|
143
|
+
- Do NOT emit motion prompts for an adapter whose capability you
|
|
144
|
+
did not query this turn.
|
|
145
|
+
- Do NOT skip the still-locked check — motion direction without an
|
|
146
|
+
anchored image diverges on every call.
|
|
147
|
+
- Do NOT paraphrase identity tokens from `character.json`.
|
|
148
|
+
- Do NOT call any network API — this skill is provider-tuning
|
|
149
|
+
prose only.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pixar-storyteller
|
|
3
|
+
description: "Use when turning an idea into a Pixar-style animation prompt — character sheet, scene, image, video — anchored in emotional beat, want, obstacle. Triggers 'Pixar prompt', 'animated scene'."
|
|
4
|
+
personas:
|
|
5
|
+
- pixar-storyboard-artist
|
|
6
|
+
source: package
|
|
7
|
+
domain: product
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# pixar-storyteller
|
|
11
|
+
|
|
12
|
+
> Turn an animation beat into the **four-block storyboard** the
|
|
13
|
+
> `pixar-storyboard-artist` persona ships: CHARACTER SHEET · SCENE
|
|
14
|
+
> PROMPT · IMAGE PROMPT · VIDEO PROMPT. Output is provider-agnostic;
|
|
15
|
+
> provider tuning is [`motion-choreographer`](../motion-choreographer/SKILL.md).
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
- A scene is animated / stylized (not photoreal) and needs an
|
|
20
|
+
emotional read, not a film-set read.
|
|
21
|
+
- The character must want something and the environment must
|
|
22
|
+
respond — flat poses fail.
|
|
23
|
+
- Live-action / photoreal beats → [`video-director`](../video-director/SKILL.md).
|
|
24
|
+
|
|
25
|
+
Do NOT use when:
|
|
26
|
+
|
|
27
|
+
- The deliverable is provider-tuned token grammar →
|
|
28
|
+
`motion-choreographer` after this skill.
|
|
29
|
+
- A character must be re-used across scenes → run
|
|
30
|
+
[`character-consistency`](../character-consistency/SKILL.md) first
|
|
31
|
+
to lock the CHARACTER SHEET, then call this skill.
|
|
32
|
+
- The brief is a static graphic / poster → `canvas-design`.
|
|
33
|
+
|
|
34
|
+
## Procedure
|
|
35
|
+
|
|
36
|
+
### Step 0: Inspect
|
|
37
|
+
|
|
38
|
+
1. Confirm the input is an animated / stylized beat.
|
|
39
|
+
2. If `character.json` exists under `agents/ai-video/<project>/characters/`,
|
|
40
|
+
read identity tokens — reused verbatim in CHARACTER SHEET.
|
|
41
|
+
3. Read the beat once. Name the *want* and the *obstacle* in one
|
|
42
|
+
sentence each before drafting.
|
|
43
|
+
|
|
44
|
+
### Step 1: Draft the four blocks
|
|
45
|
+
|
|
46
|
+
Emit each block under a labeled heading. Blocks are mandatory and
|
|
47
|
+
in this order:
|
|
48
|
+
|
|
49
|
+
1. **CHARACTER SHEET** — silhouette, palette, wardrobe, signature
|
|
50
|
+
prop, posture default, eye behavior. Verbatim from `character.json`
|
|
51
|
+
when a lock exists.
|
|
52
|
+
2. **SCENE PROMPT** — single emotional beat, want, obstacle,
|
|
53
|
+
stylistic anchor (specific film + year — "Up (2009)", not
|
|
54
|
+
"Pixar-style"), environment reaction.
|
|
55
|
+
3. **IMAGE PROMPT** — one still at the peak of the beat. Names
|
|
56
|
+
composition, eye line, palette. No motion verbs.
|
|
57
|
+
4. **VIDEO PROMPT** — decomposes the moment into
|
|
58
|
+
`anticipation Xs · action Ys · reaction Zs` with explicit beat
|
|
59
|
+
counts. Names which secondary motion (hair, cloth, dust) reacts
|
|
60
|
+
on which beat.
|
|
61
|
+
|
|
62
|
+
### Step 2: Self-review
|
|
63
|
+
|
|
64
|
+
1. Exactly one emotional beat in SCENE PROMPT? Compound moods fail.
|
|
65
|
+
2. Stylistic anchor is a specific film + year? Generic style → fail.
|
|
66
|
+
3. VIDEO PROMPT names beat counts per phase?
|
|
67
|
+
4. IMAGE PROMPT names eye line?
|
|
68
|
+
5. CHARACTER SHEET matches `character.json` byte-for-byte when a
|
|
69
|
+
lock exists?
|
|
70
|
+
|
|
71
|
+
Any "no" → revise that block.
|
|
72
|
+
|
|
73
|
+
### Step 3: Validate
|
|
74
|
+
|
|
75
|
+
1. Output is plain text, one labeled block per heading, ready for
|
|
76
|
+
`scripts/ai-video/lib/parse-blueprint.sh`.
|
|
77
|
+
2. No provider tokens — that is `motion-choreographer`.
|
|
78
|
+
3. No lens / focal-length prescriptions — that is `video-director`'s
|
|
79
|
+
block, not this one.
|
|
80
|
+
|
|
81
|
+
## Output format
|
|
82
|
+
|
|
83
|
+
1. **`scenes/<id>/prompt.txt`** — four labeled blocks, ready for
|
|
84
|
+
the blueprint parser.
|
|
85
|
+
2. **`scenes/<id>/review.md`** — one-paragraph rationale per
|
|
86
|
+
non-obvious choice (stylistic anchor, environment reaction,
|
|
87
|
+
beat decomposition).
|
|
88
|
+
|
|
89
|
+
## Gotcha
|
|
90
|
+
|
|
91
|
+
- The model defaults to "Pixar-style" with no film anchor — that
|
|
92
|
+
reads as a wishlist. Force a specific title + year.
|
|
93
|
+
- Neutral faces are the AI default — every beat names a feeling
|
|
94
|
+
the face is doing, including eye line direction.
|
|
95
|
+
- Environment-as-backdrop is the silent failure mode — name what
|
|
96
|
+
the world *does* in response to the character.
|
|
97
|
+
- Collapsing anticipation and action into one verb makes motion
|
|
98
|
+
look teleported. Both phases or the prompt fails review.
|
|
99
|
+
- When `character.json` exists, paraphrasing breaks Character Lock —
|
|
100
|
+
copy identity tokens verbatim.
|
|
101
|
+
|
|
102
|
+
## Do NOT
|
|
103
|
+
|
|
104
|
+
- Do NOT prescribe lenses or focal lengths — that is `video-director`.
|
|
105
|
+
- Do NOT emit provider-specific tokens — that is `motion-choreographer`.
|
|
106
|
+
- Do NOT cite "Pixar-style" without a specific film + year.
|
|
107
|
+
- Do NOT compound emotional beats ("sad but hopeful and tired").
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scene-expander
|
|
3
|
+
description: "Use when expanding a one-line idea into the 12-block Cinematic Scene Blueprint — provider-agnostic, includes optional dialogue + ambient. Triggers 'expand this scene', 'blueprint for X'."
|
|
4
|
+
personas:
|
|
5
|
+
- hollywood-director
|
|
6
|
+
- pixar-storyboard-artist
|
|
7
|
+
source: package
|
|
8
|
+
domain: product
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# scene-expander
|
|
12
|
+
|
|
13
|
+
> Expand a one-line idea or script line into the **Cinematic Scene
|
|
14
|
+
> Blueprint** — 12 labeled blocks consumed by
|
|
15
|
+
> [`parse-blueprint.sh`](./scene-blueprint.schema.yaml). Picks
|
|
16
|
+
> `hollywood-director` for live-action and `pixar-storyboard-artist`
|
|
17
|
+
> for animated beats. Output is provider-agnostic — provider tuning
|
|
18
|
+
> is [`motion-choreographer`](../motion-choreographer/SKILL.md).
|
|
19
|
+
|
|
20
|
+
## When to use
|
|
21
|
+
|
|
22
|
+
- A script line, idea, or beat needs a full blueprint before any
|
|
23
|
+
adapter runs.
|
|
24
|
+
- A `/video:from-script` run is parsing `## Scene N` headings and
|
|
25
|
+
needs each scene expanded.
|
|
26
|
+
|
|
27
|
+
Do NOT use when:
|
|
28
|
+
|
|
29
|
+
- The brief is already an 11-block cinematic prompt → call
|
|
30
|
+
`video-director` directly to refine it.
|
|
31
|
+
- The brief is a static graphic → `canvas-design`.
|
|
32
|
+
- Provider-specific token tuning is the next step →
|
|
33
|
+
`motion-choreographer`.
|
|
34
|
+
|
|
35
|
+
## Procedure
|
|
36
|
+
|
|
37
|
+
### Step 0: Inspect
|
|
38
|
+
|
|
39
|
+
1. Read the input line. Classify as **live-action / photoreal** or
|
|
40
|
+
**animated / stylized**.
|
|
41
|
+
2. Live-action → load `hollywood-director` voice. Animated → load
|
|
42
|
+
`pixar-storyboard-artist`. Hybrid (live-action with VFX) →
|
|
43
|
+
`hollywood-director`; record VFX intent in ENVIRONMENT.
|
|
44
|
+
3. Check for an existing `character.json` lock under
|
|
45
|
+
`agents/ai-video/<project>/characters/`.
|
|
46
|
+
|
|
47
|
+
### Step 1: Emit the 12 blocks
|
|
48
|
+
|
|
49
|
+
One label per line. Order is mandatory.
|
|
50
|
+
|
|
51
|
+
1. **STYLE** — stylistic anchor (live-action: film stock + decade,
|
|
52
|
+
e.g. "Kodak 5219, 2015"; animated: specific film + year).
|
|
53
|
+
2. **SUBJECT** — character read; verbatim identity tokens when a
|
|
54
|
+
lock exists.
|
|
55
|
+
3. **ENVIRONMENT** — location, time-of-day, weather, era; what the
|
|
56
|
+
world does in response to the subject.
|
|
57
|
+
4. **ACTION** — anticipation / action / reaction with beat counts
|
|
58
|
+
(`0.5s / 1.2s / 0.8s`). No adjective paragraphs.
|
|
59
|
+
5. **CAMERA** — position, height, distance, move (lock-off, dolly,
|
|
60
|
+
handheld, push, pull). Off-axis when on-axis is default.
|
|
61
|
+
6. **LENS** — focal length in mm and aperture intent. "Cinematic"
|
|
62
|
+
alone fails.
|
|
63
|
+
7. **LIGHTING** — key / fill / back / practical named; "golden
|
|
64
|
+
hour" requires a sun angle.
|
|
65
|
+
8. **MOOD** — one emotional read.
|
|
66
|
+
9. **DIALOGUE** — optional. If present: `speaker: "line"`, one per
|
|
67
|
+
line. Marks `audio: native` capability requirement.
|
|
68
|
+
10. **AMBIENT SOUND** — optional. Layer list (wind, traffic,
|
|
69
|
+
crowd, ocean). Marks `audio: native` or routes to ffmpeg mux.
|
|
70
|
+
11. **DURATION** — seconds (integer or one decimal).
|
|
71
|
+
12. **NEGATIVE** — clichés to reject, load-bearing order top-first.
|
|
72
|
+
Always names: centered framing, symmetric composition, generic
|
|
73
|
+
"cinematic", soap-opera contrast.
|
|
74
|
+
|
|
75
|
+
### Step 2: Self-review
|
|
76
|
+
|
|
77
|
+
1. Live-action / animated classification consistent across blocks?
|
|
78
|
+
2. LENS present with mm (live-action) OR stylistic anchor with
|
|
79
|
+
film+year (animated)?
|
|
80
|
+
3. LIGHTING with a direction?
|
|
81
|
+
4. ACTION names beat counts, not adjectives?
|
|
82
|
+
5. DIALOGUE / AMBIENT SOUND present → the run requires `audio:
|
|
83
|
+
native` adapter OR ffmpeg-mux fallback declared.
|
|
84
|
+
6. NEGATIVE ≥ 4 entries, load-bearing top?
|
|
85
|
+
7. SUBJECT verbatim from `character.json` when a lock exists?
|
|
86
|
+
|
|
87
|
+
Any "no" → revise that block.
|
|
88
|
+
|
|
89
|
+
### Step 3: Validate
|
|
90
|
+
|
|
91
|
+
1. Pipe output through `scripts/ai-video/lib/parse-blueprint.sh` —
|
|
92
|
+
exits 0 and emits valid adapter-contract JSON.
|
|
93
|
+
2. No provider tokens (no aspect / model / duration flags).
|
|
94
|
+
|
|
95
|
+
## Output format
|
|
96
|
+
|
|
97
|
+
1. **`scenes/<id>/prompt.txt`** — 12 labeled blocks, ready for
|
|
98
|
+
`parse-blueprint.sh`.
|
|
99
|
+
2. **`scenes/<id>/blueprint.json`** — parser output, adapter-stdin
|
|
100
|
+
ready.
|
|
101
|
+
3. **`scenes/<id>/review.md`** — one-paragraph rationale per
|
|
102
|
+
non-obvious choice.
|
|
103
|
+
|
|
104
|
+
## Gotcha
|
|
105
|
+
|
|
106
|
+
- The model wants to skip optional DIALOGUE / AMBIENT SOUND blocks
|
|
107
|
+
silently — if they could plausibly belong, emit them; the parser
|
|
108
|
+
treats missing blocks as `null`, not as an error.
|
|
109
|
+
- Live-action without LENS mm fails the parser's strict mode.
|
|
110
|
+
- Animated without a film+year anchor in STYLE drifts on every run.
|
|
111
|
+
- ACTION written as "the character does X dramatically" fails —
|
|
112
|
+
adapters need verbs with beat counts.
|
|
113
|
+
- DIALOGUE forces `audio: native` requirement — flag this to the
|
|
114
|
+
orchestrator so it picks a capable adapter (Veo / Sora).
|
|
115
|
+
|
|
116
|
+
## Do NOT
|
|
117
|
+
|
|
118
|
+
- Do NOT emit provider tokens — that is `motion-choreographer`.
|
|
119
|
+
- Do NOT skip the blueprint parser validation step.
|
|
120
|
+
- Do NOT paraphrase identity tokens when a lock exists.
|
|
121
|
+
- Do NOT mix live-action LENS prescriptions with animated STYLE
|
|
122
|
+
anchors in the same scene — pick one mode.
|