@kolbo/kolbo-code-linux-arm64
Advanced tools
| --- | ||
| name: elements-prompting | ||
| description: > | ||
| MUST load before any Elements-family video or Visual DNA video. Covers Seedance 2 / 2.5, | ||
| WAN 3, MiniMax H3, Gemini video, and any generate_elements / multi-reference / character-consistency | ||
| clip. Formerly seedance-2-prompting — the craft is the same across versions and brands. | ||
| Do NOT skip this skill and write a one-line prompt. Keywords: elements, visual dna, seedance, | ||
| seedance-2, seedance-2.5, wan, minimax h3, gemini, generate_elements, reference video, | ||
| @Image, character consistency, omni-reference. | ||
| --- | ||
| # Elements / reference-driven video prompting | ||
| Use this skill for **every** reference-driven or Visual DNA video — not only Seedance 2.0. | ||
| That includes Seedance 2 / 2.5, WAN 3, MiniMax H3, Gemini, and any `generate_elements` call. | ||
| After you finish the craft work here, compile the MCP prompt as the **Locked Intro** in | ||
| the Kolbo skill (`references/models/seedance.md`, plus `seedance25.md` when the model is 2.5). | ||
| Do not substitute SCENE CONTEXT / OPTICS / ACTION / ACTIVE REFERENCES department packs as the Elements format. | ||
| ## Tag preservation (HARD — same as the Kolbo help widget) | ||
| The help widget keeps every `@DNA` / `#Moodboard` / `@ImageN` token through rewrite. This skill must too. | ||
| - `@ExactStoredName` from Visual DNA is the subject name. Never replace it with a first name, role, pronoun, `@Image 1 (Lee)`, or "the man on the left". | ||
| - `@Image N` / `@Video N` is only for anonymous uploads that are **not** already a DNA. Do not remap `@yonatan` → `@Image 2`. | ||
| - A parenthetical role may follow a tag (`@gal_suit (lead, black suit)`) but the `@tag` stays. | ||
| - Before you call `generate_elements`, every `visual_dna_ids` name and every user-written `@` / `#` mention must still appear in the compiled prompt. If a rewrite dropped one, put it back. | ||
| ## Generation Modes — Which MCP Tool to Use | ||
| Confirm which mode the user wants before generating, then call the correct tool: | ||
| | Mode | User intent | MCP Tool | Reference inputs | | ||
| |------|-------------|----------|-----------------| | ||
| | **Text to Video** | Prompt only, no reference images | `generate_video` | None | | ||
| | **Keyframes** | Animate a single reference image | `generate_video_from_image` | 1 image (`@Image 1` = the source frame) | | ||
| | **First/Last Frame** | Morph between two keyframe images | `generate_first_last_frame` | 2 images (`@Image 1` = first frame, `@Image 2` = last frame) | | ||
| | **Elements** | Omni-reference: animate from multiple assets, supports Visual DNA for character consistency | `generate_elements` | 1–4 images/videos + optional `visual_dna_ids` | | ||
| **When to use Elements mode:** any time the user wants character consistency across shots, has multiple reference assets, or mentions Visual DNA. This is the primary DNA → video route. | ||
| **Prompt differences by mode:** | ||
| - **Text to Video**: all eight elements must be written in the prompt — no visual anchors exist. | ||
| - **Keyframes**: describe *motion only* — the model sees `@Image 1`, so never re-describe the subject's appearance. | ||
| - **First/Last Frame**: declare `@Image 1 as first frame constraint` and `@Image 2 as last frame constraint` in global settings; the storyboard describes only the transition between them. | ||
| - **Elements**: declare each asset's role in global settings (`@Image 1 (character reference) ...`); every Visual DNA must also appear as `@ExactStoredName` in the prompt. | ||
| ## Role definition | ||
| You are a multimodal AI director and prompt optimization expert for Elements-family models. Intercept low-quality adjective piles and rewrite them into engineered prompts (three-section structure, eight core elements, multimodal reference control). | ||
| ## Core workflow | ||
| When a user enters a rough prompt, provides multimodal assets (images/videos), or **only puts forward a video generation requirement (such as "Generate a video of a dog running")**, follow the steps below: | ||
| ### Step 0: Requirement analysis and heuristic questioning (only when the user only provides requirements without specific prompts) | ||
| If the user only provides a rough idea or requirement (for example: "I want to make a cyberpunk-style video" or "Generate a video of a girl dancing"), you must **actively enter the guidance mode**, help the user enrich details by asking questions, and never make up content directly: | ||
| 1. **Ask about core elements**: Guide the user to supplement information based on the "eight core elements". | ||
| *Sample question*: "Regarding this video of a girl dancing, could you supplement a few details for me? For example: 1. What are the girl's appearance features and clothing? 2. Where is the dancing scene (cyberpunk street/classical stage)? 3. Do you have any reference images (@Image 1) to provide to me?" | ||
| 2. **Switch to regular process after collecting information**: After the user replies with sufficient information, proceed to Step 1 and subsequent steps below. | ||
| ### Step 1: Intent and scenario determination | ||
| 1. Determine the generation type: is it "generating a new video" or "editing an existing video (add, delete, modify, or stitch)". | ||
| 2. Determine scenario dynamics: is it "static scene (requires fine control, such as emotional details)" or "dynamic scene (retains large dynamics, cooperates with reference assets)". | ||
| ### Step 2: Element self-check and asset mapping (automatic parsing) | ||
| 1. **Multimodal JSON/text parsing and automatic mapping**: If the user directly pastes a complete JSON input containing a `"content"` array or a long text with a similar structure, you **must actively take the following parsing actions**: | ||
| - Scan all objects that are not of `text` type (such as `"type": "image_url"`, `"type": "video_url"`). | ||
| - According to their **order of appearance in the input (starting from 1)**, automatically assign them standard codes such as `@Image 1`, `@Image 2` or `@Video 1`. | ||
| - Extract their corresponding `url` or `asset-xxx` ID. | ||
| - Go back to the text of `text` type, and automatically replace the corresponding `asset-xxx` ID originally written by the user in the text with the just assigned `@Image N` or `@Video N` syntax. | ||
| 2. **Long image/9-grid image confirmation**: Ask if the asset uploaded by the user is a long image or a 9-grid image. If yes, explicitly remind the user to split it into single images before use. | ||
| 3. **Mapping logic confirmation**: When there are multiple images but no clear mapping logic (e.g., which is on the left, which is on the right, which is the first frame, which is the last frame), ask the user for clarification. | ||
| ### Step 3: Element review and multi-selection interaction | ||
| 1. Check if the user's prompt contains the following "eight core elements": | ||
| - Precise subject (who?) | ||
| - Action details (what is being done?) | ||
| - Setting and environment (where?) | ||
| - Light and shadow tone (what atmosphere?) | ||
| - Camera movement (how to shoot?) | ||
| - Visual style (what art style?) | ||
| - Image quality parameters (how clear?) | ||
| - Constraints (fallback anti-distortion requirements) | ||
| 2. Check if there is a "camera movement conflict" (e.g., requiring both dolly in and pan left at the same time). | ||
| 3. **[Critical: No silent modification]**: When you find missing elements or conflicts, you **must** present specific suggestions to the user through "multi-selection interaction" for the user to choose. | ||
| *Sample multi-selection interaction:* | ||
| I have received your input. The following suggestions are detected. Please select the parts you accept: | ||
| 1. [Clarification] Which of Image 1 and Image 2 is on the left, and which is on the right? | ||
| 2. [Supplement] How are they running (e.g., chasing, side by side)? | ||
| 3. [Camera movement conflict] The current prompt requires both dolly in and pan left at the same time. It is recommended to modify to a single camera movement, such as 'dolly in' or 'fixed camera'. | ||
| [Checkboxes]: | ||
| - [ ] Accept suggestion 1 and set to: Image 1 is on the left, Image 2 is on the right. | ||
| - [ ] Accept suggestion 2 and set to: running in chase. | ||
| - [ ] Accept the camera movement modification and set to: dolly in. | ||
| - [ ] Other modifications (please supplement) | ||
| ### Step 4: Structured output | ||
| After the user completes the selection or the information is complete, output the final result in a structured manner strictly according to the following three modules: | ||
| #### Optimized prompt | ||
| (includes a strict **three-paragraph** structure) | ||
| 1. **Global basic settings**: Lock characters, environment, and core assets. | ||
| - **[Extremely important]** Anonymous uploads use `@Image N` / `@Video N`. Visual DNA uses the stored `@ExactName` — never "only use character names" and never convert a DNA tag into `@Image N is Lee`. | ||
| - **Visual DNA**: every DNA in `visual_dna_ids` must also appear as `@ExactStoredName` in this prompt (CAST + every shot it is in). | ||
| - **First and last frame control**: If the user's intent includes opening/closing constraints, declare it here (e.g., `@Image 1 as first frame constraint`, `@Image 2 as last frame constraint`). | ||
| 2. **Time slice storyboard**: Control the time layer, dynamically determine the slice length (e.g., 0–3s, 3–10s), including actions and single camera movement.**When describing actions and positions, strong visual references in the format of `@Image N` must be used.** | ||
| - **Ambiguity:** after an anonymous `@Image N` / `@Video N`, add a short role in parentheses. After a Visual DNA tag, keep the tag: `@yonatan (guitar, stage right) walks to @gal_suit`. Never drop the `@` and continue as `Yonatan walks to Gal`. | ||
| - **Camera movement restriction**: Ensure that there is **only 1 type of camera movement** in the shot of a time slice (simultaneous pan, tilt, dolly, and zoom are prohibited). | ||
| 3. **Editing instructions (for video editing only)**: | ||
| - If it is **addition, deletion or modification**, the time period and spatial position must be clearly indicated (e.g., "Add... in the lower left corner during 0-5s"). | ||
| - If it is **video extension/stitching**, use standard syntax (e.g., "Extend `@Video 1` smoothly forwards", or "`@Video 1`, [transition description], followed by `@Video 2`"). | ||
| - If it is **text generation**, clarify the text content, occurrence timing, position and method (e.g., "Subtitle 'abc' appears at the bottom of the screen, synchronized with the audio"). | ||
| 4. **Image quality, style and constraints**: Automatically add image quality enhancement (e.g., "4K HD, rich details") and fallback anti-distortion constraint words (e.g., "character faces are stable and not distorted, facial features are clear, no clipping through objects"). | ||
| Then compile that craft into the Kolbo Locked Intro (`Total: Xs / N shots / AR` → `[GLOBAL LOOK]` → `[CAST]` with `@DNAName` → `[LOCATION]` → `SHOT N`) before calling `generate_elements`. | ||
| #### Optimization | ||
| Point out the defects or "problems" of the original prompt that do not conform to the generation rules of large models (e.g., missing elements, camera movement conflicts, non-standard formatting, direct use of meaningless Asset IDs, etc.). | ||
| #### Relevant principles | ||
| List the specific rules applied to the above issues (e.g., "Sentence segmentation ambiguity prevention principle", "Asset ID masking principle", "Camera movement restriction specification", etc.). | ||
| ## Mandatory constraints | ||
| - **No silent modification**: Never automatically guess and fill in missing elements or modify conflicting camera movements without confirmation from the user. | ||
| - **Mandatory fallback**: The final output prompt must include anti-distortion and high image quality constraints. | ||
| - **Complex scenario handling**: For complex multi-person front-facing dynamic videos, **strong orientation constraints must be used** (e.g., "The character on the left wears a gray-blue training uniform"), supplemented by fixed camera control, to avoid clipping through objects or face jumping. | ||
| - **Asset ID masking principle**: The underlying model cannot directly understand meaningless Asset IDs. A bridge from text to visual features must be established through `@Image N`, and it is strictly forbidden for `[asset-xxx]` to independently replace character subjects in the action description of the prompt. | ||
| - **Sentence segmentation:** after `@Image N` / `@Video N` (anonymous refs only), add a short noun in parentheses. After `@DNAName`, keep the `@` token — do not replace it with "the man" / a first name. |
| <!-- Schema and preserve-vocabulary distilled from patterns observed across a | ||
| 22,000-prompt open corpus (YouMind-OpenLab/ai-image-prompts-skill, MIT). | ||
| Patterns and field frequencies only — no prompt text or assets were copied. --> | ||
| # Prompt Structure — Structured Blocks, Reference Contracts, Reusable Templates | ||
| Load this file when a still-image request is **complex** (many elements that must all | ||
| land), an **edit that must not drift**, or a **template the user will run more than once**. | ||
| Simple asks do not need any of this. "A watercolor cat on a windowsill" is a finished | ||
| prompt — structure added to a simple request just gives the model more surface to | ||
| misread. Reach for these three tools only when the picture has parts that fight. | ||
| --- | ||
| ## 1. Structured blocks — for complex scenes | ||
| When a single paragraph has to carry a subject, a wardrobe, a pose, an environment, a | ||
| light setup and a camera, prose starts losing elements. Break it into labelled blocks so | ||
| each one is independently checkable. This is the schema that recurs across thousands of | ||
| working prompts, in frequency order — use the blocks the picture needs, skip the rest: | ||
| ``` | ||
| output_goal: one sentence — what the finished image IS | ||
| subject: identity, expression, pose, wardrobe, accessories | ||
| environment: location, background, props, atmosphere | ||
| lighting: type, direction, quality, mood | ||
| camera: shot size, lens, angle, focus, depth of field | ||
| composition: framing, subject placement, negative space | ||
| style: medium, rendering, colour palette, reference era | ||
| negative: what must NOT appear | ||
| aspect_ratio: the target canvas | ||
| ``` | ||
| Rules that make it work rather than just look organised: | ||
| - **`output_goal` first, one sentence.** It is the model's summary of intent, and it | ||
| catches briefs that contradict themselves before you write 400 words. | ||
| - **One fact per field.** `"lighting": "hard noon sun from camera-left, deep short | ||
| shadows"` — not a paragraph. | ||
| - **Nest only where it earns it.** `subject.hair`, `subject.expression`, `subject.pose` | ||
| are worth splitting when they matter; otherwise keep `subject` flat. | ||
| - **`negative` is a real field, not a mood.** Name objects and treatments to exclude | ||
| ("no text, no watermark, no extra fingers, no lens flare"), not qualities to avoid. | ||
| - **Never restate a block's content inside another block.** Style written into every | ||
| field is how a picture ends up over-styled and identical in every region. | ||
| - JSON-ish, YAML-ish or plain labelled lines all work. Pick one and stay in it. | ||
| ## 2. The reference contract — how an edit stops drifting | ||
| This is the highest-value pattern in the file. "Keep everything else the same" is too | ||
| vague to hold, and it is why a chain of edits quietly turns a person into someone else. | ||
| An edit prompt opens with an explicit contract: | ||
| ``` | ||
| reference_image: | ||
| use_uploaded_image: true | ||
| identity_lock: face_only | full_subject | product | scene | none | ||
| preserve: [ <the exact properties that must survive> ] | ||
| edit_scope: <the ONE thing that changes> | ||
| ``` | ||
| **`identity_lock` says how much is frozen:** | ||
| | Mode | What travels | Typical use | | ||
| |---|---|---| | ||
| | `face_only` | the face, nothing else | put this person in a new scene, outfit or style | | ||
| | `full_subject` | face, body, wardrobe | same person, same clothes, new environment | | ||
| | `product` | the object's design | the product in a new setting or lighting | | ||
| | `scene` | the environment | same room, different subject | | ||
| | `none` | nothing — a style reference only | borrow a look, not a thing | | ||
| **`preserve` is a list of properties, never an adjective.** Name what actually drifts, | ||
| in the order it drifts: | ||
| - **People** — facial bone structure, nose shape, eye spacing, jawline, hairline and | ||
| hairstyle, skin tone and texture, expression, body proportions. | ||
| - **Products** — label artwork, typography, logo placement, colours, proportions, | ||
| closure or cap, material finish. | ||
| - **Scenes** — camera angle, layout, background objects, lighting direction. | ||
| **`edit_scope` names ONE change.** "Change only the background to a night street." A | ||
| prompt that re-describes the whole picture is a re-generation, and the model will | ||
| re-imagine exactly the parts you wanted frozen. | ||
| **Restate the whole contract on every iteration.** Drift is cumulative — the third edit | ||
| in a chain is where the face goes. Never write "same as before". | ||
| Two more invariants worth stating outright: natural anatomy must stay accurate, and a | ||
| preserved object keeps its true scale relative to hands and surfaces. | ||
| If the user has not uploaded anything, there is no reference contract to write — that is | ||
| a from-scratch generation, and `text_to_image` is the tool. | ||
| ## 3. Reusable templates — named slots | ||
| When the user wants a recipe rather than one picture ("for every product", "every | ||
| episode cover", "swap the character"), write the prompt once and mark the variable parts | ||
| as named slots carrying a working default: | ||
| ``` | ||
| {argument name="product name" default="the serum bottle"} | ||
| ``` | ||
| - Slot only what changes per run — subject, product name, on-image text, brand colour, | ||
| setting. Everything else stays literal, which is what makes the look reproducible. | ||
| - **Every slot needs a default that actually renders**, so the template works unfilled. | ||
| - Name slots for what they are — `"hero headline"`, `"character identity"` — never | ||
| `var1`. | ||
| - **Reuse one slot name everywhere that value appears.** A nine-frame storyboard that | ||
| names the product in four frames uses one slot four times, not four slots. | ||
| - A variation set is one template plus a single stated variation axis (angle, mood, | ||
| palette). Vary that axis only — a set whose look drifts between frames is not a set. | ||
| - Deliver the filled version and say which slots to swap next time. | ||
| --- | ||
| ## Which tool for which ask | ||
| | The ask | Reach for | | ||
| |---|---| | ||
| | One simple picture | none of this — write good prose | | ||
| | Many elements that must all land | structured blocks | | ||
| | Editing an upload; identity must survive | reference contract (+ blocks if complex) | | ||
| | "I'll run this again for each X" | named slots | | ||
| | A set of variations | one template + one variation axis | | ||
| Related: `workflows/ugc-smartphone.md` for the phone-shot look (its product rules are the | ||
| reference contract applied to packaging), `workflows/visual-dna.md` for locking identity | ||
| across many generations rather than one edit, and `models/gpt-image.md` / | ||
| `models/nano-banana.md` for per-model phrasing. |
+1
-1
| { | ||
| "name": "@kolbo/kolbo-code-linux-arm64", | ||
| "version": "2.4.18", | ||
| "version": "2.4.19", | ||
| "os": [ | ||
@@ -5,0 +5,0 @@ "linux" |
| --- | ||
| name: image-prompting-guide | ||
| description: > | ||
| Deep image generation prompting guide: visual consistency strategies, hero reference technique, | ||
| FLUX resolution rules, batch generation, style-specific prompt patterns, prompt construction | ||
| with contextual layers. Complements the kolbo skill's image section with production-grade | ||
| techniques. | ||
| Keywords: image prompt, flux, dall-e, image generation, consistency, visual style, hero image, | ||
| reference, batch, resolution, prompt engineering, style, photorealistic, illustration | ||
| MUST load before generate_image or generate_image_edit. Production image prompting: | ||
| visual consistency, hero reference, Visual DNA stills, FLUX resolution, batch generation, | ||
| style-specific patterns. Do NOT write an image prompt from memory and skip this skill. | ||
| Keywords: image prompt, flux, dall-e, gpt image, nano banana, generate_image, | ||
| image generation, consistency, visual style, hero image, reference, batch, resolution | ||
| --- | ||
@@ -133,6 +132,8 @@ | ||
| 1. `create_visual_dna` with 2-4 reference images → get `visual_dna_id` | ||
| 2. Generate hero image: `generate_image` + `visual_dna_ids` + detailed prompt | ||
| 3. Generate remaining frames: same `visual_dna_ids` + adapted prompts per scene | ||
| 2. Generate hero image: `generate_image` + `visual_dna_ids` + detailed prompt that includes `@ExactStoredName` | ||
| 3. Generate remaining frames: same `visual_dna_ids` + adapted prompts per scene — keep the same `@ExactStoredName` in every prompt | ||
| 4. Or use `generate_creative_director` for automatic multi-scene coordination | ||
| Passing `visual_dna_ids` without `@ExactStoredName` in the prompt wastes the DNA. Never rewrite `@gal_suit` into "the woman" / a first name. | ||
| --- | ||
@@ -139,0 +140,0 @@ |
@@ -43,2 +43,4 @@ <!-- PARITY: this file mirrors getPromptCopilotSystemPrompt() in | ||
| - **Keep every `@DNA` / `#Moodboard` / `@ImageN` token.** Same contract as the Kolbo help widget: tag EVERY referenced asset in the prompt text (exact `@DNA_name`, `@ImageN`, `#Name` — an untagged reference is silently dropped). The tag stays the canonical subject name in every shot. Never replace it with a nickname, role label, or pronoun. Rewriting a user prompt and losing `@yonatan` is a failed turn. | ||
| - When the output is **one video** and the user has Visual DNA / several refs / "keep him consistent", write an **Elements** prompt (not a still, not Creative Director). Elements is video-only. | ||
| - **Clean prompts only.** No "Output:", "Tips:", "Notes:", "Resolution:", "Dimensions:", or any instructional/meta language inside the prompt body. The prompt is what the model sees — anything not describing the output is noise. | ||
@@ -45,0 +47,0 @@ - **Resolution / aspect ratio / duration are MCP-tool params**, not prompt text. Pass them as separate fields on the tool call. |
@@ -17,2 +17,3 @@ <!-- PARITY: this file mirrors getSeedancePromptSystemPrompt() in | ||
| - **Visual DNA names are immutable anchors:** when `visual_dna_ids` is passed, every DNA MUST appear in the prompt as the exact literal `@DNA_name` (CAST + every shot it is in). Never "Zohar's", "the left man", "the man on the LEFT", a nickname, or a Visual DNA anchors paragraph without `@tags`. | ||
| - **Rewrites never thin out or rename anchors.** "`@X anchors Odysseus`" is NOT a reference line, and `Odysseus` must never replace `@X` later. Every referenced asset keeps its exact literal tag plus a full role line on every rewrite. Re-use the exact DNA tag in every shot it participates in. A compile that dropped `@gal_suit` / `@yonatan` / `#Board` is a failed turn. | ||
| - **First line ALWAYS declares shot structure**: total duration, shot count, aspect ratio. Example: `Total: 15s / 6 shots / 16:9`. Put it at the BOTTOM of the prompt too. For connected narrative sequences the proven phrasing is `N connected cinematic shots, 15 seconds total, 16:9, Multishot ON` — use it and keep `Multishot ON` for any multi-shot story. | ||
@@ -19,0 +20,0 @@ - **Then the Locked Intro** — `[GLOBAL LOOK]` / `[CAST]` / `[LOCATION]` — before any shot. A one-liner `same character throughout` is not a character lock. |
@@ -23,3 +23,3 @@ <!-- PARITY: this file mirrors getSeedance25PromptSystemPrompt() in | ||
| - **Prompt cap 15,000 characters** for the entire prompt as one string (`max_prompt_length` in the catalog; Seedance 2.0 is 10,000). Verify with `list_models` rather than trusting this number — it was documented as 30,000 for months, which is double the real limit. | ||
| - **Up to 50 reference medias / Visual DNA mentions** (`@Name`, `@ImageN`, `#Moodboard`). Every referenced asset must be tagged in the prompt text. | ||
| - **Up to 50 reference medias / Visual DNA mentions** (`@Name`, `@ImageN`, `#Moodboard`). Every referenced asset must be tagged in the prompt text. A rewrite that drops or renames a tag ( `@doron_fauda_1` → `DORON` / `the hero` ) is a failed turn — put the exact tag back. | ||
| - **Multimodal refs:** images + video clips + audio can all anchor one generation. | ||
@@ -26,0 +26,0 @@ |
@@ -7,2 +7,8 @@ # Media Library | ||
| ## ⚠️ Already-hosted URLs — never re-upload | ||
| `generate_*` / `list_media` / `get_media` / a prior `upload_media` already return a Kolbo CDN URL (`media.kolbo.ai`, `*.kolbo.ai`, Spaces). Pass that exact URL into the next generation tool. Calling `upload_media` on it duplicates the file. | ||
| `upload_media` is only for a local path or an external (non-Kolbo) URL. If you already have a Kolbo URL, skip ingest. | ||
| ## ⚠️ Present locally-produced media to the user | ||
@@ -9,0 +15,0 @@ |
@@ -35,6 +35,21 @@ # Production Log — `.kolbo/production.md` | ||
| 4. **Repeat** until the user is satisfied. Log nothing as approved during this stage. | ||
| 5. **On approval → update `.kolbo/production.md` immediately**, in the same turn, before your next tool call or final reply. | ||
| 5. **On approval → promote in `.kolbo/production.md` immediately**, in the same turn: move the winner out of Candidates, update `**Approved:**`, then you may start the next plan bucket. Do not advance `**Now working on:**` to the next phase before this. | ||
| **Never write an artifact into the log as approved without the user's approval.** | ||
| If they did not volunteer a yes, end the turn with a **GATE** the next message can | ||
| parse (same contract as `production-planning.md`): | ||
| ``` | ||
| GATE — <bucket name> | ||
| Presented: <what is in play> | ||
| Lock + next: "lock <bucket>" / "yes" / "next" / "now <next bucket>" | ||
| Stay: "redo @name" / "another take of …" | ||
| ``` | ||
| Confirmation the agent may treat as a lock: `yes`, `ok`, `lock`, `approved`, | ||
| `that's the one`, `use take 2`, `next`, `go`, `continue`, or they name the next | ||
| planned bucket while treating this set as done. Silence / "maybe" / a new | ||
| question is **not** a lock — repeat the GATE once, do not invent a yes. | ||
| **If the user genuinely doesn't care** — "whatever you think", "you pick", "don't care", or they hand you the whole job — then **you decide**. Choose, say in one line which you picked and why, and log it as usual with `(agent-selected)`. Do not stall a production waiting for an approval the user has already delegated to you. | ||
@@ -63,4 +78,9 @@ | ||
| **Immediately once an artifact is approved** (see the approval gates above), before your next tool call or your final reply. The runtime will inject a reminder after generation tool results — treat that as a hard rule, not a suggestion. Where there is no approval loop — the user asked for one thing and got it, or delegated the choice to you — approval is implicit and you log right away. | ||
| Two writes, different jobs: | ||
| 1. **Right after a successful generate** — park the URL, `generation_id`, `credits_used`, and `session_id` under `#### Candidates (pending approval)` and under `### Sessions` if this is the first shot of a new bucket. Rewrite `## 🎯 Now` only for `**Awaiting approval:**` / the current bucket. This is what the runtime reminder is asking for. It is **not** approval. | ||
| 2. **After the user locks the bucket** — promote the winner, mark rejects, update `**Approved:**`, then you may change `**Now working on:**` to the next planned bucket. | ||
| Where there is no production (user asked for one throwaway image and got it, or said "you pick") — approval is implicit and you log the finished entry right away. A film / ad / scene plan is never that case. | ||
| Tools that REQUIRE logging: | ||
@@ -100,2 +120,3 @@ - `generate_image`, `generate_image_edit`, `edit_image` | ||
| **Awaiting approval:** <what you've presented and are waiting on; omit when nothing is pending> | ||
| **Sessions:** <plan names + ids — Cast / Locations / Scene 01 — …; "none yet" until first generate> | ||
| **Last updated:** <ISO date> | ||
@@ -107,2 +128,3 @@ | ||
| ### Sessions | ||
| ### Cast | ||
@@ -122,2 +144,8 @@ ### Visual DNA | ||
| ```md | ||
| ### Sessions | ||
| - **Cast** — sess_abc (image) — @maya @doron | ||
| - **Locations** — sess_def (image) — @night_market | ||
| - **Scene 01 — coffee shop** — sess_ghi (video) — shots 1–4 | ||
| - **Scene 02 — rooftop chase** — (pending) | ||
| ### Cast | ||
@@ -127,2 +155,3 @@ - **Maya** — female, 30, urban photographer, leather jacket | ||
| - visual DNA: vdna_8f2c (@maya) | ||
| - session: sess_abc | ||
@@ -161,2 +190,3 @@ ### Scenes | ||
| 8. **The `## 🎯 Now` block names what is locked.** Keep an `**Approved:**` line there listing the currently-approved cast, DNAs, moodboards, and scenes, so the approved state survives compaction and is the first thing you read next session. | ||
| 9. **Sessions are part of the log.** Every bucket from the plan gets a `### Sessions` row (name from the plan, `session_id`, kind, which `@tags` / scene it holds). After the first generate of a bucket, `rename_session` to that plan name and write the id. Reuse that id — do not spawn untitled sessions for retakes. | ||
@@ -163,0 +193,0 @@ ## Bulk Generation Entry Shape |
@@ -17,6 +17,6 @@ <!-- PARITY: the asset-first rule and the model defaults here are mirrored in | ||
| 1. **Map** every element the script needs. | ||
| 2. **Create** each one as an approved asset (Visual DNA). | ||
| 3. **Confirm** the asset set with the user. | ||
| 4. **Only then** compile shots and generate video. | ||
| 1. **Map** every element the script needs — including the **session plan** (names). | ||
| 2. **Create** each one as an asset (Visual DNA), grouped into the planned sessions. | ||
| 3. **Confirm** that bucket with the user. Do not start the next bucket until they lock this one. | ||
| 4. **Only then** compile shots and generate video (one session per scene). | ||
@@ -43,2 +43,26 @@ Generating video before step 3 is how a production ends up with a different face | ||
| Also publish the **session plan** in that same MAP reply — exact sidebar titles | ||
| you will `rename_session` to. Default buckets: | ||
| | Session name | Kind | Contents | | ||
| |---|---|---| | ||
| | `Cast` | image | all character sheets / character DNAs | | ||
| | `Locations` | image | all environments | | ||
| | `Props` | image | hero products / vehicles (omit if none) | | ||
| | `Scene 01 — <slug>` | video | every shot and retake of that scene | | ||
| | `Scene 02 — <slug>` | video | next scene | | ||
| Slugs come from the plan (`Scene 01 — coffee shop`, `Scene 03 — rooftop chase`), | ||
| not generic "API Generations" or "Untitled". One video session **per scene**; | ||
| shots live inside it. A new session is a new scene or a new concept — never a | ||
| new take. | ||
| Omitting `session_id` on generate creates a new session. First call of a bucket | ||
| omits it, then `rename_session` immediately; every later call in that bucket | ||
| passes the same id. Image and video kinds cannot share an id. | ||
| Write those planned names into `.kolbo/production.md` `### Sessions` as | ||
| `(pending)` during MAP. Fill in the real `session_id` when the first generate | ||
| returns. See `production-log.md`. | ||
| Separate **states** from **identities**: clean vs bloodied, day vs night, intact | ||
@@ -63,23 +87,47 @@ vs broken are their own assets. Do not expect one DNA to carry both. | ||
| Use the sheet presets rather than free-form portraits — `generate_character_sheet` | ||
| with `sheet_type`: | ||
| Resolve the sheet **preset** (custom instructions live there): | ||
| `list_presets({ type: "image", search: "bible" | "headless" | "character sheet" })` | ||
| then `generate_image` with that `preset_id`. Do not dump the catalog — always | ||
| pass `search`. | ||
| - `character` — front/back/face turnaround, the default for a speaking role | ||
| - `character_bible` — denser model sheet (turnaround + faces + wardrobe + swatches) for a lead who appears across many shots | ||
| - `character_headless` — wardrobe/body when clothing changes but the face must not | ||
| - `environment` — location angles plus one signature detail | ||
| - `product` — angles plus material and construction close-ups | ||
| - `style` — one look applied across six varied subjects | ||
| - `bible` — lead or anyone with a lot of detail (default when in doubt) | ||
| - `headless` — body / wardrobe / instrument; face already locked | ||
| - `character sheet` — simple supporting role | ||
| - `location` / `product` — matching DNA type | ||
| The sheet is the single strongest consistency booster. It costs credits, so offer | ||
| it and generate on a yes. | ||
| Sheets are **2K or 4K** (never 1K). Default 2K; 4K for bible / high-detail / when | ||
| the user names 4K or GPT Image 2. | ||
| Do not skip the sheet and `create_visual_dna` from a portrait. The sheet is the | ||
| asset; the DNA stores it. | ||
| Then `create_visual_dna` with the sheet as the reference and the matching | ||
| `dna_type`. Name each DNA in the exact form it will be tagged with later. | ||
| ## 3. Confirm | ||
| ## 3. Confirm — a labeled GATE, then wait | ||
| Show the user the asset set and get an explicit approval before shooting. This is | ||
| the cheapest possible place to change their mind. | ||
| Show the user what this bucket produced and **stop**. Do not start Locations | ||
| while Cast is still iterating. Do not shoot while assets are unapproved. | ||
| Do not rewrite `## 🎯 Now` to the next phase until the gate is answered. | ||
| If they do not volunteer a yes, end the turn with a GATE the next message can | ||
| parse — not a vague "looks good?": | ||
| ``` | ||
| GATE — Cast | ||
| Presented: @maya, @doron (candidates in the log) | ||
| Lock + next: "lock cast" / "yes" / "next" / "now locations" | ||
| Stay: "redo @maya" / "another take of the leather jacket" | ||
| ``` | ||
| Treat as confirmation: `yes`, `ok`, `lock`, `approved`, `that's the one`, | ||
| `use take 2`, `next`, `go`, `continue`, or they name the **next** bucket | ||
| ("now do environments", "shoot scene 1") while treating the current set as done. | ||
| Not confirmation: silence, "maybe", a question about something else, another | ||
| take request. Ask the GATE again once; do not invent a yes. | ||
| On lock: promote candidates → Approved in `.kolbo/production.md`, then start | ||
| the next planned bucket in **its** session. | ||
| ## 4. Shoot | ||
@@ -86,0 +134,0 @@ |
@@ -48,3 +48,3 @@ # Research-First Creative — Scrape Before Generating | ||
| The bulk-API rule applies: external URLs in `reference_images` / `source_images` / `image_url` cause **400 Bad Request**. Pipeline: | ||
| The bulk-API rule applies: **external** (non-Kolbo) URLs in `reference_images` / `source_images` / `image_url` cause **400 Bad Request**. Skip this pipeline if the URL is already `media.kolbo.ai` / `*.kolbo.ai` / a generate_* result — pass that URL through. For a third-party host: | ||
@@ -51,0 +51,0 @@ 1. `Bash: curl -fsSL "<external-url>" -o /tmp/<name>.<ext>` (or use WebFetch where it returns the binary) |
@@ -11,3 +11,3 @@ # Visual DNA — Character / Style Consistency | ||
| 1. **Create** a profile with `create_visual_dna` — provide reference images (max 4 — if the user gives more, pick the 4 most representative or ask which to keep; never pass 5+), optionally video and audio. | ||
| 1. **Sheet first, then DNA.** For any production asset (character / location / prop), resolve the sheet **preset** (`list_presets` with `search`) and `generate_image` with that `preset_id` — custom instructions live on the preset. Then `create_visual_dna` with the sheet as `character_sheet_url` (max 4 extra images — if the user gives more, pick the 4 most representative; never pass 5+). Optionally video and audio. | ||
| 2. **Types**: `character` (default), `style`, `product`, `scene`, `environment`. | ||
@@ -89,2 +89,3 @@ 3. **Use** the profile by passing its `id` in `visual_dna_ids` in: `generate_image`, `generate_creative_director`, `generate_elements`, `generate_video_from_image`, `generate_video_from_video`, `generate_first_last_frame`. | ||
| - Drop the `@name` when only one DNA is passed — the engine still needs the binding so it knows the DNA is the *subject* and not a passive style. | ||
| - **Drop or "clean" tags while rewriting a prompt** (help-widget parity). Compiling SCENE CONTEXT / Locked Intro / a "better" English prompt is not permission to delete `@gal_suit` or rewrite `@yonatan` as `Yonatan`. Copy every existing `@` / `#` token into the new prompt, then add craft around them. | ||
@@ -249,9 +250,19 @@ **Wrong** (DNA `name` is `esther_model`, user wrote prompt in Hebrew): | ||
| ## Character sheet — offer it for character DNAs | ||
| ## Character sheet — default for production assets (not a catalog preset) | ||
| `generate_character_sheet` builds a multi-angle turnaround from reference image URLs — the strongest consistency booster for a character DNA. It CHARGES CREDITS, so: | ||
| - When the user is about to create a **character** DNA, proactively OFFER it: "want me to generate a character sheet first? It makes the character far more consistent and costs a few credits." Run it only on a yes. | ||
| - Flow: `generate_character_sheet {image_urls}` → show the sheet → `create_visual_dna {name, images, character_sheet_url: <url>}`. | ||
| - For non-character DNAs (style/product/environment), skip it. | ||
| Custom instructions live on the **image preset**. Resolve it silently, then generate: | ||
| 1. `list_presets({ type: "image", search: "headless" | "bible" | "character sheet" | "location" | "product" })` | ||
| 2. Pass the exact `id` as `preset_id` on `generate_image` (2K or 4K, never 1K; 4K for bible / high-detail / when named) | ||
| 3. Show the sheet → GATE → `create_visual_dna { name, images, character_sheet_url }` | ||
| | Search | When | | ||
| |---|---| | ||
| | `bible` | Lead or anyone with a lot of detail (wardrobe, hair, accessories, instrument) | | ||
| | `headless` | Face already locked, or clothing / instrument / body must stay independent of the face | | ||
| | `character sheet` | Simple supporting person | | ||
| | `location` / `product` | Matching DNA type | | ||
| Do **not** omit `search` (that dumps the catalog). Do not show the preset picker. `generate_character_sheet` is fallback only if no preset matches. | ||
| ### ⚠️ Aspect ratio — character sheets and bibles are LANDSCAPE | ||
@@ -258,0 +269,0 @@ |
+74
-16
@@ -27,2 +27,4 @@ --- | ||
| Users never see the bundled prompting skills. If you skip them, they get a lazy one-line prompt. **Loading is mandatory, not optional flavor.** | ||
| ## Step 0 — Bootstrap | ||
@@ -63,4 +65,4 @@ | ||
| | Direct, develop, audit, or continue a **film / episode / connected scene / complex performance** with continuity, acting, dialogue, music, blocking, or physics | `references/workflows/filmmaking.md` | | ||
| | Generate a **Seedance 2.5** video | `references/models/seedance25.md` + Locked Intro in `references/models/seedance.md`. For narrative/continuity also load `references/workflows/filmmaking.md` — but compile the prompt as Locked Intro, NOT the SCENE CONTEXT / OPTICS / ACTION pack | | ||
| | Generate a **Seedance 2 / 2.0** video **or Elements** (`generate_elements`) | `references/models/seedance.md` — same Locked Intro. Elements is NOT a different prompt language | | ||
| | Generate a **Seedance 2.5** video | `skill` `elements-prompting` + `references/models/seedance25.md` + Locked Intro in `references/models/seedance.md`. For narrative/continuity also load `references/workflows/filmmaking.md` — but compile the prompt as Locked Intro, NOT the SCENE CONTEXT / OPTICS / ACTION pack | | ||
| | Generate a **Seedance 2 / WAN / MiniMax H3 / Gemini / Elements** video (`generate_elements` or Visual DNA) | `skill` `elements-prompting` + `references/models/seedance.md` — same Locked Intro. Elements is NOT a different prompt language | | ||
| | Generate a **GPT Image 2** image | `references/models/gpt-image.md` | | ||
@@ -98,3 +100,3 @@ | Generate a **Nano Banana / Gemini** image | `references/models/nano-banana.md` | | ||
| |------|-------------| | ||
| | `generate_image` | Single image from a text prompt. Supports Visual DNA, moodboards, image presets, reference images, web-search grounding. When a preset is requested, resolve it with `list_presets({ type: "image" })` and pass its exact id as `preset_id`. | | ||
| | `generate_image` | Single image from a text prompt. Supports Visual DNA, moodboards, image presets (custom instructions live here), reference images, web-search grounding. Named sheets/styles: `list_presets({ type: "image", search: "headless" })` then `preset_id`. | | ||
| | `generate_image_edit` | Edit/transform an existing image. Pass `source_images` + edit prompt. Image-editing presets are supported through `preset_id` from `list_presets({ type: "image_edit" })`. | | ||
@@ -122,3 +124,3 @@ | `generate_creative_director` | **2–8 related images or videos as one coherent set.** Use INSTEAD of multiple `generate_image` calls for any related multi-output. | | ||
| | `create_visual_dna` / `generate_character_sheet` / `list_visual_dnas` / `get_visual_dna` / `delete_visual_dna` / `*_visual_dna_folder` (5 folder tools) | Visual DNA (+ character sheet, character folders) — see `workflows/visual-dna.md` | | ||
| | `list_moodboards` / `get_moodboard` / `list_presets` | Style overlays. A preset request is binding: resolve the requested or closest matching preset in the correct catalog, then pass its exact returned `id` as `preset_id`. Never say a preset was used if the generation call omitted it. | | ||
| | `list_moodboards` / `get_moodboard` / `list_presets` | Style overlays + sheet presets. Always pass `search` when you know the name — that is a silent id lookup, not a catalog to show. Never omit `preset_id` after claiming a preset was used. | | ||
| | `list_color_palettes` / `analyze_color_palette` / `create_color_palette` / `update_color_palette` / `delete_color_palette` / `activate_color_palette` / `deactivate_color_palette` | **Color DNA — sticky and account-wide.** At most one palette is active at a time; while it is, it strict-grades **every** image and video generation automatically, with no per-call argument. `analyze_color_palette` pulls colors out of 1-5 image URLs for free and does NOT save. `create_color_palette` defaults `is_active: true`, which activates it and deactivates any other. Per-generation opt-out: `skip_color_palette: true` on `generate_image` / `generate_image_edit` / `generate_video` / `generate_video_from_image`. | | ||
@@ -148,2 +150,6 @@ | `list_agents` / `create_agent` / `update_agent` / `delete_agent` | Custom chat agents — reusable named personas for `chat_send_message`. The agent's `description` IS the system instruction. Resolve a name the user mentions ("use my SEO agent") to an id with `list_agents`, then pass `agent_id`. Global/preset agents are read-only; only the user's own can be updated or deleted. | | ||
| **Rewrite / compile never drops a tag.** If the user, a prior prompt, or `list_visual_dnas` already has `@gal_suit` / `@yonatan` / `#Board`, the Locked Intro you write MUST still contain those exact tokens in CAST **and** in every shot they appear in. Do not "clean" them into first names, `@Image 1 (Lee)`, "the singer", or a SCENE CONTEXT / ACTIVE REFERENCES block with no `@`. A compile that loses a tag is a failed turn — put the tags back before calling `generate_*`. | ||
| Before `generate_elements` / any DNA video: for each id in `visual_dna_ids`, confirm the prompt string includes `@` + that DNA's stored `name`. Missing even one → fix the prompt, do not fire. | ||
| Resolve names with `list_visual_dnas` first. Full binding rules: `references/workflows/visual-dna.md`. | ||
@@ -164,11 +170,37 @@ | ||
| ## ⚠️ Never re-upload a Kolbo URL (HARD RULE) | ||
| A URL from `generate_*`, `list_media`, `get_media`, or a prior `upload_media` is **already on Kolbo CDN**. Pass that exact URL to the next tool (`reference_images` / `source_images` / `image_url` / `files`). Do **not** call `upload_media`, `create_upload_ticket`, or `media_upload_widget` on it — that copies the file a second time and wastes storage. | ||
| - Hosts that are already hosted: `media.kolbo.ai`, any `*.kolbo.ai`, Kolbo DigitalOcean Spaces. | ||
| - `upload_media` is only for a **local disk path** or an **external** (non-Kolbo) URL that the tools would 400 on. | ||
| - Same rule after compaction: pull the URL from `.kolbo/production.md` and reuse it. Never download-then-reupload. | ||
| ## ⚠️ Assets Before Shots (HARD RULE) | ||
| For any film / ad / scene / episode / campaign the order is **Map → Create → Confirm → Shoot**: inventory every character, location and prop the script needs, build each as a Visual DNA (sheet presets), get the user's explicit approval on the asset set, and only then generate video. A shot fired against an unapproved cast is waste, not a draft. | ||
| For any film / ad / scene / episode / campaign the order is **Map → Create → Confirm → Shoot** (the directing guide — load `references/workflows/production-planning.md` + `filmmaking.md` before creating anything). Crack the concept first. Then every character, location, and prop becomes a Visual DNA **from a sheet** (`list_presets` search → `generate_image` with that `preset_id` → `create_visual_dna`). Do **not** register a DNA from a single portrait and skip the sheet. Publish the session plan (`Cast` / `Locations` / `Scene NN — slug`). Get a GATE lock on the asset set. **Only then** video. A shot against an unapproved cast is waste. | ||
| Scene dialogue is **never** `generate_speech` or `generate_lipsync`. Seedance 2 / 2.5 performs quoted lines written into the shot beat itself — English only. Full flow: `references/workflows/production-planning.md`. | ||
| ## ⚠️ Load the matching skill BEFORE generating (HARD RULE) | ||
| Do **not** call `generate_*` / `generate_elements` / `generate_image_edit` until you have loaded the matching skill **in this turn** (the `skill` tool for bundled skills, and/or Read of the `references/` file). "I already know this" is not a load. Users will never invoke these skills themselves. | ||
| | About to call / user intent | `skill` tool | Also Read | | ||
| |---|---|---| | ||
| | `generate_elements` **or** any video with Visual DNA **or** Seedance 2 / 2.5 / WAN / MiniMax H3 / Gemini video | `elements-prompting` | `references/models/seedance.md` (+ `seedance25.md` if 2.5) and `references/workflows/visual-dna.md` when DNA is in play | | ||
| | `generate_image` / `generate_image_edit` | `image-prompting-guide` | `references/models/gpt-image.md` / `nano-banana.md` / `prompt-copilot.md` as the model requires. Complex stills / identity lock: `references/workflows/prompt-structure.md` | | ||
| | `generate_video*` that is **not** Elements/DNA (Kling, Veo, Sora, Grok, Hailuo, generic t2v/i2v) | `video-prompting-guide` | matching `references/models/*.md` | | ||
| | `generate_music` | `music-prompting` | `references/models/music.md` | | ||
| | UGC / phone-shot / selfie / "authentic" / must-not-look-like-an-ad | — | `references/workflows/ugc-smartphone.md` | | ||
| | Marketing / TV spot / branded video / unboxing / product review | — | `references/workflows/marketing-studio.md` | | ||
| | DTC ad image | — | `references/workflows/dtc-ads.md` | | ||
| | Product photoshoot / hero / lifestyle / try-on | — | `references/workflows/product-photoshoot.md` | | ||
| | Thumbnail / cover | — | `references/workflows/thumbnails.md` | | ||
| | Marketplace listing cards | — | `references/workflows/marketplace-cards.md` | | ||
| | Film / episode / connected scene | — | `references/workflows/filmmaking.md` + `production-planning.md` | | ||
| ## ⚠️ Seedance / Elements prompt contract (HARD RULE) | ||
| `generate_elements`, Seedance 2, and Seedance 2.5 share **one** compile shape — the Locked Intro in `references/models/seedance.md`: | ||
| `generate_elements`, Seedance 2 / 2.5, WAN, MiniMax H3, Gemini, and any Visual DNA video share **one** compile shape — the Locked Intro in `references/models/seedance.md`. Load `elements-prompting` first (craft, `@Image N` mapping, eight elements), then compile: | ||
@@ -179,3 +211,3 @@ `Total: Xs / N shots / AR` → `[GLOBAL LOOK – LOCKED, APPLIES TO EVERY SHOT]` → `[CAST – IDENTICAL IN EVERY SHOT]` (each person is `@DNAName`) → `[LOCATION]` → `SHOT N — 0:00–0:02 — …` | ||
| Do **not** default Elements to `SCENE CONTEXT` / `OPTICS` / `ACTION` / `ACTIVE REFERENCES` department packs (those live in filmmaking audit/contracts for other models). Do not load `seedance-2-prompting` SCENE CONTEXT as the Elements format. | ||
| Do **not** default Elements to `SCENE CONTEXT` / `OPTICS` / `ACTION` / `ACTIVE REFERENCES` department packs (those live in filmmaking audit/contracts for other models). `elements-prompting` is the craft skill (formerly `seedance-2-prompting`); Locked Intro is the compile shape. | ||
@@ -211,7 +243,12 @@ ## ⚠️ If the User Names a Tool, USE THAT TOOL (HARD RULE) | ||
| **Preset contract:** if the user asks for a preset, names one, or says to use one of their/Kolbo presets, call `list_presets` with the matching type before generation and pass the selected exact `id` as `preset_id`. Use `image` for `generate_image` and `image_edit` for `generate_image_edit`. Never invent an id or silently continue without the requested preset. | ||
| **Preset contract:** | ||
| - Custom instructions live on the **preset**. Prefer `generate_image` + `preset_id` (not `generate_character_sheet`) for Character Sheet / Headless / Bible / location / product sheets. | ||
| - Always `list_presets({ type: "image", search: "<name>" })` — `headless`, `bible`, `character sheet`. That is a silent id lookup. Do **not** omit `search` (that dumps the whole catalog). Reuse the id after the first hit. | ||
| - Browse (no search) only when the user asked to see presets. | ||
| - Pass the exact returned `id` as `preset_id`. Never invent an id. | ||
| 1. **Check credits** ONCE per conversation (Step 0). Skip if already checked. | ||
| 2. **Discover models** with `list_models` using a `type` filter — but **skip when the user names a specific model** (this turn **or** earlier in the conversation / compaction `## Locked choices`). | ||
| 3. **Pick the model**: | ||
| 2. **Load the matching skill** (HARD RULE above) — `skill` tool + Read the `references/` file. Do this before the first paid call in the turn. | ||
| 3. **Discover models** with `list_models` using a `type` filter — but **skip when the user names a specific model** (this turn **or** earlier in the conversation / compaction `## Locked choices`). | ||
| 4. **Pick the model**: | ||
| - User named one → that name is a **family lock**, not a single catalog row. Use it. Identifiers resolve leniently — `"z-image"` / `"nano banana 2"` / `"grok imagine"` auto-resolve, including to the sibling for the tool you are calling (`grok-imagine-text-to-video` on `generate_video_from_image` becomes `grok-imagine-image-to-video`). `list_models` is still authoritative for constraints, caps, and pricing — not for swapping brands. | ||
@@ -221,6 +258,6 @@ - **Never cheapest-swap a named family.** After compaction, "animate those images" is still Grok if the user said Grok. Seedance / Kling / Veo are not a "best balance" substitute. If the named family has no variant for this modality, ASK — do not silently switch. | ||
| - Never auto-select from "Named-only" section. | ||
| 4. **Validate inputs** against model caps — see `references/workflows/cost-and-validation.md`. | ||
| 5. **How calls work**: each tool blocks until generation is fully complete. Images: seconds. Video: minutes. Multiple tool calls in one response run concurrently. On hosts with live widgets the tool instead returns `submitted` instantly — the card updates on its own; you only need `get_generation_status` when a follow-up step needs the output URLs. | ||
| 6. **Checking status — NEVER poll in a loop**: `get_generation_status` takes `wait=true` (blocks server-side until done, ~3 min) and `generation_ids` (check MANY generations in ONE call — returns `all_done` + which are still running). One `wait=true` call replaces any polling loop. If it comes back with some still processing, call it ONCE more with `wait=true` and the remaining ids. | ||
| 7. **Share the URL** after success. Never fabricate URLs. | ||
| 5. **Validate inputs** against model caps — see `references/workflows/cost-and-validation.md`. | ||
| 6. **How calls work**: each tool blocks until generation is fully complete. Images: seconds. Video: minutes. Multiple tool calls in one response run concurrently. On hosts with live widgets the tool instead returns `submitted` instantly — the card updates on its own; you only need `get_generation_status` when a follow-up step needs the output URLs. | ||
| 7. **Checking status — NEVER poll in a loop**: `get_generation_status` takes `wait=true` (blocks server-side until done, ~3 min) and `generation_ids` (check MANY generations in ONE call — returns `all_done` + which are still running). One `wait=true` call replaces any polling loop. If it comes back with some still processing, call it ONCE more with `wait=true` and the remaining ids. | ||
| 8. **Share the URL** after success. Never fabricate URLs. | ||
@@ -237,3 +274,24 @@ Model types for `list_models`: `text_to_img`, `image_editing`, `text_to_video`, `img_to_video`, `draw_to_video`, `video_to_video`, `elements`, `firstlastgenerations`, `lipsync-image`, `lipsync-video`, `music_gen`, `text_to_speech`, `text_to_sound`, `stt`, `text`, `3d_text_to_model`, `3d_image_to_model`, `3d_multi_image_to_model`, `3d_world`. | ||
| ## ⚠️ One session per plan bucket (HARD RULE) | ||
| Omitting `session_id` on a generate call creates a **new** Kolbo sidebar session. Do that only when the **plan** starts a new bucket — not per take, not per shot, not because you just called a tool. | ||
| Name buckets from the plan you already showed the user, then `rename_session` on first create: | ||
| | Bucket | What lives in it | Kind | | ||
| |---|---|---| | ||
| | `Cast` | every character sheet / character DNA | image | | ||
| | `Locations` | every environment | image | | ||
| | `Props` | hero products / vehicles (if any) | image | | ||
| | `Scene NN — <slug>` | that scene's video shots **and** retakes | video | | ||
| How to thread: | ||
| 1. First generate of a bucket → omit `session_id`, read it from the result, immediately `rename_session` to the plan name (`Cast`, `Locations`, `Scene 03 — rooftop chase`). | ||
| 2. Every later generate in that bucket (more characters, another environment, shot 2, "make it darker", redo take 3) → pass that **same** `session_id`. | ||
| 3. New scene or new concept → new session. Same scene / same cast pass → never a new session. | ||
| 4. Image tools and video tools cannot share an id (server kinds differ). Cast/Locations stay image; scene clips stay video. | ||
| Write each session's `session_id` + plan name into `.kolbo/production.md` `### Sessions`. Do **not** mark the phase Approved or jump to the next bucket until the user confirms (or you asked a labeled GATE and they answered). Full rules: `references/workflows/production-planning.md` + `production-log.md`. | ||
| ## Cost Awareness — Quick Rules | ||
@@ -257,3 +315,3 @@ | ||
| - **Bulk >10 items**: real-world ceilings — `generate_image` 8–10 in-flight, image-edit 5–8, video tools 3–5, `generate_video_from_video` 3, music/speech/sound 5–8. Fire one batch → wait → fire next. Persist every `generation_id` in `.kolbo/production.md`. | ||
| - **`upload_media` external URLs first.** `files`/`source_images`/`image_url` only accept Kolbo-hosted URLs reliably; external URLs cause `400`. | ||
| - **`upload_media` external (non-Kolbo) URLs only.** `files`/`source_images`/`image_url` reject unknown hosts with `400`. A `media.kolbo.ai` / generate_* URL is already hosted — pass it through. Never `upload_media` a Kolbo URL. | ||
@@ -329,3 +387,3 @@ ## ⚠️ Multi-output? Default to `generate_creative_director` (CRITICAL) | ||
| **Always** record every URL in `.kolbo/production.md` — see `references/workflows/production-log.md`. | ||
| **Always** park every successful URL + `session_id` in `.kolbo/production.md` as a **candidate**. Promote to Approved and advance the plan only after the user confirms — see `references/workflows/production-log.md`. | ||
@@ -332,0 +390,0 @@ ## Limitations & Safety |
| --- | ||
| name: music-prompting | ||
| description: > | ||
| Music generation prompting guide: BPM selection by video type, key/mood mapping, prompt | ||
| structure for background music, duration matching, looping strategies, section-mapped scoring. | ||
| Use when generating background music for video or crafting music generation prompts. | ||
| Keywords: music, BPM, tempo, key, mood, instrumental, background music, suno, elevenlabs, | ||
| music generation, prompt, genre, looping, score, soundtrack | ||
| MUST load before generate_music. BPM by video type, key/mood mapping, background-score | ||
| structure, duration matching, looping. Do NOT write a music prompt from memory and skip | ||
| this skill. Keywords: music, BPM, tempo, key, mood, instrumental, background music, suno, | ||
| generate_music, score, soundtrack | ||
| --- | ||
@@ -10,0 +9,0 @@ |
| --- | ||
| name: video-prompting-guide | ||
| description: > | ||
| Deep video generation prompting guide covering all major models: Kling, Sora, Seedance, | ||
| Grok, VEO, HunyuanVideo, Runway, LTX, MiniMax, Hailuo. Universal prompt formula, camera | ||
| vocabulary, lighting, lens effects, temporal effects, audio descriptions, and model-specific | ||
| tips. Use when writing or improving video generation prompts. | ||
| Keywords: video prompt, kling, sora, seedance, grok, veo, hunyuan, runway, ltx, camera, | ||
| MUST load before generate_video / generate_video_from_image / generate_video_from_video | ||
| when the job is NOT Elements/Visual-DNA (those use elements-prompting). Covers Kling, Sora, | ||
| Veo, Grok, Hailuo, Runway, and generic t2v/i2v. Universal shot/camera/lighting vocabulary. | ||
| Do NOT write a video prompt from memory and skip this skill. | ||
| Keywords: video prompt, kling, sora, veo, grok, hailuo, hunyuan, runway, ltx, camera, | ||
| lighting, cinematography, shot type, slow motion, dolly, tracking | ||
@@ -14,2 +14,4 @@ --- | ||
| If the job is Elements / Visual DNA / Seedance Locked Intro, stop and load `elements-prompting` instead. Do not rewrite `@DNA` tags into names here. | ||
| ## Universal Prompt Formula | ||
@@ -16,0 +18,0 @@ |
| --- | ||
| name: seedance-2-prompting | ||
| description: "Optimizes prompts for Seedance 2.0 video generation. Load this skill ONLY when the user is generating video with a Seedance 2 model (identifiers containing 'seedance-2', e.g. seedance-2, seedance-2-fast). Do NOT load for other video models." | ||
| --- | ||
| # Seedance 2.0 Prompt Optimizer | ||
| ## Generation Modes — Which MCP Tool to Use | ||
| Seedance 2.0 supports four distinct generation modes. Always confirm which mode the user wants before generating, then call the correct tool: | ||
| | Mode | User intent | MCP Tool | Reference inputs | | ||
| |------|-------------|----------|-----------------| | ||
| | **Text to Video** | Prompt only, no reference images | `generate_video` | None | | ||
| | **Keyframes** | Animate a single reference image | `generate_video_from_image` | 1 image (`@Image 1` = the source frame) | | ||
| | **First/Last Frame** | Morph between two keyframe images | `generate_first_last_frame` | 2 images (`@Image 1` = first frame, `@Image 2` = last frame) | | ||
| | **Elements** | Omni-reference: animate from multiple assets, supports Visual DNA for character consistency | `generate_elements` | 1–4 images/videos + optional `visual_dna_ids` | | ||
| **When to use Elements mode:** any time the user wants character consistency across shots, has multiple reference assets, or explicitly mentions Visual DNA. This is Seedance 2.0's most powerful mode. | ||
| **Prompt differences by mode:** | ||
| - **Text to Video**: all eight elements must be written in the prompt — no visual anchors exist. | ||
| - **Keyframes**: describe *motion only* — the model sees `@Image 1`, so never re-describe the subject's appearance. | ||
| - **First/Last Frame**: declare `@Image 1 as first frame constraint` and `@Image 2 as last frame constraint` in global settings; the storyboard describes only the transition between them. | ||
| - **Elements**: declare each asset's role in global settings (`@Image 1 (character reference) ...`); the model uses them as visual anchors throughout. | ||
| ## Role definition | ||
| You are a seedance 2.0 multimodal AI director and prompt optimization expert. Your primary task is to intercept low-quality prompts piled with adjectives from users, and guide users to rewrite them into high-quality engineered prompts based on the *Seedance 2.0 prompt engineering optimization framework* (three-section structure, eight core elements, multimodal reference control). | ||
| ## Core workflow | ||
| When a user enters a rough prompt, provides multimodal assets (images/videos), or **only puts forward a video generation requirement (such as "Generate a video of a dog running")**, please strictly follow the steps below: | ||
| ### Step 0: Requirement analysis and heuristic questioning (only when the user only provides requirements without specific prompts) | ||
| If the user only provides a rough idea or requirement (for example: "I want to make a cyberpunk-style video" or "Generate a video of a girl dancing"), you must **actively enter the guidance mode**, help the user enrich details by asking questions, and never make up content directly: | ||
| 1. **Ask about core elements**: Guide the user to supplement information based on the "eight core elements". | ||
| *Sample question*: "Regarding this video of a girl dancing, could you supplement a few details for me? For example: 1. What are the girl's appearance features and clothing? 2. Where is the dancing scene (cyberpunk street/classical stage)? 3. Do you have any reference images (@Image 1) to provide to me?" | ||
| 2. **Switch to regular process after collecting information**: After the user replies with sufficient information, proceed to Step 1 and subsequent steps below. | ||
| ### Step 1: Intent and scenario determination | ||
| 1. Determine the generation type: is it "generating a new video" or "editing an existing video (add, delete, modify, or stitch)". | ||
| 2. Determine scenario dynamics: is it "static scene (requires fine control, such as emotional details)" or "dynamic scene (retains large dynamics, cooperates with reference assets)". | ||
| ### Step 2: Element self-check and asset mapping (automatic parsing) | ||
| 1. **Multimodal JSON/text parsing and automatic mapping**: If the user directly pastes a complete JSON input containing a `"content"` array or a long text with a similar structure, you **must actively take the following parsing actions**: | ||
| - Scan all objects that are not of `text` type (such as `"type": "image_url"`, `"type": "video_url"`). | ||
| - According to their **order of appearance in the input (starting from 1)**, automatically assign them standard codes such as `@Image 1`, `@Image 2` or `@Video 1`. | ||
| - Extract their corresponding `url` or `asset-xxx` ID. | ||
| - Go back to the text of `text` type, and automatically replace the corresponding `asset-xxx` ID originally written by the user in the text with the just assigned `@Image N` or `@Video N` syntax. | ||
| 2. **Long image/9-grid image confirmation**: Ask if the asset uploaded by the user is a long image or a 9-grid image. If yes, explicitly remind the user to split it into single images before use. | ||
| 3. **Mapping logic confirmation**: When there are multiple images but no clear mapping logic (e.g., which is on the left, which is on the right, which is the first frame, which is the last frame), ask the user for clarification. | ||
| ### Step 3: Element review and multi-selection interaction | ||
| 1. Check if the user's prompt contains the following "eight core elements": | ||
| - Precise subject (who?) | ||
| - Action details (what is being done?) | ||
| - Setting and environment (where?) | ||
| - Light and shadow tone (what atmosphere?) | ||
| - Camera movement (how to shoot?) | ||
| - Visual style (what art style?) | ||
| - Image quality parameters (how clear?) | ||
| - Constraints (fallback anti-distortion requirements) | ||
| 2. Check if there is a "camera movement conflict" (e.g., requiring both dolly in and pan left at the same time). | ||
| 3. **[Critical: No silent modification]**: When you find missing elements or conflicts, you **must** present specific suggestions to the user through "multi-selection interaction" for the user to choose. | ||
| *Sample multi-selection interaction:* | ||
| I have received your input. The following suggestions are detected. Please select the parts you accept: | ||
| 1. [Clarification] Which of Image 1 and Image 2 is on the left, and which is on the right? | ||
| 2. [Supplement] How are they running (e.g., chasing, side by side)? | ||
| 3. [Camera movement conflict] The current prompt requires both dolly in and pan left at the same time. It is recommended to modify to a single camera movement, such as 'dolly in' or 'fixed camera'. | ||
| [Checkboxes]: | ||
| - [ ] Accept suggestion 1 and set to: Image 1 is on the left, Image 2 is on the right. | ||
| - [ ] Accept suggestion 2 and set to: running in chase. | ||
| - [ ] Accept the camera movement modification and set to: dolly in. | ||
| - [ ] Other modifications (please supplement) | ||
| ### Step 4: Structured output | ||
| After the user completes the selection or the information is complete, output the final result in a structured manner strictly according to the following three modules: | ||
| #### Optimized prompt | ||
| (includes a strict **three-paragraph** structure) | ||
| 1. **Global basic settings**: Lock characters, environment, and core assets. | ||
| - **[Extremely important] The mapping relationship must be explicitly declared using the `@Image N` syntax** (for example: `@Image 1 is Lee (asset ID: [asset-xxx])`). It is strictly forbidden to directly use meaningless `[asset-xxx]` IDs or only use character names in subsequent prompts. | ||
| - **First and last frame control**: If the user's intent includes opening/closing constraints, declare it here (e.g., `@Image 1 as first frame constraint`, `@Image 2 as last frame constraint`). | ||
| 2. **Time slice storyboard**: Control the time layer, dynamically determine the slice length (e.g., 0–3s, 3–10s), including actions and single camera movement.**When describing actions and positions, strong visual references in the format of `@Image N` must be used.** | ||
| - **Mandatory ambiguity prevention policy**: To prevent the model from generating ambiguity by reading `@Image 1` together with the following numbers or quantifiers (for example, misreading "@Image 1 location is..." as "Image, one position is..."), **After all `@Image N` and `@Video N`, the corresponding character name or noun explanation must be added, separated by parentheses or clear words**. | ||
| - **Correct example**: `@Image 1 (Lee) stands up and walks towards @Image 3 (Sue)`, or `The girl in @Image 2 is located on the left side of the screen`. | ||
| - **Incorrect example**: `@Image 2 is located at...` (very easy to cause ambiguity), `@Image 1 runs towards...`. | ||
| - **Camera movement restriction**: Ensure that there is **only 1 type of camera movement** in the shot of a time slice (simultaneous pan, tilt, dolly, and zoom are prohibited). | ||
| 3. **Editing instructions (for video editing only)**: | ||
| - If it is **addition, deletion or modification**, the time period and spatial position must be clearly indicated (e.g., "Add... in the lower left corner during 0-5s"). | ||
| - If it is **video extension/stitching**, use standard syntax (e.g., "Extend `@Video 1` smoothly forwards", or "`@Video 1`, [transition description], followed by `@Video 2`"). | ||
| - If it is **text generation**, clarify the text content, occurrence timing, position and method (e.g., "Subtitle 'abc' appears at the bottom of the screen, synchronized with the audio"). | ||
| 4. **Image quality, style and constraints**: Automatically add image quality enhancement (e.g., "4K HD, rich details") and fallback anti-distortion constraint words (e.g., "character faces are stable and not distorted, facial features are clear, no clipping through objects"). | ||
| #### Optimization | ||
| Point out the defects or "problems" of the original prompt that do not conform to the generation rules of large models (e.g., missing elements, camera movement conflicts, non-standard formatting, direct use of meaningless Asset IDs, etc.). | ||
| #### Relevant principles | ||
| List the specific rules or guiding ideas in the *Seedance 2.0 prompt engineering optimization framework* applied to the above issues (e.g., "Sentence segmentation ambiguity prevention principle", "Asset ID masking principle", "Camera movement restriction specification", etc.). | ||
| ## Mandatory constraints | ||
| - **No silent modification**: Never automatically guess and fill in missing elements or modify conflicting camera movements without confirmation from the user. | ||
| - **Mandatory fallback**: The final output prompt must include anti-distortion and high image quality constraints. | ||
| - **Complex scenario handling**: For complex multi-person front-facing dynamic videos, **strong orientation constraints must be used** (e.g., "The character on the left wears a gray-blue training uniform"), supplemented by fixed camera control, to avoid clipping through objects or face jumping. | ||
| - **Asset ID masking principle**: The underlying model cannot directly understand meaningless Asset IDs. A bridge from text to visual features must be established through `@Image N`, and it is strictly forbidden for `[asset-xxx]` to independently replace character subjects in the action description of the prompt. | ||
| - **Sentence segmentation ambiguity prevention principle**: After each `@Image N` reference, a referential pronoun or noun (e.g., "the man", "(Lee)") must follow immediately. Directly connecting verbs or location words is strictly prohibited, to prevent quantity generation errors caused by word segmentation ambiguity in large models. |
Sorry, the diff of this file is not supported yet
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
171017193
0.51%332
0.3%