@slatesvideo/shared 0.1.0 → 0.4.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/README.md +5 -0
- package/dist/clients/cloud.js +32 -1
- package/dist/clients/desktop.d.ts +10 -4
- package/dist/clients/desktop.js +95 -7
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -0
- package/dist/operations/index.d.ts +207 -1
- package/dist/operations/index.js +1513 -32
- package/dist/prompts/character-sheet.d.ts +24 -0
- package/dist/prompts/character-sheet.js +53 -0
- package/dist/prompts/environment-sheet.d.ts +9 -0
- package/dist/prompts/environment-sheet.js +27 -0
- package/dist/prompts/index.d.ts +6 -0
- package/dist/prompts/index.js +17 -0
- package/dist/prompts/model-facts.d.ts +17 -0
- package/dist/prompts/model-facts.js +64 -0
- package/dist/prompts/reference-rules.d.ts +34 -0
- package/dist/prompts/reference-rules.js +120 -0
- package/dist/prompts/style-library.d.ts +31 -0
- package/dist/prompts/style-library.js +84 -0
- package/dist/skills/content.d.ts +2 -0
- package/dist/skills/content.js +20 -0
- package/package.json +36 -5
- package/skills/slates-character-turnaround.md +55 -0
- package/skills/slates-cost-discipline.md +96 -0
- package/skills/slates-direct-response-ad.md +66 -0
- package/skills/slates-edit-and-iterate.md +48 -0
- package/skills/slates-one-prompt-film.md +67 -0
- package/skills/slates-prompting-flux-2-max.md +112 -0
- package/skills/slates-prompting-kling-v3.md +167 -0
- package/skills/slates-prompting-lip-sync.md +169 -0
- package/skills/slates-prompting-motion-transfer.md +148 -0
- package/skills/slates-prompting-nano-banana-2.md +154 -0
- package/skills/slates-prompting-seedance.md +155 -0
- package/skills/slates-prompting-seedream-5-lite.md +74 -0
- package/skills/slates-prompting-veo-3.md +156 -0
- package/skills/slates-storyboard-from-script.md +49 -0
- package/skills/slates-vision-feedback-loop.md +62 -0
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js.map +0 -1
- package/dist/clients/cloud.d.ts.map +0 -1
- package/dist/clients/cloud.js.map +0 -1
- package/dist/clients/desktop.d.ts.map +0 -1
- package/dist/clients/desktop.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/operations/index.d.ts.map +0 -1
- package/dist/operations/index.js.map +0 -1
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: slates-prompting-nano-banana-2
|
|
3
|
+
description: How to write prompts that produce cinematic, photorealistic results from Nano Banana 2 (Google Gemini 3 Image, accessed via fal-ai/nano-banana-2). Read this before calling slates_generate_image when the user wants film-quality, real-world, or cinematic output. Skip for stylized / illustrated / cartoon work — the rules differ.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Nano Banana 2 — cinematic & photorealistic prompting
|
|
7
|
+
|
|
8
|
+
The **default** model behind `slates_generate_image` is **Gemini 3 Image** (Nano Banana 2 / Flash) — the op also exposes `flux-2-max` and `seedream-5-lite`, each with its own prompting skill. NB2 is a language model that outputs pixels — brief it like a creative director, not like a Stable-Diffusion tag-soup tool. The single biggest lever for realism: **specificity that mimics how real photographers and cinematographers describe their work**.
|
|
9
|
+
|
|
10
|
+
Knowledge cutoff: January 2025. Anything after needs explicit reference images.
|
|
11
|
+
|
|
12
|
+
## Google's 4 official rules (verbatim)
|
|
13
|
+
|
|
14
|
+
1. **Be specific.** Provide concrete details on subject, lighting, and composition.
|
|
15
|
+
2. **Use positive framing.** Describe what you want, not what you don't want.
|
|
16
|
+
3. **Control the camera.** Use photographic and cinematic terms like "low angle" and "aerial view."
|
|
17
|
+
4. **Iterate.** Refine images with follow-up prompts in a conversational manner.
|
|
18
|
+
|
|
19
|
+
## Official prompt formula
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
[Subject] + [Action] + [Location/context] + [Composition] + [Style]
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
For the cinematic / photoreal use case, expand to:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Film still from [DIRECTOR] [GENRE]. Shot on [CAMERA] with [LENS]. [SUBJECT and action]. [3-5 specific visual details]. [LIGHTING — direction + quality]. [COLOR PALETTE]. [FILM STOCK or sensor language]. [1-2 word emotional tone].
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Photorealism positives — what consistently works
|
|
32
|
+
|
|
33
|
+
**Named lenses + apertures** beat generic "shallow depth of field":
|
|
34
|
+
- `85mm f/1.4`, `135mm f/2.8` (the cheat code for skin texture), `50mm f/1.2`, `35mm f/2`
|
|
35
|
+
- `Panavision anamorphic` for horizontal flares + cinematic width
|
|
36
|
+
- `400mm telephoto` for compression + isolation
|
|
37
|
+
- `24mm` for environmental interiors
|
|
38
|
+
|
|
39
|
+
**Named cameras / sensors:**
|
|
40
|
+
- `ARRI Alexa 65`, `Hasselblad X2D`, `Canon EOS R5`, `Sony A7III`, `Fujifilm X-T5`
|
|
41
|
+
- "Specific gear" beats "DSLR"
|
|
42
|
+
|
|
43
|
+
**Named film stocks** (one per prompt — never mix):
|
|
44
|
+
- `Kodak Portra 400` — natural skin, warm
|
|
45
|
+
- `Fuji Velvia 50` — saturated, landscape
|
|
46
|
+
- `Ilford HP5 Plus` — black and white, gritty grain
|
|
47
|
+
- `CineStill 800T` — tungsten night, halation
|
|
48
|
+
|
|
49
|
+
**Physics-based lighting** (direction + quality):
|
|
50
|
+
- `Single key light at 45 degrees from upper left`
|
|
51
|
+
- `Late afternoon sun at 15 degrees above horizon`
|
|
52
|
+
- `Color temperature 4500K` beats `slightly warm`
|
|
53
|
+
- `Practicals only — no fill` for Deakins-style realism
|
|
54
|
+
|
|
55
|
+
**Imperfection vocabulary** (forces away from AI-clean):
|
|
56
|
+
- `visible pores`, `natural skin grain`, `peach fuzz`, `slight hyperpigmentation`
|
|
57
|
+
- `unretouched raw photography`, `ISO noise`, `sweat beading`
|
|
58
|
+
- `crisp catchlights in the eyes`, `skin micro-detail`
|
|
59
|
+
|
|
60
|
+
**Director references** (use when locking style):
|
|
61
|
+
| Director | Tone | Visual signature |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| Denis Villeneuve | Cold, vast, existential | Desaturated, overwhelming scale |
|
|
64
|
+
| Roger Deakins | Precise motivated light | Single source, deep shadows, practicals |
|
|
65
|
+
| Emmanuel Lubezki | Natural, spiritual | Available light, golden hour |
|
|
66
|
+
| Bradford Young | Warm darkness | Underexposed, rich shadows, skin tones |
|
|
67
|
+
|
|
68
|
+
**Genre cues that move the model:**
|
|
69
|
+
- `unstaged documentary photography style`
|
|
70
|
+
- `fashion magazine editorial, shot on medium-format analog film, pronounced grain`
|
|
71
|
+
- `Film still from [Director] [genre]`
|
|
72
|
+
|
|
73
|
+
## The anti-list — phrases that DEGRADE realism
|
|
74
|
+
|
|
75
|
+
These are Stable-Diffusion-era tag soup. The model treats them as low-signal noise. Measured success rate: ~60-70% with these vs ~95%+ with positive description.
|
|
76
|
+
|
|
77
|
+
**Never use:**
|
|
78
|
+
- `8k`, `4k` (as a quality token)
|
|
79
|
+
- `hyperrealistic`, `ultra-realistic`, `photorealistic` standing alone
|
|
80
|
+
- `masterpiece`, `best quality`, `highly detailed`, `ultra-detailed`
|
|
81
|
+
- `trending on ArtStation`, `award-winning`
|
|
82
|
+
- `perfect skin`, `flawless`, `airbrushed`, `smooth skin`
|
|
83
|
+
- `cinematic` standing alone — always specify *which cinema* (director, lens, era, stock)
|
|
84
|
+
- `not anime, not cartoon, not 3D` — negation tag soup, replace with a positive style cue
|
|
85
|
+
|
|
86
|
+
## Negative prompting — there is no field
|
|
87
|
+
|
|
88
|
+
Nano Banana 2 has **no `negativePrompt` parameter**. Three patterns to suppress unwanted content:
|
|
89
|
+
|
|
90
|
+
1. **Positive reframing (preferred):** "empty street" not "no cars". "Unstaged documentary photography" not "not anime."
|
|
91
|
+
2. **Inline `without` / `free of`:** "without any people, vehicles, or man-made structures", "free of text overlays, logos, or watermarks."
|
|
92
|
+
3. **Constraint clauses for anatomy/quality:** "accurate anatomy with five fingers per hand, symmetrical features, natural proportions"; "sharp, well-exposed, free of blur or JPEG artifacts."
|
|
93
|
+
|
|
94
|
+
Default to #1. Reach for #2 only when positive framing can't suppress the unwanted element.
|
|
95
|
+
|
|
96
|
+
## Reference images
|
|
97
|
+
|
|
98
|
+
- **Hard limit: 14 images** (10 object-fidelity + 4 character-consistency). Categories don't trade — you can't use 14 object slots even if no characters are referenced.
|
|
99
|
+
- **Always label every reference's role** in the prompt. The model does not infer roles from order. Use the Slates composition pattern:
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
Reference Image Instructions:
|
|
103
|
+
- Image 1: Character reference (@samurai) — use for the character's identity (facial features, skin, bone structure, body, outfit); render the expression the scene describes, default neutral
|
|
104
|
+
- Image 2: Environment reference (@temple) — use for location architecture, spatial layout, environmental lighting, and atmospheric qualities
|
|
105
|
+
- Image 3: Style reference (#kurosawa) — use for visual style, mood, and aesthetic treatment
|
|
106
|
+
|
|
107
|
+
Scene prompt: [actual prompt]
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Reference rules (the verified ones)
|
|
111
|
+
1. **2-4 strong refs beat both extremes.** Not 1 (warps toward itself), not 12 (averages worse). Start with 2-3 focused refs — each adds context AND variables to balance.
|
|
112
|
+
2. **One reference per ROLE, labeled** (identity / style-grade / environment). Same-role competitors drift.
|
|
113
|
+
3. **Identity refs: attach both sheets, labeled — don't gate them.** A character's turnaround (body/proportion/outfit) AND its close-up expression sheet (high-res face: eyes, skin, teeth) both go in. The label ("use for identity; render the scene's expression, default neutral") is what stops the varied expressions from averaging the face. An *unlabeled* expression sheet hurts; labeled, the close-ups are a fidelity win.
|
|
114
|
+
4. **Flat-light identity refs.** Prep them with flat, even, shadowless lighting on a plain neutral background. Studio-lit / scene-lit sheets bleed their lighting into the generation ("green-screen pasted in front of mountains").
|
|
115
|
+
5. **Environment: describe it, don't feed a grid.** Default to describing the location in words. Reserve an environment ref for a mandatory exact-match, and then use ONE clean establishing image — never a multi-panel grid fed whole.
|
|
116
|
+
6. **Grids: explore, don't input.** Use grids to explore compositions, then pick a cell. Never feed a grid back in as a reference — cells share a split detail budget, so flaws propagate.
|
|
117
|
+
7. **Reuse the same refs across all shots.** Swapping mid-sequence causes drift.
|
|
118
|
+
8. **Legible in-shot text → bake it into the NB2 start frame**, then animate from it. Never trust text-to-video to render clean text.
|
|
119
|
+
- **Character consistency is officially "not 100% perfect"** per Google. Test before bulk generations. High-resolution, front-facing reference images help most.
|
|
120
|
+
|
|
121
|
+
## Common failure modes + fixes
|
|
122
|
+
|
|
123
|
+
**Hands:** Append `accurate anatomy with five fingers per hand, symmetrical features, natural proportions, relaxed open palm`. Avoid heavy jewelry, props intersecting fingers, motion blur in references.
|
|
124
|
+
|
|
125
|
+
**Text in images:** Quote-wrap target text. Specify font (`Century Gothic, 12pt`). Long phrases work; small text degrades. Two-step works best — generate text concepts conversationally first, then ask for the image.
|
|
126
|
+
|
|
127
|
+
**Left/right confusion:** Default is **viewer's perspective**, not subject's. Append `left and right are from the character's perspective, NOT the camera's` when scene-blocking matters.
|
|
128
|
+
|
|
129
|
+
**Surreal / absurd prompts trip uncanny valley:** The model drags toward realism. If you want surrealism, lean hard into stylization keywords (`painted`, `illustrated`, `stop-motion`).
|
|
130
|
+
|
|
131
|
+
**Soft faces / dead eyes:** Add `crisp catchlights in the eyes`, `skin micro-detail`, `peach fuzz visible`. Don't stack quality enhancers — single clean prompt beats multiple re-interpretations.
|
|
132
|
+
|
|
133
|
+
**Post-cutoff content (anything after Jan 2025):** Use reference images. The model has no knowledge of recent franchises, products, events.
|
|
134
|
+
|
|
135
|
+
## Resolution tactics
|
|
136
|
+
|
|
137
|
+
- Resolution is priced: NB2 4k costs roughly 2x 1k. Prices change — call `slates_estimate_generation_cost` for current numbers. Pick the cheapest resolution that serves the use case.
|
|
138
|
+
- **At 2K and above, the model allocates more tokens to surface detail** — explicit texture vocabulary (pores, fabric weave, grain) compounds at higher resolution.
|
|
139
|
+
- 1k for fast iteration / drafts; 2k for hero shots; 4k only when you need print-grade detail.
|
|
140
|
+
- 2K generations vary 20-60s+. Don't time-budget tightly.
|
|
141
|
+
|
|
142
|
+
## Boring vs cinema — examples
|
|
143
|
+
|
|
144
|
+
❌ **Boring:** "Wide shot of a man on a dock looking at the forest."
|
|
145
|
+
|
|
146
|
+
✅ **Cinema:** "Direct overhead drone shot on weathered dock surface. Single figure standing center frame, climbing up from frame bottom. Boot prints leading away from him toward shore. Pale winter light. Anamorphic lens flare from low sun. Desaturated blue and slate grey palette. Kodak Portra 400 grain. The path already walked by someone else. Map of threat."
|
|
147
|
+
|
|
148
|
+
❌ **Boring:** "Close up of a woman looking scared."
|
|
149
|
+
|
|
150
|
+
✅ **Cinema:** "Extreme close on subject's mouth and nose, 135mm f/2.8, shallow depth of field. Breath pluming out, catching cold light from upper-left key. Lips slightly parted, peach fuzz visible. The breath holds. CineStill 800T halation around catchlights. Waiting."
|
|
151
|
+
|
|
152
|
+
## The 3-strike rule
|
|
153
|
+
|
|
154
|
+
If three iterations on the same prompt haven't produced what the user wants, stop. Hand back to the user with what you tried and what isn't working. The slot machine doesn't converge — the prompt structure is wrong, not the seed.
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: slates-prompting-seedance
|
|
3
|
+
description: How to prompt Seedance 2.0 (ByteDance video model). Read before calling slates_generate_video with model seedance-2-fast or seedance-2-std. Seedance prompts have very specific structure (6-step formula + narrative timing beats) that differs from Kling and Veo — don't cross-pollinate the syntax.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Seedance 2.0 — prompting
|
|
7
|
+
|
|
8
|
+
ByteDance's video model. Routed via PiAPI (Economy) or fal.ai (Priority). Audio always generated alongside video. Models: `seedance-2-fast` (cheaper) and `seedance-2-std` (higher quality). Up to 15s.
|
|
9
|
+
|
|
10
|
+
## Official 6-step formula
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
Subject + Action + Environment + Camera + Style + Constraints
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Sweet spot length:** 60-150 words (not 150-300 — that's the upper bound). Multi-shot can run longer.
|
|
17
|
+
|
|
18
|
+
## Pin the subject in the first 20-30 words
|
|
19
|
+
|
|
20
|
+
The opening sentence is the **identity anchor**. If the subject isn't locked early, the model hallucinates new subjects mid-clip.
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
A matte black earbud case sits on a polished obsidian surface...
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Narrative timing beats — "At N seconds"
|
|
27
|
+
|
|
28
|
+
Use natural-language time markers, NOT shot brackets or labels.
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
At 2 seconds, the camera begins a slow dolly forward.
|
|
32
|
+
At 4 seconds, the lid opens in slow-motion...
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Beat count: **2 for 5s, 3 for 10s, 4-5 for 15s**.
|
|
36
|
+
|
|
37
|
+
## Camera moves — exact terms only
|
|
38
|
+
|
|
39
|
+
8 supported: `push-in`, `pull-out`, `pan`, `tracking`, `orbit`, `aerial`, `handheld`, `fixed`.
|
|
40
|
+
|
|
41
|
+
- "Dolly in" not "zoom in"
|
|
42
|
+
- "Orbit" not "circle"
|
|
43
|
+
- **One primary camera move per beat** — never stack them
|
|
44
|
+
|
|
45
|
+
## Lighting is the #1 quality lever
|
|
46
|
+
|
|
47
|
+
ByteDance says lighting has the biggest impact of any prompt element. Describe before or alongside the subject.
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
A cool-white diagonal beam from upper left, dust particles drifting through.
|
|
51
|
+
Soft golden hour lighting from low west angle.
|
|
52
|
+
Dramatic rim light against dark background.
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Camera and subject motion — separate sentences
|
|
56
|
+
|
|
57
|
+
Mixing them is the #1 cause of glitchy / shaky output.
|
|
58
|
+
|
|
59
|
+
❌ "The camera speed ramps as the earbud rises."
|
|
60
|
+
✅ "The earbud rises smoothly. The camera tracks upward."
|
|
61
|
+
|
|
62
|
+
## Slow-motion works. "Fast" doesn't.
|
|
63
|
+
|
|
64
|
+
`fast` is ByteDance's #1 quality-degrading keyword. Speed ramps and slow-motion are supported in natural language.
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
the lid opens in slow-motion · the blade whips through the air
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Other dangerous tags (treated as slop): `epic`, `amazing`, `beautiful`, `lots of movement`, `8K`, `masterpiece`, `trending on artstation`.
|
|
71
|
+
|
|
72
|
+
## Style block at the end
|
|
73
|
+
|
|
74
|
+
One primary anchor + 2-3 supporting details. End with `Single continuous take` if you want one shot with no cuts. **Never** write `no cut` or `seamless transition` — not in the training vocabulary.
|
|
75
|
+
|
|
76
|
+
## Reference media — `@Image1` / `@Video1` / `@Audio1` syntax
|
|
77
|
+
|
|
78
|
+
Reference-to-video endpoint accepts up to **9 reference images, 3 reference videos, 3 audio clips**. Tag inline:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
@Image1 is the character. @Image2 is the environment. @Audio1 is the foley.
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Mutually exclusive:** First-frame/last-frame mode CANNOT be combined with reference images. The error reads `"first/last frame content cannot be mixed with reference media content."` Pick one or the other.
|
|
85
|
+
|
|
86
|
+
## Reference rules (the verified ones)
|
|
87
|
+
|
|
88
|
+
- **2-4 strong refs beat both extremes** — not 1 (warps), not 12 (averages worse). Start focused.
|
|
89
|
+
- **One reference per ROLE, labeled** — `@Image1 is the character`, `@Image2 is the environment`. The model needs to know what each ref is FOR; it doesn't infer roles from order.
|
|
90
|
+
- **Character identity: attach the turnaround AND the close-up expression sheet, labeled for identity** (face/skin/body/outfit), and render the expression the SCENE describes (default neutral). That label is what keeps the varied expressions from averaging the face — don't gate the expression sheet. The trend is MORE references (video/audio into Seedance), so lean into attaching rich refs and labeling every role.
|
|
91
|
+
- **Flat-lit identity refs.** A studio-lit / scene-lit character sheet bleeds its lighting into the clip ("green-screen pasted in front of mountains"). Prep refs flat and plain.
|
|
92
|
+
- **Environment: describe it, don't feed a grid.** Default to words and let the model build the space to fit; reserve an environment ref for a hard exact-match, and then use ONE clean establishing image — never a multi-panel grid.
|
|
93
|
+
- **Reuse the same refs across every shot** in a sequence — swapping mid-sequence drifts.
|
|
94
|
+
- **Legible on-screen text → bake it into an NB2 start frame** and animate from it; Seedance won't render clean text from scratch.
|
|
95
|
+
- **Grids are for EXPLORING compositions, not for inputting** — pick a cell, don't feed the grid back as a reference.
|
|
96
|
+
|
|
97
|
+
## Image-to-video / first-frame guidance
|
|
98
|
+
|
|
99
|
+
**Describe motion, not image.** The model already sees the visual; tokens spent re-describing appearance are wasted.
|
|
100
|
+
|
|
101
|
+
Required stability phrases:
|
|
102
|
+
- `preserve composition and colors`
|
|
103
|
+
- `maintain exact appearance from reference image`
|
|
104
|
+
- `consistent character throughout, no deformation or drift`
|
|
105
|
+
|
|
106
|
+
**Cap I2V prompts under 60 words** when possible. Over 100 words frequently triggers silent generation failure.
|
|
107
|
+
|
|
108
|
+
## Negative prompting — inline only
|
|
109
|
+
|
|
110
|
+
Seedance has **no `negativePrompt` field**. Use the Constraints slot:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
avoid jitter and bent limbs
|
|
114
|
+
avoid temporal flicker
|
|
115
|
+
avoid identity drift
|
|
116
|
+
no distortion, no stretching
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Also fine: positive reframing ("empty street" not "no cars").
|
|
120
|
+
|
|
121
|
+
## Common failure modes + fixes
|
|
122
|
+
|
|
123
|
+
| Failure | Fix |
|
|
124
|
+
|---|---|
|
|
125
|
+
| Hallucinated subject mid-clip | First 20-30 words = identity anchor |
|
|
126
|
+
| Bent limbs / extra fingers | `avoid jitter and bent limbs` in Constraints |
|
|
127
|
+
| Identity drift across multi-shot | Repeat subject anchor at each beat |
|
|
128
|
+
| Silent generation failure on I2V | Cut prompt under 100 words, single primary camera move |
|
|
129
|
+
| Speech / motion conflict | Limit dialogue to one line per action shot |
|
|
130
|
+
|
|
131
|
+
## Benchmark prompts (verbatim from authoritative sources)
|
|
132
|
+
|
|
133
|
+
**Single-shot (fal.ai):**
|
|
134
|
+
> "A golden retriever runs across a sandy beach at sunset, kicking up wet sand with each stride, the camera tracking alongside at ground level. Waves crash softly in the background."
|
|
135
|
+
|
|
136
|
+
**Multi-shot commercial (fal.ai):**
|
|
137
|
+
> "Shot 1: extreme close-up of condensation dripping down a glass bottle, the sound of ice clinking. Shot 2: the bottle rises from a bed of crushed ice, camera tilting up slowly, bright backlight creating a halo effect. Shot 3: a hand grabs the bottle against a sunset rooftop backdrop, the city humming below."
|
|
138
|
+
|
|
139
|
+
**Cinematic anchor (atlabs):**
|
|
140
|
+
> "Modern Rural Aesthetics, Cinematic Commercial quality, shot with Sony A7S3/cinema camera, 4K/8K ultra-clear, Extreme Macro, natural transparent lighting, healing ASMR, no historical costume drama feel."
|
|
141
|
+
|
|
142
|
+
## Pre-flight: references arrive inline, refer by code
|
|
143
|
+
|
|
144
|
+
When you call `slates_generate_video` with reference asset IDs (firstFrameAssetId, lastFrameAssetId, ingredientAssetIds), the first call returns those references **inline as image content blocks** alongside a cost estimate and `requires_confirm: true`. **Look at the references** — if they suggest a different framing, lighting, or motion than your current prompt captures, revise the prompt before re-calling with `confirm=true`.
|
|
145
|
+
|
|
146
|
+
When talking to the user about the gen, refer to each reference by its short code: `IMG-A12 — Beach Sunset`. The user sees that code as a badge on the gallery thumbnail, so they can match what you're saying to what they're looking at.
|
|
147
|
+
|
|
148
|
+
- ✅ "I'm using **IMG-A12** as the first frame and **IMG-A15** as the last frame — the camera move is going to be a slow dolly forward through the gap."
|
|
149
|
+
- ❌ "I'm using the first beach image and the last one..." (which? They have four.)
|
|
150
|
+
|
|
151
|
+
## Sources
|
|
152
|
+
|
|
153
|
+
- [fal.ai — How to Use Seedance 2.0](https://fal.ai/learn/tools/how-to-use-seedance-2-0)
|
|
154
|
+
- [apiyi.com — Seedance 2.0 Prompt Guide](https://help.apiyi.com/en/seedance-2-0-prompt-guide-video-generation-camera-style-tips-en.html)
|
|
155
|
+
- [atlabs.ai — Ultimate Seedance 2.0 Prompting Guide](https://www.atlabs.ai/blog/the-ultimate-seedance-2.0-prompting-guide-47-prompts-2026)
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: slates-prompting-seedream-5-lite
|
|
3
|
+
description: How to prompt Seedream 5 Lite (ByteDance image model — the cheap volume option in Slates). Read before calling slates_generate_image with model seedream-5-lite, or slates_edit_image with editModel seedream-5-lite. Seedream front-loads attention, likes 30-100 focused words, and takes quoted strings for in-image text.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Seedream 5 Lite — prompting
|
|
7
|
+
|
|
8
|
+
ByteDance's Seedream image model, Lite tier, routed via fal.ai. In Slates: `slates_generate_image` with `model: seedream-5-lite` (REQUIRES projectId — no headless path). **Flat-priced regardless of resolution** — the cheapest image model in Slates, which makes it the right default for high-volume drafting, storyboard exploration, and variant grids. Call `slates_estimate_generation_cost` for the current number; never quote prices from memory. Less censored than Nano Banana 2.
|
|
9
|
+
|
|
10
|
+
**When to pick it:** lots of frames cheap (storyboard passes, 3-4 variant exploration), posters/layouts with text, quick look-dev. Step up to NB2 or FLUX.2 Max for the locked hero shot.
|
|
11
|
+
|
|
12
|
+
## Core structure — five components, most important first
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
Subject + Style + Composition + Lighting/Atmosphere + Technical parameters
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Seedream weights concepts mentioned **earlier in the prompt** more heavily. Lead with the subject; close with camera/technical details.
|
|
19
|
+
|
|
20
|
+
**Length sweet spot: 30-100 words.** Unlike models that reward verbosity, Seedream gets confused by very long prompts. Focused beats exhaustive.
|
|
21
|
+
|
|
22
|
+
## Style, composition, lighting vocabulary it responds to
|
|
23
|
+
|
|
24
|
+
- **Style:** portrait photography, macro photography, cinematic, photorealistic, minimalist, oil painting, watercolor, digital art
|
|
25
|
+
- **Composition:** symmetrical composition, rule of thirds, foreground detail with blurred background, wide-angle view, overhead perspective, medium shot, close-up
|
|
26
|
+
- **Lighting:** golden hour lighting, dramatic side lighting, soft diffused light, moody low-key lighting, bright high-key lighting
|
|
27
|
+
- **Technical:** shot on 85mm lens, shallow depth of field, high resolution
|
|
28
|
+
|
|
29
|
+
## Worked examples
|
|
30
|
+
|
|
31
|
+
**Portrait:**
|
|
32
|
+
> "Professional headshot of a female CEO with short blonde hair, confident expression, wearing a navy blue suit, neutral office background, studio lighting, shallow depth of field, high-end corporate photography style"
|
|
33
|
+
|
|
34
|
+
**Product:**
|
|
35
|
+
> "Modern smartphone floating in space, dark background with subtle blue gradient, product photography, studio lighting highlighting the glossy screen, ultra-detailed, commercial quality, photorealistic rendering"
|
|
36
|
+
|
|
37
|
+
## In-image text: double-quote it
|
|
38
|
+
|
|
39
|
+
Put the exact string in double quotation marks — Seedream treats quoted text as render-this-verbatim:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
A minimalist poster with the headline "SUMMER SALE" in bold sans-serif, centered
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Seedream is one of the stronger models for layout-heavy work (posters, mockups, diagrams): call out the layout explicitly — "centered headline, subtitle beneath, clean margins."
|
|
46
|
+
|
|
47
|
+
## Edits: change one thing, lock the rest
|
|
48
|
+
|
|
49
|
+
Via `slates_edit_image` with `editModel: seedream-5-lite`. Seedream edits respond well to instructions that name the change AND the preserved elements:
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
Change the bag to brown leather. Keep the person's face, pose, and the room unchanged.
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Note: Seedream edits in Slates ignore extra `referenceAssetIds` — that path is Nano Banana 2 only.
|
|
56
|
+
|
|
57
|
+
## Common failure modes + fixes
|
|
58
|
+
|
|
59
|
+
| Failure | Fix |
|
|
60
|
+
|---|---|
|
|
61
|
+
| Subject inconsistent / mutates | Put the subject description first; break complex subjects into clear components |
|
|
62
|
+
| Style drift | Reinforce the aesthetic with 2-3 related terms ("cinematic, photorealistic, shallow depth of field") |
|
|
63
|
+
| Compositional confusion | Use photography terms ("medium shot," "overhead view"); simplify the scene |
|
|
64
|
+
| Garbled text | Double-quote the exact string; keep it short; state placement |
|
|
65
|
+
| Mushy long-prompt output | Cut to under 100 words — Seedream rewards focus, not volume |
|
|
66
|
+
|
|
67
|
+
## Iterate cheap, lock expensive
|
|
68
|
+
|
|
69
|
+
Flat pricing makes Seedream the iterate-fast model: run the 3-strike loop here (draft → evaluate inline → one specific delta → regenerate), and only re-render the winning composition on a pricier model if the project's hero shot demands it. Cost rules live in `slates-cost-discipline` — the batch-authorization pattern applies when generating variant grids.
|
|
70
|
+
|
|
71
|
+
## Sources
|
|
72
|
+
|
|
73
|
+
- [fal.ai — Seedream Prompt Guide](https://fal.ai/learn/devs/seedream-v4-5-prompt-guide)
|
|
74
|
+
- [BytePlus ModelArk — Seedream Prompt Guide](https://docs.byteplus.com/en/docs/ModelArk/1829186)
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: slates-prompting-veo-3
|
|
3
|
+
description: How to prompt Veo 3.1 (Google). Read before calling slates_generate_video with veo-3.1-fast or veo-3.1-standard. Veo has the strongest first-frame + last-frame workflow of the three video models, native synchronized audio, and a different cinematography formula than Seedance/Kling. (no subtitles) is mandatory after every dialogue line.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Veo 3.1 — prompting
|
|
7
|
+
|
|
8
|
+
Google DeepMind's video model. Two tiers: `veo-3.1-fast` (cheaper, quick) and `veo-3.1-standard` (higher quality). 4k variants exist for both.
|
|
9
|
+
|
|
10
|
+
**Native single-shot duration: 4, 6, or 8 seconds.** Longer durations require chaining clips via Extend / last-frame reuse — quality degrades if naively requested past 8s in a single generation. Aspect ratio: **16:9 only** — `slates_generate_video` locks Veo to 16:9; anything else is ignored or fails. For 9:16 vertical, use Kling or Seedance instead.
|
|
11
|
+
|
|
12
|
+
Native synchronized audio at 48kHz: dialogue, SFX, ambient — generated WITH video, not added after.
|
|
13
|
+
|
|
14
|
+
## Official Google formula
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
[Cinematography] + [Subject] + [Action] + [Context] + [Style & Ambiance]
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Sweet spot length: 50-150 words. Cloud's official benchmark is ~50 words.
|
|
21
|
+
|
|
22
|
+
Verbatim official benchmark:
|
|
23
|
+
> "Medium shot, a tired corporate worker, rubbing his temples in exhaustion, in front of a bulky 1980s computer in a cluttered office late at night. The scene is lit by the harsh fluorescent overhead lights and the green glow of the monochrome monitor. Retro aesthetic, shot as if on 1980s color film, slightly grainy."
|
|
24
|
+
|
|
25
|
+
## Cinematography vocabulary (Vertex AI docs)
|
|
26
|
+
|
|
27
|
+
**Lenses:** wide-angle, telephoto, fisheye, anamorphic, 35mm, 85mm, shallow/deep depth of field
|
|
28
|
+
|
|
29
|
+
**Lighting:** Rembrandt lighting, volumetric lighting, backlighting, golden hour glow, lens flare, rack focus, **vertigo effect** (dolly zoom)
|
|
30
|
+
|
|
31
|
+
**Camera moves:** dolly (in/out), truck (left/right), pan, tilt, crane, aerial/drone, handheld, whip pan, arc shot, zoom
|
|
32
|
+
|
|
33
|
+
## Texture-realism phrases (counter the AI-plastic look)
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
fine skin pores · visible fabric weave · subtle contrast, no gloss or sharpening
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Specify materials concretely: `charcoal cotton hoodie`, `matte concrete`, `silk lapel`. Generic "smooth, beautiful" rendering is the failure mode you're avoiding.
|
|
40
|
+
|
|
41
|
+
## Dialogue — `(no subtitles)` is mandatory
|
|
42
|
+
|
|
43
|
+
Every dialogue line you don't want burned in as text overlay needs `(no subtitles)`. Verbatim from the founder talking-head benchmark:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
The founder says, "This update cuts setup time in half, helping teams get started faster." (no subtitles).
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Without this, Veo will overlay subtitle text on top of your generation.
|
|
50
|
+
|
|
51
|
+
## Voice direction — keep it terse
|
|
52
|
+
|
|
53
|
+
Veo is less responsive to long voice-direction blocks than Kling. Use brief modifiers:
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
says in a weary voice
|
|
57
|
+
whispers
|
|
58
|
+
shouts
|
|
59
|
+
mutters
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Multi-character: handles 2-3 speakers natively. Past 3, sync degrades — use first-frame/last-frame chaining for 4+.
|
|
63
|
+
|
|
64
|
+
## SFX with cause
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
✅ SFX: thunder cracks in the distance
|
|
68
|
+
❌ SFX: thunder
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Always specify direction or distance.
|
|
72
|
+
|
|
73
|
+
## Ambient is mandatory
|
|
74
|
+
|
|
75
|
+
Always include an ambience line per scene. Without it, the audio mix feels dead.
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
Soft office ambience.
|
|
79
|
+
Wind on the open ridge.
|
|
80
|
+
Distant city hum.
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## First-frame + last-frame workflow (Veo's strength)
|
|
84
|
+
|
|
85
|
+
1. Generate start frame (Gemini 2.5 Flash Image is the recommended pair — Slates' Nano Banana 2 works)
|
|
86
|
+
2. Generate end frame
|
|
87
|
+
3. Animate with both frames as anchors
|
|
88
|
+
|
|
89
|
+
**Motion-Lock hack:** Keep ~60% of the same background pixels between start and end frames. Prevents latent drift across the clip.
|
|
90
|
+
|
|
91
|
+
Verbatim arc-shot example:
|
|
92
|
+
> "The camera performs a smooth 180-degree arc shot, starting with the front-facing view of the singer and circling around her to seamlessly end on the POV shot from behind her on stage. The singer sings 'when you look me in the eyes, I can see a million stars.'"
|
|
93
|
+
|
|
94
|
+
## Ingredients-to-Video (multiple references)
|
|
95
|
+
|
|
96
|
+
Verbatim example:
|
|
97
|
+
> "Using the provided images for the detective, the woman, and the office setting, create a medium shot of the detective behind his desk. He looks up at the woman and says in a weary voice, 'Of all the offices in this town, you had to walk into mine.'"
|
|
98
|
+
|
|
99
|
+
## Reference discipline (character / environment refs)
|
|
100
|
+
|
|
101
|
+
- **2-4 strong refs per role**, labeled (name what each provided image is for) and reused across every shot.
|
|
102
|
+
- **Flat-lit identity refs.** A studio-lit / scene-lit character sheet bleeds its lighting into the clip. Prep refs flat and plain.
|
|
103
|
+
- **Attach both character sheets, labeled for identity** — the turnaround (body/proportion/outfit) and the close-up expression sheet (face detail). Render the scene's expression (default neutral); the label keeps the varied expressions from averaging the face.
|
|
104
|
+
- **Environment: describe it, don't feed a multi-panel grid.** Reserve an environment ref for a hard exact-match, then use ONE clean establishing image.
|
|
105
|
+
|
|
106
|
+
## Negative prompting — nouns, not instructions
|
|
107
|
+
|
|
108
|
+
Veo has a `negativePrompt` field. **Verbatim Vertex AI rule:**
|
|
109
|
+
> "Describe unwanted elements as nouns rather than instructions. Use 'wall, frame' instead of 'no walls' or 'don't show walls.'"
|
|
110
|
+
|
|
111
|
+
Inline: positive reframing in the body too.
|
|
112
|
+
- ✅ `"a desolate landscape with no buildings or roads"`
|
|
113
|
+
- ❌ `"no man-made structures"`
|
|
114
|
+
|
|
115
|
+
## Common failure modes + fixes
|
|
116
|
+
|
|
117
|
+
| Failure | Fix |
|
|
118
|
+
|---|---|
|
|
119
|
+
| Subject identity shifts mid-clip | Front-load identity at prompt start; use material cues (`charcoal canvas`, `cotton`, `silk`) to stabilize |
|
|
120
|
+
| Floaty / weightless motion | Weight verbs (`trudges`, `drops heavily`), ground contact (`boots crunch on gravel`) |
|
|
121
|
+
| AI-plastic look | `fine skin pores`, `visible fabric weave`, `subtle contrast` |
|
|
122
|
+
| Subtitles baked into video | `(no subtitles)` after every dialogue line |
|
|
123
|
+
| Rushed dialogue | Lines fit one natural breath in 8s |
|
|
124
|
+
| Mismatched ambience | Always include an ambience line |
|
|
125
|
+
| Warped geometry | `photorealistic stability` |
|
|
126
|
+
|
|
127
|
+
## Timestamp shot syntax (for chained / multi-beat scenes)
|
|
128
|
+
|
|
129
|
+
Veo accepts `[00:00-00:02]` brackets for timed sequences within an 8s clip. **Do NOT cross syntaxes** — Veo timestamps in a Seedance prompt cause subject drift; Seedance "single continuous take" in a Veo prompt suppresses cuts.
|
|
130
|
+
|
|
131
|
+
Verbatim multi-beat:
|
|
132
|
+
> "[00:00-00:02] Medium shot from behind a young female explorer with a leather satchel and messy brown hair in a ponytail, as she pushes aside a large jungle vine to reveal a hidden path.
|
|
133
|
+
> [00:02-00:04] Reverse shot of the explorer's freckled face, her expression filled with awe as she gazes upon ancient, moss-covered ruins. SFX: The rustle of dense leaves, distant exotic bird calls.
|
|
134
|
+
> [00:04-00:06] Tracking shot following the explorer as she steps into the clearing and runs her hand over the intricate carvings on a crumbling stone wall.
|
|
135
|
+
> [00:06-00:08] Wide, high-angle crane shot, revealing the lone explorer standing small in the center of the vast, forgotten temple complex, half-swallowed by the jungle. SFX: A swelling, gentle orchestral score begins to play."
|
|
136
|
+
|
|
137
|
+
## Benchmark prompt — founder talking head (full)
|
|
138
|
+
|
|
139
|
+
> "Camera locked at eye level, medium close-up on a 35mm lens: a startup founder in his late 30s with short black hair and light stubble, wearing a charcoal cotton hoodie, speaking directly to camera, leaning slightly forward as he speaks, lifting one hand to emphasize a point, then relaxing back to neutral, in a quiet office during late afternoon, with blurred monitors glowing faintly in the background, lit by soft daylight from a side window with gentle fill on the opposite side and natural falloff across his face. Style: fine skin pores, visible fabric weave, subtle contrast, no gloss or sharpening. Audio: The founder says, 'This update cuts setup time in half, helping teams get started faster.' (no subtitles). Soft office ambience."
|
|
140
|
+
|
|
141
|
+
## Pre-flight: references arrive inline, refer by code
|
|
142
|
+
|
|
143
|
+
When you call `slates_generate_video` with `firstFrameAssetId` / `lastFrameAssetId` / `ingredientAssetIds`, the first call returns those references **inline as image content blocks** alongside a cost estimate and `requires_confirm: true`. Veo's strongest move is first-frame + last-frame; the pre-flight is where you confirm the two frames actually anchor the motion you wrote. Revise the prompt before `confirm=true` if needed.
|
|
144
|
+
|
|
145
|
+
When talking to the user about the gen, refer to each reference by its short code: `IMG-A12 — Founder Headshot`. The user sees that code as a badge on the gallery thumbnail, so they can match what you're saying to what they're looking at.
|
|
146
|
+
|
|
147
|
+
- ✅ "I'm anchoring on **IMG-A12** as the open shot and **IMG-A18** as the close — the 180° arc lands on her looking offscreen left."
|
|
148
|
+
- ❌ "I'm using two of the founder shots..." (which two? They have six.)
|
|
149
|
+
|
|
150
|
+
## Sources
|
|
151
|
+
|
|
152
|
+
- [Google Cloud — Ultimate Prompting Guide for Veo 3.1](https://cloud.google.com/blog/products/ai-machine-learning/ultimate-prompting-guide-for-veo-3-1)
|
|
153
|
+
- [Google DeepMind — Veo Prompt Guide](https://deepmind.google/models/veo/prompt-guide/)
|
|
154
|
+
- [Google Cloud Docs — Vertex AI Video Generation Prompt Guide](https://docs.cloud.google.com/vertex-ai/generative-ai/docs/video/video-gen-prompt-guide)
|
|
155
|
+
- [Atlas Cloud — Veo 3.1 Master Guide](https://www.atlascloud.ai/blog/guides/google-veo-3-1-guide-master-image-to-video-ai-with-native-sound-and-4k-realism)
|
|
156
|
+
- [Invideo — Veo 3.1 Prompt Guide](https://invideo.io/blog/google-veo-prompt-guide/)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: slates-storyboard-from-script
|
|
3
|
+
description: Turn a script or treatment into a Slates storyboard with scenes and frames. Use when the user has a script, treatment, shot list, or scene-by-scene description and wants to materialize it as a Slates storyboard, optionally generating frame images per shot.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Storyboard from script — Slates workflow
|
|
7
|
+
|
|
8
|
+
The user has a script, treatment, or shot list. You're turning it into a Slates storyboard with scene → frame structure, optionally generating images for each frame.
|
|
9
|
+
|
|
10
|
+
## Workflow
|
|
11
|
+
|
|
12
|
+
### 1. Parse the script
|
|
13
|
+
Read the user's script. Decide:
|
|
14
|
+
|
|
15
|
+
- **Scene count** — usually 1 scene per location/setting change. Don't fragment into one-frame scenes.
|
|
16
|
+
- **Frames per scene** — match the shot list. Default is 3-6 frames per scene unless the script specifies more.
|
|
17
|
+
- **Shot labels** — pull them from the script (e.g., "Wide", "Close-up", "Over-the-shoulder").
|
|
18
|
+
|
|
19
|
+
If the user hasn't named the storyboard, suggest one based on the project tone.
|
|
20
|
+
|
|
21
|
+
### 2. Materialize the structure first (no generation yet)
|
|
22
|
+
- `slates_create_storyboard` with the chosen name.
|
|
23
|
+
- For each scene: `slates_add_scene` with a descriptive name and order.
|
|
24
|
+
- For each frame: write a *visual-only* prompt (image, not action), the shot label, and any director notes. **Don't generate yet.**
|
|
25
|
+
|
|
26
|
+
Surface the planned structure back to the user as a tight summary:
|
|
27
|
+
> Storyboard "X" • 4 scenes • 12 frames total
|
|
28
|
+
> Scene 1: Forest opening (3 frames)
|
|
29
|
+
> Scene 2: Confrontation (4 frames)
|
|
30
|
+
> ...
|
|
31
|
+
|
|
32
|
+
Ask: **"Generate frame images now? (y/N)"**
|
|
33
|
+
|
|
34
|
+
### 3. Generate frames if requested
|
|
35
|
+
For each frame:
|
|
36
|
+
- Estimate cost (`slates_estimate_generation_cost`, `count = total frames`). Confirm with user if total > $0.50.
|
|
37
|
+
- Generate sequentially, with character/environment/style references attached when present in the project (`slates_list_characters`, `slates_list_environments`).
|
|
38
|
+
- Each result returns inline. Evaluate. If wrong, refine prompt + regenerate (charge once, not multiple).
|
|
39
|
+
- Bind to the frame via `slates_add_frame`.
|
|
40
|
+
|
|
41
|
+
### 4. Hand back
|
|
42
|
+
- Total frames generated, total credits spent, storyboard id.
|
|
43
|
+
- Suggest next steps: review via `slates_get_storyboard_with_frames`, or take the frames to motion — `slates_generate_video` per frame (`firstFrameAssetId`, `background: true`, poll `slates_get_generation_status`), then `slates_add_clip_to_timeline` in story order and `slates_export_video`. The full frames-to-film pipeline (batch cost authorization, model mixing) is `slates-one-prompt-film`.
|
|
44
|
+
|
|
45
|
+
## Anti-patterns
|
|
46
|
+
|
|
47
|
+
- **Don't** auto-generate without asking. Generation is the expensive step. Always confirm first.
|
|
48
|
+
- **Don't** invent shot details the script doesn't mention. If the script says "they argue," ask what the shot looks like, don't fabricate "she clenches her fists in a wide shot."
|
|
49
|
+
- **Don't** mix scene structure and frame generation in one pass — building the skeleton first lets the user catch errors before spending credits.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: slates-vision-feedback-loop
|
|
3
|
+
description: Lower-level utility skill for any Slates workflow that needs to "generate, look at the result, refine, regenerate." Defines the standard inline-vision pattern. Other Slates skills compose this. Use when generating images and you need to confirm they match the brief before moving on, or when the user asks to "iterate" on an image.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Vision feedback loop — Slates utility skill
|
|
7
|
+
|
|
8
|
+
Slates returns generated images inline as base64. You see the actual pixels. Use that — don't trust prompt-following blindly.
|
|
9
|
+
|
|
10
|
+
## Asset codes are your shared vocabulary with the user
|
|
11
|
+
|
|
12
|
+
Every asset in Slates has a short stable code (e.g. `IMG-A12`, `VID-V3`, `AUD-S1`) and a label derived from its prompt (e.g. `Beach Sunset`). These are visible in the gallery as a corner badge on each thumbnail. **Always refer to assets by their code in chat** so the user can match what you're saying to a specific card in their gallery.
|
|
13
|
+
|
|
14
|
+
- ✅ "I'm using **IMG-A12 — Beach Sunset** as the first frame. The second-frame candidate **IMG-A15** has the right composition but warmer light — want me to use that one instead?"
|
|
15
|
+
- ❌ "I'm using the beach sunset image..." (user has four beach sunset variants — which one?)
|
|
16
|
+
- ❌ "I'm using asset `7a3f9e4b-...`" (UUIDs aren't readable; user can't match to a badge)
|
|
17
|
+
|
|
18
|
+
The code is the FORMAL reference. The label is human texture. Use both: `IMG-A12 — Beach Sunset`.
|
|
19
|
+
|
|
20
|
+
## Vision tools at your disposal
|
|
21
|
+
|
|
22
|
+
- `slates_get_asset_image` — pull one image into context. Returns its code+label.
|
|
23
|
+
- `slates_get_assets_batch` — pull up to 8 images in one call. Use when picking from a candidate set; cheaper than N individual fetches.
|
|
24
|
+
- `slates_get_asset_video_frames` — extract N keyframes (default 3) from a video and inline them as JPEGs. You can't see video natively; this is how you "look at" a clip before refining its motion prompt.
|
|
25
|
+
|
|
26
|
+
## Pre-flight is automatic on the gen tools
|
|
27
|
+
|
|
28
|
+
`slates_generate_video`, `slates_generate_motion_transfer`, and `slates_generate_lip_sync` now show you their reference assets **inline** on the confirm response. You don't need to fetch them yourself — but you DO need to look at what comes back, revise the prompt if the references suggest a different motion/framing, and only then re-call with `confirm=true`.
|
|
29
|
+
|
|
30
|
+
## The pattern
|
|
31
|
+
|
|
32
|
+
1. **Generate.** Call `slates_generate_image` with a prompt. The result is in your context as an image content block.
|
|
33
|
+
2. **Evaluate against the brief.** What did the user actually want? Are the elements right? Composition? Lighting? Subject identity?
|
|
34
|
+
3. **One of three outcomes:**
|
|
35
|
+
- **Right** → save it (bind to a frame, character slot, etc.) and move on.
|
|
36
|
+
- **Close, but adjustable** → refine the prompt with a specific delta ("wider shot", "warmer light", "remove the second figure"), regenerate **once**.
|
|
37
|
+
- **Wrong direction** → ask the user before regenerating. Don't burn credits on prompt-thrashing.
|
|
38
|
+
|
|
39
|
+
## Refinement rules
|
|
40
|
+
|
|
41
|
+
- **One specific delta per regeneration.** Don't change five things at once — you won't know what helped.
|
|
42
|
+
- **Anchor with references.** If the result drifted from the user's intent, attach the *previous best* generation as a reference image alongside the original brief.
|
|
43
|
+
- **Use `slates_get_asset_image`** to pull a previously-generated image back into context if you need to compare against a fresh generation.
|
|
44
|
+
- **Use `slates_edit_image`** for surgical tweaks instead of full regeneration when ~90% of the image is right — `sourceAssetId` = the asset, `prompt` = the change only. Edits preserve composition and identity; full regen rolls the dice. Recipe: `slates-edit-and-iterate`.
|
|
45
|
+
|
|
46
|
+
## Cost discipline
|
|
47
|
+
|
|
48
|
+
- Track total credits spent across the loop. Surface to the user every 3 iterations.
|
|
49
|
+
- Stop after 3 failed iterations on the same prompt — escalate to the user with what you tried and what's not working. The slot machine never converges.
|
|
50
|
+
- For high-cost generations (`> $0.50`), confirm before *every* attempt, not just the first.
|
|
51
|
+
|
|
52
|
+
## When to break the loop
|
|
53
|
+
|
|
54
|
+
- The user said "good enough" or "ship it." Stop iterating.
|
|
55
|
+
- You've burned >5 generations on one frame. Hand back and ask.
|
|
56
|
+
- The user changes brief mid-loop. Treat it as a new brief, not a continuation.
|
|
57
|
+
|
|
58
|
+
## Voice when narrating to the user
|
|
59
|
+
|
|
60
|
+
Tight, observational, no editorializing.
|
|
61
|
+
- ✅ "Frame 2 has the wrong lighting direction — back-lit instead of side. Regenerating with side light."
|
|
62
|
+
- ❌ "I notice that the lighting in frame 2 isn't quite what we were going for. I'll go ahead and try again with a different approach."
|