@slatesvideo/shared 0.7.2 → 0.7.3

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 (84) hide show
  1. package/dist/clients/cloud.d.ts +4 -0
  2. package/dist/clients/cloud.js +11 -3
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.js +1 -0
  5. package/dist/manual/content.d.ts +1 -1
  6. package/dist/manual/content.js +1 -1
  7. package/dist/operations/index.d.ts +12 -13
  8. package/dist/operations/index.js +158 -133
  9. package/dist/operations/surface.d.ts +6 -2
  10. package/dist/operations/surface.js +29 -5
  11. package/dist/prompts/agent-doctrine.d.ts +4 -4
  12. package/dist/prompts/agent-doctrine.js +17 -28
  13. package/dist/prompts/guide-discovery.d.ts +23 -0
  14. package/dist/prompts/guide-discovery.js +39 -0
  15. package/dist/prompts/guide-retrieval.js +1 -1
  16. package/dist/prompts/model-capabilities.d.ts +8 -9
  17. package/dist/prompts/model-capabilities.js +11 -51
  18. package/dist/prompts/model-facts.d.ts +2 -2
  19. package/dist/prompts/model-facts.js +15 -26
  20. package/dist/prompts/partials.generated.js +6 -3
  21. package/dist/prompts/prompting-tips.d.ts +1 -1
  22. package/dist/prompts/prompting-tips.js +21 -63
  23. package/dist/prompts/search-terms.d.ts +3 -0
  24. package/dist/prompts/search-terms.js +24 -0
  25. package/dist/skills/content.js +36 -37
  26. package/dist/skills/metadata.d.ts +7 -0
  27. package/dist/skills/metadata.js +29 -0
  28. package/exports/slates-chatgpt-images/generated/SKILL.md +7 -1
  29. package/exports/slates-chatgpt-images/generated/slates-chatgpt-images.skill +0 -0
  30. package/exports/slates-prompt-builder/generated/SKILL.md +28 -16
  31. package/exports/slates-prompt-builder/generated/reference-character.md +12 -13
  32. package/exports/slates-prompt-builder/generated/reference-content-policy.md +2 -2
  33. package/exports/slates-prompt-builder/generated/reference-gpt-image-2-5.md +191 -0
  34. package/exports/slates-prompt-builder/generated/reference-kling.md +32 -11
  35. package/exports/slates-prompt-builder/generated/reference-nano-banana.md +24 -6
  36. package/exports/slates-prompt-builder/generated/reference-omni-flash.md +65 -0
  37. package/exports/slates-prompt-builder/generated/reference-seedance-2-5.md +362 -0
  38. package/exports/slates-prompt-builder/generated/reference-seedance.md +34 -4
  39. package/exports/slates-prompt-builder/generated/slates-prompt-builder-manifest.json +77 -23
  40. package/exports/slates-prompt-builder/generated/slates-prompt-builder.skill +0 -0
  41. package/package.json +2 -1
  42. package/skills/_partials/blender-action-curves.md +24 -0
  43. package/skills/_partials/iteration-diagnosis.md +5 -0
  44. package/skills/_partials/model-routing.md +35 -0
  45. package/skills/_partials/seedance-25-timestamps.md +2 -2
  46. package/skills/_partials/still-gate.md +2 -2
  47. package/skills/_partials/thresholds.md +1 -1
  48. package/skills/slates-blocking-to-prompt.md +15 -13
  49. package/skills/slates-camera-language.md +45 -7
  50. package/skills/slates-character-identity.md +8 -6
  51. package/skills/slates-chatgpt-images.md +7 -1
  52. package/skills/slates-cinematic-look.md +1 -1
  53. package/skills/slates-content-policy.md +4 -6
  54. package/skills/slates-cost-discipline.md +18 -12
  55. package/skills/slates-dialogue-blocking.md +6 -6
  56. package/skills/slates-direct-response-ad.md +1 -1
  57. package/skills/slates-edit-and-iterate.md +12 -4
  58. package/skills/slates-model-selection.md +82 -90
  59. package/skills/slates-one-prompt-film.md +1 -1
  60. package/skills/slates-previs-blocking.md +44 -13
  61. package/skills/slates-project-organization.md +2 -2
  62. package/skills/slates-prompting-elevenlabs.md +4 -4
  63. package/skills/slates-prompting-flux-2-max.md +2 -3
  64. package/skills/slates-prompting-gpt-image-2-5.md +2 -2
  65. package/skills/slates-prompting-inworld-tts.md +174 -174
  66. package/skills/slates-prompting-kling-v3.md +11 -9
  67. package/skills/slates-prompting-lip-sync.md +15 -15
  68. package/skills/slates-prompting-ltx-2-5.md +5 -6
  69. package/skills/slates-prompting-minimax-h3.md +11 -11
  70. package/skills/slates-prompting-motion-transfer.md +8 -8
  71. package/skills/slates-prompting-nano-banana-2.md +8 -4
  72. package/skills/slates-prompting-omni-flash.md +9 -9
  73. package/skills/slates-prompting-seed-audio.md +24 -4
  74. package/skills/slates-prompting-seedance-2-5.md +40 -30
  75. package/skills/slates-prompting-seedance.md +4 -4
  76. package/skills/slates-prompting-seedream-5-lite.md +6 -6
  77. package/skills/slates-restyle-from-blocking.md +2 -2
  78. package/skills/slates-script-craft.md +1 -1
  79. package/skills/slates-shot-variety.md +1 -1
  80. package/skills/slates-storyboard-from-script.md +1 -1
  81. package/skills/slates-style-prompting.md +56 -54
  82. package/skills/slates-ugc-influencer-ad.md +1 -1
  83. package/skills/slates-vision-feedback-loop.md +118 -110
  84. package/skills/slates-prompting-veo-3.md +0 -224
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: slates-prompting-seedance-2-5
3
- description: How to prompt Seedance 2.5 and Seedance 2.5 Edit. Read before calling slates_generate_video with model seedance-2.5, or slates_edit_video with model seedance-2.5-edit. 2.5 is the DEFAULT video model (Eric, 2026-09-13) — against 2.0 it buys 30-second takes, 30 image references, audio-only references and INTEGER-SECOND TIMESTAMPS, and it gives up native 4K and costs more than 2.0 at every resolution they share. Timestamps are the one grammar difference that matters: 2.0 ignores them and answers only to shot numbers, 2.5 acts on them. Otherwise it shares 2.0's grammar (read slates-prompting-seedance for subject binding, camera and constraint vocabulary); this file covers what is different, plus the two hazards unique to 2.5 — the prompt-intent task classifier and the cost trap that comes with 30-second takes.
3
+ description: "Prompt Seedance 2.5 generation (seedance-2.5) or edits (seedance-2.5-edit). Covers whole-second timing, shared Seedance craft, reference inputs, task-classifier hazards and long-take spend."
4
4
  ---
