@kolbo/mcp 1.81.2 → 1.81.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 +5 -2
- package/package.json +1 -1
- package/skill/GENERATED.md +1 -1
- package/skill/SKILL.md +68 -89
- package/skill/VERSION +1 -1
- package/skill/references/models/creative-director.md +2 -8
- package/skill/references/models/music.md +1 -1
- package/skill/references/models/prompt-copilot.md +1 -1
- package/skill/references/models/seedance.md +5 -21
- package/skill/references/models/seedance25.md +1 -1
- package/skill/references/models/veo.md +1 -1
- package/skill/references/workflows/color-dna.md +12 -0
- package/skill/references/workflows/cost-and-validation.md +6 -26
- package/skill/references/workflows/dtc-ads.md +1 -1
- package/skill/references/workflows/filmmaking.md +1 -25
- package/skill/references/workflows/marketing-studio.md +14 -14
- package/skill/references/workflows/media-library.md +11 -1
- package/skill/references/workflows/product-photoshoot.md +1 -1
- package/skill/references/workflows/production-log.md +2 -14
- package/skill/references/workflows/production-planning.md +6 -5
- package/skill/references/workflows/review-collections.md +98 -0
- package/skill/references/workflows/troubleshooting.md +2 -8
- package/skill/references/workflows/visual-dna.md +5 -34
- package/src/apps/bridge.js +4 -0
- package/src/apps/html.js +2 -1
- package/src/apps/index.js +1 -0
- package/src/apps/theme.js +2 -1
- package/src/apps/widgets/catalog.js +1 -1
- package/src/apps/widgets/generation.js +67 -17
- package/src/apps/widgets/list.js +6 -6
- package/src/apps/widgets/mediaGrid.js +3 -6
- package/src/tools/_shared.js +55 -9
- package/src/tools/generate.js +21 -9
- package/src/tools/projects.js +41 -9
package/README.md
CHANGED
|
@@ -58,9 +58,12 @@ Or add the config by hand — this block is identical for every MCP client and c
|
|
|
58
58
|
|
|
59
59
|
Restart your app, then ask it to generate something. The first time, a Kolbo login opens in your browser — click **Allow** (no API key to create). _Prefer an API key? Create one at [app.kolbo.ai/developer](https://app.kolbo.ai/developer) and add `"env": { "KOLBO_API_KEY": "kolbo_live_..." }` to the block above._
|
|
60
60
|
|
|
61
|
-
### Browser-only (claude.ai / ChatGPT):
|
|
61
|
+
### Browser-only (claude.ai / ChatGPT / Codex): connector + skill
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
1. Add the custom connector **`https://api.kolbo.ai/mcp`** under Settings → Connectors, then Connect → log in → Allow.
|
|
64
|
+
2. [Download the Skill](https://kolbo.ai/skills/kolbo.zip) and upload it (Claude.ai: Settings → Features → Skills; ChatGPT/Codex: Settings → Skills). Codex CLI: unzip into `~/.codex/skills/`.
|
|
65
|
+
|
|
66
|
+
The Skill is the canonical routing layer. Without it the tools still work, but the model will not load Seedance / Visual DNA / filmmaking rules.
|
|
64
67
|
|
|
65
68
|
### Optional upgrade: add the Kolbo skill for slash-commands + smart routing
|
|
66
69
|
|
package/package.json
CHANGED
package/skill/GENERATED.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# AUTO-GENERATED — do not edit
|
|
2
2
|
|
|
3
|
-
This tree is mirrored from kolbo-code@
|
|
3
|
+
This tree is mirrored from kolbo-code@a463d99, the single source of truth.
|
|
4
4
|
Canonical source: packages/opencode/skills/kolbo/
|
|
5
5
|
Distribution: .github/workflows/sync-skill-to-plugin.yml
|
|
6
6
|
|
package/skill/SKILL.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
version: 0.9.
|
|
2
|
+
version: 0.9.7
|
|
3
3
|
name: kolbo
|
|
4
4
|
description: |
|
|
5
5
|
Generate, edit, analyze, and direct creative media through Kolbo AI: images,
|
|
@@ -22,31 +22,7 @@ You have direct access to the Kolbo AI creative platform via MCP tools (auto-con
|
|
|
22
22
|
|
|
23
23
|
> 🚫 **Don't dump generated URLs as bare text or markdown links in chat** — the UI already shows results in **Library** (right panel) and on the generation card. Refer by description ("the rainy scene"), store URLs in `.kolbo/production.md`. INLINE `` images ARE allowed for catalog-style replies (per-item thumbs in numbered lists).
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
Agents keep getting confused because three UIs show the same job. Use this map — never invent a fourth:
|
|
28
|
-
|
|
29
|
-
| Surface | What it is | Trust it for |
|
|
30
|
-
|---|---|---|
|
|
31
|
-
| **Library** (right panel — "This session" / "All media") | User-facing gallery of **completed** media | "Is the user's output there?" Point humans here. Finished clips/images land automatically — do **not** `list_media` / `get_media` just to verify a `generate_*` you just ran. |
|
|
32
|
-
| **Chat generation card** | Progress chrome while a job is in flight | Status badge only (`Generating` / done). A **black / empty preview while Generating is NORMAL** — the iframe has nothing to paint yet. It is **not** failure, not "lost", not a reason to re-fire. |
|
|
33
|
-
| **`get_generation_status`** (MCP) | Agent API for job state | Whether the server job is `completed` / `failed` / still running, and the final `urls`. This is your SoT for in-flight work — **not** the card pixels. |
|
|
34
|
-
| **`.kolbo/production.md`** | Your private log across turns | Ids + URLs after success. Compaction-safe memory — not the user gallery. |
|
|
35
|
-
|
|
36
|
-
**Do NOT:**
|
|
37
|
-
- Treat an empty/black chat card as "generation failed" or "nothing produced".
|
|
38
|
-
- Re-call `generate_*` because Library still shows a K/logo spinner tile while the job is running — that tile **is** the in-progress placeholder for the same job.
|
|
39
|
-
- Call `list_media` / `get_media` / `list_session_generations` to "check if it worked" after a generate you already submitted — that burns credits/context and can pollute the session.
|
|
40
|
-
- Tell the user to look at chat history for finals — tell them **Library → This session**.
|
|
41
|
-
|
|
42
|
-
**Do:**
|
|
43
|
-
- After `submitted` / `_timed_out`: end the turn, or one `get_generation_status(..., wait=true)`.
|
|
44
|
-
- When done: say the result is in Library; log URLs to `.kolbo/production.md`.
|
|
45
|
-
- If the user asks "where is it?" → Library (This session). If they ask "is it done?" and you don't have urls yet → `get_generation_status` once.
|
|
46
|
-
|
|
47
|
-
This file is the **always-loaded core**: tool inventory + universal hard rules + routing index. For any model-specific prompt rules, Visual DNA workflow, production log format, marketing workflow, cost validation, etc., **Read the matching `references/` file from the index below**. Don't try to remember the rules — load the file when you need them.
|
|
48
|
-
|
|
49
|
-
Users never see the bundled prompting skills. If you skip them, they get a lazy one-line prompt. **Loading is mandatory, not optional flavor.**
|
|
25
|
+
This file is the **always-loaded core**: tool inventory + universal hard rules + routing index — for model-specific prompt rules, workflows, cost validation, etc., Read the matching `references/` file from the index below; loading is mandatory, not optional flavor (users never invoke the bundled skills themselves — skipping them yields a lazy one-line prompt).
|
|
50
26
|
|
|
51
27
|
## Step 0 — Bootstrap
|
|
52
28
|
|
|
@@ -54,26 +30,33 @@ Once per conversation, before any other Kolbo tool call:
|
|
|
54
30
|
|
|
55
31
|
1. **Run `check_credits`.** If it fails with "Session expired" / "Not authenticated", ask the user to run `kolbo auth login` (or their branded CLI command like `sapir auth login`) and reload the editor.
|
|
56
32
|
2. **If `list_models` returns empty**, MCP isn't wired — same fix.
|
|
57
|
-
3. Use the balance ONLY for the low-balance check at this moment
|
|
33
|
+
3. Use the balance ONLY for the low-balance check at this moment (see the "credits remaining" rule in the brief section below).
|
|
58
34
|
|
|
59
35
|
If the user is on a whitelabel build (`sapir`, etc.), they must use their branded command — not `kolbo`. See `references/workflows/troubleshooting.md`.
|
|
60
36
|
|
|
61
|
-
## 🎬 Confirm the Creative Brief BEFORE Generating (CRITICAL — read first)
|
|
37
|
+
## 🎬 Confirm the Creative Brief & Cost BEFORE Generating (CRITICAL — read first)
|
|
62
38
|
|
|
63
39
|
Never fire a paid generation the moment the user says "make X". First **present the brief back as a confirmation the user can change** — this is the single most important interaction. It gives the user control over what gets created and what it costs, instead of silently spending credits on defaults.
|
|
64
40
|
|
|
65
41
|
**Before ANY paid image / video / music / speech / 3D generation**, unless the user has *explicitly* dictated every key parameter in this message, ask ONE labeled question (the UI renders it as an options card) confirming:
|
|
66
42
|
|
|
67
|
-
- **Model** — your recommended pick as the default option, plus 1–2 alternatives (with their credit cost).
|
|
43
|
+
- **Model** — your recommended pick as the default option, plus 1–2 alternatives (with their credit cost). Suggest a cheaper alternative if one fits.
|
|
68
44
|
- **Aspect ratio** — e.g. `1:1 / 9:16 / 16:9` (offer the sensible default first).
|
|
69
45
|
- **Count** — how many (1 / 4 / …).
|
|
70
46
|
- **Resolution / quality / duration** — where the model supports it.
|
|
71
47
|
- **Creative direction** — style / mood / scene, when the user was vague ("4 cats" → offer style options: photoreal / illustrated / cinematic / surprise-me).
|
|
72
48
|
- **Credit cost** — state the total (`✦ N credits`) right in the question so cost is never a surprise.
|
|
73
49
|
|
|
74
|
-
Then generate **only** with the confirmed parameters. If the user changes an option, use the change. This mirrors the approval-card flow: propose → let them adjust → confirm → generate.
|
|
50
|
+
Then generate **only** with the confirmed parameters. If the user changes an option, use the change. This mirrors the approval-card flow: propose → let them adjust → confirm → generate. Never fire on defaults the user didn't choose.
|
|
51
|
+
|
|
52
|
+
**Only skip the brief/cost confirmation when** the user's message already pins model + aspect + count + creative direction (e.g. "generate 4 photoreal tabby cats, 1:1, z-image/turbo") — then just state the cost one-liner and fire. A low credit cost is **not** a reason to skip: cheap ≠ no-confirmation. What matters is whether the user actually chose the parameters.
|
|
75
53
|
|
|
76
|
-
**
|
|
54
|
+
**Cost rules** (full tables + formulas in `references/workflows/cost-and-validation.md`):
|
|
55
|
+
|
|
56
|
+
- **Video/lipsync `credit` is per-SECOND, not per-clip**: `total = credit × duration`. This is the universal rule for video/firstlast/elements/motion_graphic/cast types, not a per-model exception — `list_models` states it inline now. The one carve-out is a model with `flat_credit_by_resolution` set.
|
|
57
|
+
- **Batch totalling 100+ credits**: run `check_credits` first.
|
|
58
|
+
- **Quote real cost**: after firing, log `credits_used` (from the tool result) to `.kolbo/production.md` — never `base × count`.
|
|
59
|
+
- **Never state "credits remaining" from arithmetic** (opening balance − generation costs). Coding/chat usage deducts credits too, so the math is always wrong. Report cost only; if the user asks for their balance, call `check_credits` fresh at that moment.
|
|
77
60
|
|
|
78
61
|
For multi-scene / batch work this pairs with `generate_creative_director` (see below) — still confirm the brief first.
|
|
79
62
|
|
|
@@ -102,11 +85,13 @@ For multi-scene / batch work this pairs with `generate_creative_director` (see b
|
|
|
102
85
|
| Generate **brand product imagery** (studio shot, lifestyle, Pinterest pin, hero banner, carousel, ad pack, virtual try-on, conceptual, restyle) | `references/workflows/product-photoshoot.md` |
|
|
103
86
|
| Generate **marketplace listing cards** (Amazon main + secondary + A+ content) | `references/workflows/marketplace-cards.md` |
|
|
104
87
|
| Use **Visual DNA** / character consistency / `@name` syntax | `references/workflows/visual-dna.md` |
|
|
88
|
+
| Use **Color DNA** / brand palette grading | `references/workflows/color-dna.md` |
|
|
105
89
|
| Start or continue a **multi-step production** (storyboard → scenes → final cut) | `references/workflows/production-log.md` |
|
|
106
90
|
| **Transcribe** or **analyze** audio/video | `references/workflows/transcription.md` |
|
|
107
91
|
| **Split a soundtrack into layers** — remove/isolate speech, strip narration, instrumental bed, stems for dubbing | `references/workflows/audio-stems.md` |
|
|
108
92
|
| **Scrape brand/product info** before generating + persist as `.kolbo/brand-kits/<slug>.md` | `references/workflows/research-first.md` |
|
|
109
93
|
| Browse, manage, or present existing **media library** items | `references/workflows/media-library.md` |
|
|
94
|
+
| Run a **client review / approval loop** — share a cut for feedback, timestamped comments, versions (v1→v2), approve / request-changes, guest links | `references/workflows/review-collections.md` |
|
|
110
95
|
| Confirm **cost** or validate **resolution / aspect / duration** against model caps | `references/workflows/cost-and-validation.md` |
|
|
111
96
|
| Hit an **auth / MCP / 429** issue | `references/workflows/troubleshooting.md` |
|
|
112
97
|
|
|
@@ -140,13 +125,13 @@ Each `references/models/*.md` mirrors the matching skill prompt in `kolbo-api/sr
|
|
|
140
125
|
| `list_models` / `list_voices` / `check_credits` / `get_generation_status` / `cancel_generation` / `get_session_usage` | Discovery + status. `list_models` with no args returns the recommended shortlist out of ~428 — pass `type` for a full category with per-model caps. `cancel_generation` stops an in-flight job and refunds what it can: use it when the user changes their mind mid-generation instead of letting it run. |
|
|
141
126
|
| `upload_media` / `create_upload_ticket` / `list_media` / `get_media` / `get_media_stats` / `favorite_media` / `unfavorite_media` / `delete_media` / `restore_media` / `permanently_delete_media` / `move_media` / `bulk_*_media` / `*_media_folder` | Media library — see `workflows/media-library.md`. Getting a LOCAL file in depends on where the server runs: `upload_media` with a path only works on a local (stdio) install; over a remote connector use `create_upload_ticket` and POST the file yourself. |
|
|
142
127
|
| `create_visual_dna` / `update_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`. Edit with `update_visual_dna`; never delete+recreate. |
|
|
143
|
-
| `list_moodboards` / `get_moodboard` / `list_presets` | Style overlays + sheet presets
|
|
144
|
-
| `list_color_palettes` / `analyze_color_palette` / `create_color_palette` / `update_color_palette` / `delete_color_palette` / `activate_color_palette` / `deactivate_color_palette` | **Color DNA — sticky
|
|
128
|
+
| `list_moodboards` / `get_moodboard` / `list_presets` | Style overlays + sheet presets — see **Preset contract** in Core Workflow. Never omit `preset_id` after claiming a preset was used. |
|
|
129
|
+
| `list_color_palettes` / `analyze_color_palette` / `create_color_palette` / `update_color_palette` / `delete_color_palette` / `activate_color_palette` / `deactivate_color_palette` | **Color DNA — sticky + account-wide; at most one palette active at a time**, and while active it strict-grades **every** image and video generation automatically. Per-generation opt-out: `skip_color_palette: true`. Details: `workflows/color-dna.md`. |
|
|
145
130
|
| `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. |
|
|
146
131
|
| `search_stock_media` / `get_stock_sources` / `get_stock_categories` / `get_stock_collections` / `get_stock_asset` / `analyze_script_for_stock` / `import_stock_asset` | Stock library (free, no credits) — EXISTING photos / videos / 3D / SFX / music. For stock **music** use `search_stock_media` with `mediaType: "music"` (semantic vibe query, e.g. "uplifting corporate background") → `get_stock_asset` for downloads. The older `*_music_library` tools are deprecated adapters over this — prefer the stock tools, except for the licensed-catalog tools in the next row. |
|
|
147
|
-
| `search_music_library` / `browse_music_library` / `get_music_library_facets` / `get_music_track_audio` / `get_music_track_lyrics` / `get_music_track_related` / `analyze_script_for_music` / `acquire_clean_music_track` / `import_music_track_to_library` | **SYNCI licensed music** —
|
|
148
|
-
| `list_projects` / `get_project` / `move_session` | Projects: resolve a project NAME → the `project_id` you pass on generation/upload/doc calls
|
|
149
|
-
| `create_project` / `update_project` / `archive_project` / `unarchive_project` / `list_sessions` / `rename_session` / `delete_session` / `restore_session` | Project lifecycle + session inventory. Edit name/description with `update_project` (read via `get_project` first)
|
|
132
|
+
| `search_music_library` / `browse_music_library` / `get_music_library_facets` / `get_music_track_audio` / `get_music_track_lyrics` / `get_music_track_related` / `analyze_script_for_music` / `acquire_clean_music_track` / `import_music_track_to_library` | **SYNCI licensed music** — commercially licensed catalog, not free stock; previews are **watermarked**. `acquire_clean_music_track` / `import_music_track_to_library` **CHARGES CREDITS** for the clean master — confirm with the user first + pass a stable `requestId`. Details: `workflows/media-library.md` "SYNCI licensed music". |
|
|
133
|
+
| `list_projects` / `get_project` / `move_session` | Projects: resolve a project NAME → the `project_id` you pass on generation/upload/doc calls (`get_project` returns the full description — list clips it); `move_session` relocates a whole session + its media. See "Projects — Where Work Lands" below. |
|
|
134
|
+
| `create_project` / `update_project` / `archive_project` / `unarchive_project` / `list_sessions` / `rename_session` / `delete_session` / `restore_session` | Project lifecycle + session inventory. Edit name/description with `update_project` (read via `get_project` first); rename sessions with `rename_session` — never delete+recreate. `list_sessions` returns `project_id` + `types[]` on every row. |
|
|
150
135
|
| `bulk_move_sessions` / `list_session_generations` / `move_generations_to_session` / `split_session` / `undo_session_organization` | Reorganize many sessions or generations. `list_session_generations` is an inventory (not a live generation card). |
|
|
151
136
|
| `add_project_context` / `list_project_context` / `delete_project_context` / `get_project_profile` / `regenerate_project_profile` | Project knowledge base (RAG): feed scripts/URLs/notes; `get_project_profile` = the living brief — read it to ground work in the project |
|
|
152
137
|
| `list_project_assets` / `link_project_asset` / `unlink_project_asset` / `update_project_asset` | Project CAST roster: the Visual DNAs and moodboards tagged onto a project (`@Name` / `#Name`). `update_project_asset` writes each tagged DNA's identity description and/or its project-scoped purpose note. Never unlink+relink to edit. |
|
|
@@ -155,6 +140,7 @@ Each `references/models/*.md` mirrors the matching skill prompt in `kolbo-api/sr
|
|
|
155
140
|
| `trim_video` | Frame-accurate trim of a Kolbo-hosted video (tool waits and returns the URL). `edit_video` also gained `remove_background`. |
|
|
156
141
|
| `create_doc` / `list_docs` / `get_doc` / `update_doc` / `share_doc` / `delete_doc` | AI Docs (Magic Pad): YOU author full HTML documents (plans, briefs, scripts, research) saved into the user's project, editable in the Kolbo app. `share_doc` returns a public link. `update_doc` content replaces the WHOLE doc — `get_doc` first. |
|
|
157
142
|
| `chat_send_message` / `chat_list_conversations` / `chat_get_messages` | Kolbo chat with optional `media_urls` (up to 10 per call) |
|
|
143
|
+
| `create_review_asset` / `add_review_version` / `set_review_status` / `create_review_comment` / `reply_review_comment` / `resolve_review_comment` / `unresolve_review_comment` / `create_review_collection` / `create_review_share_link` / `revoke_review_share_link` / `get_review_storage_usage` (+ list/get/update/delete siblings) | **Kolbo Review** — Frame.io-style client review: asset = media + appended versions (new cut = `add_review_version`, never delete+recreate), timecoded comments per version, approve/request-changes status, guest share links (no Kolbo account; comment-only unless `canSetStatus`). 5GB review storage cap. See `workflows/review-collections.md`. |
|
|
158
144
|
| `publish_html_artifact` | Publish HTML / SVG / Mermaid to `sites.kolbo.ai`. Server dedupes by content hash. Strict CSP. |
|
|
159
145
|
|
|
160
146
|
## ⚠️ Edit in place — never delete+recreate (HARD RULE — always on)
|
|
@@ -209,7 +195,7 @@ first, so the model renders *different words than the ones the user wrote*.
|
|
|
209
195
|
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.
|
|
210
196
|
|
|
211
197
|
- Hosts that are already hosted: `media.kolbo.ai`, any `*.kolbo.ai`, Kolbo DigitalOcean Spaces.
|
|
212
|
-
- `upload_media` is only for a **local disk path** or an **external** (non-Kolbo) URL
|
|
198
|
+
- `upload_media` is only for a **local disk path** or an **external** (non-Kolbo) URL — `files`/`source_images`/`image_url` reject unknown hosts with `400`; a Kolbo URL passes through as-is.
|
|
213
199
|
- Same rule after compaction: pull the URL from `.kolbo/production.md` and reuse it. Never download-then-reupload.
|
|
214
200
|
|
|
215
201
|
## ⚠️ Assets Before Shots (HARD RULE)
|
|
@@ -282,7 +268,7 @@ A user-named tool — in any language — overrides every other rule. Recognized
|
|
|
282
268
|
- Pass the exact returned `id` as `preset_id`. Never invent an id.
|
|
283
269
|
|
|
284
270
|
1. **Check credits** ONCE per conversation (Step 0). Skip if already checked.
|
|
285
|
-
2. **Load the matching skill** (HARD RULE above)
|
|
271
|
+
2. **Load the matching skill** (HARD RULE above) before the first paid call in the turn.
|
|
286
272
|
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`).
|
|
287
273
|
4. **Pick the model**:
|
|
288
274
|
- 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.
|
|
@@ -290,21 +276,57 @@ A user-named tool — in any language — overrides every other rule. Recognized
|
|
|
290
276
|
- Auto-select → **only when no model was named on this task**. Then pick from "Auto-selectable" (models with a `summary`). Cheapest fit. Prefer `[RECOMMENDED]` when cost is similar.
|
|
291
277
|
- Never auto-select from "Named-only" section.
|
|
292
278
|
5. **Validate inputs** against model caps — see `references/workflows/cost-and-validation.md`.
|
|
293
|
-
6. **
|
|
294
|
-
7.
|
|
295
|
-
- **Stop immediately** after telling the user it's generating in Library / the card above (preferred when you do not need the output URLs yet), OR
|
|
296
|
-
- If the **next** required step needs those URLs, call `get_generation_status` **once** with `wait=true` (and `generation_ids` for a batch) as the **only** follow-up — no parallel Write/Edit/Think while it waits.
|
|
297
|
-
- A black preview on the chat card is expected until URLs exist — not a signal to retry.
|
|
298
|
-
8. **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.
|
|
299
|
-
9. **Share the URL** after success. Never fabricate URLs.
|
|
279
|
+
6. **Fire the call(s)** — then follow "⚠️ Generation lifecycle" below for waiting, status, and failure handling.
|
|
280
|
+
7. **Share the result** after success — per "⚠️ Generated URLs in Chat" and the no-fabricated-URLs rule in Limitations & Safety.
|
|
300
281
|
|
|
301
282
|
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`.
|
|
302
283
|
|
|
284
|
+
## ⚠️ Generation lifecycle — source of truth, waiting, failures (HARD RULE — read this)
|
|
285
|
+
|
|
286
|
+
**How calls work:** each generation tool blocks until the job 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` (or `_timed_out`) instantly — the card updates on its own.
|
|
287
|
+
|
|
288
|
+
Four surfaces show the same job. Use this map — never invent a fifth:
|
|
289
|
+
|
|
290
|
+
| Surface | What it is | Trust it for |
|
|
291
|
+
|---|---|---|
|
|
292
|
+
| **Library** (right panel — "This session" / "All media") | User-facing gallery of **completed** media | "Is the user's output there?" Point humans here — never to chat history. Finished clips/images land automatically — do **not** call `list_media` / `get_media` / `list_session_generations` to "check if it worked" after a generate you already submitted (burns credits/context, can pollute the session). A K/logo spinner tile **is** the in-progress placeholder for the same job, not a missing one. |
|
|
293
|
+
| **Chat generation card** | Progress chrome while a job is in flight | Status badge only (`Generating` / done). A **black / empty preview while Generating is NORMAL** — the iframe has nothing to paint yet. It is **not** failure, not "lost", not a reason to re-fire. |
|
|
294
|
+
| **`get_generation_status`** (MCP) | Agent API for job state | Whether the server job is `completed` / `failed` / still running, and the final `urls`. This is your SoT for in-flight work — **not** the card pixels. |
|
|
295
|
+
| **`.kolbo/production.md`** | Your private log across turns | Ids + URLs after success. Compaction-safe memory — not the user gallery. |
|
|
296
|
+
|
|
297
|
+
**🛑 NEVER re-fire a generation you already called.** Aborted / timed-out / `submitted` calls still process server-side. Finish with `get_generation_status` (`wait=true`) — never a second `generate_*`.
|
|
298
|
+
|
|
299
|
+
**🛑 After `submitted` / `_timed_out` — END THE TURN (credit guard).** Do **not** keep thinking, writing skills, editing files, or planning "next steps" while a generation is still running — that burns the user's coding/chat credits for nothing. Either **stop immediately** after telling the user it's generating in Library / the card above (preferred when you do not need the output URLs yet), OR — if the **next** required step needs those URLs — call `get_generation_status` **once** with `wait=true` as the **only** follow-up, no parallel Write/Edit/Think while it waits.
|
|
300
|
+
|
|
301
|
+
**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: check ALL in-flight ids in ONE call, never one by one, never without `wait`. If it comes back with some still processing, call it ONCE more with `wait=true` and the remaining ids.
|
|
302
|
+
|
|
303
|
+
**🛑 Runaway-loop guard — ONE generation per requested item.** When the user asks for **one specific change**, the answer is **a single tool call**. After URLs return, **stop**. Surface and wait. You are NOT allowed to:
|
|
304
|
+
- Fire the same tool 3+ times in a single turn unless the user explicitly asked for "N variations".
|
|
305
|
+
- Re-fire because you think the result might not be exactly what the user wanted.
|
|
306
|
+
- Auto-retry on success.
|
|
307
|
+
- Fire 5+ parallel `generate_video*` calls speculatively.
|
|
308
|
+
|
|
309
|
+
**Only re-fire when:** user explicitly asked for variations with a count, OR previous call returned `failure.retryable === true` (ONE retry), OR previous call returned `completed` but `urls.length === 0` (ONE retry).
|
|
310
|
+
|
|
311
|
+
**Detecting failure — a generation can fail three ways. Treat ALL as failure:**
|
|
312
|
+
|
|
313
|
+
1. **Tool returns `error`** — explicit. Surface, suggest retry, log `generation_id`.
|
|
314
|
+
2. **Tool returns `completed` but `urls` is empty** — silent failure (NSFW filter, model OOM, upstream 5xx). Tell user "completed without an output — retrying" and re-fire ONCE. Do NOT claim it worked.
|
|
315
|
+
3. **Tool hangs / never returns** — MCP poll timed out. Call `get_generation_status(generation_id, wait=true)` IMMEDIATELY. The server might be done.
|
|
316
|
+
|
|
317
|
+
**Reporting:**
|
|
318
|
+
- Don't celebrate before reading the result. Verify `urls` is non-empty.
|
|
319
|
+
- Don't auto-retry without surfacing the failure. Partial batches: list failed items + reasons + successful count, and surface the user's count — "6 of 8 ready", not "videos ready". Never "✅ all done!" on partials.
|
|
320
|
+
- Log only successes to `.kolbo/production.md` — never failed items.
|
|
321
|
+
- When done: say the result is in **Library → This session**. "Where is it?" → Library (This session). "Is it done?" with no urls yet → `get_generation_status` once.
|
|
322
|
+
|
|
323
|
+
`failure` envelope structure + retry rules: `references/workflows/troubleshooting.md`.
|
|
324
|
+
|
|
303
325
|
## 📁 Projects — Where Work Lands (CRITICAL)
|
|
304
326
|
|
|
305
327
|
Everything in Kolbo — sessions, generations, media, docs — lives inside a PROJECT. Getting this wrong is the #1 user complaint ("my work went to the wrong project").
|
|
306
328
|
|
|
307
|
-
1. **User names a project** ("in my Acme project", "for the film") → call `list_projects` ONCE to resolve the name to an ObjectId, then pass that **same** id as `project_id` on **EVERY** subsequent `generate_*` / `upload_media` / `create_doc` / `chat_send_message` call in **this conversation**. There is no server-side sticky store — omitting it on any later call silently lands in the default "API Generations" bucket (`is_default: true`). Once resolved, treat that id as required for the rest of the conversation. Accounts often hold hundreds of projects, so pass `list_projects({ search: "acme" })` rather than listing everything; the list is paginated (50/page) and hides archived projects unless you pass `include_archived: true`.
|
|
329
|
+
1. **User names a project** ("in my Acme project", "for the film") → call `list_projects` ONCE to resolve the name to an ObjectId, then pass that **same** id as `project_id` on **EVERY** subsequent `generate_*` / `upload_media` / `create_doc` / `chat_send_message` call in **this conversation**. There is no server-side sticky store — omitting it on any later call silently lands in the default "API Generations" bucket (`is_default: true`). Once resolved, treat that id as required for the rest of the conversation. Accounts often hold hundreds of projects, so pass `list_projects({ search: "acme" })` rather than listing everything; the list is paginated (50/page) and hides archived projects unless you pass `include_archived: true`. When the user starts new work, `create_project` first, then pass its id the same way.
|
|
308
330
|
2. **No project mentioned** → omit `project_id`; the default bucket is correct. Don't ask unless intent is ambiguous. If `list_sessions` already returned a `project_id` for the work you are continuing, keep passing that id.
|
|
309
331
|
3. **Work landed in the wrong project? MOVE it, never regenerate**: `move_session` relocates a whole session + all its media (works for any session type — the `session_id` from generation responses, chats, transcriptions); `move_media` / `bulk_move_media` / `move_folder_contents` relocate individual media items. Empty leftover sessions after a move: `delete_session` (soft-delete; `restore_session` undoes it). `rename_session` only changes the sidebar title.
|
|
310
332
|
|
|
@@ -330,26 +352,11 @@ How to thread:
|
|
|
330
352
|
|
|
331
353
|
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`.
|
|
332
354
|
|
|
333
|
-
## Cost Awareness — Quick Rules
|
|
334
|
-
|
|
335
|
-
Full tables + formulas in `references/workflows/cost-and-validation.md`. Quick rules:
|
|
336
|
-
|
|
337
|
-
- **Skip the brief/cost confirmation ONLY** when the user's message already pins model + count + aspect + creative direction (see "Confirm the Creative Brief" above). Low cost alone is **not** a reason to skip — cheap generations still get the one labeled confirmation unless the user chose the parameters.
|
|
338
|
-
- **Otherwise confirm** via the labeled-question card: the parameters + the credit cost, suggest a cheaper alternative if one fits, wait for the user's pick. Never fire on defaults the user didn't choose.
|
|
339
|
-
- **Batch totalling 100+ credits**: run `check_credits` first.
|
|
340
|
-
- **Quote real cost**: after firing, log `credits_used` (from the tool result) to `.kolbo/production.md` — never `base × count`.
|
|
341
|
-
- **Video/lipsync `credit` is per-SECOND, not per-clip**: `total = credit × duration`. This is the universal rule for video/firstlast/elements/motion_graphic/cast types, not a per-model exception — `list_models` states it inline now. The one carve-out is a model with `flat_credit_by_resolution` set.
|
|
342
|
-
- **Never state "credits remaining" from arithmetic** (opening balance − generation costs). Coding/chat usage deducts credits too, so the math is always wrong. Report cost only; if the user asks for their balance, call `check_credits` fresh at that moment.
|
|
343
|
-
|
|
344
355
|
## Rate Limiting & Batch Generation
|
|
345
356
|
|
|
346
357
|
- `generate_image`: 30/min. All other generation tools: 10/min per type. 300/min global. `upload_media`: 300/min, no credit cost.
|
|
347
|
-
- **⚠️ NEVER re-fire a generation you already called.** Aborted / timed-out / `submitted` calls still process server-side. Finish with `get_generation_status` (`wait=true`) — never a second `generate_*`. A black chat card or Library K-tile is not a missing job.
|
|
348
|
-
- **⚠️ NEVER keep working while a generation is in flight.** After `submitted` / `_timed_out`, end the turn or block on one `wait=true` status call. Writing production.md / skills / "merge decisions" while the card spins wastes coding credits.
|
|
349
|
-
- **Tracking a batch**: check ALL in-flight ids in ONE `get_generation_status` call with `generation_ids` + `wait=true`. Read `all_done` / `still_processing` from the response — do not check ids one by one, and never re-call without `wait`.
|
|
350
358
|
- **Batch ≤10 items**: output ALL tool calls in one response — they run concurrently.
|
|
351
359
|
- **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`.
|
|
352
|
-
- **`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.
|
|
353
360
|
|
|
354
361
|
## ⚠️ Multi-output? Default to `generate_creative_director` (CRITICAL)
|
|
355
362
|
|
|
@@ -361,18 +368,6 @@ Full tables + formulas in `references/workflows/cost-and-validation.md`. Quick r
|
|
|
361
368
|
|
|
362
369
|
**Parameter gotcha:** `num_images` (1–4, same prompt different seeds) on `generate_image` vs `scene_count` (1–8, distinct prompt per scene) on `generate_creative_director`. **Never pass `num_images` to Creative Director.**
|
|
363
370
|
|
|
364
|
-
## 🛑 Runaway-Loop Guard — ONE Generation per Requested Item (CRITICAL)
|
|
365
|
-
|
|
366
|
-
When the user asks for **one specific change**, the answer is **a single tool call**. After URLs return, **stop**. Surface and wait.
|
|
367
|
-
|
|
368
|
-
You are NOT allowed to:
|
|
369
|
-
- Fire the same tool 3+ times in a single turn unless the user explicitly asked for "N variations".
|
|
370
|
-
- Re-fire because you think the result might not be exactly what the user wanted.
|
|
371
|
-
- Auto-retry on success.
|
|
372
|
-
- Fire 5+ parallel `generate_video*` calls speculatively.
|
|
373
|
-
|
|
374
|
-
**Only re-fire when:** user explicitly asked for variations with a count, OR previous call returned `failure.retryable === true` (ONE retry), OR previous call returned `completed` but `urls.length === 0` (ONE retry).
|
|
375
|
-
|
|
376
371
|
## ⚠️ Editing an Existing Video → ONE Call, Not Frames-First (CRITICAL)
|
|
377
372
|
|
|
378
373
|
Existing video → modify → **single `generate_video_from_video` call** with source video URL + edit prompt.
|
|
@@ -393,22 +388,6 @@ For any ad / story / scene-based video **created from scratch** featuring a Visu
|
|
|
393
388
|
|
|
394
389
|
Skip frames-first only when the user says "go straight to video", single-shot quick experiments, or the user supplies approved frames. Full rules: `references/models/creative-director.md`.
|
|
395
390
|
|
|
396
|
-
## ⚠️ Detecting Failed Generations (CRITICAL)
|
|
397
|
-
|
|
398
|
-
A generation can fail three ways. Treat ALL as failure:
|
|
399
|
-
|
|
400
|
-
1. **Tool returns `error`** — explicit. Surface, suggest retry, log `generation_id`.
|
|
401
|
-
2. **Tool returns `completed` but `urls` is empty** — silent failure (NSFW filter, model OOM, upstream 5xx). Tell user "completed without an output — retrying" and re-fire ONCE. Do NOT log to `.kolbo/production.md`. Do NOT claim it worked.
|
|
402
|
-
3. **Tool hangs / never returns** — MCP poll timed out. Call `get_generation_status(generation_id, wait=true)` IMMEDIATELY. The server might be done.
|
|
403
|
-
|
|
404
|
-
**Always:**
|
|
405
|
-
- Don't celebrate before reading the result. Verify `urls` is non-empty.
|
|
406
|
-
- Don't auto-retry without surfacing the failure. Partial batches: list failed items + reasons + successful count. Never "✅ all done!" on partials.
|
|
407
|
-
- Don't log failed items to `.kolbo/production.md`. Only successes.
|
|
408
|
-
- Surface the user's count. "6 of 8 ready", not "videos ready".
|
|
409
|
-
|
|
410
|
-
`failure` envelope structure + retry rules: `references/workflows/troubleshooting.md`.
|
|
411
|
-
|
|
412
391
|
## ⚠️ Generated URLs in Chat (CRITICAL)
|
|
413
392
|
|
|
414
393
|
Chat renders markdown natively. `` = inline image. `[label](url)` = labeled link with preview.
|
package/skill/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.9.
|
|
1
|
+
0.9.7
|
|
@@ -18,7 +18,7 @@ A multi-scene batch generator. Submit 1–8 scenes in one go and the tool fans t
|
|
|
18
18
|
- **Cinema Manual** — per-scene **first frame + last frame** + per-scene prompt. Full cinematic control over composition transitions. Best for: hero shots, controlled camera moves, deliberate edits.
|
|
19
19
|
|
|
20
20
|
### Identity & Style Locks
|
|
21
|
-
- **Visual DNA** — attach a character/product preset via `visual_dna_ids` to lock identity across all scenes
|
|
21
|
+
- **Visual DNA** — attach a character/product preset via `visual_dna_ids` to lock identity across all scenes (e.g. main character + product + side character). The cap is per model — read `max_visual_dna` from `list_models`. See `workflows/visual-dna.md` for the `@name` syntax — every DNA must be tagged inside the prompt.
|
|
22
22
|
- **Moodboard** — attach `moodboard_id` (or `moodboard_ids`) for a curated mood/style reference that anchors the aesthetic of the whole batch.
|
|
23
23
|
- When the user mentions a recurring character/product, **ask** if they want to use a Visual DNA and recommend it. Same for a consistent aesthetic → recommend a Moodboard.
|
|
24
24
|
|
|
@@ -97,13 +97,7 @@ A great batch isn't 8 random shots — it's a sequence with intent. Pick one str
|
|
|
97
97
|
|
|
98
98
|
## Character-Driven Video — Frames First
|
|
99
99
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
1. **Generate the shot frames first** as still images via `generate_creative_director` with `scene_count` + `visual_dna_ids` + `workflow_type: "image"`. DNA is strongest in image generation; the user can approve cheaply before any expensive video runs.
|
|
103
|
-
2. **Confirm the frames with the user** if there are more than ~3 shots, or if the user hasn't said "go straight to video."
|
|
104
|
-
3. **Animate each frame** with `generate_video_from_image`, passing each approved frame as `image_url`.
|
|
105
|
-
|
|
106
|
-
Skip frames-first only when the user says "go straight to video / skip the storyboard", on single-shot quick experiments, or when the user supplies their own approved frames.
|
|
100
|
+
SKILL.md's frames-first rule applies. The Creative Director deltas: generate the frames via `generate_creative_director` with `workflow_type: "image"` (+ `scene_count`, `visual_dna_ids`), then animate each approved frame with `generate_video_from_image`, passing it as `image_url`.
|
|
107
101
|
|
|
108
102
|
## UGC sets and thumbnail sets
|
|
109
103
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# Music — Prompt Rules (Suno-led)
|
|
6
6
|
|
|
7
|
-
Load this file when the user wants AI-generated **music** — full songs, lyrics, instrumentals, jingles, scores, soundtracks, lo-fi beats, trailers, ad music. Primarily Suno; the same craft applies to other music models. For TTS / voice cloning see `models/prompt-copilot.md`. For sound effects see SKILL.md
|
|
7
|
+
Load this file when the user wants AI-generated **music** — full songs, lyrics, instrumentals, jingles, scores, soundtracks, lo-fi beats, trailers, ad music. Primarily Suno; the same craft applies to other music models. For TTS / voice cloning see `models/prompt-copilot.md`. For sound effects see `generate_sound` (SKILL.md tool table).
|
|
8
8
|
|
|
9
9
|
**Kolbo MCP routing:** call `generate_music`. Suno is a model option — use `list_models({ type: "music_gen" })` to see versions. Pass `instrumental` and `duration` as separate params; pass the Style/Description text as `style` and the Lyrics as `lyrics`.
|
|
10
10
|
|
|
@@ -101,7 +101,7 @@ For models that DO expose `negative_prompt` (some text-to-image variants), keep
|
|
|
101
101
|
| `21:9` | Ultrawide cinematic, banner |
|
|
102
102
|
| `3:1` / `1:3` | Hero banner, narrow strip |
|
|
103
103
|
|
|
104
|
-
Model-dependent — always check `supported_aspect_ratios` on the model via `list_models` before passing a value. See
|
|
104
|
+
Model-dependent — always check `supported_aspect_ratios` on the model via `list_models` before passing a value. See `references/workflows/cost-and-validation.md`.
|
|
105
105
|
|
|
106
106
|
### Safety / content policy
|
|
107
107
|
|
|
@@ -25,17 +25,12 @@ Load this file when the user wants a **Seedance 2 / Seedance 2.0** (ByteDance) v
|
|
|
25
25
|
- **MCP `duration` must match the Total line.** Pass `duration: X` (whole seconds) on `generate_video` / `generate_elements` / `generate_video_from_image` equal to the `Xs` in `Total: Xs / …`. Mismatch = wrong-length clip.
|
|
26
26
|
- **Then the Locked Intro** — `[GLOBAL LOOK]` / `[CAST]` / `[LOCATION]` (+ LOCATION MAP / CONTINUITY / PHYSICS for multi-shot) — before any shot. A one-liner `same character throughout` is not a character lock.
|
|
27
27
|
- **Order inside each shot**: Subject → Action → Camera → Constraints → (Audio/SFX if relevant). Do NOT restack GLOBAL LOOK style inside the shot.
|
|
28
|
-
- **Prompt length**: simple single-idea pieces ~120–280 words. Locked-intro cinematic typically 400–900 words. Shorter than ~120 words = random output. The
|
|
28
|
+
- **Prompt length**: simple single-idea pieces ~120–280 words. Locked-intro cinematic typically 400–900 words. Shorter than ~120 words = random output. The 10,000-char cap below always wins.
|
|
29
29
|
- **Shot count is user-directed.** If the user asks for N shots, deliver exactly N in one prompt unless they ask to split.
|
|
30
30
|
- **Always describe at least one camera movement per shot.**
|
|
31
31
|
- **Tell Seedance what the camera is NOT doing** (e.g. `no cuts, no zoom, natural head movement`) — this is what locks POV.
|
|
32
32
|
- **Final prompt is always English**, wrapped in a copy-ready code block. Detect intent in any language and reply in the user's language, but the prompt itself is English.
|
|
33
|
-
- **HARD CAP:
|
|
34
|
-
- Applies to ANY prompt: 1 shot or 6 shots, single POV or full montage — the WHOLE thing must fit under 8000 chars combined.
|
|
35
|
-
- It is NOT 8000 chars per shot. It is 8000 chars per prompt.
|
|
36
|
-
- If your draft exceeds 8000 chars, trim aggressively in this order: (1) cut redundant adjectives, (2) collapse the opening cinematic boilerplate, (3) shorten SFX lists, (4) merge or drop shots — keep escalation beats and cut filler beats, (5) tighten action descriptions to verb-led essentials.
|
|
37
|
-
- **Never** split into multiple prompts, multiple code blocks, or "part 1 / part 2" to evade the cap.
|
|
38
|
-
- Before outputting, internally count the characters of the final prompt as a single string. If > 8000, rewrite tighter and re-count. Repeat until ≤ 8000. Only then show the user.
|
|
33
|
+
- **HARD CAP: 10,000 characters TOTAL for the ENTIRE prompt** — measured as one single string including all shots, boilerplate, SFX lines, and the Total lines. It is per PROMPT, not per shot. **Never** split into multiple prompts, code blocks, or "part 1 / part 2" to evade the cap. Count the final prompt before output; if over, trim (cut adjectives, collapse boilerplate, shorten SFX lists, merge or drop shots) and re-count until it fits.
|
|
39
34
|
|
|
40
35
|
## Locked Intro (DEFAULT for any multi-shot cinematic — including Elements)
|
|
41
36
|
|
|
@@ -72,21 +67,11 @@ Total: Xs / N shots / AR
|
|
|
72
67
|
POSITIVE LOCKS: <2–4 sentences restating positions / mouth / optical signature>
|
|
73
68
|
```
|
|
74
69
|
|
|
75
|
-
When a Visual DNA exists, its exact `@DNA_name` IS the cast name — never place a nickname before it or substitute one later. For plain image refs use `@ImageN`.
|
|
76
|
-
|
|
77
70
|
## OUTPUT CONTRACT (WINS — same as help widget)
|
|
78
71
|
|
|
79
|
-
ONE fenced prompt. Required shape or the turn failed:
|
|
80
|
-
1. `N connected cinematic shots, Xs total, AR, Multishot ON`
|
|
81
|
-
2. `Total: Xs / N shots / AR`
|
|
82
|
-
3. GLOBAL LOOK → CAST → LOCATION → LOCATION MAP → CONTINUITY → PHYSICS (dense, before any shot)
|
|
83
|
-
4. `SHOT 1 — 0:00–0:02 — …` through SHOT N; timecodes sum to Xs; continuity bridge after SHOT 1
|
|
84
|
-
5. Closing `Total: Xs / N shots / AR` + short POSITIVE LOCKS
|
|
85
|
-
6. Tool call `duration` = Xs
|
|
86
|
-
|
|
87
72
|
FORBIDDEN: omitting Total / Multishot; "same character throughout" as the only lock; one fence per shot; `[0s]`/`[3s]` stubs; splitting a ≤15s story into multiple generations unless the user asks.
|
|
88
73
|
|
|
89
|
-
## The
|
|
74
|
+
## The 6 Formats
|
|
90
75
|
|
|
91
76
|
### 1. Transformations (highest-performing format)
|
|
92
77
|
- Numbered shots, beat by beat.
|
|
@@ -248,7 +233,7 @@ Place CAMERA in the **3rd position** of each shot's core layers (Subject → Act
|
|
|
248
233
|
- No equipment / director names?
|
|
249
234
|
- Emotion through muscle, not labels?
|
|
250
235
|
- Multishot: FOV per segment + "no drift mid-segment"?
|
|
251
|
-
-
|
|
236
|
+
- prompt-cap honored?
|
|
252
237
|
|
|
253
238
|
## Grid Storyboard Mode (3×3 grid input)
|
|
254
239
|
|
|
@@ -273,7 +258,6 @@ When the user uploads a 3×3 grid image and asks for Seedance prompts, switch to
|
|
|
273
258
|
- Final prompt(s) ALWAYS in a fenced code block ready to paste into Seedance.
|
|
274
259
|
- After the code block, give a 1-line "why this works" note (camera/escalation/physics choice).
|
|
275
260
|
- If user asked in any language other than English, write your explanation in their language but keep the prompt itself English.
|
|
276
|
-
- **Never exceed 8000 characters TOTAL for the entire prompt as one string** — that is the WHOLE prompt including every shot, every line of boilerplate, every SFX list, every newline. NOT 8000 per shot — 8000 for the prompt as one combined unit. Count before output. If over, rewrite tighter (cut adjectives, collapse boilerplate, merge or drop shots). NEVER split into multiple prompts / multiple code blocks / "part 1 / part 2" to work around the limit.
|
|
277
261
|
|
|
278
262
|
## Where to run in Kolbo
|
|
279
263
|
|
|
@@ -286,4 +270,4 @@ Seedance 2 lives in the **Video** category. Route the prompt card by the INPUTS:
|
|
|
286
270
|
|
|
287
271
|
## Seedance + Visual DNA / References
|
|
288
272
|
|
|
289
|
-
When a character must stay consistent, pair Seedance with Visual DNA via `generate_elements` (NOT `generate_video` — text-to-video silently drops `visual_dna_ids`).
|
|
273
|
+
When a character must stay consistent, pair Seedance with Visual DNA via `generate_elements` (NOT `generate_video` — text-to-video silently drops `visual_dna_ids`). `@DNA_name` tagging rules: see `workflows/visual-dna.md`. For grid/storyboard inputs, the source frame is `@image1`.
|
|
@@ -20,7 +20,7 @@ Load this file when the user wants a **Seedance 2.5** video (they said "2.5" / "
|
|
|
20
20
|
- **Duration 4–30 seconds**, whole seconds. 30s IS supported.
|
|
21
21
|
- **Up to 30 shots/cuts in ONE generation.** Deliver exactly N if N ≤ 30.
|
|
22
22
|
- **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.
|
|
23
|
-
- **
|
|
23
|
+
- **Large reference / Visual DNA capacity** (`@Name`, `@ImageN`, `#Moodboard`) — read the exact caps from `max_visual_dna` / `elements_max_images` in `list_models`. 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.
|
|
24
24
|
- **Multimodal refs:** images + video clips + audio can all anchor one generation.
|
|
25
25
|
|
|
26
26
|
## Universal Rules (HARD — same as help widget OUTPUT CONTRACT)
|
|
@@ -15,7 +15,7 @@ Load this file when the user wants a **Veo 3 / Veo 3.1** (Google) video. For oth
|
|
|
15
15
|
## CRITICAL Kolbo Platform Rules
|
|
16
16
|
|
|
17
17
|
- **Aspect ratio, resolution, and clip length are MCP-tool params** (`aspect_ratio`, `resolution`, `duration`). **NEVER include "16:9", "9:16", "720p", "1080p", "4 seconds", "8s", or any duration / aspect / resolution string inside the prompt body.**
|
|
18
|
-
- Pass `sound_enabled: true/false` as a separate param when the user mentions audio — see
|
|
18
|
+
- Pass `sound_enabled: true/false` as a separate param when the user mentions audio — see `workflows/cost-and-validation.md`.
|
|
19
19
|
- Don't write Python / Vertex AI / API call syntax. The user is generating through Kolbo's MCP tools.
|
|
20
20
|
|
|
21
21
|
## Model Capabilities (informs recommendations, never in the prompt body)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Color DNA — Brand Palette Grading
|
|
2
|
+
|
|
3
|
+
Load this file when the user works with Color DNA / color palettes: creating, activating, analyzing, or opting a generation out of palette grading.
|
|
4
|
+
|
|
5
|
+
Core contract (also in SKILL.md): **Color DNA is sticky and account-wide — at most one palette is active at a time**, and while one is active it strict-grades **every** image and video generation automatically, with no per-call argument.
|
|
6
|
+
|
|
7
|
+
Operational detail:
|
|
8
|
+
|
|
9
|
+
- `analyze_color_palette` pulls colors out of 1–5 image URLs **for free** and does **NOT** save anything — use it to draft a palette before creating one.
|
|
10
|
+
- `create_color_palette` defaults `is_active: true`, which activates the new palette and deactivates any other active one.
|
|
11
|
+
- Per-generation opt-out: `skip_color_palette: true` on `generate_image` / `generate_image_edit` / `generate_video` / `generate_video_from_image`.
|
|
12
|
+
- Manage with `list_color_palettes` / `update_color_palette` / `activate_color_palette` / `deactivate_color_palette` / `delete_color_palette` (edit in place — never delete+recreate).
|
|
@@ -8,9 +8,9 @@ Creative generations bill against the user's Kolbo credit balance. **Billing uni
|
|
|
8
8
|
|
|
9
9
|
| Type | Billing unit | Credit range | Example |
|
|
10
10
|
|------|-------------|-------------|---------|
|
|
11
|
-
| **Image** | per image (flat) | 1–30 cr | Flux.1 Fast = 1 cr, Midjourney = 4 cr. If `resolution` is set, check `
|
|
11
|
+
| **Image** | per image (flat) | 1–30 cr | Flux.1 Fast = 1 cr, Midjourney = 4 cr. If `resolution` is set, check `resolution_multipliers` — some families multiply cost significantly at higher tiers. |
|
|
12
12
|
| **Image edit** | per image (flat) | 2–20 cr | |
|
|
13
|
-
| **Video** | **cr/s × duration** | 2–30 cr/s | Kandinsky 5 Fast × 5s = 10 cr; Seedance 2.0 × 10s = 300 cr. Check `
|
|
13
|
+
| **Video** | **cr/s × duration** | 2–30 cr/s | Kandinsky 5 Fast × 5s = 10 cr; Seedance 2.0 × 10s = 300 cr. Check `resolution_multipliers` + `sound_credit_multiplier`. |
|
|
14
14
|
| **Video from image** | **cr/s × duration** | 4–30 cr/s | Same per-second rule. |
|
|
15
15
|
| **Elements (ref-to-video)** | **cr/s × duration** | 4–30 cr/s | Check `credit` and multipliers in `list_models type="elements"`. |
|
|
16
16
|
| **Lipsync** | **cr/s × duration** | 5–20 cr/s | |
|
|
@@ -28,7 +28,7 @@ Apply when confirming cost before firing:
|
|
|
28
28
|
- **Music**: flat per generation — `total = model_credit` (duration does not change cost).
|
|
29
29
|
- **TTS**: `total = model_credit × ceil(character_count / 100)`. Count actual characters first. 1000 chars with ElevenLabs = 50 credits.
|
|
30
30
|
- **Images / 3D / Sound effects**: `total = model_credit × quantity`.
|
|
31
|
-
- **Resolution / audio multipliers**: if `resolution` is set or model has native audio, read `
|
|
31
|
+
- **Resolution / audio multipliers**: if `resolution` is set or model has native audio, read `resolution_multipliers[tier]` and `sound_credit_multiplier`. Formula: `final = base × resolutionMult × (sound ? soundMult : 1) × durationSeconds`.
|
|
32
32
|
|
|
33
33
|
### Tier label → pixel mapping (rough)
|
|
34
34
|
|
|
@@ -38,8 +38,7 @@ Apply when confirming cost before firing:
|
|
|
38
38
|
## When to Confirm Cost
|
|
39
39
|
|
|
40
40
|
**Skip cost confirmation when:**
|
|
41
|
-
-
|
|
42
|
-
- A single generation costs under 5 credits.
|
|
41
|
+
- Model + count + aspect + creative direction are already pinned by the user ("make 5 videos, seedance 2 fast, 15s" IS the confirmation).
|
|
43
42
|
|
|
44
43
|
**Required cost confirmation when:**
|
|
45
44
|
- Anything else — present a one-line summary: "8 videos × 5s × [model] @ X cr/s = **Y credits**. Proceed?"
|
|
@@ -52,21 +51,7 @@ Apply when confirming cost before firing:
|
|
|
52
51
|
|
|
53
52
|
## ⚠️ Quote Real Cost, Never Estimates (CRITICAL)
|
|
54
53
|
|
|
55
|
-
Pre-flight formulas above are for **preview only
|
|
56
|
-
|
|
57
|
-
```json
|
|
58
|
-
{
|
|
59
|
-
"credits_used": 12,
|
|
60
|
-
"credits_breakdown": [
|
|
61
|
-
{ "model": "nano-banana-2", "base": 8, "final": 12, ... }
|
|
62
|
-
],
|
|
63
|
-
"urls": [...]
|
|
64
|
-
}
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
**Log `credits_used` to `.kolbo/production.md`**, not `base × count`. The multiplier-adjusted number is the only truth.
|
|
68
|
-
|
|
69
|
-
When the user asks "how much did I spend?" → call `get_session_usage` for the real, multiplier-adjusted session total + per-tool + per-model breakdowns (same numbers as the desktop bottom-bar counter).
|
|
54
|
+
Pre-flight formulas above are for **preview only** — after firing, quote the returned `credits_used`, never `base × count`. Log `credits_used`, resolution, duration and sound state per entry — format in `production-log.md`.
|
|
70
55
|
|
|
71
56
|
## Validation Pattern — Every Generation
|
|
72
57
|
|
|
@@ -132,9 +117,4 @@ Cost formula: `final_cost = credit × resolution_multipliers[resolution] × (sou
|
|
|
132
117
|
|
|
133
118
|
## Always Log the Resolution / Duration / Sound Choices
|
|
134
119
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
```md
|
|
138
|
-
- still: https://...01-coffee.png (flux-2-pro · 1K, 2026-05-14)
|
|
139
|
-
- video: https://...02-rain.mp4 (kling-2 · 1080p · 5s · sound-off, 2026-05-14)
|
|
140
|
-
```
|
|
120
|
+
Log `credits_used`, resolution, duration and sound state per entry — format in `production-log.md`.
|
|
@@ -122,5 +122,5 @@ Default-to-cheapest when the user hasn't expressed a quality intent and the diff
|
|
|
122
122
|
2. **Always confirm aspect ratio + resolution + quantity** before firing.
|
|
123
123
|
3. **Always check for a brand kit** before scraping fresh — `Read .kolbo/brand-kits/<slug>.md` first.
|
|
124
124
|
4. **Always log products + brand kits in `.kolbo/production.md`** so future ads reuse instead of re-uploading / re-scraping.
|
|
125
|
-
5. **
|
|
125
|
+
5. **Retries:** one retry only when `failure.retryable === true` or the generation completed with empty URLs (SKILL.md "⚠️ Generation lifecycle"); otherwise surface the reason and let the user adjust.
|
|
126
126
|
6. **Strict NO uninvited additions** in every ad prompt: "NO captions, NO subtitles, NO watermarks, NO extra text beyond what's specified."
|