@slatesvideo/shared 0.6.2 → 0.6.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.
Files changed (77) hide show
  1. package/dist/api-url.d.ts +9 -0
  2. package/dist/api-url.js +9 -0
  3. package/dist/auth.d.ts +13 -1
  4. package/dist/auth.js +9 -5
  5. package/dist/clients/cloud.d.ts +3 -0
  6. package/dist/clients/cloud.js +34 -3
  7. package/dist/clients/desktop.js +3 -0
  8. package/dist/index.d.ts +8 -2
  9. package/dist/index.js +44 -1
  10. package/dist/operations/index.d.ts +243 -31
  11. package/dist/operations/index.js +1483 -154
  12. package/dist/operations/surface.d.ts +69 -0
  13. package/dist/operations/surface.js +227 -0
  14. package/dist/prompts/agent-doctrine.d.ts +36 -0
  15. package/dist/prompts/agent-doctrine.js +201 -0
  16. package/dist/prompts/asset-label.d.ts +23 -0
  17. package/dist/prompts/asset-label.js +70 -0
  18. package/dist/prompts/banned-tokens.d.ts +40 -0
  19. package/dist/prompts/banned-tokens.js +219 -0
  20. package/dist/prompts/character-sheet.d.ts +0 -2
  21. package/dist/prompts/character-sheet.js +0 -2
  22. package/dist/prompts/craft-cards.d.ts +20 -0
  23. package/dist/prompts/craft-cards.js +82 -0
  24. package/dist/prompts/environment-sheet.js +16 -0
  25. package/dist/prompts/index.d.ts +1 -0
  26. package/dist/prompts/index.js +4 -0
  27. package/dist/prompts/model-capabilities.d.ts +65 -1
  28. package/dist/prompts/model-capabilities.js +139 -2
  29. package/dist/prompts/model-facts.d.ts +20 -4
  30. package/dist/prompts/model-facts.js +95 -27
  31. package/dist/prompts/partials.generated.js +2 -1
  32. package/dist/prompts/prompting-tips.d.ts +1 -1
  33. package/dist/prompts/prompting-tips.js +123 -0
  34. package/dist/prompts/reference-composer.d.ts +36 -7
  35. package/dist/prompts/reference-composer.js +75 -20
  36. package/dist/prompts/reference-rules.d.ts +15 -26
  37. package/dist/prompts/reference-rules.js +15 -93
  38. package/dist/prompts/shot-grammar.d.ts +154 -0
  39. package/dist/prompts/shot-grammar.js +184 -0
  40. package/dist/prompts/shot-spec.d.ts +265 -0
  41. package/dist/prompts/shot-spec.js +303 -0
  42. package/dist/skills/content.js +25 -22
  43. package/exports/slates-prompt-builder/generated/SKILL.md +3 -3
  44. package/exports/slates-prompt-builder/generated/reference-content-policy.md +6 -0
  45. package/exports/slates-prompt-builder/generated/reference-kling.md +22 -0
  46. package/exports/slates-prompt-builder/generated/reference-nano-banana.md +17 -0
  47. package/exports/slates-prompt-builder/generated/reference-seedance.md +19 -1
  48. package/exports/slates-prompt-builder/generated/slates-prompt-builder-manifest.json +17 -17
  49. package/exports/slates-prompt-builder/generated/slates-prompt-builder.skill +0 -0
  50. package/package.json +83 -73
  51. package/skills/_partials/decision-log.md +5 -4
  52. package/skills/_partials/thresholds.md +19 -0
  53. package/skills/slates-content-policy.md +15 -1
  54. package/skills/slates-cost-discipline.md +26 -4
  55. package/skills/slates-model-selection.md +2 -2
  56. package/skills/slates-one-prompt-film.md +20 -12
  57. package/skills/slates-project-organization.md +1 -1
  58. package/skills/slates-prompting-elevenlabs.md +61 -2
  59. package/skills/slates-prompting-flux-2-max.md +39 -0
  60. package/skills/slates-prompting-gpt-image-2.md +109 -70
  61. package/skills/slates-prompting-inworld-tts.md +166 -0
  62. package/skills/slates-prompting-kling-v3.md +39 -0
  63. package/skills/slates-prompting-lip-sync.md +38 -0
  64. package/skills/slates-prompting-ltx-2-5.md +218 -0
  65. package/skills/slates-prompting-minimax-h3.md +39 -0
  66. package/skills/slates-prompting-motion-transfer.md +38 -0
  67. package/skills/slates-prompting-nano-banana-2.md +36 -0
  68. package/skills/slates-prompting-omni-flash.md +41 -0
  69. package/skills/slates-prompting-seed-audio.md +38 -0
  70. package/skills/slates-prompting-seedance-2-5.md +38 -0
  71. package/skills/slates-prompting-seedance.md +36 -1
  72. package/skills/slates-prompting-seedream-5-lite.md +38 -0
  73. package/skills/slates-prompting-veo-3.md +39 -0
  74. package/skills/slates-shot-variety.md +53 -0
  75. package/skills/slates-storyboard-from-script.md +31 -15
  76. package/skills/slates-style-prompting.md +1 -1
  77. package/skills/slates-vision-feedback-loop.md +1 -1