5
5
 
6
6
  # Seedance 2.5 — prompting
@@ -18,15 +18,15 @@ description: How to prompt Seedance 2.5 and Seedance 2.5 Edit. Read before calli
18
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
19
 
20
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.
21
+ 1. **Timestamps work here**: integer seconds, and the model acts on them: `[0s-4s] she reads the letter. [4s-9s] 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 `[0s-6s]`, `[6s-12s]`, `[12s-18s]`; do not hope for them.
23
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
24
  4. **Audio-only references are accepted** without an image or video alongside — the only Seedance seat that takes one.
25
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
26
 
27
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.`
28
+ - `[0s-6s] Wide shot, <Subject_1>@<Image_1> crosses an empty car park toward a idling van, slow track right. [6s-12s] Medium, she stops as the driver's window comes down. [12s-18s] Close-up, she looks off past the lens and does not answer. Rich details, natural colors. Keep it subtitle-free.`
29
+ - `[0s-10s] A single continuous handheld follow behind a courier climbing a fire escape, rain. [10s-20s] She reaches the landing, turns, and the city opens behind her. Cinematic texture, soft lighting.`
30
30
 
31
31
  **Hard constraint:** it is the default AND the dearer seat, and it has NO 4K — 480p/720p/1080p only, dearer than 2.0 at every resolution they share. Long takes multiply cost linearly: quote a 30-second take before you fire it.
32
32
  <!-- @card:end -->
@@ -38,7 +38,7 @@ description: How to prompt Seedance 2.5 and Seedance 2.5 Edit. Read before calli
38
38
  estimate, and every submitted prompt is matched against it. Keep entries
39
39
  backticked and prose outside the backticks. -->
40
40
  <!-- /slates-only -->
41
- **Never use** (2.5 reclassifies the task and fails a fresh generation on these):
41
+ **Never use** (with a reference video, 2.5 can reclassify the task and fail a fresh generation on these):
42
42
  - `edit`, `extend`, `continue the video`, `same video but` — they make the provider read a fresh generation as an edit
43
43
  - `f/1.4`, `Portra 400` and any other aperture or film-stock token, or a stacked list of gear — image-model vocabulary. The 2.5 guide's own example names one camera body and one 35 mm lens in a single style line, so a lone lens there is not on this list
44
44
  <!-- @banned:end -->
@@ -64,7 +64,7 @@ So 2.5 does not replace 2.0; it sits beside it, and you pay for what it buys:
64
64
  | Resolution | 480p / 720p / 1080p / **native 4K** | 480p / 720p / 1080p — **no 4K** |
65
65
  | Price at 720p (faceless) | **$0.15/s** | $0.231/s |
66
66
  | Length | 4–15s | **4–30s in one take** |
67
- | Reference budget | 15 (9 image + 3 video + 3 audio) | **50 (30 image + 10 video + 10 audio)** |
67
+ | Reference budget | 12 files total (9 image / 3 video / 3 audio caps) | **50 (30 image + 10 video + 10 audio)** |
68
68
  | Combined reference video/audio | ≤15s | **≤30s** |
69
69
  | Audio-only reference | ✗ (needs an image or video alongside) | **✓** |
70
70
  | **Timestamps in the prompt** | **✗ — ignored; shot numbers only** | **✓ — integer seconds, acted on** |
@@ -94,19 +94,19 @@ The trigger words are ordinary English:
94
94
  | **video edit** | `edit video` · `add` · `insert` · `remove` · `delete` · `modify` · `replace` · `change to` |
95
95
  | **video extend** | `extend forward` · `extend backward` · `continue` · `continue from` · `extend the story` |
96
96
 
97
- So a perfectly legitimate reference-to-video prompt — *"a wide shot of the workshop, **remove** the
97
+ So a perfectly legitimate prompt with a reference video, *"a wide shot of the workshop, **remove** the
98
98
  tripod from frame"* — gets classified as an edit and fails on constraints it never set.
