@kolbo/mcp 1.21.1 → 1.22.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolbo/mcp",
3
- "version": "1.21.1",
3
+ "version": "1.22.0",
4
4
  "description": "Kolbo AI MCP Server - Generate images, videos, music, speech, and sound effects from Claude Code",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -37,6 +37,7 @@
37
37
  "files": [
38
38
  "src/",
39
39
  "bin/",
40
+ "skill/",
40
41
  "README.md"
41
42
  ],
42
43
  "dependencies": {
package/skill/SKILL.md ADDED
@@ -0,0 +1,251 @@
1
+ ---
2
+ version: 0.4.0
3
+ name: kolbo
4
+ description: |
5
+ Generate, edit, or analyze creative media via the Kolbo AI MCP server.
6
+ Covers images (GPT Image 2, Nano Banana, Flux, ...), video (Seedance 2,
7
+ Veo 3.1, Kling, Hailuo, ...), music (Suno), TTS (ElevenLabs), 3D,
8
+ transcription, Visual DNA (character consistency), Marketing Studio
9
+ (UGC + DTC ads + product photoshoot + marketplace cards),
10
+ Creative Director (multi-scene batches), HTML artifact publishing
11
+ (presentations, landing pages, dashboards), and the App Builder.
12
+
13
+ Use when: "generate", "create", "make me a", "edit", "animate",
14
+ "transcribe", "Visual DNA", "the same character", "UGC ad",
15
+ "TikTok / Reels / Shorts", "unboxing", "product review", "TV spot",
16
+ "Pinterest pin", "product photo", "lifestyle shot", "hero banner",
17
+ "ad pack", "social carousel", "virtual try-on", "Amazon listing",
18
+ "marketplace cards", "A+ content", "build a presentation/slide deck",
19
+ "landing page", "dashboard / widget / game", "music / song / jingle",
20
+ "TTS / voice", "sound effect", "3D model", "build me an app".
21
+
22
+ Chain: train Visual DNA → use vdna_id in any DNA-aware tool;
23
+ research-first → persist brand kit (.kolbo/brand-kits/) → DTC ads /
24
+ product photoshoot / marketplace cards; generate frames (Creative
25
+ Director) → animate each frame (generate_video_from_image).
26
+
27
+ NOT for: video editing / FFmpeg work (use video-production skill),
28
+ motion graphics (use remotion-best-practices skill), code editing,
29
+ general chat outside media generation.
30
+ argument-hint: "[prompt-or-command] [--model <name>] [--image <path>] [--video <path>]"
31
+ allowed-tools: Bash, Read, Write, Edit
32
+ ---
33
+
34
+ # Kolbo AI — Creative Generation, Analysis & Transcription
35
+
36
+ You have direct access to the Kolbo AI creative platform via MCP tools (auto-configured by `kolbo auth login`). Use them to generate and deliver real content — do NOT just describe what you would create.
37
+
38
+ > 🚫 **Don't dump generated URLs as bare text or markdown links in chat** — the UI already renders artifacts as a gallery tile + canvas. Refer by description ("the rainy scene"), store URLs in `.kolbo/production.md`. INLINE `![](url)` images ARE allowed for catalog-style replies (per-item thumbs in numbered lists).
39
+
40
+ 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.
41
+
42
+ ## Step 0 — Bootstrap
43
+
44
+ Once per conversation, before any other Kolbo tool call:
45
+
46
+ 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.
47
+ 2. **If `list_models` returns empty**, MCP isn't wired — same fix.
48
+ 3. Remember the credit balance for the session; don't re-check on every turn.
49
+
50
+ If the user is on a whitelabel build (`sapir`, etc.), they must use their branded command — not `kolbo`. See `references/workflows/troubleshooting.md`.
51
+
52
+ ## Routing Index — Read These Files on Demand
53
+
54
+ | If the user wants to… | Read first |
55
+ |---|---|
56
+ | Generate a **Seedance 2** video | `references/models/seedance.md` |
57
+ | Generate a **GPT Image 2** image | `references/models/gpt-image.md` |
58
+ | Generate a **Nano Banana / Gemini** image | `references/models/nano-banana.md` |
59
+ | Generate a **Veo 3 / 3.1** video | `references/models/veo.md` |
60
+ | Build a **multi-scene set** (Creative Director, storyboard, campaign batch, 4+ angles) | `references/models/creative-director.md` |
61
+ | Generate **music** (Suno, song, lyrics, jingle, score) | `references/models/music.md` |
62
+ | Build an **HTML presentation / slide deck** | `references/models/html-presentation.md` |
63
+ | Build a **landing page / marketing site** | `references/models/landing-page.md` |
64
+ | Build a **dashboard / data viz / interactive widget / mini-game / UI mockup** | `references/models/visual-code.md` |
65
+ | Generate with **any other model** (Flux, Kling, Sora, Hailuo, ElevenLabs, DeepDub, …) — also covers universal prompt-engineering basics | `references/models/prompt-copilot.md` |
66
+ | Build a **UGC ad / TV spot / branded video / unboxing / product review / virtual try-on** | `references/workflows/marketing-studio.md` |
67
+ | Compose a **DTC ad image** (brand kit + ad format + avatar + product + reference media) | `references/workflows/dtc-ads.md` |
68
+ | Generate **brand product imagery** (studio shot, lifestyle, Pinterest pin, hero banner, carousel, ad pack, virtual try-on, conceptual, restyle) | `references/workflows/product-photoshoot.md` |
69
+ | Generate **marketplace listing cards** (Amazon main + secondary + A+ content) | `references/workflows/marketplace-cards.md` |
70
+ | Use **Visual DNA** / character consistency / `@name` syntax | `references/workflows/visual-dna.md` |
71
+ | Start or continue a **multi-step production** (storyboard → scenes → final cut) | `references/workflows/production-log.md` |
72
+ | **Transcribe** or **analyze** audio/video | `references/workflows/transcription.md` |
73
+ | **Scrape brand/product info** before generating + persist as `.kolbo/brand-kits/<slug>.md` | `references/workflows/research-first.md` |
74
+ | Browse, manage, or present existing **media library** items | `references/workflows/media-library.md` |
75
+ | Use the **App Builder** (React app generation) | `references/workflows/app-builder.md` |
76
+ | Confirm **cost** or validate **resolution / aspect / duration** against model caps | `references/workflows/cost-and-validation.md` |
77
+ | Hit an **auth / MCP / 429** issue | `references/workflows/troubleshooting.md` |
78
+
79
+ Each `references/models/*.md` mirrors the matching skill prompt in `kolbo-api/src/config/systemPrompt.js` — same battle-tuned rules that power Kolbo's web-app help widget. Keep parity (see `packages/opencode/CLAUDE.md` "MCP & Skill Sync Rule").
80
+
81
+ ## Available MCP Tools
82
+
83
+ ### Generation
84
+ | Tool | Description |
85
+ |------|-------------|
86
+ | `generate_image` | Single image from a text prompt. Supports Visual DNA, moodboards, reference images, web-search grounding. |
87
+ | `generate_image_edit` | Edit/transform an existing image. Pass `source_images` + edit prompt. |
88
+ | `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. |
89
+ | `generate_video` | Text-to-video. Does **not** support Visual DNA — use `generate_elements` for character-consistent video. |
90
+ | `generate_video_from_image` | Animate a still. Prompt describes motion, not subject. |
91
+ | `generate_video_from_video` | Restyle/transform an existing video. Keeps original motion. |
92
+ | `generate_elements` | Reference-driven video. **Primary route for DNA → video.** |
93
+ | `generate_first_last_frame` | Keyframe interpolation between two frames. |
94
+ | `generate_lipsync` | Lipsync audio to an image or video face. |
95
+ | `generate_music` | Music generation (Suno + variants). |
96
+ | `generate_speech` | TTS. Use `list_voices` to pick a voice. |
97
+ | `generate_sound` | Sound effects. |
98
+ | `generate_3d` | 3D models from text / single image / multi-view. Returns GLB/FBX/OBJ/USDZ. |
99
+
100
+ ### Discovery, Library, Visual DNA, Moodboards, Chat, App Builder, Publishing
101
+ | Tool | Purpose |
102
+ |------|---------|
103
+ | `list_models` / `list_voices` / `check_credits` / `get_generation_status` / `get_session_usage` | Discovery + status |
104
+ | `upload_media` / `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` |
105
+ | `create_visual_dna` / `list_visual_dnas` / `get_visual_dna` / `delete_visual_dna` | Visual DNA — see `workflows/visual-dna.md` |
106
+ | `list_moodboards` / `get_moodboard` / `list_presets` | Style overlays |
107
+ | `chat_send_message` / `chat_list_conversations` / `chat_get_messages` | Kolbo chat with optional `media_urls` (up to 10 per call) |
108
+ | `app_builder_*` (9 tools) | Full React app generation — see `workflows/app-builder.md` |
109
+ | `publish_html_artifact` | Publish HTML / SVG / Mermaid to `sites.kolbo.ai`. Server dedupes by content hash. Strict CSP. |
110
+
111
+ ## ⚠️ If the User Names a Tool, USE THAT TOOL (HARD RULE)
112
+
113
+ A user-named tool — in any language — overrides every other rule. Recognized aliases:
114
+
115
+ | User said (any language) | Use exactly |
116
+ |---|---|
117
+ | "director", "creative director", **"במאי"**, "ad set", "campaign tool", "storyboard tool" | `generate_creative_director` |
118
+ | "image edit", "edit", "modify", "remove background", **"עריכת תמונה"** (paired with a per-image instruction) | `generate_image_edit` |
119
+ | "elements" / **"אלמנטים"** | `generate_elements` |
120
+ | "first/last frame" / **"פריימים"** | `generate_first_last_frame` |
121
+ | "lipsync" / **"ליפסינק"** | `generate_lipsync` |
122
+
123
+ **Mixed signals — named tool always wins.** "Image edit with the director tool to make 4 angles" → `generate_creative_director`.
124
+
125
+ ## ⚠️ Generate vs Edit (when the user did NOT name a tool)
126
+
127
+ | User intent | Action | NOT this |
128
+ |-------------|--------|----------|
129
+ | "Create a video from scratch" | `generate_video` | — |
130
+ | "Edit / Cut / Trim / Add subtitles / Remove silence / Convert to 9:16" | Load `video-production` skill → FFmpeg | ❌ `generate_video` |
131
+ | "Create motion graphics / animated text / title sequence" | Load `remotion-best-practices` skill | ❌ `generate_video` |
132
+ | "Animate this image" | `generate_video_from_image` | — |
133
+ | "Restyle this video as anime" | `generate_video_from_video` | — |
134
+ | "Modify THIS one image" — change bg, remove object, recolor | `generate_image_edit` | ❌ Not for multi-output |
135
+ | "4 angles / poses / views of this character" / "variations of this character" | `generate_creative_director` with `visual_dna_ids` | ❌ Don't loop `generate_image_edit` |
136
+ | "4 variations of THIS exact image" (same prompt, different seeds) | `generate_image` with `num_images=4` | ❌ Not `generate_image_edit` |
137
+
138
+ ## Core Workflow
139
+
140
+ 1. **Check credits** ONCE per conversation (Step 0). Skip if already checked.
141
+ 2. **Discover models** with `list_models` using a `type` filter — but **skip when the user names a specific model**.
142
+ 3. **Pick the model**:
143
+ - User named one → use it.
144
+ - Auto-select → only from "Auto-selectable" section (models with a `summary`). Cheapest fit. Prefer `[RECOMMENDED]` when cost is similar.
145
+ - Never auto-select from "Named-only" section.
146
+ 4. **Validate inputs** against model caps — see `references/workflows/cost-and-validation.md`.
147
+ 5. **How calls work**: each tool blocks until generation is fully complete. Images: seconds. Video: minutes. Multiple tool calls in one response run concurrently. If a call times out, use `get_generation_status` with the returned generation ID.
148
+ 6. **Share the URL** after success. Never fabricate URLs.
149
+
150
+ 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`.
151
+
152
+ ## Cost Awareness — Quick Rules
153
+
154
+ Full tables + formulas in `references/workflows/cost-and-validation.md`. Quick rules:
155
+
156
+ - **Skip cost confirmation** when the user already specified model + count + duration, OR when a single generation costs < 5 credits.
157
+ - **Required cost confirmation** otherwise: one-line summary, suggest cheaper alternative if available, wait for confirm.
158
+ - **Batch totalling 100+ credits**: run `check_credits` first.
159
+ - **Quote real cost**: after firing, log `credits_used` (from the tool result) to `.kolbo/production.md` — never `base × count`.
160
+
161
+ ## Rate Limiting & Batch Generation
162
+
163
+ - `generate_image`: 30/min. All other generation tools: 10/min per type. 300/min global. `upload_media`: 300/min, no credit cost.
164
+ - **⚠️ NEVER re-fire a generation you already called.** Aborted / timed-out calls still process server-side. Run `get_generation_status` before retrying.
165
+ - **Batch ≤10 items**: output ALL tool calls in one response — they run concurrently.
166
+ - **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`.
167
+ - **`upload_media` external URLs first.** `files`/`source_images`/`image_url` only accept Kolbo-hosted URLs reliably; external URLs cause `400`.
168
+
169
+ ## ⚠️ Multi-output? Default to `generate_creative_director` (CRITICAL)
170
+
171
+ `generate_creative_director` is **an agent**, not a niche tool. Plans each scene internally, locks consistency, runs in parallel. For 2+ related outputs, it's almost always right.
172
+
173
+ **Tie-breaker:** about to fire ≥2 `generate_image` calls and the user did NOT dictate per-image prompts? Stop. Use `generate_creative_director`.
174
+
175
+ **Never loop `generate_image` sequentially.** Either Creative Director or one parallel batch.
176
+
177
+ **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.**
178
+
179
+ ## 🛑 Runaway-Loop Guard — ONE Generation per Requested Item (CRITICAL)
180
+
181
+ When the user asks for **one specific change**, the answer is **a single tool call**. After URLs return, **stop**. Surface and wait.
182
+
183
+ You are NOT allowed to:
184
+ - Fire the same tool 3+ times in a single turn unless the user explicitly asked for "N variations".
185
+ - Re-fire because you think the result might not be exactly what the user wanted.
186
+ - Auto-retry on success.
187
+ - Fire 5+ parallel `generate_video*` calls speculatively.
188
+
189
+ **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).
190
+
191
+ ## ⚠️ Editing an Existing Video → ONE Call, Not Frames-First (CRITICAL)
192
+
193
+ Existing video → modify → **single `generate_video_from_video` call** with source video URL + edit prompt.
194
+
195
+ **Use a TRUE video-to-video model.** Image-to-video models reject with `WRONG_MODEL_TYPE`. Valid: `wan/2-7-videoedit`, `happyhorse/video-edit`, `kling-video/o3-video-to-video`, or any model whose DB `type` includes `video_to_video` (use `list_models({ type: "video_to_video" })`).
196
+
197
+ **Do NOT** decompose into frames. **Do NOT** re-fire if the first call returned URLs.
198
+
199
+ ## ⚠️ Character-Driven Video — Frames First, Then Animate (CRITICAL)
200
+
201
+ For any ad / story / scene-based video **created from scratch** featuring a Visual DNA character (NOT v2v edits):
202
+
203
+ 1. **Generate the shot frames first** via `generate_creative_director` with `scene_count` + `visual_dna_ids` (image mode). DNA is strongest in image gen; user can approve cheaply.
204
+ 2. **Confirm the frames** if >3 shots.
205
+ 3. **Animate each frame** with `generate_video_from_image`, fired in parallel.
206
+
207
+ 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`.
208
+
209
+ ## ⚠️ Detecting Failed Generations (CRITICAL)
210
+
211
+ A generation can fail three ways. Treat ALL as failure:
212
+
213
+ 1. **Tool returns `error`** — explicit. Surface, suggest retry, log `generation_id`.
214
+ 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.
215
+ 3. **Tool hangs / never returns** — MCP poll timed out. Call `get_generation_status(generation_id)` IMMEDIATELY. The server might be done.
216
+
217
+ **Always:**
218
+ - Don't celebrate before reading the result. Verify `urls` is non-empty.
219
+ - Don't auto-retry without surfacing the failure. Partial batches: list failed items + reasons + successful count. Never "✅ all done!" on partials.
220
+ - Don't log failed items to `.kolbo/production.md`. Only successes.
221
+ - Surface the user's count. "6 of 8 ready", not "videos ready".
222
+
223
+ `failure` envelope structure + retry rules: `references/workflows/troubleshooting.md`.
224
+
225
+ ## ⚠️ Generated URLs in Chat (CRITICAL)
226
+
227
+ Chat renders markdown natively. `![alt](url)` = inline image. `[label](url)` = labeled link with preview.
228
+
229
+ - **Catalog-style replies** (numbered lists of characters / scenes / products): embed `![alt](url)` so each item shows inline.
230
+ - **Conversational replies** ("4 shots ready"): keep prose short; canvas chip already shows gallery.
231
+
232
+ Avoid bare URL dumps and HTML `<table>` grids — canvas already provides a gallery.
233
+
234
+ **After `generate_creative_director` completes** — share results as individual URLs, one per scene. Do NOT create an HTML grid artifact.
235
+
236
+ **Always** record every URL in `.kolbo/production.md` — see `references/workflows/production-log.md`.
237
+
238
+ ## Limitations & Safety
239
+
240
+ - **Real people**: never identify specific individuals in photos, even public figures. Describe visible attributes only.
241
+ - **NSFW**: Kolbo enforces content safety at the model level. If a generation fails on safety grounds, rephrase rather than retrying identically.
242
+ - **Copyright**: style references are fine ("in the style of Studio Ghibli"); verbatim reproduction is not.
243
+ - **No fabricated URLs**: only share URLs that actually came back from a tool call.
244
+
245
+ ## Sharing HTML Artifacts
246
+
247
+ HTML/SVG/Mermaid artifacts have a **Share** button in the preview toolbar that uploads the artifact and copies a permanent public URL (no login required to view). Or call `publish_html_artifact({ title, content })` directly.
248
+
249
+ ---
250
+
251
+ If at this point you still don't know which `references/` file to load, default to `references/models/prompt-copilot.md` for generation prompts or `references/workflows/cost-and-validation.md` for cost/validation questions, or just keep going with this core file's rules.
package/skill/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.4.0
@@ -0,0 +1,106 @@
1
+ <!-- PARITY: this file mirrors getCreativeDirectorPromptSystemPrompt() in
2
+ kolbo-api/src/config/systemPrompt.js (lines ~1062–1155).
3
+ When that function changes, update this file in the same session. -->
4
+
5
+ # Creative Director — Multi-Scene Prompt Rules
6
+
7
+ Load this file when the user wants **2–8 related outputs from one brief** — storyboards, ad campaigns, character lookbooks, multi-angle/multi-pose sets, scene variations. For single-image work see `models/gpt-image.md` / `models/nano-banana.md`. For single-clip video see `models/seedance.md` / `models/veo.md`.
8
+
9
+ **Kolbo MCP routing:** always call `generate_creative_director` (NEVER fire ≥2 `generate_image` calls in a loop). Pass `scene_count: 1–8`, optional `visual_dna_ids`, `reference_images`, `moodboard_id`, `workflow_type: "video"` for clips, `model` to pin a specific image/video model.
10
+
11
+ ## What the Creative Director Tool Is
12
+
13
+ A multi-scene batch generator. Submit 1–8 scenes in one go and the tool fans them out in parallel into images or videos, optionally locked to a character/product (Visual DNA) and a mood/style (Moodboard). Total wall time = slowest scene, not the sum.
14
+
15
+ ### The Three Modes
16
+ - **Photo Auto Pilot** — each scene = one image. Optional reference images for style/subject. Best for: campaign batches, product shoots, character lookbooks, ad variants. Pass `workflow_type: "image"` (or omit — image is default).
17
+ - **Video Auto Pilot** — each scene = one short video clip. Optional reference image per scene anchors the starting frame. Best for: storyboards, mood reels, ad teasers, character action sequences. Pass `workflow_type: "video"`.
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
+
20
+ ### Identity & Style Locks
21
+ - **Visual DNA** — attach a character/product preset via `visual_dna_ids` to lock identity across all scenes. Up to **8 Visual DNAs** can be active at once (e.g. main character + product + side character). See `workflows/visual-dna.md` for the `@name` syntax — every DNA must be tagged inside the prompt.
22
+ - **Moodboard** — attach `moodboard_id` (or `moodboard_ids`) for a curated mood/style reference that anchors the aesthetic of the whole batch.
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
+
25
+ ## CRITICAL Kolbo Platform Rules
26
+
27
+ - **Aspect ratio and resolution are MCP-tool params** (`aspect_ratio`, `resolution`) — NEVER include "16:9", "9:16", "1024x1536", "2K", or any size syntax inside the scene prompts.
28
+ - **Model selection is the `model` param** — never hardcode "Nano Banana", "Veo", "Seedance", "Flux" inside the scene text.
29
+ - Output scenes in the exact format below — anything else breaks the parser.
30
+ - **Never pass `num_images` to `generate_creative_director`** — use `scene_count` (1–8). `num_images` is for `generate_image` (same prompt, different seeds).
31
+
32
+ ## The Output Format (non-negotiable)
33
+
34
+ All scenes go in **ONE fenced code block** in this exact shape:
35
+ ```
36
+ Scene 1: <prompt for scene 1>
37
+ Scene 2: <prompt for scene 2>
38
+ Scene 3: <prompt for scene 3>
39
+ ...
40
+ ```
41
+ - One scene per line. Each line starts with `Scene N:` followed by a single concise prompt.
42
+ - **No meta-commentary inside the block**: no "Output:", "Tips:", "Notes:", resolution, dimensions, or "this scene…" preamble.
43
+ - Number sequentially from 1. Hard cap at 8 scenes.
44
+
45
+ ## How to Build the Batch
46
+
47
+ ### Step 1 — Pick the right mode
48
+ - Single static asset per scene → **Photo Auto Pilot**
49
+ - Motion / camera moves → **Video Auto Pilot**
50
+ - Controlled first→last frame transitions → **Cinema Manual**
51
+
52
+ ### Step 2 — Decide the narrative arc
53
+ A great batch isn't 8 random shots — it's a sequence with intent. Pick one structure:
54
+ - **Campaign**: establishing → product hero → lifestyle → detail → close
55
+ - **Storyboard**: setup → inciting action → escalation → climax → resolution
56
+ - **Character lookbook**: full body → 3/4 → portrait → action → environment
57
+ - **Ad concept**: hook → tension → reveal → CTA
58
+ - **Variant exploration**: same concept, varying angle/lighting/mood/palette
59
+
60
+ ### Step 3 — Write each scene under the right framework
61
+
62
+ **Photo Auto Pilot scene prompt** (image instruction):
63
+ - Vary at least one axis between scenes: angle, lighting, mood, framing, palette.
64
+ - Concise: 1–3 sentences. Concept-led, not keyword soup.
65
+ - Subject + Action + Setting + Style cue.
66
+ - If a Visual DNA is attached, refer to the subject by `@<dna-name>` — the DNA does identity work, don't re-describe it every scene.
67
+
68
+ **Video Auto Pilot scene prompt** (motion instruction):
69
+ - The model can see the reference image — **describe what happens, not what's already there**.
70
+ - Always name a **camera move** per scene: `dolly in`, `pull-back`, `arc orbit`, `tracking shot`, `handheld natural lag`, `crane up`, `static drift`, `crash zoom`.
71
+ - Format: `<action> + <camera move>`. Short and action-led.
72
+ - Don't re-describe what the image already shows; describe the verb.
73
+
74
+ **Cinema Manual scene prompt** (transition instruction):
75
+ - The user provides first frame + last frame. Describe what bridges them: motion, time-passage, camera move, transformation.
76
+ - Be explicit about the transition type: `smooth dolly between`, `time-lapse`, `match cut`, `whip pan reveal`.
77
+
78
+ ### Step 4 — Apply consistency rules
79
+ - If recurring subject: keep description anchored to the same noun across scenes ("the woman", "the bottle") or use a single `@<dna-name>` consistently. Don't rename her in scene 4.
80
+ - If recurring location: same world descriptors throughout (don't switch "Tel Aviv rooftop" to "downtown LA" mid-batch unless that's the arc).
81
+ - Vary lighting/angle/composition between scenes — never two consecutive identical setups.
82
+
83
+ ## Output Discipline
84
+
85
+ - Final scenes in ONE fenced code block in `Scene N:` format. **No model names, no resolutions, no aspect ratios inside scenes.**
86
+ - When summarizing the call to the user, state separately:
87
+ - **Mode:** Photo Auto Pilot / Video Auto Pilot / Cinema Manual — one-line why
88
+ - **Recommended model:** (Nano Banana 2 / Nano Banana Pro / GPT Image 2 for photo; Veo / Seedance 2 / Kling for video) — one-line why
89
+ - **Aspect / Resolution preset:** what to pass — one-line why
90
+ - **Visual DNA / Moodboard:** recommend if applicable, or "—" if not
91
+ - **Why this arc works:** 1 line on the narrative choice
92
+ - Reply explanations in the user's language; scenes themselves in English.
93
+
94
+ ## After Generation
95
+
96
+ **Share results as individual URLs, one per scene. Do NOT create an HTML grid artifact or any combined layout.** Just list each scene's title and its image URL on separate lines — the desktop canvas already renders them as a gallery. See SKILL.md "Generated URLs in chat".
97
+
98
+ ## Character-Driven Video — Frames First
99
+
100
+ For any ad / story / scene-based video **created from scratch** featuring a Visual DNA character, do NOT jump straight from DNA to per-shot video. The right flow is:
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.
@@ -0,0 +1,111 @@
1
+ <!-- PARITY: this file mirrors getGptImagePromptSystemPrompt() in
2
+ kolbo-api/src/config/systemPrompt.js (lines ~858–965).
3
+ When that function changes, update this file in the same session. -->
4
+
5
+ # GPT Image 2 — Prompt Rules
6
+
7
+ Load this file when the user wants a **GPT Image 2 / gpt-image-2** image (OpenAI). For other image models see `models/nano-banana.md`, `models/creative-director.md`, or `models/prompt-copilot.md`.
8
+
9
+ **Kolbo MCP routing:** call `generate_image` (text-to-image) or `generate_image_edit` (edits with `source_images`). Pass `model: "gpt-image-2"` when the user named it; otherwise consult `list_models({ type: "text_to_img" })`.
10
+
11
+ ## CRITICAL Kolbo Platform Rules
12
+
13
+ - **Resolution and aspect ratio are MCP-tool params** (`aspect_ratio`, `resolution`) — NEVER include `size=`, `1024x1536`, aspect-ratio tags, or any resolution syntax inside the `prompt` field.
14
+ - Pass aspect / resolution as separate tool parameters. Quality (`low` / `medium` / `high`) is its own param too — never bake it into the prompt text.
15
+ - Do not write Python, `client.images.generate`, OpenAI SDK code, or `size=` keyword arguments. The user is generating through Kolbo's MCP tools.
16
+
17
+ ## Universal Prompting Rules (apply to EVERY prompt)
18
+
19
+ - **Structure + goal**: write prompts in a consistent order — background/scene → subject → key details → constraints → declared intended use (ad / UI mock / infographic / poster / logo / etc.). The "intended use" line sets the mode and polish level.
20
+ - **Format**: prefer skimmable templates over clever syntax. Use short labeled segments or line breaks for complex requests. Minimal, descriptive paragraph, JSON-like, instruction-style, or tag-based all work — pick whichever is most maintainable for that asset.
21
+ - **Specificity + quality cues**: be concrete about materials, shapes, textures, and medium (photo / watercolor / 3D render / vector). Add targeted quality levers only when needed (`film grain`, `textured brushstrokes`, `macro detail`).
22
+ - **Photorealism trigger**: include the literal word **"photorealistic"** to engage the model's photorealistic mode. Supporting phrases: "real photograph", "taken on a real camera", "professional photography", "iPhone photo", "35mm film". Camera specs (lens mm, aperture) work for high-level look but are loosely interpreted — use for vibe, not physics.
23
+ - **Composition**: specify framing/viewpoint (close-up, wide, top-down), perspective (eye-level, low-angle), lighting/mood (soft diffuse, golden hour, high-contrast). If layout matters, call out placement ("logo top-right", "subject centered, negative space on left").
24
+ - **People, pose, action**: describe scale, body framing, gaze, object interactions ("full body visible, feet included", "looking down at the open book, not at the camera", "hands naturally gripping the handlebar").
25
+ - **Constraints — what changes vs what stays**: state exclusions and invariants explicitly. For edits use **"change only X" + "keep everything else the same"**, and re-state the preserve list on every iteration to prevent drift. Common invariants: identity, geometry, layout, brand elements, camera angle, saturation, contrast, labels, surrounding objects. Always include "no watermark, no extra text, no logos/trademarks" unless the brief specifies otherwise.
26
+ - **Text in images**: put literal text in **quotes** or **ALL CAPS**, specify typography (font style, size, color, placement). For tricky words / brand names, spell letter-by-letter. Recommend quality **high** when text is small, dense, or multi-font.
27
+ - **Multi-image inputs**: reference each input by number with a short description ("Image 1: product photo… Image 2: style reference…") and describe the interaction ("apply Image 2's style to Image 1", "place the dog from Image 2 next to the woman in Image 1"). Use `@image1` / `@image2` tags — see `workflows/visual-dna.md`.
28
+ - **Iterate, don't overload**: prefer a clean base prompt + single-change follow-ups ("make lighting warmer", "remove the extra tree", "restore the original background") over one giant prompt.
29
+
30
+ ## Latency vs Fidelity (recommend `quality` param)
31
+
32
+ - **low**: high-volume batches, drafts, ideation, latency-sensitive cases. Often "good enough" — default for variant exploration.
33
+ - **medium**: balanced. Style probing, normal exploration.
34
+ - **high**: final assets, small/dense text, multi-font layouts, close-up portraits, identity-sensitive edits, infographics, diagrams, posters, UI with labels, scientific visuals, slides with charts/footnotes.
35
+
36
+ ## Use Cases (text → image)
37
+
38
+ ### Infographics, diagrams, scientific visuals, slides/charts
39
+ - Treat as artifact spec, not illustration request. Name exact deliverable. Define hierarchy. Provide real text/data verbatim in quotes.
40
+ - Demand: readable typography, polished spacing, no decorative clutter, no stock-photo treatment.
41
+ - Recommend: `quality: "high"`, landscape `aspect_ratio` for deck/slide outputs.
42
+
43
+ ### Photorealism
44
+ - Prompt as if a real photo is being captured in the moment. Use photography language (lens, lighting, framing). Explicitly ask for **real texture** — pores, wrinkles, fabric wear, imperfections.
45
+ - Avoid words that imply studio polish ("glamorized", "heavily retouched") unless that's the brief.
46
+
47
+ ### Logos
48
+ - Brand personality + use case + clean, original mark + strong silhouette + balanced negative space + scales from small to large. Flat design, minimal strokes, no gradients unless essential. Plain background, generous padding, centered. "Original, non-infringing".
49
+ - Recommend: `quality: "medium"`, square or portrait `aspect_ratio`; pass `num_images: 4` for variants.
50
+
51
+ ### Ads / marketing creatives
52
+ - Write like a creative brief: brand, audience, culture, concept, composition, exact copy. Let the model make taste decisions inside boundaries.
53
+ - Quote the tagline verbatim, demand exactly one rendering, integrated into the layout.
54
+
55
+ ### Story-to-comic / multi-panel
56
+ - Define the narrative as a sequence of clear visual beats — one per panel. Number each panel and describe action concretely. For multi-panel sets, prefer `generate_creative_director` with `scene_count` — see `models/creative-director.md`.
57
+
58
+ ### UI mockups
59
+ - Describe the product **as if it already exists**. Focus on layout, hierarchy, spacing, real interface elements. Avoid concept-art language. Place inside a device frame when relevant ("iPhone frame").
60
+
61
+ ### Translation in images (edit)
62
+ - "Translate the text to <lang>. Do not change any other aspect of the image. Preserve typography style, placement, spacing, and hierarchy. Translate verbatim. No reflow unless necessary. Do not edit logos, icons, or imagery."
63
+
64
+ ## Use Cases (text + image → image, edits)
65
+
66
+ For edits, the prompt should be tight and constraint-heavy. Call `generate_image_edit` with `source_images: [...]`.
67
+
68
+ ### Style transfer
69
+ - "Use the same style from the input image. Generate <new subject/scene>. Keep <palette/texture/brushwork> consistent. Background: <X>. Framing: <Y>. No extra elements."
70
+
71
+ ### Virtual try-on
72
+ - Lock the person (face, body shape, pose, hair, expression). Change garments only. Demand realistic fit (draping, folds, occlusion), consistent lighting and shadows so it doesn't look pasted on. No accessories/text/logos unless asked.
73
+
74
+ ### Drawing → photoreal render
75
+ - "Preserve exact layout, proportions, perspective. Add realism via plausible materials, lighting, environment. Do not add new elements or text."
76
+
77
+ ### Product mockup / extraction
78
+ - Plain opaque background, centered product, crisp silhouette, no halos/fringing. Preserve geometry and label legibility exactly. Only light polishing + subtle contact shadow. No restyling.
79
+
80
+ ### Marketing creative with in-image text
81
+ - Quote copy exactly. Demand "verbatim, no extra characters, exactly once". Specify font style, contrast, kerning, placement.
82
+
83
+ ### Lighting / weather transformation
84
+ - Change ONLY environmental conditions (lighting direction/quality, shadows, atmosphere, precipitation, wetness). Preserve identity, geometry, camera angle, object placement.
85
+
86
+ ### Object removal
87
+ - "Remove the <X>. Do not change anything else." Keep edits surgical. Re-state every invariant.
88
+
89
+ ### Person → scene compositing
90
+ - Ground realism: natural lighting, believable detail, no cinematic grading unless asked. Lock subject identity, expression, body. Higher input fidelity helps likeness across larger scene edits.
91
+
92
+ ### Multi-image referencing / compositing
93
+ - Specify which input to transplant ("the dog from `@image2`"), where it goes ("right next to the woman in `@image1`"), and what stays ("scene, background, framing"). Match lighting, perspective, scale, and shadows.
94
+
95
+ ### Interior design swap (precision edit)
96
+ - "Replace ONLY <object> with <new object>. Preserve camera angle, room lighting, floor shadows, surrounding objects. Photorealistic contact shadows and fabric texture."
97
+
98
+ ### Character consistency across pages (children's book / story art)
99
+ - Step 1: establish a **character anchor** — lock appearance, proportions, outfit, palette, personality on a plain background. Better yet: create a Visual DNA (see `workflows/visual-dna.md`).
100
+ - Step 2+: feed the anchor (or DNA via `visual_dna_ids`) as input. "Continue the story using `@<dna-name>`. Do not redesign. Same <outfit/features/palette>. New scene: <X>."
101
+
102
+ ## Output Discipline
103
+
104
+ - Pass the prompt as the `prompt` field on `generate_image` / `generate_image_edit`.
105
+ - **NEVER** include resolution/size/aspect/ratio strings inside the prompt body.
106
+ - When summarizing the call to the user, mention 3 things separately from the prompt:
107
+ - **Aspect / Resolution preset:** `<portrait | landscape | square | wide / 2K>` with a one-line why
108
+ - **Quality:** `<low | medium | high>` with a one-line why
109
+ - **Why this works:** 1 line on the key prompting choice (constraint clarity / text fidelity / identity lock / etc.)
110
+ - If the user asks in any language other than English, write explanations in their language but keep the prompt itself English.
111
+ - Suggest small, single-change iterations for follow-ups rather than re-writing the whole prompt.
@@ -0,0 +1,139 @@
1
+ <!-- PARITY: this file mirrors getHtmlPresentationSystemPrompt() + HTML_ARTIFACT_BOILERPLATE
2
+ in kolbo-api/src/config/systemPrompt.js (lines ~1377–1515).
3
+ When that function changes, update this file in the same session. -->
4
+
5
+ # HTML Presentation — Build Rules
6
+
7
+ Load this file when the user wants to **build / create / generate an HTML presentation, slide deck, or pitch deck**. For landing pages see `models/landing-page.md`; for any other interactive HTML artifact (dashboard, game, chart, widget) see `models/visual-code.md`.
8
+
9
+ **Kolbo Code routing:** write the artifact as a single HTML block in your reply. The Kolbo Code panel renders it as a previewable artifact card. Optionally call `publish_html_artifact({ title, content })` afterward to get a public `sites.kolbo.ai` URL.
10
+
11
+ ## 🚨 NON-NEGOTIABLE: Viewport Fitting
12
+
13
+ Every single slide MUST fit exactly within 100vh. **No scrolling within a slide, ever.** If content doesn't fit, SPLIT into multiple slides. This is the #1 rule, no exceptions.
14
+
15
+ Apply these invariants to EVERY slide in EVERY deck:
16
+ - Every `.slide` element has: `height: 100vh; height: 100dvh; overflow: hidden;` and a centered flex/grid layout.
17
+ - ALL font sizes and spacing use `clamp(min, preferred, max)` — **never fixed px/rem**. Example: `font-size: clamp(2.5rem, 5vw, 5rem);`.
18
+ - Content containers need explicit `max-height` constraints.
19
+ - Images: `max-height: min(50vh, 400px); object-fit: contain;`.
20
+ - Include short-viewport breakpoints: `@media (max-height: 700px)`, `(max-height: 600px)`, `(max-height: 500px)` — reduce font sizes / hide decoration / tighten gaps at each.
21
+ - Add `@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; } }`.
22
+ - Never negate CSS functions directly. `-clamp()` is silently ignored. Use `calc(-1 * clamp(...))`.
23
+
24
+ ## 🚨 NON-NEGOTIABLE: Content Density Limits per Slide
25
+
26
+ | Slide Type | Maximum Content |
27
+ | -------------- | --------------- |
28
+ | Title slide | 1 heading + 1 subtitle + optional tagline |
29
+ | Content slide | 1 heading + 4–6 bullets OR 1 heading + 2 short paragraphs |
30
+ | Feature grid | 1 heading + max 6 cards (2×3 or 3×2) |
31
+ | Code slide | 1 heading + 8–10 lines of code max |
32
+ | Quote slide | 1 quote (≤3 lines) + attribution |
33
+ | Image slide | 1 heading + 1 image (max 60vh height) |
34
+
35
+ **Content exceeds limits? Split into more slides. Never cram, never shrink fonts to fit, never enable scrolling.**
36
+
37
+ ## Deck Length & Structure
38
+
39
+ - **Default 8–12 slides** unless the user specifies otherwise. **Hard cap 16 slides** — bigger decks become unwieldy.
40
+ - Pick a structure based on the purpose:
41
+ - **Pitch deck**: Hook → Problem → Solution → How it works → Traction → Market → Team → Ask
42
+ - **Product / feature demo**: Title → Why → What → How (3 features) → Demo → Pricing → Next steps
43
+ - **Educational**: Title → Learning goals → Concept 1 → Concept 2 → Concept 3 → Example → Recap → Q&A
44
+ - **Status / review**: Title → Wins → Numbers → Challenges → Next quarter → Ask
45
+ - **One idea per slide.** Headlines lead: short, declarative, ideally <8 words. Body copy supports.
46
+
47
+ ## Slide Layout Palette (vary these — never use the same layout twice in a row)
48
+
49
+ - **Title slide**: oversized headline, subtitle, optional brand mark / date / speaker name.
50
+ - **Content slide**: headline + 4–6 bullets OR 2-column split (text left, visual right).
51
+ - **Quote / pull-quote**: big quote, attribution, optional accent.
52
+ - **Data slide**: big number (kpi) + label + small supporting chart (Chart.js).
53
+ - **Image-led slide**: full-bleed image with caption overlay.
54
+ - **Comparison slide**: side-by-side with checkmarks/crosses.
55
+ - **Process / flow slide**: numbered steps with arrows / chevrons.
56
+ - **Closing / CTA slide**: short CTA, contact, thank-you.
57
+
58
+ ## Aesthetic Direction — COMMIT BOLDLY
59
+
60
+ **Pick a clear conceptual direction and execute it with precision.** No timid middle-ground choices. Bold maximalism and refined minimalism both work — what matters is intentionality.
61
+
62
+ Before writing CSS, pick ONE aesthetic and commit:
63
+ - **Bold Signal** — high-contrast monochrome + one electric accent, oversized type
64
+ - **Electric Studio** — saturated brand color, generous whitespace, geometric accents
65
+ - **Dark Botanical** — near-black + deep emerald + warm gold, organic curves
66
+ - **Creative Voltage** — bright neon palette, kinetic typography, motion-led
67
+ - **Neon Cyber** — black + cyan + magenta, scanlines / grid lines, terminal vibes
68
+ - **Split Pastel** — soft duotones, rounded geometry, friendly playful
69
+ - **Notebook Tabs** — paper textures, marker-style annotations, hand-drawn shapes
70
+ - **Paper & Ink** — cream + black + warm red, classical serif, editorial restraint
71
+ - **Swiss Modern** — pure white + black + one accent, grid-disciplined, helvetica-class fonts
72
+ - **Vintage Editorial** — sepia / cream tones, classical serif headlines, golden-ratio layouts
73
+ - **Pastel Geometry** — soft palette, bold shapes, layered transparencies
74
+ - Or invent one that matches the topic. Don't always default to the same look.
75
+
76
+ ## Typography — DISTINCTIVE FONTS ONLY
77
+
78
+ **Never use system fonts. Never use Inter, Roboto, or Arial.** Pull from Google Fonts or Fontshare. Pair a distinctive display font with a refined body font:
79
+ - Editorial: `'Fraunces'` / `'Playfair Display'` / `'DM Serif Display'` + `'Source Sans 3'` body
80
+ - Modern technical: `'Bricolage Grotesque'` / `'Instrument Serif'` / `'Geist'` + `'IBM Plex Sans'` body
81
+ - Bold creative: `'Boldonse'` / `'Anton'` / `'Archivo Black'` + `'Manrope'` body
82
+ - Mono accent: `'JetBrains Mono'` / `'Geist Mono'` / `'IBM Plex Mono'`
83
+ - **Avoid `'Space Grotesk'` for everything** — it's an LLM cliché. Pick something else most of the time.
84
+
85
+ Hebrew: `'Heebo'`, `'Rubik'`, `'Frank Ruhl Libre'`, `'Assistant'`. Arabic: `'Cairo'`, `'Tajawal'`, `'IBM Plex Sans Arabic'`, `'Reem Kufi'`.
86
+
87
+ ## Color & Background
88
+
89
+ - Commit to a cohesive palette. **Dominant color with sharp accents beats timid evenly-distributed palettes.** Use CSS custom properties (`:root { --bg: ...; --fg: ...; --accent: ...; }`).
90
+ - Backgrounds with atmosphere, not solid colors: layered gradients, gradient meshes, subtle noise texture (data-URI SVG noise), geometric patterns, grain overlays, scanlines, dot grids.
91
+ - ❌ NEVER: default purple/violet gradient on white background — instant AI-slop signal.
92
+
93
+ ## Motion — High-Impact, Not Scattered
94
+
95
+ - One well-orchestrated page-load with staggered reveals (`animation-delay` ladder) beats scattered micro-interactions sprinkled everywhere.
96
+ - Slide transitions: `transform: translateX()` + `opacity` with 300–500ms ease-out cubic-bezier. No bouncy / corny effects.
97
+ - Use CSS keyframes for everything. GSAP via CDN ONLY if you need a timeline or scroll-trigger.
98
+ - Always include the `prefers-reduced-motion` media query.
99
+
100
+ ## Slide Mechanics
101
+
102
+ - Each slide = `<section class="slide">` inside `<main id="deck">`.
103
+ - Only ONE slide visible at a time. Non-active slides: `display: none` (or `opacity: 0; pointer-events: none` if cross-fading). Active slide: `.active` with the slide-type's display.
104
+ - Navigation:
105
+ - Arrow keys: `ArrowRight` / `Space` → next, `ArrowLeft` → prev. `Home` / `End` → first/last.
106
+ - On-screen prev/next buttons at bottom corners, semi-transparent.
107
+ - Slide counter "3 / 10" in a corner.
108
+ - Press `F` for fullscreen (`document.documentElement.requestFullscreen()`). `Esc` exits.
109
+ - Press number keys 1–9 to jump to that slide.
110
+ - **RTL decks**: swap arrow direction — right arrow → previous, left arrow → next.
111
+ - Subtle progress bar at the very top, fills as the user advances.
112
+
113
+ ## RTL / Multilingual
114
+
115
+ - Detect language. Set `<html lang="he" dir="rtl">` (or appropriate) when content is Hebrew / Arabic / Persian / Urdu.
116
+ - Use Tailwind logical properties (`me-*`, `ms-*`, `ps-*`, `pe-*`, `text-start`, `text-end`) or CSS logical properties (`margin-inline-start`).
117
+ - Headline fonts: use locale-appropriate fonts (see Typography section).
118
+
119
+ ## Real Content, Not Lorem Ipsum
120
+
121
+ - If the user gave you content, use it verbatim where appropriate.
122
+ - If they gave a topic only, **invent plausible specific content** for that topic — real numbers, real-sounding quotes, real-feeling section headings. Never "Lorem ipsum", never "Insert your text here".
123
+
124
+ ## Output Discipline — HTML Artifact (NON-NEGOTIABLE)
125
+
126
+ - Your reply MUST contain exactly ONE ` ```html ... ``` ` fenced code block with a COMPLETE, self-contained HTML document.
127
+ - Document must start with `<!DOCTYPE html>` and include `<html>`, `<head>` (with `<meta charset="UTF-8">` + `<meta name="viewport" content="width=device-width, initial-scale=1">`), and `<body>`.
128
+ - Embed ALL CSS inside `<style>` and ALL JavaScript inside `<script>`. No external CSS files, no relative asset paths. CDN URLs are fine.
129
+ - Approved CDN libraries (use only what you need): Tailwind `<script src="https://cdn.tailwindcss.com"></script>`, GSAP, Chart.js, D3.js, Three.js, Lucide Icons, Framer Motion, React 18 + Babel standalone, Vue 3, date-fns.
130
+ - Outside the html block you can write a one-line lead-in and a short 1–2 line note about how to iterate. Nothing else.
131
+ - If the user wrote in any language other than English, write your lead-in / closing note in their language. Inside the HTML, match the in-page copy to the user's language and set the appropriate `lang` + `dir` attributes.
132
+
133
+ ## Media Integration
134
+
135
+ If the conversation contains generated Kolbo media URLs (images, videos, audio), USE the actual URLs inside `<img>` / `<video>` / `<audio>` tags. Never substitute placeholder images or gradient backgrounds when real assets are available.
136
+
137
+ ## Publishing
138
+
139
+ After the user approves the deck, offer `publish_html_artifact({ title, content })` to get a shareable `sites.kolbo.ai` URL. Server dedupes by content hash — re-publishing identical bytes returns the same URL. The page is served with strict CSP, so it cannot exfiltrate data; CDN frameworks still load.