@@ -0,0 +1,218 @@
1
+ ---
2
+ name: slates-prompting-ltx-2-5
3
+ description: How to prompt LTX-2.5 and LTX-2.5 Pro. Read before calling slates_generate_video with model ltx-2-5 or ltx-2-5-pro. LTX scores the picture on the same pass that draws it, so SOUND IS THE FIRST THING YOU WRITE — Lightricks ranks the prompt sound, camera, character detail, shot type and scene, then scene dressing, all in one flowing paragraph. It is also the catalogue's native MULTISHOT seat: one generation carries two to four connected shots holding character, light and voice across the cuts. Base ltx-2-5 is the distilled build — 720p/1080p/1440p/4K, clips of 6 to 20 seconds in EVEN steps, and the cheapest native 1080p second in Slates; ltx-2-5-pro is the full diffusion build and is NOT a superset, reaching only 1080p and 10 seconds for about a third more money. Three hazards live here: durations are even numbers only from six (there is no 5s or 7s clip), the model has NO reference endpoint at all so identity references are unavailable, and any sound not anchored to something in frame gets invented for you.
4
+ ---
5
+
6
+ # LTX-2.5 — prompting
7
+
8
+ <!-- @card:start -->
9
+ <!-- slates-only -->
10
+ <!-- MACHINE-READ. Everything between the @card markers is extracted by
11
+ src/prompts/craft-cards.ts and returned on every cost estimate for this
12
+ model, so it is the ONE piece of positive craft guidance the agent cannot
13
+ skip. Measured 2026-08-30: a fact inlined where it cannot be skipped moved
14
+ compliance 0/8 to 30/32; the same guidance behind a fetch moved nothing.
15
+ Keep it under 2,400 characters (the build fails above that) and keep the
16
+ rationale, the receipts and the worked examples in the body below. -->
17
+ <!-- /slates-only -->
18
+ **Card — LTX-2.5.** It scores the picture on the same pass that draws it, so SOUND IS THE FIRST THING YOU WRITE. Lightricks' own priority order: sound, camera, character detail, shot type and scene, then scene dressing. One flowing paragraph, not labelled sections. When a prompt sprawls, cut from the bottom.
19
+
20
+ **The five levers**
21
+ 1. **Lead with sound, and anchor every sound to something in frame.** The test is "visible, or at least locatable" — `the rope creaks against the cleat`, `the hull knocking hollow against the fenders`, `rain on the awning`. A distant whistle is fine IF you have named the post it comes from.
22
+ 2. **Camera second**, because framing decides the visual weight of the shot — `low camera at the gunwale`, `slow drift right`, `static medium behind the counter`.
23
+ 3. **Character detail as physical ACTION**, not as adjectives about a person — `she braces a boot on the rail and hauls`, `his hands counting notes`.
24
+ 4. **It is the native MULTISHOT seat** — one generation carries two to four connected shots holding character, light and voice across the cuts. Write the cuts.
25
+ 5. **Quote dialogue and name the language and accent** — `in English with a slight German accent` — `"We should not have come back," in English with a slight German accent.`
26
+
27
+ **Examples**
28
+ - `The rope creaks against the cleat as she leans back, gulls calling somewhere off the port bow, the hull knocking hollow against the fenders. Low camera at the gunwale, slow drift right. She braces a boot on the rail and hauls, twice, then stops.`
29
+ - `A till drawer bangs shut, a fan ticks against its cage, rain on the awning outside. Static medium behind the counter, then cut to a close-up of his hands counting notes, then cut wide as he looks up at the door.`
30
+
31
+ **Hard constraint:** durations are EVEN numbers from six — there is no 5s or 7s clip. There is NO reference endpoint at all, so identity references are unavailable; use MiniMax H3 or Kling when a character must hold across shots. Any sound not anchored to something in frame gets invented for you. And never write mood adjectives as sound: "tense atmosphere", "a sense of dread" and "ominous ambience" produce nothing usable — the fix is one more moving object in frame with a sound attached to it.
32
+ <!-- @card:end -->
33
+
34
+ <!-- @banned:start -->
35
+ <!-- slates-only -->
36
+ <!-- MACHINE-READ. Every `backticked` token between the @banned markers is
37
+ extracted by src/prompts/banned-tokens.ts and returned on this model's cost
38
+ estimate, and every submitted prompt is matched against it. Keep entries
39
+ backticked and prose outside the backticks. -->
40
+ <!-- /slates-only -->
41
+ **Never use** — mood adjectives standing in for sound produce nothing usable:
42
+ - `tense atmosphere`, `a sense of dread`, `ominous ambience`, `eerie silence`
43
+ - an unanchored sound: name the thing in frame it comes from, or cut it
44
+ <!-- @banned:end -->
45
+
46
+ LTX-2.5 generates picture and sound **in a single pass**, with a Gemma-4 12B text encoder reading
47
+ one flowing paragraph. That single fact drives everything below: the prompt is not a shot
48
+ description with audio bolted on, it is **a scene where the sound is load-bearing** — and
49
+ Lightricks' own priority order puts sound first, ahead of the camera.
50
+
51
+ Two seats, and the naming is a trap:
52
+
53
+ | | `ltx-2-5` (base) | `ltx-2-5-pro` |
54
+ |---|---|---|
55
+ | Build | Distilled, 8-step | Full diffusion ("Diffusion Fidelity Rendering") |
56
+ | Resolutions | 720p / 1080p / **1440p** / 4K | 720p / 1080p |
57
+ | Durations | 6–20s, even steps | 6 / 8 / 10s |
58
+ | Price | $0.09–$0.30 per second | $0.12–$0.17 per second |
59
+ | Reach for it when | iterating, long takes, 4K delivery, batch volume | one dense final render inside 1080p and 10s |
60
+
61
+ **Pro is not "base plus more."** It buys picture quality on a *narrower* envelope — it cannot make
62
+ a 1440p frame and it cannot make a 12-second clip. Reaching for it out of habit costs a third more
63
+ *and* takes away the reach.
64
+
65
+ ---
66
+
67
+ ## 1. The six parts, in priority order, in one paragraph
68
+
69
+ Lightricks ranks the elements of an LTX prompt like this. When a prompt sprawls, **cut from the
70
+ bottom.**
71
+
72
+ 1. **Sound** — highest priority; the model scores the picture as it draws it.
73
+ 2. **Camera** — framing decides visual weight and the feel of the shot.
74
+ 3. **Character detail** — expressed as physical action.
75
+ 4. **Shot type and scene** — the action itself.
76
+ 5. **Scene dressing** — the first thing to trim.
77
+
78
+ Write it as **one flowing paragraph**, not a list of labelled sections. LTX is not Seedance (eight
79
+ engineering slots) and not H3 (three separate audio layers) — it wants continuous prose.
80
+
81
+ ---
82
+
83
+ ## 2. Sound: anchor it or it gets invented
84
+
85
+ **Write the audio line last, then go back and check every cue has a source you could point at.**
86
+ Anything unanchored, the model invents for you.
87
+
88
+ The test is **"visible, or at least locatable."** A distant whistle is fine *if* you have named the
89
+ marshal's post it comes from. A "distant whistle" with nothing to attach to is a coin flip.
90
+
91
+ > the rope creaks against the cleat as she leans back, gulls calling somewhere off the port bow,
92
+ > the hull knocking hollow against the fenders
93
+
94
+ **Never write mood adjectives as sound.** "Tense atmosphere", "a sense of dread" and "ominous
95
+ ambience" produce nothing usable. If a scene feels thin, the fix is **one more moving object in
96
+ frame with a sound attached to it** — never another adjective.
97
+
98
+ ### Dialogue
99
+
100
+ Quote it, and name the language and accent:
101
+
102
+ > "We should not have come back," in English with a slight German accent.
103
+
104
+ Two rules that decide whether the lip sync lands:
105
+
106
+ - **Give the character a beat of stillness before they speak.** The sync needs something to lock
107
+ against; a character already mid-motion when the line starts drifts.
108
+ - **Describe the beat structure** — when they look, how long they wait, when they speak, where they
109
+ look afterwards.
110
+
111
+ Slates pins the frame rate at 25fps, which is also what Lightricks recommends for dialogue: at 50fps
112
+ the performance "pulls toward a video look."
113
+
114
+ ---
115
+
116
+ ## 3. Character emotion is physical
117
+
118
+ The model renders actions. It does not render adjectives.
119
+
120
+ | Instead of | Write |
121
+ |---|---|
122
+ | she looks anxious | her jaw sets, she turns the ring on her finger twice |
123
+ | he seems exhausted | he blinks slowly and lets his shoulder take the doorframe |
124
+ | a tense standoff | neither moves; his thumb finds the strap and stays there |
125
+
126
+ ---
127
+
128
+ ## 4. Multishot — the thing this model is uniquely for
129
+
130
+ **One LTX generation can carry several connected shots**, holding character, environment, lighting,
131
+ voice and style across every cut. Nothing else in the catalogue does this natively; everywhere else
132
+ you generate separate clips and stitch them, and identity drifts between them.
133
+
134
+ **Working range is two to four shots.** Three is the comfortable stopping point.
135
+
136
+ At **every** transition you must supply four things:
137
+
138
+ 1. **Name the edit in the prose** — "hard cut", "dissolve", "match cut".
139
+ 2. **Re-establish the shot completely** — scale, angle, lens and light all reset at a cut. A cut is
140
+ not a continuation.
141
+ 3. **Re-identify recurring characters by their original descriptor.** "The woman in the bronze
142
+ gown", never "she". Pronouns lose the character across a cut — this is the single most common
143
+ multishot failure.
144
+ 4. **State what the sound does at the cut.** Silence is not assumed; if the room tone should drop
145
+ out, say so.
146
+
147
+ A shape that works:
148
+
149
+ > Wide establishing shot of the workshop, dust in the window light, a lathe turning somewhere off
150
+ > frame — hard cut — macro close-up of the brass fitting as it seats, the turning noise gone,
151
+ > replaced by a single dry click — match cut — medium shot of the woman in the bronze gown stepping
152
+ > back, the room tone returning underneath her.
153
+
154
+ ---
155
+
156
+ ## 5. Camera: write it, don't enumerate it
157
+
158
+ fal exposes a `camera_motion` enum (dolly in/out/left/right, jib up/down, static, focus shift).
159
+ **Slates does not surface it, deliberately** — and prose is the better instrument anyway:
160
+
161
+ - **A written move can be tied to a specific moment.** "A slow push-in that settles as she reaches
162
+ the door, then holds" is not expressible as an enum value.
163
+ - **For multishot it would be actively wrong** — one enum value would impose a single camera
164
+ behaviour on three shots that each want their own.
165
+
166
+ So name the lens, the framing, the move, and **the moment the move resolves**.
167
+
168
+ ---
169
+
170
+ ## 6. The hard constraints
171
+
172
+ ### Durations are even numbers only, starting at six
173
+
174
+ **6, 8, 10, 12, 14, 16, 18, 20.** There is no 5-second LTX clip and no odd duration of any length.
175
+ Asking for 7s is not a rounding matter — that generation does not exist.
176
+
177
+ **And the long end is 1080p-and-below only.** At 1440p and 4K the ceiling drops to **6, 8 or 10**.
178
+
179
+ fal's own default is `auto`, which lets the model pick the length from the described action.
180
+ **Slates always sends an explicit length instead**, so what you choose is what you are billed for.
181
+ Choose the length the beat needs.
182
+
183
+ ### Aspect ratios: 16:9 and 9:16, and nothing else
184
+
185
+ The narrowest set in the catalogue alongside Veo. Square, 4:5 and 21:9 are not available on this
186
+ model at any resolution.
187
+
188
+ ### Frames, not references
189
+
190
+ LTX takes a **start frame** and an **optional end frame** (which generates a transition between the
191
+ two). It has **no reference-to-video endpoint at all** — no identity references, no style
192
+ references, no environment references, no reference video, no reference audio.
193
+
194
+ **For character consistency across separate shots, use MiniMax H3 or Kling.** Within a single LTX
195
+ generation, use multishot instead — that is precisely the gap it fills.
196
+
197
+ In image-to-video, **do not cut away from the opening frame too early.** You have paid for that
198
+ frame; let it play before the first move.
199
+
200
+ ### Do not ask for text on screen
201
+
202
+ Neither the spelling nor its stability from frame to frame can be relied on. Signage, labels,
203
+ captions and lower-thirds belong in post.
204
+
205
+ ---
206
+
207
+ ## 7. Audio is free here, and that changes the routing
208
+
209
+ Native synchronised audio is **included at every resolution on both seats**, with no surcharge and
210
+ no toggle that costs money — unlike Kling, where sound is a paid dimension. A 6-second 1080p LTX
211
+ clip **with sound** is 39 credits.
212
+
213
+ Combined with 1080p at $0.13/s — the cheapest native 1080p second in Slates — this makes LTX **the
214
+ coverage seat**: the one to reach for when the job is many takes rather than one hero shot, when a
215
+ sequence needs its own sound, or when the credit budget is the binding constraint.
216
+
217
+ Route away from it when you need identity references (H3, Kling), a ratio other than 16:9 or 9:16
218
+ (Seedance, Kling), or authored multi-layer audio direction (H3).
@@ -5,6 +5,45 @@ description: How to prompt MiniMax H3 and MiniMax H3 Max. Read before calling sl
5
5
 