99
99
 
100
100
  **What to do:**
101
101
 
102
- 1. **If you mean to edit an existing clip, say so with the MODEL, not the sentence.** Call
103
- `slates_edit_video` with `model: 'seedance-2.5-edit'`. That routes to a dedicated
104
- task-typed endpoint and the classifier never has to guess.
102
+ 1. **If you mean to edit an existing clip, choose its dedicated video-edit endpoint.** The
103
+ task-typed endpoint removes the classifier's ambiguity. <!-- slates-only -->In Slates, call
104
+ `slates_edit_video` with `model: 'seedance-2.5-edit'`.<!-- /slates-only -->
105
105
  2. **If you mean a fresh shot, describe the finished frame rather than an instruction to change
106
106
  one.** Not *"remove the tripod"* → *"the workshop bench, clear and uncluttered"*. Not
107
107
  *"add rain"* → *"heavy rain falling through the streetlight"*. This is better prompting anyway:
108
108
  the model renders what you describe, it does not take edits to an imagined draft.
109
- 3. The trigger only fires when **references are attached**. A plain text-to-video prompt is safe
109
+ 3. The trigger needs **a reference video plus edit or extend intent**. Image references alone do not trigger it. A plain text-to-video prompt is safe
110
110
  however it is worded.
111
111
 
112
112
  **Slates will warn you, and it will never rewrite your prompt.** When a 2.5 reference generation's
@@ -142,8 +142,10 @@ real-face route has spent 71% of their welcome grant on one clip; **on the real-
142
142
 
143
143
  **Discipline:**
144
144
 
145
+ <!-- slates-only -->
145
146
  - **Always quote with `slates_estimate_generation_cost` before a take over ~10 seconds,** and say
146
147
  the number out loud before generating.
148
+ <!-- /slates-only -->
147
149
  - **Find the shot at short LENGTH, not at low resolution.** Length is what moves the price, so cut
148
150
  seconds while you are still exploring — 4–8s — and stay at the resolution you actually want.
149
151
  **A 480p pass does not de-risk a 720p or 1080p render.** Generation is stochastic: the higher-
@@ -153,7 +155,7 @@ real-face route has spent 71% of their welcome grant on one clip; **on the real-
153
155
  - **Length is a creative decision, not a default.** 30 seconds is available; it is rarely the right
154
156
  answer for a single shot. Multi-shot storyboards inside one 30s generation are what the length is
155
157
  actually for.
156
- - Read `slates-cost-discipline` — all of it applies, more sharply here.
158
+ <!-- slates-only -->- Read `slates-cost-discipline` — all of it applies, more sharply here.<!-- /slates-only -->
157
159
 
158
160
  ---
159
161
 
@@ -192,8 +194,8 @@ pacing you are happy to leave to the model, timestamps when a beat has to land a
192
194
  from 4-6 seconds in Video 1, and leave the rest of the content unchanged."* Without a range, a
193
195
  whole-clip instruction is applied to the whole clip.
194
196
 
