@nodetool-ai/agents 0.8.4-a24.2 → 0.8.4
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/dist/.nodetool-build-stamp +1 -1
- package/dist/_skills/LICENSE-iart-motion-design-skills +21 -0
- package/dist/_skills/README.md +211 -0
- package/dist/_skills/api-agents/SKILL.md +58 -0
- package/dist/_skills/api-apps/SKILL.md +54 -0
- package/dist/_skills/api-assets/SKILL.md +66 -0
- package/dist/_skills/api-collections/SKILL.md +33 -0
- package/dist/_skills/api-games/SKILL.md +81 -0
- package/dist/_skills/api-media/SKILL.md +131 -0
- package/dist/_skills/api-memory/SKILL.md +72 -0
- package/dist/_skills/api-models/SKILL.md +78 -0
- package/dist/_skills/api-scripts/SKILL.md +79 -0
- package/dist/_skills/api-settings/SKILL.md +49 -0
- package/dist/_skills/api-sketches/SKILL.md +61 -0
- package/dist/_skills/api-storyboards/SKILL.md +94 -0
- package/dist/_skills/api-timelines/SKILL.md +151 -0
- package/dist/_skills/api-web/SKILL.md +57 -0
- package/dist/_skills/api-workflows/SKILL.md +123 -0
- package/dist/_skills/beat-sync-editing/SKILL.md +208 -0
- package/dist/_skills/caption-titles/SKILL.md +94 -0
- package/dist/_skills/color-motion/SKILL.md +185 -0
- package/dist/_skills/commercial-beat-sheet/SKILL.md +338 -0
- package/dist/_skills/elevenlabs-audio-prompting/SKILL.md +163 -0
- package/dist/_skills/explainer-storyboard/SKILL.md +63 -0
- package/dist/_skills/flux-2-klein-prompting/SKILL.md +107 -0
- package/dist/_skills/frame-composition/SKILL.md +291 -0
- package/dist/_skills/game-direction/SKILL.md +99 -0
- package/dist/_skills/gpt-image-2-prompting/SKILL.md +161 -0
- package/dist/_skills/hailuo-prompting/SKILL.md +107 -0
- package/dist/_skills/kling-video-prompting/SKILL.md +188 -0
- package/dist/_skills/launch-commercial/SKILL.md +267 -0
- package/dist/_skills/launch-kit/SKILL.md +120 -0
- package/dist/_skills/logo-reveal/SKILL.md +225 -0
- package/dist/_skills/manimgx/SKILL.md +123 -0
- package/dist/_skills/minimax-h3-prompting/SKILL.md +134 -0
- package/dist/_skills/motion-ad/SKILL.md +281 -0
- package/dist/_skills/motion-background/SKILL.md +145 -0
- package/dist/_skills/motion-curves/SKILL.md +302 -0
- package/dist/_skills/motion-direction/SKILL.md +259 -0
- package/dist/_skills/motion-graphics/SKILL.md +217 -0
- package/dist/_skills/motion-principles/SKILL.md +255 -0
- package/dist/_skills/music-video-treatment/SKILL.md +40 -0
- package/dist/_skills/nano-banana-pro-prompting/SKILL.md +133 -0
- package/dist/_skills/native-game/SKILL.md +310 -0
- package/dist/_skills/native-game-reference/SKILL.md +879 -0
- package/dist/_skills/nodetool-3d-scene/SKILL.md +110 -0
- package/dist/_skills/nodetool-api-reference/SKILL.md +338 -0
- package/dist/_skills/nodetool-app-builder/SKILL.md +291 -0
- package/dist/_skills/nodetool-browser-agent/SKILL.md +119 -0
- package/dist/_skills/nodetool-chat-cli/SKILL.md +184 -0
- package/dist/_skills/nodetool-custom-node-developer/SKILL.md +294 -0
- package/dist/_skills/nodetool-deployment/SKILL.md +195 -0
- package/dist/_skills/nodetool-js-scripting/SKILL.md +223 -0
- package/dist/_skills/nodetool-model-provider-config/SKILL.md +348 -0
- package/dist/_skills/nodetool-rag-indexing/SKILL.md +153 -0
- package/dist/_skills/nodetool-sketch/SKILL.md +138 -0
- package/dist/_skills/nodetool-skill-author/SKILL.md +125 -0
- package/dist/_skills/nodetool-troubleshooter/SKILL.md +370 -0
- package/dist/_skills/nodetool-video-post/SKILL.md +149 -0
- package/dist/_skills/nodetool-workflow-builder/SKILL.md +295 -0
- package/dist/_skills/product-commercial/SKILL.md +132 -0
- package/dist/_skills/qwen-image-prompting/SKILL.md +122 -0
- package/dist/_skills/script-video/SKILL.md +106 -0
- package/dist/_skills/seedance-2-prompting/SKILL.md +194 -0
- package/dist/_skills/seedream-prompting/SKILL.md +117 -0
- package/dist/_skills/short-film/SKILL.md +123 -0
- package/dist/_skills/stable-audio-prompting/SKILL.md +130 -0
- package/dist/_skills/storyboard-core/SKILL.md +716 -0
- package/dist/_skills/timeline-edit-ops/SKILL.md +736 -0
- package/dist/_skills/trailer-template/SKILL.md +291 -0
- package/dist/_skills/ugc-video/SKILL.md +186 -0
- package/dist/_skills/veo-3-prompting/SKILL.md +140 -0
- package/dist/_skills/video-audio-continuity/SKILL.md +90 -0
- package/dist/_skills/video-clone/SKILL.md +96 -0
- package/dist/_skills/video-workflow/SKILL.md +119 -0
- package/dist/_skills/wan-2-6-prompting/SKILL.md +107 -0
- package/dist/app-build/bridge.d.ts.map +1 -1
- package/dist/app-build/bridge.js +44 -17
- package/dist/app-build/bridge.js.map +1 -1
- package/dist/capabilities/apps.d.ts.map +1 -1
- package/dist/capabilities/apps.js +55 -13
- package/dist/capabilities/apps.js.map +1 -1
- package/dist/capabilities/apps.specs.d.ts.map +1 -1
- package/dist/capabilities/apps.specs.js +5 -3
- package/dist/capabilities/apps.specs.js.map +1 -1
- package/dist/capabilities/game-asset-browser.d.ts.map +1 -1
- package/dist/capabilities/game-asset-browser.js +6 -1
- package/dist/capabilities/game-asset-browser.js.map +1 -1
- package/dist/capabilities/game.d.ts +1 -1
- package/dist/capabilities/game.d.ts.map +1 -1
- package/dist/capabilities/game.js +71 -56
- package/dist/capabilities/game.js.map +1 -1
- package/dist/capabilities/game.specs.js +1 -1
- package/dist/capabilities/game.specs.js.map +1 -1
- package/dist/capabilities/game3d.d.ts.map +1 -1
- package/dist/capabilities/game3d.js +14 -19
- package/dist/capabilities/game3d.js.map +1 -1
- package/dist/capabilities/gameAssertions.d.ts +52 -0
- package/dist/capabilities/gameAssertions.d.ts.map +1 -0
- package/dist/capabilities/gameAssertions.js +32 -0
- package/dist/capabilities/gameAssertions.js.map +1 -0
- package/dist/capabilities/models.d.ts.map +1 -1
- package/dist/capabilities/models.js +9 -0
- package/dist/capabilities/models.js.map +1 -1
- package/dist/capabilities/storyboards.d.ts.map +1 -1
- package/dist/capabilities/storyboards.js +36 -11
- package/dist/capabilities/storyboards.js.map +1 -1
- package/dist/capabilities/storyboards.specs.d.ts.map +1 -1
- package/dist/capabilities/storyboards.specs.js +11 -1
- package/dist/capabilities/storyboards.specs.js.map +1 -1
- package/dist/capabilities/workflows.d.ts.map +1 -1
- package/dist/capabilities/workflows.js +1 -0
- package/dist/capabilities/workflows.js.map +1 -1
- package/dist/capabilities/workflows.specs.d.ts.map +1 -1
- package/dist/capabilities/workflows.specs.js +4 -3
- package/dist/capabilities/workflows.specs.js.map +1 -1
- package/dist/evals/surfaces/game.d.ts.map +1 -1
- package/dist/evals/surfaces/game.js +29 -1
- package/dist/evals/surfaces/game.js.map +1 -1
- package/dist/game-authoring.d.ts +120 -0
- package/dist/game-authoring.d.ts.map +1 -1
- package/dist/game-build-integrity.d.ts +12 -0
- package/dist/game-build-integrity.d.ts.map +1 -0
- package/dist/game-build-integrity.js +78 -0
- package/dist/game-build-integrity.js.map +1 -0
- package/dist/game-examples.d.ts +44 -3
- package/dist/game-examples.d.ts.map +1 -1
- package/dist/game-examples.js +60 -10
- package/dist/game-examples.js.map +1 -1
- package/dist/system-skills.d.ts +1 -1
- package/dist/system-skills.js +1 -1
- package/dist/tools/builtin-tools.d.ts.map +1 -1
- package/dist/tools/builtin-tools.js +2 -0
- package/dist/tools/builtin-tools.js.map +1 -1
- package/package.json +19 -19
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: trailer-template
|
|
3
|
+
description: Structure a trailer or teaser as eight audio-first beats — hook, setup, inciting incident, escalation, drop, climax, title, button — with a runtime-scaled timecode grid, event/reception shot pairs, a planted-and-harvested motif, and one unbroken music bed, then store it as a NodeTool storyboard with a character entity behind every recurring face. Use when someone asks for a trailer, teaser, sizzle or announcement cut structure, says a cut has no spine or no build, or needs to know where the drop and the title card go. Pairs with short-film, which sets the cast, look and blocking. Not for ads (commercial-beat-sheet) or music videos (music-video-treatment).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
You are a single agent. Take a title, a genre and a runtime and produce a complete, timecoded trailer plan as a NodeTool storyboard. You call the storyboard, entity and timeline capabilities directly. You do not build a workflow. You do not render or assemble unless asked.
|
|
7
|
+
|
|
8
|
+
Fill the header first. Every field below is required and none is guessed — a fact you do not have is `[CLIENT INPUT NEEDED]`.
|
|
9
|
+
|
|
10
|
+
```text
|
|
11
|
+
TITLE:
|
|
12
|
+
GENRE:
|
|
13
|
+
LENGTH: [seconds]
|
|
14
|
+
FORMAT: 16:9 / 2.39:1 / 9:16
|
|
15
|
+
THESIS: [the one idea the trailer argues, one sentence]
|
|
16
|
+
CENTRAL QUESTION: [the question left OPEN at the end]
|
|
17
|
+
MOTIF: [recurring visual element — hands, doors, water, mirrors]
|
|
18
|
+
Planted in SETUP, paid off in PEAK or BUTTON.
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Two principles nothing overrides
|
|
24
|
+
|
|
25
|
+
**Event → reception.** The unit is a pair, never a single shot. Something happens, then a face receives it. Meaning lives in the second shot. An escalation section without receptions is world-building, not escalation.
|
|
26
|
+
|
|
27
|
+
**Audio is the clamp.** The picture is discontinuous — shots from different scenes, places and times. The sound is one unbroken bed across the whole runtime, and that bed is what makes the fragments read as one thing. Never cut the audio to silence. Dip it.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## The dynamic curve
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
quiet / slow ~65% | loud / fast ~35%
|
|
35
|
+
─────────────────────────── DROP ──────────────────────
|
|
36
|
+
Beats 1–4 | Beats 6–8
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
One hinge. The drop lands at **~65% of runtime**. Everything else is subordinate to this curve.
|
|
40
|
+
|
|
41
|
+
**Minimum perceptual durations** — below these a beat does not read:
|
|
42
|
+
|
|
43
|
+
| Beat | Minimum |
|
|
44
|
+
| --- | --- |
|
|
45
|
+
| Drop | 1.0s |
|
|
46
|
+
| Setup | 4.0s |
|
|
47
|
+
| Button | 2.0s |
|
|
48
|
+
| Any reception shot | 0.8s |
|
|
49
|
+
|
|
50
|
+
**Compression rule.** Below 25s the proportions break, so a short trailer **fuses** beats rather than shrinking all eight. Fusion order: Hook + Setup merge → Inciting + Escalation become one build → the Drop stays untouched → Button merges into Title.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Beat budget
|
|
55
|
+
|
|
56
|
+
Compute timecodes from the runtime, rounded to 0.5s. Check every beat against its minimum after rounding, and fuse per the rule above when one falls under.
|
|
57
|
+
|
|
58
|
+
| Beat | % of runtime | Job |
|
|
59
|
+
| --- | --- | --- |
|
|
60
|
+
| 1 Hook | 0–8% | Interrupt. Open an information deficit. |
|
|
61
|
+
| 2 Setup / World | 8–25% | Install identification. The normal state as precious or fragile. Plant the motif. |
|
|
62
|
+
| 3 Inciting incident | 25–32% | One nameable event turns the state into a problem. |
|
|
63
|
+
| 4 Escalation / Stakes | 32–65% | Accumulate. Each unit raises a new dimension. Longest section. |
|
|
64
|
+
| 5 Drop | 65–68% | The hinge. Maximum contrast, not maximum volume. |
|
|
65
|
+
| 6 Climax / Peak | 68–85% | Payoff as fragments. The emotional summit is a human beat inside the spectacle. |
|
|
66
|
+
| 7 Title card | 85–90% | Name the feeling. Lands on the impact. |
|
|
67
|
+
| 8 Button / Stinger | 90–100% | Recency. One small, single beat that works without context. |
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## The eight beats
|
|
72
|
+
|
|
73
|
+
### Beat 1 — Hook
|
|
74
|
+
|
|
75
|
+
Event before face. No genre marker yet. Never explain. Start quiet — opening loud burns the dynamic range the drop needs.
|
|
76
|
+
|
|
77
|
+
| type | shot |
|
|
78
|
+
| --- | --- |
|
|
79
|
+
| event | a phenomenon with a timestamp — a thing that **happens**, not a state |
|
|
80
|
+
| reception | a face receiving it. Attention, not yet fear. |
|
|
81
|
+
|
|
82
|
+
### Beat 2 — Setup / World
|
|
83
|
+
|
|
84
|
+
Not plot: an emotional anchor. Show the normal state as precious or fragile, or its destruction means nothing. Plant the musical motif here; you harvest it at the climax. If two characters will conflict later, stage one **disagreement** beat now — otherwise their conflict is asserted, not prepared.
|
|
85
|
+
|
|
86
|
+
| type | shot |
|
|
87
|
+
| --- | --- |
|
|
88
|
+
| setup | protagonist in the normal state — warm, ordinary, specific |
|
|
89
|
+
| setup | intimacy or fragility — a small physical gesture, the **motif** planted |
|
|
90
|
+
| setup | disagreement — two positions, silently staged |
|
|
91
|
+
|
|
92
|
+
### Beat 3 — Inciting incident
|
|
93
|
+
|
|
94
|
+
One identifiable event, never a montage. If the viewer cannot name what changed, the trailer has no spine. First real impact — it works because you spent none before. Impacts are currency: spend them ascending.
|
|
95
|
+
|
|
96
|
+
| type | shot |
|
|
97
|
+
| --- | --- |
|
|
98
|
+
| event | the turn — one nameable event |
|
|
99
|
+
| reception A | character 1 reads it as `[reading A]` |
|
|
100
|
+
| reception B | character 2, the **same** event, reads it as `[reading B]` — the thesis in two faces |
|
|
101
|
+
|
|
102
|
+
### Beat 4 — Escalation / Stakes
|
|
103
|
+
|
|
104
|
+
Accumulate, never repeat. Tension is a function of duration, so this is the longest section. The reveal ratio climbs like a ladder and never completes. **Every event needs a receiver.** Ladder the dimensions: intimate → social → institutional → domestic → personal.
|
|
105
|
+
|
|
106
|
+
| type | shot | dimension |
|
|
107
|
+
| --- | --- | --- |
|
|
108
|
+
| event | scale widens — the world notices | society |
|
|
109
|
+
| reception | a stranger's face | |
|
|
110
|
+
| event | institutions respond | state |
|
|
111
|
+
| reception | the protagonist's protector reacts — fear turns domestic | |
|
|
112
|
+
| event | the threat enters the home | intimate |
|
|
113
|
+
| reception | the protagonist chooses — a small physical act of crossing | |
|
|
114
|
+
| reception | stakes crystallize — someone realizes what they have lost | |
|
|
115
|
+
|
|
116
|
+
### Beat 5 — Drop
|
|
117
|
+
|
|
118
|
+
The hinge between question and promise. Not the loudest moment: the moment of maximum **contrast**. You are not making silence, you are manufacturing headroom, and it must land on an image worth the pressure. Under 1s it reads as an edit error, not a pause.
|
|
119
|
+
|
|
120
|
+
| type | shot |
|
|
121
|
+
| --- | --- |
|
|
122
|
+
| DROP | stillness. The single best held image. Small figure, vast unseen force. |
|
|
123
|
+
|
|
124
|
+
### Beat 6 — Climax / Peak
|
|
125
|
+
|
|
126
|
+
Payoff as fragments, never answers. Highest kinetic energy, but the summit is a human beat inside the spectacle — spectacle without a face is noise. Consequence, never outcome. The motif from Beat 2 returns in full orchestration.
|
|
127
|
+
|
|
128
|
+
| type | shot |
|
|
129
|
+
| --- | --- |
|
|
130
|
+
| climax | the face — emotion rising, readable |
|
|
131
|
+
| **PEAK** | the emotional summit — the motif paid off, in granular sensory detail |
|
|
132
|
+
| reversal | optional: everything snaps out — the sudden absence |
|
|
133
|
+
|
|
134
|
+
### Beat 7 — Title card
|
|
135
|
+
|
|
136
|
+
The title arrives at maximum emotional charge so the name and the feeling weld. It lands **on** the impact, not after — sound and type in the same frame.
|
|
137
|
+
|
|
138
|
+
### Beat 8 — Button / Stinger
|
|
139
|
+
|
|
140
|
+
The last thing is what gets carried out. Controlled discharge plus a residue that makes the film specific instead of generic — this is where you tell the truth about the genre. Small and single after the bigness, and it must work without context. Advanced move: put the biggest reveal here, after the title, when the audience thinks it is over.
|
|
141
|
+
|
|
142
|
+
| type | shot |
|
|
143
|
+
| --- | --- |
|
|
144
|
+
| BUTTON | one last beat — punchline, scare, tenderness or reveal. Deny the expected hit. |
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Audio bed — one unbroken track
|
|
149
|
+
|
|
150
|
+
```text
|
|
151
|
+
[Hook] sub-bass drone + ambience + ONE distant tonal element
|
|
152
|
+
[Setup] THE SEED: fragile motif enters — instrument: [INSTRUMENT]
|
|
153
|
+
[Inciting] motif bends. First impact. Sub grows.
|
|
154
|
+
[Escalation] layers stack: pulses → riser → strings. Accelerating.
|
|
155
|
+
[Drop] ★ DIP to bare sub-rumble. Never fully out.
|
|
156
|
+
[Climax] THE HARVEST: motif returns fully orchestrated + choir/strings bloom
|
|
157
|
+
[Title] one sustained luminous chord + sub-boom → title
|
|
158
|
+
[Button] minimal. Withhold the stinger hit if the button is tender.
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**Cut on the transient.** Picture cuts land on hits, not between them. **Sound design over music at impact.** The braam carries the blow, the score carries the emotion.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Entities
|
|
166
|
+
|
|
167
|
+
Any character in more than one shot is a **character entity**, or you get a different person every time. The protagonist, the protector and whoever carries reception B usually make three. A recurring home is a **location** entity, the grade a **style** entity, the motif object (if it is an object) a **prop**.
|
|
168
|
+
|
|
169
|
+
```js
|
|
170
|
+
import { list_entities, create_entity } from "@nodetool-ai/sandbox-nodetool/entities";
|
|
171
|
+
|
|
172
|
+
await list_entities({}); // reuse before you generate
|
|
173
|
+
|
|
174
|
+
const still = await nodetool.media.generateImage(
|
|
175
|
+
"<the character, neutral background, in the trailer's grade>",
|
|
176
|
+
await nodetool.models.pick("text_to_image")
|
|
177
|
+
);
|
|
178
|
+
await create_entity({
|
|
179
|
+
asset_id: still.asset_id,
|
|
180
|
+
kind: "character",
|
|
181
|
+
name: "<Name>",
|
|
182
|
+
descriptor: "<one to two dense sentences describing exactly what the reference shows>"
|
|
183
|
+
});
|
|
184
|
+
const entityId = still.asset_id; // the entity IS its asset
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
The descriptor is the face. Name entities in plain text in a shot's `action` or `motion` — "Mara turns from the window", never `@Mara` — and do not re-describe them in shot text. The render attaches a character or prop entity to a shot only when its name appears in that shot's text (style and location entities always apply), so a reception shot that says "she" instead of "Mara" renders a stranger. Show the roster before drafting beats.
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Storyboard
|
|
192
|
+
|
|
193
|
+
### 1. Create the board
|
|
194
|
+
|
|
195
|
+
```js
|
|
196
|
+
import { create_storyboard, edit_storyboard } from "@nodetool-ai/sandbox-nodetool/storyboards";
|
|
197
|
+
|
|
198
|
+
const board = await create_storyboard({
|
|
199
|
+
name: `${title} — trailer (${runtime}s)`,
|
|
200
|
+
brief: `${thesis}\nCENTRAL QUESTION: ${centralQuestion}\nMOTIF: ${motif}`,
|
|
201
|
+
style: "<the grade in one line>",
|
|
202
|
+
aspect_ratio: "16:9"
|
|
203
|
+
});
|
|
204
|
+
const boardId = board.storyboard_id;
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### 2. Roster and models
|
|
208
|
+
|
|
209
|
+
The full contract — the fifteen `edit_storyboard` ops, every key `set_board` accepts (`music_prompt` among them), and which fields and entities each shot's prompt receives — is in `storyboard-core` § Tool contract. Models come from `find_model` — pass each result's `.ref`; there is no default, and an unset model fails the render. For the cast, the look and the blocking, load `short-film`; this skill only sets where the beats go.
|
|
210
|
+
|
|
211
|
+
```js
|
|
212
|
+
const stills = await find_model({ capability: "text_to_image" });
|
|
213
|
+
const clips = await find_model({ capability: "image_to_video" });
|
|
214
|
+
await edit_storyboard({
|
|
215
|
+
storyboard_id: boardId,
|
|
216
|
+
ops: [{ op: "set_board", entity_ids: roster,
|
|
217
|
+
image_model: stills.ref, video_model: clips.ref }]
|
|
218
|
+
});
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Each result also names a `prompting_skill`. Load it before step 3: the shot `action`, `motion` and `camera` are the prompt the generator reads (`motion`, `action`, then the camera movement, for a keyframe clip), and a trailer's receptions and its drop are worded differently for a line that wants beats in order (Hailuo), a shot list (Kling) or a sound brief (Seedance).
|
|
222
|
+
|
|
223
|
+
### 3. One shot per row
|
|
224
|
+
|
|
225
|
+
Every row in the beat tables is one `add_shot`. The slug carries the beat and the type, so the pair structure survives into the board and the cut.
|
|
226
|
+
|
|
227
|
+
```js
|
|
228
|
+
await edit_storyboard({
|
|
229
|
+
storyboard_id: boardId,
|
|
230
|
+
ops: [{
|
|
231
|
+
op: "add_shot",
|
|
232
|
+
slug: "3-event", // <beat>-<type>: 1-event, 1-reception, 3-reception-a, 5-drop, 6-peak, 8-button
|
|
233
|
+
action: "INCITING (0:09–0:10.5): the turn — <one nameable event>, Mara in frame",
|
|
234
|
+
camera: { framing: "close", lens: "50mm", angle: "eye", movement: "static" },
|
|
235
|
+
motion: "<what moves, with counts — 'she looks up once', not 'tense'>",
|
|
236
|
+
duration_seconds: 1.5,
|
|
237
|
+
render_mode: "keyframe"
|
|
238
|
+
}]
|
|
239
|
+
});
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
Rules for the shot text:
|
|
243
|
+
|
|
244
|
+
- `action` opens with the beat name and timecode, then the shot. Under 400 characters.
|
|
245
|
+
- A reception shot's `action` names whose face it is and what it reads. Its `motion` is a single small physical event.
|
|
246
|
+
- The drop shot's `motion` is stillness, stated: "nothing moves except the water".
|
|
247
|
+
- The title card and any on-screen text are **not** shots. Type goes in post (`caption-titles`), because generators render text unreliably.
|
|
248
|
+
- `render_mode: "direct"` only for a heavy-motion climax shot. Receptions and the drop stay on `keyframe`, where the face holds.
|
|
249
|
+
|
|
250
|
+
### 4. The audio bed lives on the board, not on the shots
|
|
251
|
+
|
|
252
|
+
Put the eight-line bed into the board's `brief` as a `MUSIC:` block, one line per beat with its timecode. Per-shot `narration` stays empty — native per-shot audio is fragments, the opposite of the clamp. `edit_storyboard` → `{op: "set_board", music_prompt}` writes the same text into the board's music prompt, headless, and `assemble_storyboard_timeline` then turns it into a draft music clip.
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Pre-delivery check
|
|
257
|
+
|
|
258
|
+
Run before showing anyone. Every line must be true of the board, not the plan.
|
|
259
|
+
|
|
260
|
+
- [ ] Hook is event before face, no genre marker
|
|
261
|
+
- [ ] Every escalation event has a reception shot
|
|
262
|
+
- [ ] Setup shows the normal state as precious or fragile
|
|
263
|
+
- [ ] Disagreement beat present if characters conflict later
|
|
264
|
+
- [ ] Motif planted in Beat 2, harvested in Beat 6
|
|
265
|
+
- [ ] Drop sits at ~65% and lands on an image worth the pressure
|
|
266
|
+
- [ ] Emotional summit is not on the spectacle shot
|
|
267
|
+
- [ ] Title lands on the impact, same frame
|
|
268
|
+
- [ ] Button is small, single, works without context
|
|
269
|
+
- [ ] Audio never cuts to true silence — dips only
|
|
270
|
+
- [ ] Central question still open at the end
|
|
271
|
+
- [ ] No beat below its minimum perceptual duration
|
|
272
|
+
- [ ] Every face appearing twice is an entity on the board
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Render and cut (only on request)
|
|
277
|
+
|
|
278
|
+
**Stills first.** `render_storyboard_stills` costs less than clips, and you look at them before any clip renders. A wrong face is fixed at the entity, never in one shot's prompt.
|
|
279
|
+
|
|
280
|
+
**Fuse or render long, and say which before the clip pass.** A 1.5s beat still buys the video model's shortest clip, often 5s or more, so a shot rendered on its own comes back long without bumping `duration_seconds`. Where consecutive beats share a setting — an event and its reception, a run of escalation cuts — render them as one generation and split it with `covered_by` (`storyboard-core` § Fusing shots): fewer clips for the same cut. Render a beat on its own and trim it where it needs a picture no neighbour can share. Report the clip count and get the user's go-ahead when it is more than the request implied. Clips mute their own audio; `analyze_video` on a clip gives its real length before you trim.
|
|
281
|
+
|
|
282
|
+
**The bed is one clip.** After `assemble_storyboard_timeline`:
|
|
283
|
+
|
|
284
|
+
1. `generate_music` once, for the full runtime, from the eight-line bed. One prompt, one clip.
|
|
285
|
+
2. `edit_timeline` → `add_track` (audio), then `add_media_clip` for that one asset at 0:00. Mute the per-shot "Shot Audio" clips the assembly created (`set_clip_params {muted: true}`), and delete its draft music clip if the board has a music prompt, so this bed is the only music.
|
|
286
|
+
3. `detect_audio_events` on the bed, then `beat-sync-editing`: every picture cut moves to the nearest transient. The drop shot's in-point sits on the dip.
|
|
287
|
+
4. The dip is a volume keyframe on the bed, not a cut. Never a gap.
|
|
288
|
+
5. `caption-titles` for the title card, timed to the same frame as the title impact in the bed.
|
|
289
|
+
6. `validate_timeline`, then `preview_timeline_frame` at the drop, the peak and the title.
|
|
290
|
+
|
|
291
|
+
`timeline-edit-ops` carries the timeline op contract, `motion-graphics` the build loop, `video-audio-continuity` the case where a shot's own sound has to survive, `color-motion` the grade that makes shots from different scenes cut together, and `logo-reveal` a studio mark after the button.
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ugc-video
|
|
3
|
+
description: "Direct phone-shot creator videos, UGC ads, testimonials, or vlogs in NodeTool. For polished product films, use product-commercial; for an ad's beat structure, pair with commercial-beat-sheet."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
**Load `/storyboard-core` first.** It carries the loop, the tool contract,
|
|
7
|
+
the entity rules and the gating this skill assumes. Everything below is what is
|
|
8
|
+
different about a phone-shot piece with a person in it. For a UGC ad, this skill
|
|
9
|
+
sets the look and `/commercial-beat-sheet` sets the hook, beats and timecodes.
|
|
10
|
+
|
|
11
|
+
## What makes this job type its own
|
|
12
|
+
|
|
13
|
+
The face is the deliverable. One character entity has to survive every shot, and the
|
|
14
|
+
look has to read as a phone rather than a camera. Both are set once, on the board, and
|
|
15
|
+
never re-argued in shot text.
|
|
16
|
+
|
|
17
|
+
## Casting comes first, and it is two passes
|
|
18
|
+
|
|
19
|
+
There is no create-from-text, and a face you have not seen is a face you cannot lock.
|
|
20
|
+
|
|
21
|
+
1. `find_model` (`text_to_image`) → `generate_image` with the character description
|
|
22
|
+
alone: age, build, skin, hair, no wardrobe, no set, front-lit, neutral expression.
|
|
23
|
+
2. Show it. If the user likes it, `create_entity {asset_id, kind: "character", name,
|
|
24
|
+
descriptor}`. The descriptor is the face and hair only.
|
|
25
|
+
3. After the first board stills come back, if a frame reads better than the reference,
|
|
26
|
+
`update_entity {entity_id, asset_id}` to move the entity onto that crop. Do this
|
|
27
|
+
**before** clips, not after.
|
|
28
|
+
|
|
29
|
+
Given a photo instead: save it as an asset, then `create_entity` from it. Write the
|
|
30
|
+
descriptor from the face and hair in the photo and **leave the photo's outfit out** —
|
|
31
|
+
wardrobe belongs in shot text, so the same entity can wear a gym set in one board and
|
|
32
|
+
a coat in the next.
|
|
33
|
+
|
|
34
|
+
## The look goes in the board style, once
|
|
35
|
+
|
|
36
|
+
Put the camera pretence in `style` via `set_board`, never in each shot:
|
|
37
|
+
|
|
38
|
+
| Register | `style` |
|
|
39
|
+
|---|---|
|
|
40
|
+
| Front-camera UGC | `handheld front-camera iPhone, mild shake, autofocus hunt, compression grain, window daylight, no beauty filter` |
|
|
41
|
+
| Friend-filmed | `handheld phone at arm's length, natural wind and room noise, slightly off-level framing` |
|
|
42
|
+
| Old-phone ritual | `old iPhone 1x, propped static angle, fluorescent tint, heavy noise` |
|
|
43
|
+
| Vlog | `chest-height phone gimbal, wide lens, natural light, mild bloom` |
|
|
44
|
+
|
|
45
|
+
No music, no score, no burned-in captions. Natural audio is part of the register — say
|
|
46
|
+
so in the brief so the video model does not add a bed.
|
|
47
|
+
|
|
48
|
+
## Shot pattern
|
|
49
|
+
|
|
50
|
+
Five to eight shots. A hook in the first four seconds, a middle that shows the thing
|
|
51
|
+
happening physically, and a verdict to camera.
|
|
52
|
+
|
|
53
|
+
- **Dialogue is a shot field**, not part of `action`. Set `dialogue` so
|
|
54
|
+
`extract_script_from_storyboard` can lift the words later if the user wants them
|
|
55
|
+
voiced properly.
|
|
56
|
+
- Write the physical beat in `motion` with a **count**: `two short spray bursts`,
|
|
57
|
+
`two head turns`, `she lifts one section of hair and lets it fall, once`. "She
|
|
58
|
+
reacts" renders as nothing.
|
|
59
|
+
- A talent-free end card (pack hero, logo card) needs its own `entity_ids` naming the
|
|
60
|
+
product alone — otherwise the character's descriptor seasons a shot she is not in.
|
|
61
|
+
- Native-audio video models are weakest on their image path. For a shot whose spoken
|
|
62
|
+
line has to look synced, set `render_mode: "direct"`. A direct clip prompt already
|
|
63
|
+
carries the camera fields and the board style.
|
|
64
|
+
|
|
65
|
+
## Wardrobe and state
|
|
66
|
+
|
|
67
|
+
One outfit per piece unless the script changes it on camera. A wet, stained or
|
|
68
|
+
changed-outfit version of the same person is a **second entity** — cast it the same
|
|
69
|
+
way and name it in the shots where it applies.
|
|
70
|
+
|
|
71
|
+
## Briefs
|
|
72
|
+
|
|
73
|
+
Adapt these examples to the user's brief. Example deliverables, style choices,
|
|
74
|
+
and approval checkpoints apply only when the user adopts them.
|
|
75
|
+
|
|
76
|
+
**Briefs** below has four written to these rules: review-to-hero UGC ad,
|
|
77
|
+
Pinterest-fail comedy, locker-room ritual, and a night-city vlog with a shot-collapse
|
|
78
|
+
step. Replace the bracketed placeholders and hand one over after the standing orders.
|
|
79
|
+
|
|
80
|
+
## Briefs — phone-shot video with talent
|
|
81
|
+
|
|
82
|
+
One per message, after the standing orders from `/storyboard-core`. Replace
|
|
83
|
+
`[PRODUCT]`, `[CITY]`, `[ACTIVITY]`. `Nova` stands for the character entity's **plain
|
|
84
|
+
name** — that is what makes it season the prompt.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
### Review-to-hero UGC ad, 30s 9:16
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
Direct a 30s 9:16 UGC-to-hero ad for [PRODUCT].
|
|
92
|
+
|
|
93
|
+
Cast first. [PRODUCT] as a prop entity from the attached pack shot. Nova as a
|
|
94
|
+
character entity: generate the reference still (early 20s, natural skin, no
|
|
95
|
+
beauty filter, front-lit, neutral) and show me before you tag it. Descriptor is
|
|
96
|
+
face and hair only.
|
|
97
|
+
|
|
98
|
+
Board style: handheld front-camera iPhone, bedroom or bright bathroom, mild
|
|
99
|
+
shake, autofocus hunt, compression grain, window daylight, no beauty filter.
|
|
100
|
+
Natural audio only, no music, no burned-in captions.
|
|
101
|
+
|
|
102
|
+
Seven shots, then stop.
|
|
103
|
+
1a 0-4 hook. Nova touches untreated hair. "I wanted lighter hair..."
|
|
104
|
+
2a 4-8 she finds [PRODUCT] on the dressing table, autofocus hunts onto the
|
|
105
|
+
label. "...without permanently dyeing it."
|
|
106
|
+
3a 8-13 she sections her hair, two short spray bursts. Physical coverage, not
|
|
107
|
+
a magic glow.
|
|
108
|
+
4a 13-18 extreme close-up, untreated against treated. "Okay... that is
|
|
109
|
+
actually a huge difference."
|
|
110
|
+
5a 18-23 mirror selfie, two head turns. "I actually love it."
|
|
111
|
+
6a 23-26 [PRODUCT] held beside her face. "Just spray and switch up your look."
|
|
112
|
+
7a 26-30 no talent. Studio hero of [PRODUCT], slow 8cm push-in, cream
|
|
113
|
+
cyclorama, copy space right. Set entity_ids on this shot to the
|
|
114
|
+
product alone.
|
|
115
|
+
|
|
116
|
+
After I pick a face from the stills, select that still with select_version and
|
|
117
|
+
move the Nova entity onto that crop before any clip renders.
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Pinterest-fail comedy, 30s 16:9
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
Direct a 30s 16:9 friend-shot phone comedy. Nova tries to get a perfect
|
|
124
|
+
Pinterest still of [ACTIVITY] with [PRODUCT] in frame; reality ruins every
|
|
125
|
+
attempt. Same face and wardrobe throughout.
|
|
126
|
+
|
|
127
|
+
Cast Nova from text first: generate the reference, show me, then tag it.
|
|
128
|
+
Board style: handheld phone at arm's length, natural wind and room noise,
|
|
129
|
+
slightly off-level framing. No score — wind and laughter only.
|
|
130
|
+
|
|
131
|
+
1a 0-5 she arranges the cloth and [PRODUCT]. Wind flips the plate once.
|
|
132
|
+
"...Okay, we'll pretend that didn't happen."
|
|
133
|
+
2a 5-10 deadpan, she does not chase it. A friend's laugh jolts the frame once.
|
|
134
|
+
3a 10-15 serene profile, a bee, one swat, a whip-pan.
|
|
135
|
+
4a 15-20 hair-in-wind walk, cardigan over her head, [PRODUCT] still in one hand.
|
|
136
|
+
5a 20-25 thermos pour, a stain spreads, off-camera "That's going to stain—"
|
|
137
|
+
6a 25-30 she flops onto the cloth, [PRODUCT] on her stomach. "This is the photo.
|
|
138
|
+
This is the one we're posting." Thumbs up, cut mid-laugh.
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Locker-room ritual, 19s 16:9
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
Direct a 19s 16:9 everyday phone video of Nova, cast from the attached photo.
|
|
145
|
+
Save the photo as an asset, then create the entity from it. The descriptor pins
|
|
146
|
+
the face and hair from the photo and does not mention its outfit.
|
|
147
|
+
|
|
148
|
+
Wardrobe in the shot text: black gym set, hair tied. Locker room, full-length
|
|
149
|
+
mirror, bag on the bench, no readable signage.
|
|
150
|
+
Board style: old iPhone 1x, propped static angle, fluorescent green tint, heavy
|
|
151
|
+
noise. No music bed.
|
|
152
|
+
|
|
153
|
+
1a 0-4 she walks to the mirror, props the phone, adjusts her straps
|
|
154
|
+
2a 4-8 sits, double-knots her laces, bounce-tests the shoes twice
|
|
155
|
+
3a 8-11 earbuds in, one at a time
|
|
156
|
+
4a 11-14 two shoulder rolls, a quiet "okay... let's get it."
|
|
157
|
+
5a 14-17 three arm swings, one glance at the camera
|
|
158
|
+
6a 17-19 picks up the phone, walks to the door, freeze mid-stride
|
|
159
|
+
|
|
160
|
+
Stills from the photo entity, then one clip pass.
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Night city vlog, 30s
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
Direct a 30s first-person night vlog in [CITY] with Nova in one outfit
|
|
167
|
+
throughout. Mix selfie, cockpit, aerial and street-level. Short landmark lines
|
|
168
|
+
for [LANDMARK A] and [LANDMARK B]. No text, no logos. Wind in her hair.
|
|
169
|
+
|
|
170
|
+
Board style: chest-height phone gimbal, wide lens, city sodium and neon, mild
|
|
171
|
+
bloom, natural audio.
|
|
172
|
+
|
|
173
|
+
Board up to ten shots, then — before any render — propose a six-shot collapse
|
|
174
|
+
and name the four you would drop. Stop there.
|
|
175
|
+
|
|
176
|
+
1 rooftop selfie, the vehicle behind her. "I'm getting on this in [CITY]."
|
|
177
|
+
2 inside, harness on, a nervous smile
|
|
178
|
+
3 lift-off, wide city and water
|
|
179
|
+
4 open door. "there's no door."
|
|
180
|
+
5 POV, feet over the grid
|
|
181
|
+
6 selfie with [LANDMARK A]. "That's [LANDMARK A]."
|
|
182
|
+
7 aerial over [LANDMARK B], her feet in frame
|
|
183
|
+
8 low pass along a bridge
|
|
184
|
+
9 she steps off, same outfit, walks to camera
|
|
185
|
+
10 crossing the street. "Alright everyone, bye."
|
|
186
|
+
```
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: veo-3-prompting
|
|
3
|
+
description: Prompt Google's Veo 3 video line — the five-element shot/setting/subject/action/dialogue structure, the cinematography vocabulary it reads directly, duration and aspect-ratio tradeoffs, the audio and auto-fix switches per provider, and the fixes for visual drift, temporal inconsistency and audio mismatch. Use whenever the model id contains veo3 or veo-3 (fal-ai/veo3.1 and its fast, lite, image-to-video, first-last-frame and reference-to-video routes, fal-ai/veo3/image-to-video, google/veo3.1 on atlascloud, google/veo-3 and google/veo-3.1 on replicate, kie's veo-3-1, and Gemini's own veo-3.1-generate-preview) on generate_video, animate_image, generate_video_from_references or a TextToVideo node.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Veo 3 → a directorial spec, not a description
|
|
7
|
+
|
|
8
|
+
Veo 3 produces 4 to 8 second clips with synchronized audio: dialogue with
|
|
9
|
+
lip-sync, ambient effects, environmental sound. It parses shot types, camera
|
|
10
|
+
angles and film terminology accurately, and holds coherence across the frame
|
|
11
|
+
sequence. What separates a usable clip from a generic one is writing the prompt
|
|
12
|
+
as a spec rather than a narration.
|
|
13
|
+
|
|
14
|
+
Reach it with `find_model` for `text_to_video` or `image_to_video`, then
|
|
15
|
+
`generate_video` / `animate_image`; the reference-to-video routes take
|
|
16
|
+
`generate_video_from_references`. Those forward the prompt, the media, a
|
|
17
|
+
negative prompt (not `animate_image`), the duration, the aspect ratio and the
|
|
18
|
+
resolution. The audio switch, `auto_fix`, the seed and an end frame for the
|
|
19
|
+
first-last-frame routes exist only on the route's own node: find it with
|
|
20
|
+
`search_nodes`, read its fields with `get_node_info`, and run it with
|
|
21
|
+
`run_node`. Each run is a paid generation, so confirm the scope with the
|
|
22
|
+
user before rendering several.
|
|
23
|
+
|
|
24
|
+
The audio is per clip, so a piece cut from several Veo clips restarts its sound
|
|
25
|
+
at every join. `video-audio-continuity` decides whether the scenes belong in one
|
|
26
|
+
generation or under a track you add yourself.
|
|
27
|
+
|
|
28
|
+
## Five elements, in order
|
|
29
|
+
|
|
30
|
+
1. **Shot** — the camera work that frames everything else: medium shot,
|
|
31
|
+
close-up, wide angle, tracking shot.
|
|
32
|
+
2. **Setting and atmosphere** — space, time, lighting quality, environment.
|
|
33
|
+
3. **Subject** — enough visual detail to render consistently across frames.
|
|
34
|
+
4. **Action** — the movement that defines the temporal progression.
|
|
35
|
+
5. **Dialogue** (optional) — spoken lines, for anything needing lip-sync.
|
|
36
|
+
|
|
37
|
+
> A medium shot frames a cartographer in a cluttered Victorian study. Warm
|
|
38
|
+
> lamplight illuminates ancient maps spread across a mahogany table. The
|
|
39
|
+
> cartographer, wearing round spectacles and a burgundy vest, traces a route
|
|
40
|
+
> with his finger. "According to this sea chart, the lost island exists. We
|
|
41
|
+
> sail at dawn."
|
|
42
|
+
|
|
43
|
+
Each element builds on the one before it.
|
|
44
|
+
|
|
45
|
+
## Parameters
|
|
46
|
+
|
|
47
|
+
**Duration** decides how much temporal complexity fits. 4 seconds holds a
|
|
48
|
+
single action — establishing shots, product showcases. 6 seconds holds a
|
|
49
|
+
multi-stage action or brief dialogue. 8 seconds holds extended dialogue or an
|
|
50
|
+
atmospheric moment. Longer durations spread attention across more frames, so
|
|
51
|
+
per-frame detail density drops.
|
|
52
|
+
|
|
53
|
+
**Aspect ratio** changes composition, not just framing. 16:9 matches the
|
|
54
|
+
training distribution and composes horizontally. 9:16 concentrates the subject
|
|
55
|
+
in a narrower horizontal band. 1:1 outpaints — the model extends the scene past
|
|
56
|
+
what you described to fill the square, which can surface environment you never
|
|
57
|
+
asked for.
|
|
58
|
+
|
|
59
|
+
**Resolution**: iterate at 720p, deliver at 1080p.
|
|
60
|
+
|
|
61
|
+
**Audio** is the cost lever. `generate_audio` defaults to true on fal and
|
|
62
|
+
Replicate and to false on AtlasCloud's `google/veo3.1/*` and
|
|
63
|
+
`google/veo3.1-fast/*`. The lite routes on AtlasCloud and Replicate and kie's
|
|
64
|
+
`veo-3-1` have no audio switch. fal's guide says disabling it cuts the standard
|
|
65
|
+
model to roughly half the price and the fast variant to about two thirds.
|
|
66
|
+
Disable it only when a custom soundtrack is going on in post.
|
|
67
|
+
|
|
68
|
+
## Cinematography vocabulary
|
|
69
|
+
|
|
70
|
+
The model was trained on professional film content and reads the terms
|
|
71
|
+
directly:
|
|
72
|
+
|
|
73
|
+
- **Movement**: slow dolly forward, gentle pan left, crane shot descending,
|
|
74
|
+
handheld tracking.
|
|
75
|
+
- **Shot types**: extreme close-up, Dutch angle, over-the-shoulder,
|
|
76
|
+
establishing wide.
|
|
77
|
+
- **Lighting**: golden hour backlighting, harsh overhead fluorescents, dappled
|
|
78
|
+
forest light, volumetric fog rays.
|
|
79
|
+
|
|
80
|
+
> A slow tracking shot follows a lone figure walking through fog-shrouded ruins
|
|
81
|
+
> at twilight. Volumetric light rays pierce through broken archways, creating
|
|
82
|
+
> dramatic god rays in the mist.
|
|
83
|
+
|
|
84
|
+
**Sensory detail feeds the audio.** A prompt that describes neon reflecting in
|
|
85
|
+
rain puddles, steam rising from food stalls and a vendor calling out over
|
|
86
|
+
distant traffic gives the audio synthesis more to work with than the same scene
|
|
87
|
+
described visually only.
|
|
88
|
+
|
|
89
|
+
**Character consistency comes from distinctive markers.** "A woman in her
|
|
90
|
+
thirties with auburn hair pulled back in a loose bun, wearing a charcoal
|
|
91
|
+
peacoat and silver-rimmed glasses" holds identity across frames where "a woman"
|
|
92
|
+
does not.
|
|
93
|
+
|
|
94
|
+
## Auto fix
|
|
95
|
+
|
|
96
|
+
`auto_fix` rewrites a prompt that trips content policy instead of rejecting
|
|
97
|
+
it, trying to keep the intent. It defaults to true on fal's text-to-video
|
|
98
|
+
routes (`fal-ai/veo3.1`, `/fast`, `/lite`) and to false on every fal
|
|
99
|
+
image-to-video, first-last-frame, extend and reference route. AtlasCloud, kie
|
|
100
|
+
and Replicate have no such field. Turn it off when your exact wording matters
|
|
101
|
+
more than getting a clip back.
|
|
102
|
+
|
|
103
|
+
## Errors and fixes
|
|
104
|
+
|
|
105
|
+
- **Vague specification** — "a person walks in a city" constrains nothing.
|
|
106
|
+
Specify appearance, the character of the city, the time, the walk.
|
|
107
|
+
- **Internal contradiction** — "bright sunny day with dramatic moonlight" fights
|
|
108
|
+
itself. Keep the environment consistent.
|
|
109
|
+
- **Temporal overloading** — multiple scene transitions inside 8 seconds rarely
|
|
110
|
+
land. Split into discrete prompts.
|
|
111
|
+
- **Unused negative prompt** — use it for "no camera shake", "no lens
|
|
112
|
+
distortion", "no text overlays". The lite routes on AtlasCloud and
|
|
113
|
+
Replicate, kie's `veo-3-1` and fal's reference-to-video routes have no
|
|
114
|
+
negative prompt.
|
|
115
|
+
- **Ignored seed** — the seed is how a series holds a look. Record the ones
|
|
116
|
+
that worked. kie's `veo-3-1` and fal's reference-to-video routes have none.
|
|
117
|
+
- **Prompt length** — fal's guide puts the working range at 150 to 300
|
|
118
|
+
characters, with generic output under 100 and unpredictable priorities over
|
|
119
|
+
400. The fal routes accept far longer prompts, so treat it as a style
|
|
120
|
+
target, not a limit.
|
|
121
|
+
|
|
122
|
+
Symptoms map to fixes. Clothing colour shifting or facial features morphing
|
|
123
|
+
means the subject needs more distinctive markers. Objects appearing without
|
|
124
|
+
logical progression means the prompt is too complex for the duration — cut it
|
|
125
|
+
down or shorten the clip. Dialogue out of sync with lips means the audio cue
|
|
126
|
+
needs to be explicit: "a vendor loudly calls out 'Fresh fish!' while
|
|
127
|
+
gesturing".
|
|
128
|
+
|
|
129
|
+
## Working method
|
|
130
|
+
|
|
131
|
+
Refine on the fast variant at 4 seconds and 720p, where a bad idea costs
|
|
132
|
+
almost nothing. Move to the standard model, longer durations and 1080p only
|
|
133
|
+
once the prompt is doing what you want. Then vary the seed to explore
|
|
134
|
+
alternatives inside the same concept.
|
|
135
|
+
|
|
136
|
+
Check what rendered with `analyze_video`, `detect_video_scenes` and
|
|
137
|
+
`understand_video` instead of assuming.
|
|
138
|
+
|
|
139
|
+
Adapted from fal's Veo 3 prompt guide:
|
|
140
|
+
https://fal.ai/learn/devs/veo3-prompt-guide-master-google-video-generation
|