6
6
  # MiniMax H3 — prompting
7
7
 
8
+ <!-- @card:start -->
9
+ <!-- slates-only -->
10
+ <!-- MACHINE-READ. Everything between the @card markers is extracted by
11
+ src/prompts/craft-cards.ts and returned on every cost estimate for this
12
+ model, so it is the ONE piece of positive craft guidance the agent cannot
13
+ skip. Measured 2026-08-30: a fact inlined where it cannot be skipped moved
14
+ compliance 0/8 to 30/32; the same guidance behind a fetch moved nothing.
15
+ Keep it under 2,400 characters (the build fails above that) and keep the
16
+ rationale, the receipts and the worked examples in the body below. -->
17
+ <!-- /slates-only -->
18
+ **Card — MiniMax H3.** The only seat where audio is AUTHORED rather than toggled: dialogue, scene sound and score are three separate sections of the prompt, generated in one pass, and putting a sound in the wrong section drops or doubles it.
19
+
20
+ **The five levers**
21
+ 1. **Write the three audio layers separately** — `Scene sound:` for what is in the room, `Score:` for what only the audience hears, and the dialogue quoted inline. Section decides attribution.
22
+ 2. **Quote dialogue and name the language** — `says in English`, `speaks in Spanish`. Eleven languages are stably supported; the language is part of the instruction, not an afterthought.
23
+ 3. **Declare the reference RELATIONSHIP**, which no other seat has: `kept whole`, `partly kept`, `transferred`, or `a loose echo`. An undeclared reference is a guess.
24
+ 4. **Give a beat of stillness before a line** — `sits still for a beat, then looks up`. The sync needs something to lock against; a character already mid-motion when the line starts drifts.
25
+ 5. **Describe the beat structure** — `waits`, `then speaks`, `under the last three seconds`. H3 is a timeline, so write one.
26
+
27
+ **Examples**
28
+ - `A woman sits still at a kitchen table for a beat, then looks up. She says in English, "You said Tuesday." Scene sound: a fridge hum, a spoon set down on formica. Score: none.`
29
+ - `Two mechanics either side of an open bonnet. The younger one wipes his hands, waits, then speaks in Spanish, "No es el alternador." Scene sound: a socket wrench, a radio two bays over. Score: a low sustained cello under the last three seconds, audience only.`
30
+
31
+ **Hard constraint:** the two seats differ in what the ENDPOINT accepts, not in grammar. Base H3 reaches 2K/4K and takes references; `minimax-h3-max` is capped at 768p, has NO reference endpoint at all (start and end frames still work), and costs MORE at the tier they share — it is a speed pick, never the cheap one. H3's top two resolution tiers are UPSCALES of the native render: judge at native. Reference images past the fifth are a paid dimension of the cost key — declare the count when quoting.
32
+ <!-- @card:end -->
33
+
34
+ <!-- @banned:start -->
35
+ <!-- slates-only -->
36
+ <!-- MACHINE-READ. Every `backticked` token between the @banned markers is
37
+ extracted by src/prompts/banned-tokens.ts and returned on this model's cost
38
+ estimate, and every submitted prompt is matched against it. Keep entries
39
+ backticked and prose outside the backticks. -->
40
+ <!-- /slates-only -->
41
+ **Never use:**
42
+ - a sound written into the wrong audio section — it is dropped, doubled, or attributed to the wrong layer
43
+ - `background music` as a bare instruction: the score is its own authored layer, audience-only, and it is named as such
44
+ - an undeclared reference relationship — say kept whole, partly kept, transferred, or a loose echo
45
+ <!-- @banned:end -->
46
+
8
47
  H3 is an **omni transformer**: it generates picture and sound in the same pass, at 24fps with