195
- Do **not** carry this back to 2.0, and do not carry Veo's `[00:00-00:02]` bracket syntax into
196
- either — 2.0 ignores time entirely, and the cross-model syntax swap is its own known failure.
197
+ Do **not** carry this back to 2.0, and do not write `[00:00-00:02]` minute-second brackets (another
198
+ vendor's syntax) into either — 2.0 ignores time entirely, and the cross-model syntax swap is its own known failure.
197
199
  <!-- @end:seedance-25-timestamps -->
198
200
 
199
201
  ---
@@ -235,7 +237,8 @@ billing dimension** on any Seedance route: audio is included.
235
237
  ### Video references
236
238
 
237
239
  Up to 10 clips, ≤30s combined (2.0: 3 clips, ≤15s). A reference VIDEO switches the cost key to
238
- `seedance-2.5*-vref-{res}-{T}s`, where **T = Σ input seconds + output seconds** — the sum is across
240
+ `seedance-2.5*-vref-{res}-{T}s`, where **T = Σ input seconds + output seconds** on faceless and real-face routes;
241
+ on the AI-face route, **T = max(Σ input seconds, output seconds) + output seconds** on both 2.0 and 2.5. The sum is across
239
242
  **every** clip attached, not just the longest. Three 6-second references on a 12-second output bills
240
243
  30 seconds, not 12 and not 18. Quote before confirming.
241
244
 
@@ -292,17 +295,22 @@ the citation, not a fallback — *"use her face and wardrobe from image 1, not i
292
295
  background"* is a stronger instruction than naming the positive alone, because an unscoped reference
293
296
  brings its whole frame with it.
294
297
 
295
- 🚨 **The vendor writes `@Image 1`; Slates writes `image 1`, and that difference is deliberate.**
296
- BytePlus's API tutorial says *"Use `@Image 1`, `@Video 1`, and `@Audio 1`"*, while its own 2.5 prompt
297
- guide states the bare form (`Image 1 / Video 1 / Audio 1`) in the one normative sentence it has.
298
- **Two first-party docs, two forms** — the disagreement is recorded, not resolved, in
299
- `second-brain/business/projects/slates/research/model-prompting-research.md`. What settles it FOR US
300
- is neither: **`@` is a reference-token sigil in the Slates prompt composer, and an unresolved one is
301
- silently deleted from the prompt before it is sent.** Typing `@Image 1` here does not produce
302
- `@Image 1`, it produces nothing. The bare form is confirmed working on both models. Never hand-type
303
- the sigil.
298
+ **BytePlus documents disagree on reference sigils.** Its API tutorial says *"Use `@Image 1`,
299
+ `@Video 1`, and `@Audio 1`"*, while its 2.5 prompt guide uses the bare form
300
+ (`Image 1 / Video 1 / Audio 1`) in its normative sentence. Both are first-party sources; the
301
+ bare form is confirmed working on both Seedance models. Use the syntax accepted by the endpoint
302
+ you are calling, and preserve each asset's role and scope.
304
303
 
305
- ## Seedance 2.5 Edit (`slates_edit_video`, `model: 'seedance-2.5-edit'`)
304
+ <!-- slates-only -->
305
+ The disagreement is recorded in
306
+ `second-brain/business/projects/slates/research/model-prompting-research.md`. Slates composes
307
+ resolved reference tokens for the chosen model and now preserves unresolved sigils verbatim.
308
+ The earlier composer silently deleted unresolved `@Image 1` tokens; that receipt explained the
309
+ old bare-form workaround, and the fix removes its blanket prohibition. Prefer actual bound
310
+ references when available so the composer supplies the canonical citation.
311
+ <!-- /slates-only -->
312
+
313
+ ## Seedance 2.5 Edit (<!-- slates-only -->`slates_edit_video`, <!-- /slates-only -->`model: 'seedance-2.5-edit'`)
306
314
 
307
315
  Its own picker row and its own op call, deliberately: the task type is **the model you chose**,
308
316
  never something inferred from your sentence.
@@ -323,14 +331,14 @@ Kling O3 Edit is the one that takes element and style reference images.
323
331
  will need more attempts.
324
332
  - **The aspect ratio follows the source clip too.** No ratio control; the frame is the clip's frame.
325
333
  - **480p, 720p or 1080p output**, native audio — and an edit bills the video-reference tier ×2,
326
- so 1080p on this row is the most expensive second in the app. Quote it.
334
+ so quote the 1080p edit before confirming.
327
335
  - **Prompt and source clip only** on this op. The MODEL takes reference images on an edit
328
336
  (ByteDance recommends 1–5 — *"replace the man in dark clothing in @Video 1 with @Image 2"*);
329
337
  **Slates has not wired that path**, so today an edit that must lock an identity from a photo
330
338
  goes to Kling O3 Edit. Constraint of our build, not of the model — worth revisiting.
331
- - **An edit bills roughly DOUBLE a plain 2.5 generation of the same length**, because every provider
332
- charges an edit on input + output seconds. Read the confirm gate's number; do not reason from the
333
- generation rate.
339
+ - **An edit costs about 1.2x a plain 2.5 generation of the same length**: every Seedance provider
340
+ charges an edit on input + output seconds, at the reduced video-reference rate. Read the confirm
341
+ gate's number; do not reason from the generation rate.
334
342
  - **Set `seedanceFace: true` when a character's face is visible in the clip.** The faceless provider
335
343
  blocks faces outright — this is not a price optimisation, it is whether the job runs at all.
336
344
  - **There is no consented-real-face route for editing.** Real-person footage that the AI-face route
@@ -362,12 +370,14 @@ not a lip-sync job. Bill it like any other edit — on the source clip's length.
362
370
 
363
371
  ## Faces, and what does NOT change
364
372
 
373
+ <!-- slates-only -->
365
374
  The three-tier face routing is identical to 2.0 — faceless → default route, an AI character's face →
366
375
  `seedanceFace: true` (the relaxed provider, a real cost premium), a real person's photo → the
367
376
  consent-gated real-person route after a `[REAL_FACE_DETECTED]` rejection, with `realFaceConsent: true`
368
377
  set **only** after the user explicitly confirms they hold the rights to the likeness. The full rules,
369
378
  including why the real-vs-AI call is the provider's and not yours, are in
370
379
  `slates-prompting-seedance`.
380
+ <!-- /slates-only -->
371
381
 
372
382
  Also unchanged, and worth restating because 2.5's length makes each one more expensive to get wrong:
373
383
 
@@ -1,6 +1,6 @@
1
1
  ---
2
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. Seedance 2.0 structures multi-beat prompts as a "Shot 1 / Shot 2 / Shot 3" storyboard against an 8-slot advanced formula — never per-second time stamps, which 2.0 does not respond to (Seedance 2.5 does; see slates-prompting-seedance-2-5). Its syntax differs from Kling, Veo and the image models; don't cross-pollinate (in particular, no lens / aperture / film-stock vocabulary).
3
+ description: "Prompt Seedance 2.0 (seedance-2), and retrieve the shared Seedance craft used by 2.5. Covers subject binding, shot-number storyboards, camera moves, physical action and inline constraints."
4
4
  ---
5
5
 
6
6
  # Seedance 2.0 — prompting
@@ -250,13 +250,13 @@ using the voice timbre from audio 1. Preserve his identity, appearance and outfi
250
250
 
251
251
  ### Motion transfer & lip-sync recipes (reference video / audio)
252
252
 
253
- These aren't separate Seedance features — they're prompting strategies over reference media.<!-- slates-only --> The Slates tools (`slates_generate_motion_transfer` / `slates_generate_lip_sync` with the seedance engine) compose them for you. When driving them by hand through `slates_generate_video`:<!-- /slates-only -->
253
+ These aren't separate Seedance features; they're prompting strategies over reference media.<!-- slates-only --> Run `slates_generate_video` with the clip as a video reference and write the motion or dialogue into the prompt:<!-- /slates-only -->
254
254
 
255
255
  - **Motion transfer:** subject image as a reference + the driving clip<!-- slates-only --> via `videoReferenceAssetId`<!-- /slates-only --> (2–15s) + `The character from image 1 performs the exact motion, choreography, and camera movement from video 1. Preserve the character's identity, appearance, and outfit.`
256
256
  - **Lip-sync / dialogue:** write the line in the prompt — `The person in video 1 says: "…"` — with audio generation on (always on in Slates). A **video** source's own voice is cloned natively; an **audio** reference (≤15s) drives speech from an existing recording: `…speaks the dialogue from audio 1 with accurate lip sync.`
257
257
  - **Voice + face from one clip (the talking-head recipe):** ONE unedited 2–15s clip of the person speaking (clear voice, no music, no cuts) as the video reference + prompt with the new script → their likeness AND voice deliver the new line.
258
258
  <!-- slates-only -->
259
- - **Billing:** a reference VIDEO switches the cost key to `seedance-2*-vref-{res}-{T}s` where T = clip seconds + output seconds — quote before confirming. Audio references are free (audio is included on every route).
259
+ - **Billing:** a reference VIDEO switches the cost key to `seedance-2*-vref-{res}-{T}s` where T = combined clip seconds + output seconds on faceless and real-face routes. The AI-face route bills max(combined input, output) + output on both 2.0 and 2.5; quote before confirming. Audio references are free (audio is included on every route).
260
260
  <!-- /slates-only -->
261
261
 
262
262
  <!-- slates-only -->
@@ -266,7 +266,7 @@ Seedance routes through **three tiers** depending on the face in the reference,
266
266
 
267
267
  - **Faceless / object / environment refs → default route (cheapest).** Leave `seedanceFace` off.
268
268
  - **An AI-character's FACE in a reference → `seedanceFace: true`.** The default route's baseline moderation rejects or degrades faces, so this reroutes to the face-capable provider. It costs **~45% more** — the cost key becomes `seedance-2-face-{res}-{N}s`, so the pre-flight quote already reflects it. Announce the face-route price, not the faceless one.
269
- - **A REAL person's photo (the user themselves, an actor) → the consent-gated real-person route.** If a `seedanceFace` gen fails with `[REAL_FACE_DETECTED]`, the provider classified the reference as a real person: confirm with the user that (a) they hold the rights/consent to the likeness and (b) they accept the higher price (cost key `seedance-2-realface-{res}-{N}s`, roughly 2× the AI-face rate — quote via `slates_estimate_generation_cost`), then retry with `seedanceRealFace: true` + `realFaceConsent: true`. Never set `realFaceConsent` without the user's explicit confirmation.
269
+ - **A REAL person's photo (the user themselves, an actor) → the consent-gated real-person route.** If a `seedanceFace` gen fails with `[REAL_FACE_DETECTED]`, the provider classified the reference as a real person: confirm with the user that (a) they hold the rights/consent to the likeness and (b) they accept the higher price (cost key `seedance-2-realface-{res}-{N}s`, about 1.4× the AI-face rate, about 2× faceless; quote via `slates_estimate_generation_cost`), then retry with `seedanceRealFace: true` + `realFaceConsent: true`. Never set `realFaceConsent` without the user's explicit confirmation.
270
270
 
271
271
  Rules:
272
272
  - **The real-vs-AI call is the PROVIDER'S, not yours.** ByteDance's classifier is probabilistic — some real photos pass the standard face route (billed at the cheap rate; fine), others get rejected with `[REAL_FACE_DETECTED]` (auto-refunded). Don't preemptively route to the real-face tier just because a photo looks real; try `seedanceFace: true` first and escalate only on the marked rejection. Public figures / celebrities fail on every route.
@@ -1,6 +1,6 @@
1
1
  ---
2
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.
3
+ description: "Prompt or edit images with Seedream 5 Lite (seedream-5-lite). Use with slates_generate_image or slates_edit_image on this model; covers attention order, focused descriptions, layout and quoted text."
4
4
  ---
5
5
 
6
6
  # Seedream 5 Lite — prompting
@@ -15,7 +15,7 @@ description: How to prompt Seedream 5 Lite (ByteDance image model — the cheap
15
15
  Keep it under 2,400 characters (the build fails above that) and keep the
16
16
  rationale, the receipts and the worked examples in the body below. -->
17
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`.
18
+ **Card — Seedream 5 Lite.** The cheap volume seat: flat-priced at every resolution, which makes it useful for storyboard passes, variant grids and look-dev when volume is the requirement. Structure, most important first: `Subject + Style + Composition + Lighting/Atmosphere + Technical`.
19
19
 
20
20
  **The five levers**
21
21
  1. **Lead with the subject.** Earlier words weigh more; close with the camera and technical detail.
@@ -35,7 +35,7 @@ Bind references inline. A scene reference owns the grade; for a look-only refere
35
35
  <!-- slates-only -->Use `slates-cinematic-look` with a technique ID or section query for more.<!-- /slates-only -->
36
36
  <!-- @end:cinematic-card -->
37
37
 
38
- **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.
38
+ **Selection:** it is a volume option. Re-render a keeper on another image model only when an observed shortfall or the delivery brief justifies it; use the current catalogue for that choice.
39
39
  <!-- @card:end -->
40
40
 
41
41
  <!-- @banned:start -->
@@ -54,7 +54,7 @@ Bind references inline. A scene reference owns the grade; for a look-only refere
54
54
  - `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.`
55
55
  - `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.`
56
56
 
57
- 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.
57
+ 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 flat-priced seat in Slates, which makes it a useful choice 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.
58
58
 
59
59
  **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.
60
60
 
@@ -101,7 +101,7 @@ Via `slates_edit_image` with `editModel: seedream-5-lite`. Seedream edits respon
101
101
  Change the bag to brown leather. Keep the person's face, pose, and the room unchanged.
102
102
  ```
103
103
 
104
- Note: Seedream edits in Slates ignore extra `referenceAssetIds` — that path is Nano Banana 2 only.
104
+ Seedream edits accept extra `referenceAssetIds` within the current edit-reference cap, with the source occupying the first image slot. Read the tool schema for the cap. An older desktop without that capability refuses the request: update the desktop rather than claiming the extra references were sent.
105
105
 
106
106
  ## Common failure modes + fixes
107
107
 
@@ -115,7 +115,7 @@ Note: Seedream edits in Slates ignore extra `referenceAssetIds` — that path is
115
115
 
116
116
  ## Iterate cheap, lock expensive
117
117
 
118
- 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.
118
+ Flat pricing supports iteration: draft, evaluate inline, diagnose one specific delta, then generate only within the authorized set. Repeated failures trigger diagnosis rather than unchanged re-rolls; only re-render the winning composition on another model when the delivery requires it. Cost rules live in `slates-cost-discipline` — the batch-authorization pattern applies when generating variant grids.
119
119
 
120
120
  ## Sources
121
121
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: slates-restyle-from-blocking
3
- description: Render one blocking pass as several different visual worlds — live action, 2.5D painted, 2D ink, toybox — matching cut for cut. Use when a client needs style options, when someone wants to see the same edit in another look, or when an approved edit needs a new treatment without re-blocking.
3
+ description: "Generate different visual treatments from one blocking pass while preserving its camera, cuts and choreography. Use when comparing looks or restyling an approved structure without rebuilding it."
4
4
  ---
5
5
 
6
6
  # Restyle — one edit, many worlds
@@ -27,7 +27,7 @@ You need a blocking clip whose structure you are happy with, and a finished prom
27
27
  Copy these across every style **verbatim**. Changing them is what desynchronises the outputs:
28
28
 
29
29
  - The blocking reference's own contract — that it is the master for all movement, the placement-only clause, the tie-break clause, the disambiguation clause
30
- - The shot count and every timestamp
30
+ - The shot count and measured cut boundaries; translate prompt timestamps once to the chosen model's syntax and keep that translation across treatments
31
31
  - Every shot's camera position, angle, framing and cut point
32
32
  - Screen direction and seating
33
33
  - The `HOLD FOR THE FULL TIMELINE` block
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: slates-script-craft
3
- description: Write or revise script passages, develop distinct openings and bridges, and compare section variations while preserving the user's format, voice and fixed material. This is writing craft, not a request to generate media.
3
+ description: "Write or revise script passages, openings, bridges and saved variations while preserving voice, format and fixed material. Use for writing within a production brief or a writing-only request."
4
4
  ---
5
5
 
6
6
  # Script craft and variations
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: slates-shot-variety
3
- description: Diagnose unintended visual sameness across a shot sequence while preserving deliberate repetition, continuing performance and the user's chosen format.
3
+ description: "Shape visual rhythm across a shot sequence or diagnose unintended sameness. Use while planning or reviewing cuts; preserve deliberate repetition, continuing performance and the chosen format."
4
4
  ---
5
5
 
6
6
  # Visual rhythm across a sequence
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: slates-storyboard-from-script
3
- description: Put supplied script or treatment into an editable Slates document and bind requested passages to production shots. Preserve the words and structure; generate media only within the user's requested scope.
3
+ description: "Save a supplied script or treatment as an editable Slates document and bind production passages to shots. Use when preparing a storyboard while preserving the words, structure and requested scope."
4
4
  ---
5
5
 
6
6
  # Script into editable production
@@ -1,54 +1,56 @@
1
- ---
2
- name: slates-style-prompting
3
- description: Use when the user asks for a visual style ("make it anime", "painterly look", "like a Pixar film"), or when a style has to hold across several shots. Covers how photoreal, anime, painterly and 3d-render are prompted DIFFERENTLY per model, and the style-routing recipe (reference-first, styled start-frame → i2v).
4
- ---
5
-
6
- # Per-style prompting (photoreal · anime · painterly · 3d-render)
7
-
8
- The style library (`slates_create_style` / the app's style ids) defines what each style IS. This guide is how to PROMPT each style per model. Derived from `research/style-prompting-research.md` (second-brain) — claims marked *(hypothesis)* are untested; don't present them to users as fact.
9
-
10
- ## The four ground rules (all styles)
11
-
12
- 1. **Assign references where they contribute.** Describe the scene with inline bindings, such as "the woman from image 1, lit and graded like image 2." Preserve an existing scene reference when its look should stay. A look-only reference may need light and exposure described for the new scene; prose and references can work together.
13
- 2. **Use each model’s language, without imposing a fixed prompt template:**
14
- - **Nano Banana 2** — narrative prose; the style is the opening framing of the sentence ("A hand-drawn 2D anime cel illustration of…"), never a comma tag.
15
- - **Seedance 2.0** — the 8-part formula reserves "visual style" (slot 6) and "image quality" (slot 7). One clause each. Don't scatter style words through the action text.
16
- - **Kling V3** — prose scene direction; style rides the lighting/style tail of Scene → Subject → Action → Camera → Lighting/Style. Tag soup underperforms badly.
17
- 3. **Keep the intended look consistent across shots.** Reuse relevant references and stable descriptions, adapting the wording to each scene.
18
- 4. **A styled start frame is one video control.** Generate it with the image seat suited to the brief, then describe the motion. Preserve its look unless the user wants the light or grade to change.
19
-
20
- Never stack style buzzwords ("ARRI ALEXA, 35mm, film grain, depth-of-field mastery…"). One or two register tokens maximum — piles of specs dull the image.
21
-
22
- ## Photoreal
23
-
24
- - **NB2:** never the literal word "photorealistic". Describe *a real photograph*: natural skin texture and imperfection, motivated lighting, one lens/film register ("shot on a 50mm, soft window light"). Photographic composition terms: wide-angle / macro / low-angle.
25
- - **Seedance:** put "sharp focus, natural color, high detail" in the image-quality slot and always include a lighting clause. Keep motion slow and coherent — fast/burst action is the #1 quality killer and reads most fake in photoreal.
26
- - **Kling:** the photoreal-PEOPLE lane — convincing acting, dialogue, lip-sync. It breaks on close-up hands, fine fluids, and crowds beyond ~5 faces: route those beats to Seedance or reframe.
27
- - **Faces on Seedance:** photoreal humans trigger the face-tier routing (AI face vs consented real face — see slates-prompting-seedance §Faces). Set the face flags honestly; never skip them to save credits.
28
-
29
- ## Anime
30
-
31
- - **NB2:** open with the medium — "A hand-drawn 2D anime cel illustration of…" — then normal narrative Subject/Setting/Action. Clean line art, flat-shaded color, expressive eyes. NB2 has no negative prompt: phrase exclusions positively ("flat cel shading with uniform focus", not "no depth of field").
32
- - **Seedance:** visual-style slot = "2D anime style, clean line art, flat cel shading". The slow/coherent-motion preference still applies — burst sakuga actions are the same instability trap as in photoreal.
33
- - **Kling:** weakest anime lane (its strength is live-action-like acting); expect style drift on long prose-only shots. Prefer ground rule 4: NB2 anime start-frame → i2v with a motion-only prompt. *(hypothesis: refs hold Kling's anime better than prose — verify before promising.)*
34
- - Anime faces drift under multiple references faster than photoreal — the named-entity two-sheet doctrine applies unchanged.
35
-
36
- ## Painterly
37
-
38
- - **NB2:** medium + technique in the style framing: "digital concept-art painting, visible brushwork, painted edges". At most ONE school/era register ("classic gouache illustration") — a register, not an artist-name pile.
39
- - **Video:** the least-supported style lane. Use ground rule 4 (painterly NB2 frame → i2v, motion-only prompt) and expect some cleanup of painterliness over the clip *(hypothesis — set user expectations, don't promise a perfectly painterly clip)*.
40
- - Camera language still applies — painterly ≠ static; "slow push-in" works the same.
41
-
42
- ## 3D render
43
-
44
- - **NB2:** name the lineage register in the style framing: "stylized 3D render, soft global illumination, subsurface skin". Lighting vocabulary (GI, rim light) is unusually load-bearing for the 3D read.
45
- - **Seedance:** the physics/effects lane flatters 3D content — visual-style slot "stylized 3D animation", image-quality slot "clean render, high detail".
46
- - **Kling:** same start-frame preference as anime.
47
- - *(hypothesis)* An engine token ("Unreal Engine 5 render") may help NB2; if used, ONE token, style slot only — never on Seedance where spec-stuffing hurts.
48
-
49
- ## Routing recipe (what to actually do)
50
-
51
- 1. Style reference available → attach it, rely on inherit. Done.
52
- 2. No reference, image request → styled NB2 prose per the section above.
53
- 3. No reference, video request → NB2 styled start-frame first, then i2v with motion-only prompt. Direct styled text-to-video is the fallback when a start frame doesn't fit (e.g. dialogue-first Kling shots).
54
- 4. Multi-shot run → byte-identical style clause per shot + shared references.
1
+ ---
2
+ name: slates-style-prompting
3
+ description: "Translate a visual-style brief into model-specific image or video direction and maintain the look across shots. Covers photoreal, anime, painterly and 3D styles, references and optional start-frame control."
4
+ ---
5
+
6
+ # Per-style prompting (photoreal · anime · painterly · 3d-render)
7
+
8
+ The style library (`slates_create_style` / the app's style ids) defines what each style IS. This guide is how to PROMPT each style per model. Derived from `research/style-prompting-research.md` (second-brain) — claims marked *(hypothesis)* are untested; don't present them to users as fact.
9
+
10
+ ## The four ground rules (all styles)
11
+
12
+ 1. **Assign references where they contribute.** Describe the scene with inline bindings, such as "the woman from image 1, lit and graded like image 2." Preserve an existing scene reference when its look should stay. A look-only reference may need light and exposure described for the new scene; prose and references can work together.
13
+ 2. **Use each model’s language, without imposing a fixed prompt template:**
14
+ - **Nano Banana 2** — narrative prose; the style is the opening framing of the sentence ("A hand-drawn 2D anime cel illustration of…"), never a comma tag.
15
+ - **Seedance 2.0** — the 8-part formula reserves "visual style" (slot 6) and "image quality" (slot 7). One clause each. Don't scatter style words through the action text.
16
+ - **Kling V3** — prose scene direction; style rides the lighting/style tail of Scene → Subject → Action → Camera → Lighting/Style. Tag soup underperforms badly.
17
+ 3. **Keep the intended look consistent across shots.** Reuse relevant references and stable descriptions, adapting the wording to each scene.
18
+ 4. **A styled start frame is one video control.** Generate it with the image seat suited to the brief, then describe the motion. Preserve its look unless the user wants the light or grade to change.
19
+
20
+ Never stack style buzzwords ("ARRI ALEXA, 35mm, film grain, depth-of-field mastery…"). One or two register tokens maximum — piles of specs dull the image.
21
+
22
+ ## Photoreal
23
+
24
+ - **NB2:** never the literal word "photorealistic". Describe *a real photograph*: natural skin texture and imperfection, motivated lighting, one lens/film register ("shot on a 50mm, soft window light"). Photographic composition terms: wide-angle / macro / low-angle.
25
+ - **Seedance:** put "sharp focus, natural color, high detail" in the image-quality slot and always include a lighting clause. Keep motion slow and coherent — fast/burst action is the #1 quality killer and reads most fake in photoreal.
26
+ - **Kling:** the photoreal-PEOPLE lane — convincing acting, dialogue, lip-sync. It breaks on close-up hands, fine fluids, and crowds beyond ~5 faces: route those beats to Seedance or reframe.
27
+ - **Faces on Seedance:** photoreal humans trigger the face-tier routing (AI face vs consented real face — see slates-prompting-seedance §Faces). Set the face flags honestly; never skip them to save credits.
28
+
29
+ ## Anime
30
+
31
+ - **NB2:** open with the medium — "A hand-drawn 2D anime cel illustration of…" — then normal narrative Subject/Setting/Action. Clean line art, flat-shaded color, expressive eyes. NB2 has no negative prompt: phrase exclusions positively ("flat cel shading with uniform focus", not "no depth of field").
32
+ - **Seedance:** visual-style slot = "2D anime style, clean line art, flat cel shading". The slow/coherent-motion preference still applies — burst sakuga actions are the same instability trap as in photoreal.
33
+ - **Kling:** weakest anime lane (its strength is live-action-like acting); expect style drift on long prose-only shots. Prefer ground rule 4: NB2 anime start-frame → i2v with a motion-only prompt. *(hypothesis: refs hold Kling's anime better than prose — verify before promising.)*
34
+ - Anime faces drift under multiple references faster than photoreal; the named-entity one-sheet doctrine applies unchanged.
35
+
36
+ ## Painterly
37
+
38
+ - **NB2:** medium + technique in the style framing: "digital concept-art painting, visible brushwork, painted edges". At most ONE school/era register ("classic gouache illustration") — a register, not an artist-name pile.
39
+ - **Video:** the least-supported style lane. Use ground rule 4 (painterly NB2 frame → i2v, motion-only prompt) and expect some cleanup of painterliness over the clip *(hypothesis — set user expectations, don't promise a perfectly painterly clip)*.
40
+ - Camera language still applies — painterly ≠ static; "slow push-in" works the same.
41
+
42
+ ## 3D render
43
+
44
+ - **NB2:** name the lineage register in the style framing: "stylized 3D render, soft global illumination, subsurface skin". Lighting vocabulary (GI, rim light) is unusually load-bearing for the 3D read.
45
+ - **Seedance:** the physics/effects lane flatters 3D content — visual-style slot "stylized 3D animation", image-quality slot "clean render, high detail".
46
+ - **Kling:** same start-frame preference as anime.
47
+ - *(hypothesis)* An engine token ("Unreal Engine 5 render") may help NB2; if used, ONE token, style slot only — never on Seedance where spec-stuffing hurts.
48
+
49
+ ## Routing recipe (what to actually do)
50
+
51
+ 1. Style reference available → inspect it, bind its look role, and describe any light or exposure needed in the new scene.
52
+ 2. Image request → use the current image default unless the brief supplies a reason for another seat; load that model's craft. The NB2 examples above apply when NB2 is selected, not to every image model.
53
+ 3. Video request → choose a styled start frame when composition, exact text or an approved look must hold. Use the image seat suited to that job, then the chosen video model's motion and sound grammar. Direct styled text-to-video is also valid when it serves the brief; an image pass is not mandatory.
54
+ 4. Multi-shot run → retain stable style references and descriptors, adapting action, light and model-specific wording to each scene.
55
+
56
+ `slates-model-selection` and the current catalogue own routing. These style techniques supply craft after the production choice; no user needs to select a skill or workflow.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: slates-ugc-influencer-ad
3
- description: Direct a creator-style spoken performance when the brief calls for an ordinary camera-facing person or exchange. Use for performance and phone-camera craft, not as a universal rule for ads.
3
+ description: "Direct a creator-style spoken ad when the brief calls for a camera-facing person or exchange. Covers activity, performance, phone-camera handling, speech, interaction and sound."
4
4
  ---
5
5
 
6
6
  # Creator-style performance