@slatesvideo/shared 0.5.3 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -0
- package/dist/operations/index.d.ts +4 -8
- package/dist/operations/index.js +26 -38
- package/dist/prompts/character-sheet.d.ts +19 -18
- package/dist/prompts/character-sheet.js +84 -38
- package/dist/prompts/environment-sheet.d.ts +9 -1
- package/dist/prompts/environment-sheet.js +17 -3
- package/dist/prompts/model-facts.js +4 -1
- package/dist/prompts/partials.generated.d.ts +2 -0
- package/dist/prompts/partials.generated.js +14 -0
- package/dist/prompts/prompting-tips.js +50 -19
- package/dist/prompts/reference-composer.d.ts +1 -1
- package/dist/prompts/reference-composer.js +3 -4
- package/dist/prompts/reference-rules.d.ts +43 -14
- package/dist/prompts/reference-rules.js +51 -27
- package/dist/skills/content.js +14 -14
- package/exports/slates-prompt-builder/generated/SKILL.md +59 -0
- package/exports/slates-prompt-builder/generated/reference-character.md +78 -0
- package/exports/slates-prompt-builder/generated/reference-content-policy.md +75 -0
- package/exports/slates-prompt-builder/generated/reference-kling.md +212 -0
- package/exports/slates-prompt-builder/generated/reference-nano-banana.md +182 -0
- package/exports/slates-prompt-builder/generated/reference-seedance.md +353 -0
- package/exports/slates-prompt-builder/generated/slates-prompt-builder-manifest.json +79 -0
- package/exports/slates-prompt-builder/generated/slates-prompt-builder.skill +0 -0
- package/package.json +8 -3
- package/skills/_partials/decision-log.md +12 -0
- package/skills/_partials/reference-rules-core.md +12 -0
- package/skills/_partials/reference-tips-short.md +2 -0
- package/skills/_partials/references-read-literally.md +11 -0
- package/skills/_partials/still-gate.md +3 -0
- package/skills/slates-character-identity.md +100 -0
- package/skills/slates-cost-discipline.md +10 -0
- package/skills/slates-edit-and-iterate.md +17 -2
- package/skills/slates-model-selection.md +24 -1
- package/skills/slates-one-prompt-film.md +22 -3
- package/skills/slates-prompting-flux-2-max.md +36 -5
- package/skills/slates-prompting-gpt-image-2.md +1 -1
- package/skills/slates-prompting-kling-v3.md +40 -9
- package/skills/slates-prompting-nano-banana-2.md +44 -12
- package/skills/slates-prompting-omni-flash.md +1 -1
- package/skills/slates-prompting-seedance.md +295 -90
- package/skills/slates-prompting-veo-3.md +33 -4
- package/skills/slates-storyboard-from-script.md +19 -0
- package/skills/slates-vision-feedback-loop.md +49 -2
- package/skills/slates-character-turnaround.md +0 -55
|
@@ -27,18 +27,65 @@ The code is the FORMAL reference. The label is human texture. Use both: `IMG-A12
|
|
|
27
27
|
|
|
28
28
|
`slates_generate_video`, `slates_generate_motion_transfer`, and `slates_generate_lip_sync` now show you their reference assets **inline** on the confirm response. You don't need to fetch them yourself — but you DO need to look at what comes back, revise the prompt if the references suggest a different motion/framing, and only then re-call with `confirm=true`.
|
|
29
29
|
|
|
30
|
+
## 🔴 The still-gate — never animate a bad frame
|
|
31
|
+
|
|
32
|
+
<!-- @inject:still-gate -->
|
|
33
|
+
**A visible defect in the still is already a STOP.** Do not animate it. Fix the frame first, then move to motion — and go to motion only when the crop passes the still scan and you genuinely need movement to confirm an uncertain edge, reflection, or object.
|
|
34
|
+
|
|
35
|
+
This is a **cost** rule as much as a craft rule: a 1080p/10s premium video generation costs many multiples of an image re-roll, and video is where a defect stops being fixable. Anything wrong in the still gets worse in motion — soft geometry mushes, broken-but-plausible objects fall apart, oily textures start crawling. **Animating a known-bad frame is the single most expensive mistake in the pipeline.** Re-rolling the image is the cheap move; re-rolling the video is not.
|
|
36
|
+
<!-- @end:still-gate -->
|
|
37
|
+
|
|
30
38
|
## The pattern
|
|
31
39
|
|
|
32
40
|
1. **Generate.** Call `slates_generate_image` with a prompt. The result is in your context as an image content block.
|
|
33
|
-
2. **Evaluate
|
|
41
|
+
2. **Evaluate on TWO axes — they are different questions:**
|
|
42
|
+
- **Brief-conformance** — what did the user actually want? Are the elements right? Composition? Lighting? Subject identity?
|
|
43
|
+
- **Defects** — run the slop rubric below. *A frame can match the brief perfectly and still be slop that mushes the moment it moves.* Checking only the first axis is how a bad frame reaches an expensive video call.
|
|
34
44
|
3. **One of three outcomes:**
|
|
35
45
|
- **Right** → save it (bind to a frame, character slot, etc.) and move on.
|
|
36
|
-
- **Close, but adjustable** → refine
|
|
46
|
+
- **Close, but adjustable** → refine with a specific delta, regenerate **once**.
|
|
37
47
|
- **Wrong direction** → ask the user before regenerating. Don't burn credits on prompt-thrashing.
|
|
38
48
|
|
|
49
|
+
## The defect rubric — four slop tells
|
|
50
|
+
|
|
51
|
+
| Tell | What it looks like | Why it matters downstream |
|
|
52
|
+
|---|---|---|
|
|
53
|
+
| **Light with no transitions** | Flat-black pits instead of a shadow ramp; light that stops rather than falls off | Transfers onto every character or object added into that plate later |
|
|
54
|
+
| **Broken-but-plausible objects** | Crates, railings, hardware, mechanisms you can *almost* read but that don't resolve | Turn to mush in motion, and the model multiplies them |
|
|
55
|
+
| **Local logic breaks** | An effect present in only part of the frame — rain scratching one corner, wet ground under one figure | The video model's physical logic breaks along with it |
|
|
56
|
+
| **Oily textures** | Soapy, licked-smooth surfaces that have lost their material identity | Reflections crawl in motion; the plate can't hold continuity |
|
|
57
|
+
|
|
58
|
+
### Per-model accents — check the one you actually used
|
|
59
|
+
|
|
60
|
+
- **Nano Banana Pro** (`nano-banana-pro`) — ruler-straight symmetry, everything parallel and square, flat even light, pretty but staged/stock, textures reading as 3D render rather than photograph. **It hyperbolizes every edit**: ask for graffiti on one wall and the whole location gets tagged.
|
|
61
|
+
- **GPT Image 2** (`gpt-image-2`) — microcontrast to the ceiling, hard halos on every edge, no depth or bokeh, white balance pulled warm until the frame yellows, plastic licked-smooth materials. Worst tell: **one sickly texture pattern laid over the entire frame**.
|
|
62
|
+
|
|
63
|
+
> ⚠️ These are accents for **`nano-banana-pro`** and **`gpt-image-2`** specifically. `nano-banana-2` is a **different model** (Gemini 3.1 Flash Image vs NB Pro's Gemini 3 Pro Image) and we have **no evidence** about its accent. Do not inherit one — say nothing rather than warn about a failure mode you can't substantiate.
|
|
64
|
+
|
|
65
|
+
## Where the fault lives — triage before you change anything
|
|
66
|
+
|
|
67
|
+
We say "one specific delta per regeneration" but that only helps once you know *which* variable to move. Diagnose first:
|
|
68
|
+
|
|
69
|
+
| Visible pattern | Diagnosis | Fix |
|
|
70
|
+
|---|---|---|
|
|
71
|
+
| The defect exists in the source asset, or stays tied to the same feature when the direction changes | **Source asset** | Fix the sheet / plate, not the prompt |
|
|
72
|
+
| Source is clean, and the defect changes when only the suspect motion clause changes | **Motion direction** | Fix the prompt |
|
|
73
|
+
| Controls conflict, or the failure follows neither variable | **Inconclusive** | Narrow the test — change less, not more |
|
|
74
|
+
|
|
75
|
+
**Review routes; it is not pass/fail.** Geography melts → fix the location. Identity drifts → fix the character sheet. Assets are sound but the action is wrong → fix the video direction. Wrong idea entirely → reopen the brief with the user.
|
|
76
|
+
|
|
77
|
+
**Correct the earliest broken handoff.** Polishing a downstream symptom hides the source and guarantees it resurfaces in the next shot built from the same asset.
|
|
78
|
+
|
|
79
|
+
## Baseline hygiene — isolate the variable you're testing
|
|
80
|
+
|
|
81
|
+
When the **character** is the question, keep the location out of it: test on a plate that already holds its own geometry, depth, materials, and light. **A broken plate gives every character failure a second plausible cause**, and you will spend re-rolls deciding which one you're looking at. The same applies in reverse — test a plate empty before you populate it.
|
|
82
|
+
|
|
39
83
|
## Refinement rules
|
|
40
84
|
|
|
41
85
|
- **One specific delta per regeneration.** Don't change five things at once — you won't know what helped.
|
|
86
|
+
- **Rewrite the FULL prompt on every iteration — never a diff, never a fragment.** Change one decision, then re-emit the whole prompt so every slot still agrees with every other slot. This composes with the rule above rather than replacing it: *one delta* governs **what changes**, *full rewrite* governs **how you re-emit it**. A patched fragment leaves the old slots stale and silently contradicting the new one.
|
|
87
|
+
- On **Seedance**, a re-emit must keep the `Shot N` structure intact — see `slates-prompting-seedance`.
|
|
88
|
+
- **Exception — Omni Flash Edit.** Long prompts documentedly destroy its fidelity. There the rule inverts: one short instruction plus *"Keep everything else the same."*
|
|
42
89
|
- **Anchor with references.** If the result drifted from the user's intent, attach the *previous best* generation as a reference image alongside the original brief.
|
|
43
90
|
- **Use `slates_get_asset_image`** to pull a previously-generated image back into context if you need to compare against a fresh generation.
|
|
44
91
|
- **Use `slates_edit_image`** for surgical tweaks instead of full regeneration when ~90% of the image is right — `sourceAssetId` = the asset, `prompt` = the change only. Edits preserve composition and identity; full regen rolls the dice. Recipe: `slates-edit-and-iterate`.
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: slates-character-turnaround
|
|
3
|
-
description: Build a Slates character from a reference image — generate the turnaround sheet and expression sheet, bind both to the character's slots so the user sees the character card update live. Use when the user wants to "create a character", "build a character from this image", "generate a turnaround for X", or starts any storyboard-flow that needs consistent character references.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Character turnaround — Slates workflow
|
|
7
|
-
|
|
8
|
-
Slates stores characters with two image slots: turnaround (full-body multi-angle) and expression sheet (face close-ups). At scene time Slates attaches BOTH via `@character` mentions — the turnaround for body/proportion/outfit, the expression-sheet close-ups for high-res facial detail. Building them well = consistent character across every frame.
|
|
9
|
-
|
|
10
|
-
## Workflow
|
|
11
|
-
|
|
12
|
-
### 1. Get the reference
|
|
13
|
-
The user has either:
|
|
14
|
-
- Pasted/uploaded an image of the character (real person, drawing, AI render).
|
|
15
|
-
- Described the character in text only.
|
|
16
|
-
|
|
17
|
-
If image: upload it as a reference (`slates_upload_reference_image`).
|
|
18
|
-
If text only: skip step 2's reference and generate the turnaround from prompt-only (less consistent — warn the user).
|
|
19
|
-
|
|
20
|
-
### 2. Create the character record
|
|
21
|
-
`slates_create_character` with:
|
|
22
|
-
- `name` (ask if not given)
|
|
23
|
-
- `description` — 1-2 sentences, *visual* only ("tall, dark hair, scar over left eye"), not personality.
|
|
24
|
-
- `style` — leave as the source's own medium by default. Only name a transform if the user wants one (e.g. anime → realistic).
|
|
25
|
-
|
|
26
|
-
### 3. Generate the turnaround sheet — the identity anchor
|
|
27
|
-
- Use `slates_generate_image` with a prompt like:
|
|
28
|
-
> "Character model reference sheet with 4 full body views of the same character: front view, back view, left side profile, right side profile. Neutral pose, neutral expression, consistent appearance across all views. Preserve the artistic medium and visual style of the reference (photo / anime / illustration / 3D / painterly). Render on a plain neutral-grey background with flat, even, shadowless lighting so the sheet captures identity, not scene lighting. No text, no labels, no captions. {character description}"
|
|
29
|
-
- **Flat light + plain background is the whole point.** A studio-lit or scene-lit sheet bleeds its lighting into every later generation (the "green-screen-pasted-in-front-of-mountains" failure). Reference prep beats prompting here.
|
|
30
|
-
- To transform the medium (e.g. "make her a real person"), append a plain-language instruction; otherwise the source style is preserved.
|
|
31
|
-
- Pass the reference image as a reference. Resolution: **2k** (4k wastes credits at sheet scale — no identity gain).
|
|
32
|
-
- Estimate cost first.
|
|
33
|
-
- When the result returns inline: evaluate against the reference. Same character? Right angle count? If off, refine the prompt with the explicit angle list and regenerate once.
|
|
34
|
-
- When right: bind via `slates_set_character_turnaround_asset` (the user sees the card update).
|
|
35
|
-
|
|
36
|
-
### 4. Generate the expression sheet — the close-up face reference
|
|
37
|
-
- Prompt:
|
|
38
|
-
> "Character expression reference sheet with 3 head-and-shoulder portraits side by side: neutral on left, genuine smile showing teeth in center, serious frown on right. Same character, same flat even shadowless lighting and plain neutral-grey background as the turnaround. {character description}"
|
|
39
|
-
- Pass BOTH the original reference AND the just-generated turnaround as references for max consistency.
|
|
40
|
-
- Same model, **2k**.
|
|
41
|
-
- On success bind via `slates_set_character_expression_asset`.
|
|
42
|
-
|
|
43
|
-
### 5. Hand back
|
|
44
|
-
> "Character {name} ready. Turnaround + expressions bound. Use `@{name}` in any prompt — Slates attaches both sheets and names them as one person so the face stays consistent."
|
|
45
|
-
|
|
46
|
-
## Why both sheets (don't gate them)
|
|
47
|
-
At scene time Slates attaches the turnaround AND the expression sheet and cites BOTH inline under the same name — `{name} (images N and M)`. That shared NAME — not a withheld expression sheet, and not an injected "use for identity / render neutral" essay — is what tells the model they're ONE person and stops the multiple expressions from averaging the face to a midpoint. (Naming-as-one-entity is each model's own official lever: NB2 "assign a distinct name", Seedance "Reference Subject_N in Image_N".) The close-ups carry far more facial signal (eyes, teeth, skin) than the postage-stamp faces in a full-body turnaround, so attaching both is a fidelity win. Critically, the app injects NO wardrobe/expression/lighting directive — the user's scene prompt owns all of that, so `@{name}` in a movie-still injection keeps the still's own clothing and lighting. The trend is MORE references (video/audio/3D into newer models), all addressed by name — lean into attaching rich refs and let the naming do the work.
|
|
48
|
-
|
|
49
|
-
## Anti-patterns
|
|
50
|
-
|
|
51
|
-
- **Don't** studio-light or white-background the sheets. Flat, even, shadowless light on a plain neutral-grey background — or the lighting bleeds into every scene.
|
|
52
|
-
- **Don't** generate turnaround and expressions in one prompt. Slates expects them as two separate assets in two separate slots.
|
|
53
|
-
- **Don't** skip binding. The slots are what the storyboard pipeline reads — an unbound asset doesn't help downstream.
|
|
54
|
-
- **Don't** invent character details. Stick to what's in the reference image and the user's description.
|
|
55
|
-
- **Don't** use 4k unless asked — wastes credits, no quality gain at sheet scale.
|