9
48
  32kHz stereo, 5–15 seconds, in 11 stably-supported languages (Arabic, Chinese, English, French,
10
49
  German, Italian, Japanese, Korean, Portuguese, Russian, Spanish). That single fact drives
@@ -5,6 +5,44 @@ description: How to set up motion transfer — Kling Motion Control only (std an
5
5
 
6
6
  # Motion transfer — setup guide
7
7
 
8
+ <!-- @card:start -->
9
+ <!-- slates-only -->
10
+ <!-- MACHINE-READ. Everything between the @card markers is extracted by
11
+ src/prompts/craft-cards.ts and returned on every cost estimate for this
12
+ model, so it is the ONE piece of positive craft guidance the agent cannot
13
+ skip. Measured 2026-08-30: a fact inlined where it cannot be skipped moved
14
+ compliance 0/8 to 30/32; the same guidance behind a fetch moved nothing.
15
+ Keep it under 2,400 characters (the build fails above that) and keep the
16
+ rationale, the receipts and the worked examples in the body below. -->
17
+ <!-- /slates-only -->
18
+ **Card — Motion transfer (Kling Motion Control only).** A target IMAGE (your character) plus a source VIDEO (the motion) produces your character performing that motion. Always 5 seconds.
19
+
20
+ **The five levers**
21
+ 1. **The target image must show body proportions clearly** and the character must occupy more than about 5% of the frame. A tiny figure in a wide shot has nothing to drive.
22
+ 2. **Single character in the target.** A group image breaks the identity anchor.
23
+ 3. **Choose `characterOrientation` on purpose** — `video` takes the source clip's framing, `image` preserves the portrait's. It is the most-missed choice here.
24
+
25
+ 4. **The prompt is atmosphere only** — `Soft afternoon sunlight, dust motes in the air, vintage warm color grade.` Motion verbs are ignored; the motion is already in the driving video.
26
+ 5. **Pick the best 5 seconds of the source up front**, and write only atmosphere: `soft afternoon sunlight`, `vintage warm color grade`, `clean studio backdrop`. The output is 5s regardless, so a long driving clip just wastes the choice.
27
+
28
+ **Examples**
29
+ - `Soft afternoon sunlight, dust motes in the air, vintage warm color grade.`
30
+ - `Clean studio backdrop, sharp focus on the character.` (Or leave it empty.)
31
+
32
+ **Hard constraint:** cartoon driving videos fail, and a cropped or partial target character drifts. std is fine while the motion-and-framing combination is still moving; switch to pro once it is locked. For a REGENERATED shot instead — physical contact, cloth and hair, camera motion, native audio — that is a normal Seedance video generation with the driving clip as a video reference, not a mode of this tool.
33
+ <!-- @card:end -->
34
+
35
+ <!-- @banned:start -->
36
+ <!-- slates-only -->
37
+ <!-- MACHINE-READ. Every `backticked` token between the @banned markers is
38
+ extracted by src/prompts/banned-tokens.ts and returned on this model's cost
39
+ estimate, and every submitted prompt is matched against it. Keep entries
40
+ backticked and prose outside the backticks. -->
41
+ <!-- /slates-only -->
42
+ **Never use** — the motion is already in the driving video, so motion verbs are ignored:
43
+ - `spins faster`, `jumps higher`, `add more energy`, `moves quicker`
44
+ <!-- @banned:end -->
45
+
8
46
  Take a still **target image** (your character) and a **source video** (the motion you want), produce a new video of your character performing the source video's motion. **This tool is Kling-only** — it wraps Kling Motion Control and nothing else.
9
47
 
10
48
  | Tier | Cost | Use case |
@@ -5,6 +5,32 @@ description: How to write prompts that produce cinematic, photorealistic results
5
5
 
6
6
  # Nano Banana 2 — cinematic & photorealistic prompting
7
7
 
8
+ <!-- @card:start -->
9
+ <!-- slates-only -->
10
+ <!-- MACHINE-READ. Everything between the @card markers is extracted by
11
+ src/prompts/craft-cards.ts and returned on every cost estimate for this
12
+ model, so it is the ONE piece of positive craft guidance the agent cannot
13
+ skip. Measured 2026-08-30: a fact inlined where it cannot be skipped moved
14
+ compliance 0/8 to 30/32; the same guidance behind a fetch moved nothing.
15
+ Keep it under 2,400 characters (the build fails above that) and keep the
16
+ rationale, the receipts and the worked examples in the body below. -->
17
+ <!-- /slates-only -->
18
+ **Card — Nano Banana 2 (Gemini 3.1 Flash Image).** Brief it like a creative director, not a tag list. Structure: `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]. [1-2 word tone].`
19
+
20
+ **The five levers**
21
+ 1. **Named lens + aperture** beats "shallow depth of field" — `85mm f/1.4`, `135mm f/2.8` (the cheat code for skin), `Panavision anamorphic`, `400mm telephoto`.
22
+ 2. **Light by direction and quality**, never "good lighting" — `hard sidelight from a single window, deep falloff`, `overcast north light`, `practical tungsten spill`.
23
+ 3. **A named film stock or sensor** carries a whole palette — `Kodak Portra 400`, `Cinestill 800T`, `ARRI Alexa 65`.
24
+ 4. **Composition as a shot** — `low angle`, `aerial view`, `rule of thirds with the subject camera-left`, `foreground occlusion`.
25
+ 5. **Positive framing only.** Describe what is there. "Empty street", never "no cars"; "unstaged documentary photography", never "not anime".
26
+
27
+ **Examples**
28
+ - `Film still from a Denis Villeneuve thriller. Shot on ARRI Alexa 65, 85mm f/1.4. A woman in a charcoal wool coat stands at a rain-slick bus stop, breath visible. Hard sodium light from a single overhead lamp, deep falloff into blue night. Kodak Vision3 500T. Isolated.`
29
+ - `Editorial still life on seamless bone paper. 100mm macro, f/8. A cracked ceramic bowl holding three figs. Soft north light from camera-left, one gentle shadow. Muted earth palette. Portra 400 grain. Quiet.`
30
+
31
+ **Hard constraint:** there is no `negativePrompt` field. Suppress by reframing positively, or inline `without` / `free of`. Knowledge cutoff January 2025 — anything later needs reference images.
32
+ <!-- @card:end -->
33
+
8
34
  Nano Banana 2 is **Gemini 3.1 Flash Image**.<!-- slates-only --> It is the default model behind `slates_generate_image` — the op also exposes `flux-2-max` and `seedream-5-lite`, each with its own prompting skill.<!-- /slates-only --> It is **not** Gemini 3 Pro Image; that is Nano Banana **Pro** (`nano-banana-pro`), a separate model with its own seat.<!-- slates-only --> Verified against the runtime slug map in `slate/src/main/api/google.ts`.<!-- /slates-only --> 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
35
 
10
36
  Knowledge cutoff: January 2025. Anything after needs explicit reference images.
@@ -78,6 +104,15 @@ Film still from [DIRECTOR] [GENRE]. Shot on [CAMERA] with [LENS]. [SUBJECT and a
78
104
 
79
105
  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.
80
106
 
107
+ <!-- @banned:start -->
108
+ <!-- slates-only -->
109
+ <!-- MACHINE-READ. Every `backticked` token between the @banned markers is extracted
110
+ by src/prompts/banned-tokens.ts, inlined verbatim into the slates_generate_image
111
+ op description (always in context on both surfaces), and matched against every
112
+ submitted prompt. Editing this list changes what the agent is told AND what it
113
+ is warned about — keep every entry backticked, and keep prose outside the
114
+ backticks. -->
115
+ <!-- /slates-only -->
81
116
  **Never use:**
82
117
  - `8k`, `4k` (as a quality token)
83
118
  - `hyperrealistic`, `ultra-realistic`, `photorealistic` standing alone
@@ -86,6 +121,7 @@ These are Stable-Diffusion-era tag soup. The model treats them as low-signal noi
86
121
  - `perfect skin`, `flawless`, `airbrushed`, `smooth skin`
87
122
  - `cinematic` standing alone — always specify *which cinema* (director, lens, era, stock)
88
123
  - `not anime, not cartoon, not 3D` — negation tag soup, replace with a positive style cue
124
+ <!-- @banned:end -->
89
125
 
90
126
  ## Negative prompting — there is no field
91
127
 
@@ -5,6 +5,47 @@ description: How to prompt Gemini Omni Flash (Google, via fal). Read before call
5
5
 
6
6
  # Gemini Omni Flash — prompting
7
7
 
8
+ <!-- @card:start -->
9
+ <!-- slates-only -->
10
+ <!-- MACHINE-READ. Everything between the @card markers is extracted by
11
+ src/prompts/craft-cards.ts and returned on every cost estimate for this
12
+ model, so it is the ONE piece of positive craft guidance the agent cannot
13
+ skip. Measured 2026-08-30: a fact inlined where it cannot be skipped moved
14
+ compliance 0/8 to 30/32; the same guidance behind a fetch moved nothing.
15
+ Keep it under 2,400 characters (the build fails above that) and keep the
16
+ rationale, the receipts and the worked examples in the body below. -->
17
+ <!-- /slates-only -->
18
+ **Card — Gemini Omni Flash.** Two different jobs with OPPOSITE prompt rules, and getting them the wrong way round is the whole failure mode.
19
+
20
+ **The five levers**
21
+ 1. **Editing: short prompt, ONE change, nothing else.** Google's own doc says so and a 2026-07-09 receipt confirms it — a long "keep every frame identical" preamble produced WORSE drift than two sentences.
22
+ 2. **Editing: always end with `Keep everything else the same.`** — the one documented preservation lever.
23
+
24
+ 3. **Editing: describe the EFFECT, never a real object as a metaphor.** "Candle-like flame" rendered a literal candle in the subject's hand.
25
+ 4. **Editing: no conditional timing cues.** "…when he calls it, as he walks…" hard-fails with `invalid_request`. Collapse to one continuous action; the model syncs to the footage's own motion.
26
+ 5. **Generation: the opposite — describe fully.** Subject, action, setting, `camera tracking alongside`, `overcast flat light`, tone. Audio is prompt-driven with no parameters: dialogue in quotes, sound in plain language — `rain patters on the tin roof`, `spray from tyres`, `a horn somewhere behind`.
27
+
28
+ **Examples**
29
+ - Edit: `Small magical flames appear on his fingertips when he snaps his fingers, and vanish when he blows on them. Keep everything else the same.`
30
+ - Generate: `A courier in a yellow shell jacket weaves between stalled cars on a wet arterial road, camera tracking alongside at shoulder height. Overcast flat light, spray from tyres. Rain patters on car roofs, a horn somewhere behind.`
31
+
32
+ **Hard constraint:** it is a CHEAP DRAFT seat for generation and the EDIT-fidelity winner for footage-synced VFX — never a hero generation shot. Expect a possible jitter or doubled speech beat in the last half second of an edit: trim the tail rather than burning a re-roll.
33
+ <!-- @card:end -->
34
+
35
+ <!-- @banned:start -->
36
+ <!-- slates-only -->
37
+ <!-- MACHINE-READ. Every `backticked` token between the @banned markers is
38
+ extracted by src/prompts/banned-tokens.ts and returned on this model's cost
39
+ estimate, and every submitted prompt is matched against it. Keep entries
40
+ backticked and prose outside the backticks. -->
41
+ <!-- /slates-only -->
42
+ **Never use in an EDIT prompt** (each one has a receipt above):
43
+ - a long preservation preamble — it produces WORSE drift than `Keep everything else the same.`
44
+ - a real object as a metaphor: `candle-like`, `flame-like`, `laser-like`
45
+ - a conditional timing cue: `when he`, `as she`, `once they` — these hard-fail, they do not merely drift
46
+ - harm-to-person framing: `ignite`, `catch fire`, `on fire` applied to a person trips the safety filter
47
+ <!-- @banned:end -->
48
+
8
49
  Google's fast video generation + editing model ("Nano Banana Pro for video" in creator slang — a nickname; it is NOT the NB Pro image model). Carried on fal (`google/gemini-omni-flash*`). 720p only, 24fps, 3–10 second clips, 16:9 or 9:16. **Audio is native and included** — dialogue, SFX, and ambient generate WITH the video at no extra cost.
9
50
 
10
51
  ## Where it routes
@@ -5,6 +5,44 @@ description: How to prompt Seed Audio 1.0 (ByteDance, via fal). Read before call
5
5
 
6
6
  # Seed Audio 1.0 — prompting
7
7
 
8
+ <!-- @card:start -->
9
+ <!-- slates-only -->
10
+ <!-- MACHINE-READ. Everything between the @card markers is extracted by
11
+ src/prompts/craft-cards.ts and returned on every cost estimate for this
12
+ model, so it is the ONE piece of positive craft guidance the agent cannot
13
+ skip. Measured 2026-08-30: a fact inlined where it cannot be skipped moved
14
+ compliance 0/8 to 30/32; the same guidance behind a fetch moved nothing.
15
+ Keep it under 2,400 characters (the build fails above that) and keep the
16
+ rationale, the receipts and the worked examples in the body below. -->
17
+ <!-- /slates-only -->
18
+ **Card — Seed Audio 1.0.** One plain sentence describing a SCENE, and it returns dialogue, effects and ambience together in one pass. For ONE named voice saying ONE line, `inworld-tts-2` is the seat instead; this one renders the whole room.
19
+
20
+ **The five levers**
21
+ 1. **Write one sentence in plain language.** Describe the room and what is happening in it; the model casts and performs it.
22
+ 2. **Name the crowd size, the room size and the distance.** This is the highest-leverage single edit on any bed — unqualified nouns default BIG. "Tiny applause of two or three people at an open mic", not "applause".
23
+ 3. **Put the length in the prompt** and make it deliberate.
24
+ 4. **Dialogue is performed inside the scene** — write the line as spoken in the room, then re-roll until a take is right and lip-sync against it.
25
+ 5. **Describe sounds directly** — "one coffee machine hissing, cutlery somewhere behind the counter" — with the object, the action and where it is.
26
+
27
+ **Examples**
28
+ - `a diner at 2am, one coffee machine hissing, cutlery somewhere behind the counter, one man says quietly "you're late again". 15 seconds`
29
+ - `nature soundscape, a wide open field, cicadas near, birds mid-distance, one loon far off across water. 20 seconds`
30
+
31
+ **Hard constraint:** it has NO duration parameter — the length you request is written into the prompt AND is what you are billed, whatever comes back, so choose it deliberately. Kling's `SFX:` / `Ambient noise:` / `Background music:` labels have no parser here and measurably worsen the output. Shot language, camera moves and lighting are video-prompt words the model must ignore. It is not a music model and it cannot produce pixels.
32
+ <!-- @card:end -->
33
+
34
+ <!-- @banned:start -->
35
+ <!-- slates-only -->
36
+ <!-- MACHINE-READ. Every `backticked` token between the @banned markers is
37
+ extracted by src/prompts/banned-tokens.ts and returned on this model's cost
38
+ estimate, and every submitted prompt is matched against it. Keep entries
39
+ backticked and prose outside the backticks. -->
40
+ <!-- /slates-only -->
41
+ **Never use** — Kling video syntax has no parser here and measurably worsens the output:
42
+ - `SFX`, `Ambient noise`, `Background music` as labels — describe the sounds directly
43
+ - shot language: `wide shot`, `slow push in`, `warm tungsten` — camera and lighting words are video-prompt words the model has to ignore
44
+ <!-- @banned:end -->
45
+
8
46
  ByteDance's one-pass audio scene model, carried on fal (`bytedance/seed-audio-1.0`). It generates dialogue, sound effects and ambience **together**, from a single plain sentence. 1–120 seconds. It is the default audio model in Slates and the workhorse for continuity beds.
9
47
 
10
48
  ## Where it routes
@@ -5,6 +5,44 @@ description: How to prompt Seedance 2.5 and Seedance 2.5 Edit. Read before calli
5
5
 
6
6
  # Seedance 2.5 — prompting
7
7
 
8
+ <!-- @card:start -->
9
+ <!-- slates-only -->
10
+ <!-- MACHINE-READ. Everything between the @card markers is extracted by
11
+ src/prompts/craft-cards.ts and returned on every cost estimate for this
12
+ model, so it is the ONE piece of positive craft guidance the agent cannot
13
+ skip. Measured 2026-08-30: a fact inlined where it cannot be skipped moved
14
+ compliance 0/8 to 30/32; the same guidance behind a fetch moved nothing.
15
+ Keep it under 2,400 characters (the build fails above that) and keep the
16
+ rationale, the receipts and the worked examples in the body below. -->
17
+ <!-- /slates-only -->
18
+ **Card — Seedance 2.5.** Shares 2.0's grammar exactly (subject binding, camera vocabulary, externalised emotion, inline constraints — read `slates-prompting-seedance` for those). Two things are different, and both matter.
19
+
20
+ **The five levers**
21
+ 1. **Timestamps work here** — integer seconds, and the model acts on them: `[0-4] she reads the letter. [4-9] she folds it and looks up.` 2.0 ignores exactly this syntax.
22
+ 2. **Length is the reason to be here** — takes up to 30 seconds, where 2.0 stops at 15. Write the beats as `[0-6]`, `[6-12]`, `[12-18]`; do not hope for them.
23
+ 3. **Up to 30 image references**, and a multi-view image can serve as ONE subject reference (up to 5 subjects). 2.0 cannot do either.
24
+ 4. **Audio-only references are accepted** without an image or video alongside — the only Seedance seat that takes one.
25
+ 5. **Keep the 2.0 discipline**: one camera move per beat (`slow track right`, `handheld follow`), physical action instead of stated emotion, and quality asked for in the image-quality slot vocabulary — `rich details`, `natural colors`, `cinematic texture`, `soft lighting`.
26
+
27
+ **Examples**
28
+ - `[0-6] Wide shot, <Subject_1>@<Image_1> crosses an empty car park toward a idling van, slow track right. [6-12] Medium, she stops as the driver's window comes down. [12-18] Close-up, she looks off past the lens and does not answer. Rich details, natural colors. Keep it subtitle-free.`
29
+ - `[0-10] A single continuous handheld follow behind a courier climbing a fire escape, rain. [10-20] She reaches the landing, turns, and the city opens behind her. Cinematic texture, soft lighting.`
30
+
31
+ **Hard constraint:** it is the EXPENSIVE seat and it has NO 4K — 480p/720p/1080p only, and dearer than 2.0 at every resolution they share. It is a second seat, never an upgrade. Long takes multiply cost linearly: quote a 30-second take before you fire it.
32
+ <!-- @card:end -->
33
+
34
+ <!-- @banned:start -->
35
+ <!-- slates-only -->
36
+ <!-- MACHINE-READ. Every `backticked` token between the @banned markers is
37
+ extracted by src/prompts/banned-tokens.ts and returned on this model's cost
38
+ estimate, and every submitted prompt is matched against it. Keep entries
39
+ backticked and prose outside the backticks. -->
40
+ <!-- /slates-only -->
41
+ **Never use** (2.5 reclassifies the task and fails a fresh generation on these):
42
+ - `edit`, `extend`, `continue the video`, `same video but` — they make the provider read a fresh generation as an edit
43
+ - `85mm`, `f/1.4`, `Portra 400` and any other lens, aperture, film-stock or camera-body token — image-model vocabulary, a Seedance anti-pattern on both seats
44
+ <!-- @banned:end -->
45
+
8
46
  **Read `slates-prompting-seedance` first.** The prompt GRAMMAR is the same model family: the
9
47
  8-slot advanced formula, subject binding by `<Subject_N>@<Image_N>`, camera vocabulary,
10
48
  externalised emotion, inline constraint words, the anti-twin fix. None of it is restated here.
@@ -5,6 +5,32 @@ description: How to prompt Seedance 2.0 (ByteDance video model). Read before cal
5
5
 
6
6
  # Seedance 2.0 — prompting
7
7
 
8
+ <!-- @card:start -->
9
+ <!-- slates-only -->
10
+ <!-- MACHINE-READ. Everything between the @card markers is extracted by
11
+ src/prompts/craft-cards.ts and returned on every cost estimate for this
12
+ model, so it is the ONE piece of positive craft guidance the agent cannot
13
+ skip. Measured 2026-08-30: a fact inlined where it cannot be skipped moved
14
+ compliance 0/8 to 30/32; the same guidance behind a fetch moved nothing.
15
+ Keep it under 2,400 characters (the build fails above that) and keep the
16
+ rationale, the receipts and the worked examples in the body below. -->
17
+ <!-- /slates-only -->
18
+ **Card — Seedance 2.0.** Not copywriting — an ENGINEERING instruction to a spatial layer and a temporal layer: who, in what scene, doing what, how the camera moves, and in what order. Multi-beat work is a `Shot 1 / Shot 2 / Shot 3` storyboard.
19
+
20
+ **The five levers**
21
+ 1. **Bind every subject to its reference** — `<Subject_1>@<Image_1>` — and keep the descriptions identical across shots. Unbound subjects are where twins come from.
22
+ 2. **Shot sizes and camera MOVES, not lens data** — `medium close-up`, `slow push in`, `handheld follow`, `whip pan`. One primary move per shot.
23
+ 3. **Externalise emotion as physical action.** Not "she is nervous": `she turns the ring on her finger twice, then stops`.
24
+ 4. **Use the image-quality slot vocabulary** for quality — `HD`, `rich details`, `cinematic texture`, `natural colors`, `soft lighting`. That is the officially sanctioned way to ask.
25
+ 5. **Constraints go INLINE**, led by the official templates — `keep it subtitle-free`, `do not generate a watermark`, `avoid jitter and bent limbs`, `avoid temporal flicker`.
26
+
27
+ **Examples**
28
+ - `Shot 1: medium shot, <Subject_1>@<Image_1> steps out of the freight lift into a wet loading bay, slow push in. Shot 2: close-up, she turns the ring on her finger twice and stops, handheld. Rich details, cinematic texture, natural colors. Keep it subtitle-free.`
29
+ - `Single continuous take. Wide shot of a fishing skiff crossing a grey swell, camera tracks from the starboard rail. Spray hits the lens once. Soft lighting, natural colors, film-grain texture. Avoid jitter and bent limbs.`
30
+
31
+ **Hard constraint:** NO timestamps — 2.0 ignores them and answers only to shot numbers (2.5 acts on them). No lens, aperture, film stock or camera body: that is image-model vocabulary and a Seedance anti-pattern. There is no negativePrompt field.
32
+ <!-- @card:end -->
33
+
8
34
  ByteDance's video model — first-party via **BytePlus ModelArk** (credits only, no BYOK). Audio always generated alongside the video. Single model `seedance-2` across the full resolution ladder (480p / 720p / 1080p / native 4K — 4K video is Pro-only, default 1080p), 4–15s, first+last frame, and up to 9 reference images / 3 videos / 3 audio clips.
9
35
 
10
36
  > **How to read this file.**
@@ -339,7 +365,16 @@ Speed ramps and slow-motion are supported in natural language, and `fast` is wid
339
365
  the lid opens in slow-motion · the blade whips through the air
340
366
  ```
341
367
 
342
- **Slop tokens to avoid:** `epic`, `amazing`, `beautiful`, `lots of movement`, `8K`, `masterpiece`, `trending on artstation`. These are quality *incantations* — the officially sanctioned way to ask for quality is the image-quality slot vocabulary in Part 1 (`HD`, `rich details`, `cinematic texture`, `natural colors`, `soft lighting`).
368
+ <!-- @banned:start -->
369
+ <!-- slates-only -->
370
+ <!-- MACHINE-READ — same contract as the anti-list in slates-prompting-nano-banana-2.
371
+ Extracted by src/prompts/banned-tokens.ts into the slates_generate_video op
372
+ description and matched against submitted prompts. The RECOMMENDED vocabulary
373
+ below sits OUTSIDE the markers on purpose — it is backticked too. -->
374
+ <!-- /slates-only -->
375
+ **Slop tokens to avoid:** `epic`, `amazing`, `beautiful`, `lots of movement`, `8K`, `masterpiece`, `trending on artstation`.
376
+ <!-- @banned:end -->
377
+ These are quality *incantations* — the officially sanctioned way to ask for quality is the image-quality slot vocabulary in Part 1 (`HD`, `rich details`, `cinematic texture`, `natural colors`, `soft lighting`).
343
378
 
344
379
  ## Style block at the end
345
380
 
@@ -5,6 +5,44 @@ description: How to prompt Seedream 5 Lite (ByteDance image model — the cheap
5
5
 
6
6
  # Seedream 5 Lite — prompting
7
7
 
8
+ <!-- @card:start -->
9
+ <!-- slates-only -->
10
+ <!-- MACHINE-READ. Everything between the @card markers is extracted by
11
+ src/prompts/craft-cards.ts and returned on every cost estimate for this
12
+ model, so it is the ONE piece of positive craft guidance the agent cannot
13
+ skip. Measured 2026-08-30: a fact inlined where it cannot be skipped moved
14
+ compliance 0/8 to 30/32; the same guidance behind a fetch moved nothing.
15
+ Keep it under 2,400 characters (the build fails above that) and keep the
16
+ rationale, the receipts and the worked examples in the body below. -->
17
+ <!-- /slates-only -->
18
+ **Card — Seedream 5 Lite.** The cheap volume seat: flat-priced at every resolution, which makes it the right default for storyboard passes, variant grids and look-dev. Structure, most important first: `Subject + Style + Composition + Lighting/Atmosphere + Technical`.
19
+
20
+ **The five levers**
21
+ 1. **Lead with the subject.** Earlier words weigh more; close with the camera and technical detail.
22
+ 2. **Keep it 30-100 words.** Unlike models that reward verbosity, this one gets confused by very long prompts. Focused beats exhaustive.
23
+ 3. **Name the composition** — `symmetrical composition`, `rule of thirds`, `foreground detail with blurred background`, `overhead perspective`.
24
+ 4. **Name the light as a named condition** — `golden hour`, `dramatic side lighting`, `soft diffused light`, `moody low-key`, `bright high-key`.
25
+ 5. **Quote in-image text.** It takes quoted strings for posters and layouts, which is half of why it is the drafting seat.
26
+
27
+ **Examples**
28
+ - `Professional headshot of a female CEO, short blonde hair, confident expression, navy suit, neutral office background. Studio lighting, shallow depth of field, high-end corporate photography, shot on 85mm.`
29
+ - `A rain-soaked night market stall, cinematic, rule of thirds with the vendor camera-right, foreground steam blurred, moody low-key lighting with practical neon, shot on 35mm.`
30
+
31
+ **Hard constraint:** it is the DRAFTING seat, not the hero seat. Explore here, then re-run the winner on Nano Banana 2 or FLUX.2 Max for the locked shot.
32
+ <!-- @card:end -->
33
+
34
+ <!-- @banned:start -->
35
+ <!-- slates-only -->
36
+ <!-- MACHINE-READ. Every `backticked` token between the @banned markers is
37
+ extracted by src/prompts/banned-tokens.ts and returned on this model's cost
38
+ estimate, and every submitted prompt is matched against it. Keep entries
39
+ backticked and prose outside the backticks. -->
40
+ <!-- /slates-only -->
41
+ **Never use:**
42
+ - `masterpiece`, `best quality`, `highly detailed`, `8k`, `award-winning` — quality incantations, not description
43
+ - a prompt past about 100 words: this model gets confused by very long prompts, and focused beats exhaustive
44
+ <!-- @banned:end -->
45
+
8
46
  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
47
 
10
48
  **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.