@kolbo/mcp 1.21.0 → 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.
@@ -0,0 +1,157 @@
1
+ # Marketing Studio — UGC, Ads & Branded Video
2
+
3
+ Load this file when the user wants **branded ad video** — UGC, unboxing, product showcase, TV spot, virtual try-on, or any "make me an ad / commercial / creator video" request.
4
+
5
+ For ad **images** (Pinterest pin, hero banner, ad creative pack) see `workflows/product-photoshoot.md`.
6
+ For **marketplace listings** (Amazon main + secondary + A+ content) see `workflows/marketplace-cards.md`.
7
+ For the **DTC ads engine flow** (brand kit + ad format + avatar + product) see `workflows/dtc-ads.md`.
8
+
9
+ ## The 9 Marketing Modes
10
+
11
+ | Mode | What it's for | Hook/Setting allowed? |
12
+ |---|---|:-:|
13
+ | `ugc` | **Default.** Casual, organic-feel content from a presenter | ✅ |
14
+ | `ugc_how_to` | Tutorial / explainer — "here's how to use this" | ✅ |
15
+ | `ugc_unboxing` | Unboxing reveal — "just got this in the mail" | ✅ |
16
+ | `product_showcase` | Clean product highlight, polished | ❌ |
17
+ | `product_review` | Presenter giving an opinion on the product | ✅ |
18
+ | `tv_spot` | Broadcast-style commercial, higher production | ❌ |
19
+ | `wild_card` | Experimental — model picks the vibe | ❌ |
20
+ | `ugc_virtual_try_on` | Person trying on clothing / accessories — UGC vibe | ✅ |
21
+ | `virtual_try_on` | Same but polished, model-driven | ❌ |
22
+
23
+ **"Hook/Setting allowed"** = whether reusable opening hook prompts and scene-setting prompts can be prepended to the user prompt. Polished modes (`product_showcase`, `tv_spot`, `wild_card`, `virtual_try_on`) ignore hooks/settings.
24
+
25
+ **Default when the user doesn't specify a mode:** `ugc`.
26
+
27
+ ## Picking the Mode
28
+
29
+ | User phrasing | Mode |
30
+ |---|---|
31
+ | "UGC", "creator video", "talking head", "phone-shot", "selfie video", "vlogger" | `ugc` |
32
+ | "tutorial", "how to use", "demonstrate", "walkthrough", "explainer" | `ugc_how_to` |
33
+ | "unboxing", "just got this", "reveal", "first impression" | `ugc_unboxing` |
34
+ | "product showcase", "highlight reel", "showroom" | `product_showcase` |
35
+ | "review", "my take on", "comparing X to Y", "honest opinion" | `product_review` |
36
+ | "TV ad", "commercial", "broadcast", "polished ad spot" | `tv_spot` |
37
+ | "surprise me", "something different", "experimental" | `wild_card` |
38
+ | "try on" / "wearing the X" + organic vibe | `ugc_virtual_try_on` |
39
+ | "fashion shoot", "lookbook", polished try-on | `virtual_try_on` |
40
+
41
+ If the user mentions a product / brand but no mode word, default to `ugc`. If they say "ad" without "TV ad" / "commercial" / "broadcast", default to `ugc` (most modern ads are UGC-shaped).
42
+
43
+ ## Mode → Kolbo MCP Routing
44
+
45
+ The mode determines which Kolbo MCP tool to call, what defaults to set, and what's forbidden.
46
+
47
+ | Mode | Primary tool | aspect_ratio | duration | sound_enabled | Captions / watermarks |
48
+ |---|---|---|---|:-:|:-:|
49
+ | `ugc`, `ugc_how_to`, `ugc_unboxing`, `ugc_virtual_try_on`, `product_review` | `generate_video_from_image` (frame-first) OR `generate_elements` (Visual DNA → video) | **`9:16`** | model's `default_duration` (5–8s) | OFF | **Never add** |
50
+ | `product_showcase` | `generate_creative_director` with `workflow_type: "video"` (for multi-shot) OR `generate_video` (single) | `16:9` or `1:1` | 5–10s | ON if model supports `sound_generation_type: "native"` | Allowed if user asks |
51
+ | `tv_spot` | `generate_creative_director` with `workflow_type: "video"` (3–6 shots for a beat structure) | `16:9` | 15–30s total | ON (full audio + dialogue) | Allowed if part of the spot |
52
+ | `virtual_try_on` | `generate_elements` with character Visual DNA + product as `reference_images` | `9:16` or `4:5` | 5–8s | OFF | Never add |
53
+ | `wild_card` | User's chosen model with broader prompt latitude (no mode-specific defaults) | User's pick | User's pick | User's pick | User's pick |
54
+
55
+ **Pick the actual model** with `list_models({ type: "..." })` and validate caps before firing — see SKILL.md "Resolution / Aspect / Duration — validate against caps".
56
+
57
+ ## UGC Family Defaults (CRITICAL)
58
+
59
+ When ANY `ugc*` mode is selected, snap to these unless the user explicitly overrides:
60
+
61
+ | Setting | UGC default | Why |
62
+ |---|---|---|
63
+ | `aspect_ratio` | `9:16` | TikTok / Reels / Shorts are vertical-first |
64
+ | Visual aesthetic | Phone-shot, handheld, natural lighting | UGC works because it doesn't look produced |
65
+ | Camera language | Slight handheld sway, selfie-arm framing, key light from window/screen | NOT slow dollies, NOT crane moves, NOT studio key |
66
+ | Energy | "Talking to a friend" — casual, direct-to-camera, occasional gestures | Not theatrical, not staged |
67
+ | **Captions / subtitles / text overlays** | **NEVER add** unless explicitly requested | Users add captions in CapCut / native editor; baked-in captions limit reuse |
68
+ | **Brand watermarks / lower-thirds / banners** | **NEVER add** unless explicitly requested | Same reason |
69
+ | Music / SFX | OFF by default unless asked | They'll layer their own audio in post |
70
+ | Length | Model's `default_duration` (typically 5–8s) | Shorter = more usable for the algorithm |
71
+
72
+ **Phrases that activate UGC defaults:** "UGC", "user-generated", "creator video", "TikTok", "Reels", "Shorts", "POV", "selfie video", "phone-shot", "vlogger", "talking head" (when context implies social media), "for social", "Instagram video", "YouTube short".
73
+
74
+ **Phrases that OVERRIDE UGC defaults** (use them as-given, not as UGC): "commercial", "ad spot" (without UGC), "cinematic", "broadcast", "TV ad", "horizontal", "16:9", "landscape", "billboard". When the user uses one of these, switch to `product_showcase` or `tv_spot` mode.
75
+
76
+ ## Hooks & Settings (concept)
77
+
78
+ Hooks and settings are **reusable opening angles / scene contexts** that get prepended to the user's prompt. Kolbo does not yet expose these as first-class MCP primitives, but the concept is portable:
79
+
80
+ - **Hook** = the opening line / angle of the ad (the first 1–2 seconds that earn the scroll). Example hooks: "POV: you just discovered X", "Why I stopped buying Y", "3 reasons this X is worth it", "Watch this before you buy a Y".
81
+ - **Setting** = the scene/environment context. Example settings: "in a bright minimalist kitchen", "walking in a busy city street", "on a yoga mat at golden hour".
82
+
83
+ **When the user asks for an ad and doesn't specify the opening**, offer 2–3 hook options (one-liner each) in a labeled-question style — never freeform "what hook?" Same for setting if the brief is location-agnostic.
84
+
85
+ **Whitelist rule:** hooks/settings only make sense for `ugc`, `ugc_how_to`, `ugc_unboxing`, `product_review`, `ugc_virtual_try_on`. For `product_showcase`, `tv_spot`, `wild_card`, `virtual_try_on` — skip hooks/settings; those modes are concept-driven not hook-driven.
86
+
87
+ **Mutually exclusive with ad references** (next section). Pick one path per generation.
88
+
89
+ ## Ad References (modeling new ads after existing ones)
90
+
91
+ Sometimes the user has a reference ad they want to model the new ad after — their own previous winning ad, a competitor's ad, or a viral video. Kolbo path:
92
+
93
+ 1. **Upload the reference video** via `upload_media` (returns CDN URL).
94
+ 2. **Pass it as `reference_videos`** to `generate_elements`, OR as `source_video` to `generate_video_from_video` (if you want to actually restyle / re-shoot the reference).
95
+ 3. **Describe in the prompt** what to preserve from the reference (`@video1`'s pacing / camera move / lighting / cut rhythm) and what to change (subject / product / setting).
96
+ 4. **Tag with `@video1`** per `workflows/visual-dna.md` reference-tagging rules.
97
+
98
+ **Mutually exclusive with hooks/settings** — pick one composition path per generation. Either reference-driven (use `@video1`) or composed-from-blocks (hook + setting + product). Mixing produces muddled output.
99
+
100
+ ## Avatars (= Visual DNA characters)
101
+
102
+ What other platforms call "preset avatars" or "custom avatars" Kolbo calls **Visual DNA characters**. Two ways to get one:
103
+
104
+ - **Existing character** — use `list_visual_dnas` to find one the user has already created.
105
+ - **New character** — create with `create_visual_dna({ type: "character", name, images: [...] })`. See `workflows/visual-dna.md` for the full creation flow (pre-flight, naming rule, generate-reference-images-first).
106
+
107
+ **For UGC modes:** an avatar is optional if the brief clearly mentions a person (the model can synthesize one). Pass `visual_dna_ids` when the user wants a *specific* presenter — their face, the brand founder, a previously trained character.
108
+
109
+ **Always use `@<dna-name>` in the prompt** when passing `visual_dna_ids` — see `workflows/visual-dna.md` `@name` rules.
110
+
111
+ ## Products (image upload + reference)
112
+
113
+ For ads that feature a specific product:
114
+
115
+ 1. **Upload product photo** via `upload_media` → Kolbo CDN URL.
116
+ 2. **Pass as `reference_images`** to `generate_creative_director` / `generate_elements` / `generate_video_from_image`.
117
+ 3. **Tag with `@image1`** in the prompt.
118
+ 4. **Log in `.kolbo/production.md`** under a `### Products` subsection so future ads in the same workspace reuse the same CDN URL (don't re-upload).
119
+
120
+ If the user gives a **product URL** instead of a photo, see `workflows/research-first.md` — scrape, extract images, re-host via `upload_media`, persist as a brand kit at `.kolbo/brand-kits/<slug>.md`.
121
+
122
+ ## UX Rules
123
+
124
+ 1. **Always pick a mode explicitly.** Don't auto-pick from one ambiguous word. If the user said "make me an ad" with no other signal, offer labeled options: `[UGC / TV Spot / Product Showcase / Surprise me]`.
125
+ 2. **Always confirm aspect ratio + duration + sound** before firing — these materially change output and cost. One question, labeled options.
126
+ 3. **Default UGC settings are hard rules** — captions OFF, music OFF, watermarks OFF — even when the user doesn't mention them. Only flip when they ask.
127
+ 4. **No auto-retry on failure.** If the generation fails (content policy, model OOM), surface the reason and let the user adjust prompt or product.
128
+ 5. **Show results without dumping URLs** — see SKILL.md "Generated URLs in chat".
129
+
130
+ ## Prompt Template Seed for UGC
131
+
132
+ ```
133
+ UGC selfie video, vertical 9:16, handheld phone aesthetic.
134
+ {presenter description or @<dna-name>} in {everyday setting},
135
+ {energy level: relaxed | enthusiastic | curious | reactive}.
136
+ They {natural action with the product/subject},
137
+ talking directly to camera.
138
+ Phone-shot lighting (window/screen key light),
139
+ slight handheld sway, no cinematic moves.
140
+ Style: authentic creator content, NOT polished commercial.
141
+ Sound: ambient room tone only, no music, no SFX overlay.
142
+ ```
143
+
144
+ ## Prompt Template Seed for TV Spot
145
+
146
+ ```
147
+ 3-shot broadcast commercial, cinematic 16:9.
148
+
149
+ Shot 1 [0–5s] — {establishing hook}: {wide angle subject + camera move}, {lighting}, {tone setter}.
150
+ Shot 2 [5–15s] — {product reveal / demo}: {medium shot with product in focus}, {practical action}, {emotional beat}.
151
+ Shot 3 [15–25s] — {payoff + CTA}: {close-up or pull-back}, {brand line in dialogue or SFX}, {final hold}.
152
+
153
+ Style: {brand mood — e.g., warm + premium / clean + modern / bold + youthful}.
154
+ Audio: full mix — dialogue + score + SFX. Music: {genre/tempo}.
155
+ ```
156
+
157
+ (Run via `generate_creative_director` with `workflow_type: "video"`, `scene_count: 3`.)
@@ -0,0 +1,146 @@
1
+ # Marketplace Cards — Amazon / Shopify / eBay Listings
2
+
3
+ Load this file when the user wants **marketplace listing visuals** — main image, secondary product images, infographics, or A+ content modules for Amazon, Shopify, eBay, Etsy, Walmart, or similar.
4
+
5
+ For generic brand product photography (Pinterest, hero banner, lifestyle, ad pack) see `workflows/product-photoshoot.md`. For ad video see `workflows/marketing-studio.md`. For composed DTC ads see `workflows/dtc-ads.md`.
6
+
7
+ ## What This Is
8
+
9
+ Marketplace listings need a **specific, compliance-aware visual system** that's different from brand campaign imagery:
10
+
11
+ - **Main image** — strict marketplace rules (typically pure white background, product fills 85% of frame, no text, no props, no shadows). This is the conversion-critical thumbnail.
12
+ - **Secondary product images** — multi-angle, detail shots, lifestyle, "what's in the box". Show the product from every angle a shopper needs before clicking buy.
13
+ - **A+ content / Enhanced Brand Content (Amazon)** — long-form modules below the fold: hero banner, pain-point grid, feature comparison, ingredients breakdown, efficacy proof, how-to-use steps, brand endorsement / founder story.
14
+
15
+ ## The 4 Bundle Scopes
16
+
17
+ When the user asks for a common bundle, fire one call per scope:
18
+
19
+ | Scope | Creates |
20
+ |---|---|
21
+ | `main` | 1 marketplace main image |
22
+ | `product-images` | main image + 5 secondary images |
23
+ | `aplus` | main image + 7 A+ content modules |
24
+ | `full-set` | main image + 5 secondary + 7 A+ modules (13 assets total) |
25
+
26
+ Use a **custom subset** of the asset list below when the user wants a non-standard combination (e.g. "just main + infographic + lifestyle").
27
+
28
+ ## The 13 Asset Types
29
+
30
+ | Asset | Purpose | Aspect ratio | Model preference |
31
+ |---|---|---|---|
32
+ | `main_image` | Marketplace thumbnail — strict compliance: pure white bg, product fills 85% of frame, no text, no props | `1:1` | Nano Banana 2 (clean studio render) |
33
+ | `infographic` | Feature callouts with text labels and product hero | `1:1` or `4:5` | **GPT Image 2** (dense on-image text) |
34
+ | `multi_angle` | 4-up grid showing front / back / sides of product | `1:1` | Nano Banana 2 |
35
+ | `detail_shot` | Macro shot of texture / material / mechanism | `1:1` | Nano Banana 2 |
36
+ | `lifestyle` | Product in use in real environment | `1:1` or `4:5` | Nano Banana 2 |
37
+ | `whats_in_box` | Flat-lay showing the product + accessories laid out neatly | `1:1` | Nano Banana 2 |
38
+ | `aplus_hero_banner` | Wide A+ header — brand identity hit | `3:1` | GPT Image 2 |
39
+ | `aplus_pain_points` | 3-up grid showing the problem this product solves | `16:9` | GPT Image 2 (text) |
40
+ | `aplus_features` | 3-up or 4-up feature breakdown with labels | `16:9` | GPT Image 2 |
41
+ | `aplus_ingredients` | Ingredients / materials breakdown (skincare, food, supplements) | `16:9` | GPT Image 2 |
42
+ | `aplus_efficacy` | Before/after, % stats, clinical results — proof block | `16:9` | GPT Image 2 (charts + text) |
43
+ | `aplus_how_to_use` | Numbered step-by-step usage instructions | `16:9` | GPT Image 2 |
44
+ | `aplus_endorsement` | Founder story, brand mission, testimonial-style | `16:9` | Nano Banana 2 (people) + GPT Image 2 (text overlay) |
45
+
46
+ ## Kolbo MCP Routing
47
+
48
+ For **bundles** (`product-images`, `aplus`, `full-set`): use `generate_creative_director` with `scene_count` = number of assets in the bundle. Pass the product image as `reference_images[0]` so it appears consistently across every asset. Each scene's prompt encodes one asset type.
49
+
50
+ For **single `main` image** or **custom subset** of ≤ 2 assets: `generate_image` per asset, fired in parallel (single response, multiple tool calls).
51
+
52
+ For **multi-angle** specifically: this is one image with a 4-up grid composition — use `generate_image` with a prompt describing the 2×2 layout, NOT `generate_creative_director`. (Or alternatively, fire 4 separate `generate_image` calls and composite the grid yourself — depends on user preference.)
53
+
54
+ **Always pass the product photo** as `reference_images` for every call. `@image1` references it in the prompt. If the user gave a URL instead of a photo, run `workflows/research-first.md` first.
55
+
56
+ ## Main Image Compliance Rules (HARD)
57
+
58
+ Different marketplaces have different rules. The **strictest is Amazon's**, which most other marketplaces follow:
59
+
60
+ 1. **Pure white background** (`#FFFFFF`, no gradients, no shadow tone).
61
+ 2. **Product fills ≥ 85% of the frame** — minimal margin.
62
+ 3. **NO text** — no logos baked in, no callouts, no "NEW" stickers, no watermarks.
63
+ 4. **NO props** — just the product. No hands, no models, no styling pieces.
64
+ 5. **NO multiple products** — single hero (variant grids go in secondary, not main).
65
+ 6. **NO color borders / decorative frames**.
66
+
67
+ Bake these into every `main_image` prompt as explicit prohibitions:
68
+
69
+ ```
70
+ Pure white background (#FFFFFF), seamless studio sweep.
71
+ Product (@image1) centered, fills 85% of frame.
72
+ Tack-sharp focus, no shadows on background, soft contact shadow only.
73
+ NO text, NO logos, NO captions, NO props, NO models, NO decorative borders.
74
+ Photographic, catalog-grade, neutral color.
75
+ ```
76
+
77
+ ## Secondary Image Strategy
78
+
79
+ 5-image standard set (when the user says `product-images` scope):
80
+
81
+ 1. **Lifestyle** — product in use, real environment
82
+ 2. **Detail / texture** — macro of the key material or feature
83
+ 3. **Multi-angle** — 4-up showing all sides
84
+ 4. **What's-in-the-box** — flat-lay of components
85
+ 5. **Scale / size reference** — product next to a hand or known-size object
86
+
87
+ Adjust based on category: skincare needs ingredients close-up + texture-on-skin; apparel needs front + back + on-model + detail + size chart; electronics needs ports/buttons close-up + size comparison.
88
+
89
+ ## A+ Content Strategy
90
+
91
+ A+ modules tell a story below the fold. Standard 7-module flow:
92
+
93
+ 1. `aplus_hero_banner` — brand identity / aspirational hero
94
+ 2. `aplus_pain_points` — what problem we solve
95
+ 3. `aplus_features` — how we solve it (3–4 differentiators)
96
+ 4. `aplus_ingredients` (skincare/food/supplements) OR materials/specs (electronics/apparel)
97
+ 5. `aplus_efficacy` — proof (before/after, % stats, third-party data)
98
+ 6. `aplus_how_to_use` — usage steps
99
+ 7. `aplus_endorsement` — founder story / mission / testimonial
100
+
101
+ For dense-text modules (`aplus_features`, `aplus_pain_points`, `aplus_efficacy`, `aplus_how_to_use`): always recommend **GPT Image 2** at `resolution: "2K"` or `"4K"` (text needs the higher tier to stay sharp).
102
+
103
+ ## Brand Kit Reuse
104
+
105
+ Check `.kolbo/brand-kits/<slug>.md` before generating. Pull `primary_color`, `accent_color`, `text_color`, `bg_color`, `fonts`. Bake into every A+ module prompt — marketplace pages live or die on visual consistency across the 13 assets.
106
+
107
+ ## Pre-Generation Interview
108
+
109
+ Ask 2–3 short labeled questions before firing:
110
+
111
+ 1. **Which marketplace?** `[Amazon US / Amazon EU / Shopify / Etsy / eBay / Walmart / Other]` — affects compliance rules
112
+ 2. **Which bundle?** `[main / product-images / aplus / full-set / custom subset]`
113
+ 3. **Brand kit?** Auto-detect from `.kolbo/brand-kits/<slug>.md`; otherwise ask if brand colors / fonts should be applied
114
+
115
+ Skip questions whose answer is obvious from the request.
116
+
117
+ ## Output Discipline
118
+
119
+ - For bundles: `generate_creative_director` returns N URLs. Present them in chat as a numbered list, one URL per line, with the asset name as label:
120
+ ```
121
+ Marketplace cards ready:
122
+ 1. Main image: https://...
123
+ 2. Lifestyle: https://...
124
+ 3. Detail shot: https://...
125
+ ...
126
+ ```
127
+ Do NOT wrap them in an HTML grid artifact — the canvas already shows the gallery.
128
+ - Log all URLs to `.kolbo/production.md` under `## Production: <product name>` → `### Marketplace Cards` subsection.
129
+ - If a `main_image` came back with text / props (compliance failure), surface the issue and re-fire with stronger prompt prohibitions — don't ship a non-compliant main image.
130
+
131
+ ## Existing Main-Image Reuse
132
+
133
+ If the user already has an approved `main_image` from a prior session and wants to generate only secondary / A+ assets that match it:
134
+
135
+ 1. Look up the main image URL from `.kolbo/production.md`.
136
+ 2. Pass it as `reference_images[0]` (in addition to the product photo) so the new assets match the main's exact rendering style — same lighting, same color cast, same product orientation.
137
+ 3. Tag it as `@image2` in the prompt: "Match the product rendering from `@image2` exactly — same angle, same lighting, same color cast."
138
+
139
+ ## UX Rules
140
+
141
+ 1. **Always ask which marketplace** — compliance rules vary.
142
+ 2. **Strict compliance prompts on main_image** — explicit NO text / NO props / NO models / NO borders.
143
+ 3. **Always reuse brand kit** — Read `.kolbo/brand-kits/<slug>.md` first; pass palette + fonts to every A+ module.
144
+ 4. **Recommend GPT Image 2 + 2K/4K for dense-text A+ modules** — Nano Banana renders text well but GPT Image 2 wins at multi-line technical layouts.
145
+ 5. **For bundles, always use `generate_creative_director`** — never fire 13 parallel `generate_image` calls.
146
+ 6. **Log everything to `.kolbo/production.md`** — marketplace listings get updated quarterly; reuse beats regenerate.
@@ -0,0 +1,76 @@
1
+ # Media Library
2
+
3
+ Load this file when the user wants to browse, list, organize, delete, restore, move, favorite, share, or otherwise manage their media library — or when you produce a media file locally and need to surface it back to the user.
4
+
5
+ The library covers both **uploaded files** and **AI-generated outputs the user has saved**. Tools fall into five groups: ingest, browse, lifecycle (delete/restore/move), folders, and favorites.
6
+
7
+ ## ⚠️ Present locally-produced media to the user
8
+
9
+ When you produce a media file LOCALLY — `ffmpeg` via the `video-production` skill, Remotion render, manual `Bash` mux of audio + video, `edit_image` outputs saved to disk, any save-to-file flow — make sure the user can actually find and open it. Local files are invisible in the chat / canvas UI by default; only the path string makes it through.
10
+
11
+ **Rules:**
12
+
13
+ 1. **Surface the file in chat as a clickable thing**, not just a path string. Write the line as a markdown link to a `file://` URL so the user can click to open it in their default app:
14
+ ```
15
+ ✅ Final video ready: [zohar_hagai_campaign.mp4](file:///Users/mymac/Documents/test agent 1/zohar_hagai_campaign.mp4) (45s · 1440×1440 · with music)
16
+ ```
17
+ The user clicks the link → the desktop app shell hands the path to the system → opens in QuickTime / VLC / Finder reveal, etc.
18
+
19
+ 2. **Always log the local path in `.kolbo/production.md`** under the artifact's entry — that's the durable record:
20
+ ```md
21
+ ## Final
22
+ - **Campaign video (45s)**
23
+ - local: /Users/mymac/Documents/test agent 1/zohar_hagai_campaign.mp4
24
+ - resolution: 1440×1440
25
+ - audio: Gilded Horizon (Track 1 & 2, 3:03)
26
+ - rendered: 2026-05-16
27
+ ```
28
+
29
+ 3. **Don't auto-upload to `upload_media`**. The user wants local-only files to stay local; they have the file on disk and can move/share it themselves. Upload only when the user explicitly asks ("upload this", "share publicly", "give me a CDN URL").
30
+
31
+ 4. **Reveal-in-Finder affordance for macOS** when finishing a multi-step production: in addition to the `file://` link, mention the parent directory path so the user can `cd` or open the folder. Many users want to see all the intermediate files (frames, alt cuts, original audio) in one place.
32
+
33
+ 5. **Files served via `file://` won't render inline** in the chat as `<video>` / `<img>` — the desktop WebView blocks file:// for security. Don't try to embed; just link.
34
+
35
+ ## Routing — user says → call
36
+
37
+ | User says | Call |
38
+ |---|---|
39
+ | "Upload this file" / "host this" / "give me a public URL for this" | `upload_media` |
40
+ | "Show my media" / "list my images/videos" / "what do I have?" | `list_media` (pass `type` / `category` / `project_id` / `folder_id` / `search`) |
41
+ | "Show my favorites" / "list starred items" | `list_media` with `category=favorites` |
42
+ | "List everything in project X" | `list_media` with `project_id=X` |
43
+ | "List all videos in folder X" | `list_media` with `folder_id=X, type=video` |
44
+ | "What was the prompt for [item]?" / "tell me about this generation" | `get_media` |
45
+ | "How many videos do I have?" / "what's my storage usage?" | `get_media_stats` |
46
+ | "Favorite this" / "star this" / "save to favorites" | `favorite_media` |
47
+ | "Unfavorite" / "remove from favorites" / "unstar" | `unfavorite_media` |
48
+ | "Delete this" / "remove this image" | `delete_media` (soft, recoverable for 30 days) |
49
+ | "Restore it" / "undelete" / "bring it back from trash" | `restore_media` |
50
+ | "Permanently delete" / "wipe it forever" / "free up space" | **confirm with user** → `permanently_delete_media` |
51
+ | "Move this to project X" | `move_media` |
52
+ | "Clean up old [type]" / "delete everything from [time period]" | `list_media` (find ids) → **confirm** → `bulk_delete_media` |
53
+ | "Restore all from trash" | `list_media include_deleted=true` → `bulk_restore_media` |
54
+ | "Empty my trash" / "purge deleted items" | `list_media include_deleted=true` → **show count, confirm** → `bulk_permanently_delete_media` |
55
+ | "Move all these to project X" | `bulk_move_media` |
56
+ | "Move everything in folder X to project Y" | `move_folder_contents` |
57
+ | "Make a folder for X" / "create a 'campaigns' folder" | `create_media_folder` |
58
+ | "Rename folder" / "change folder color or icon" | `update_media_folder` |
59
+ | "Delete the [name] folder" | **confirm with user** → `delete_media_folder` (items stay in library) |
60
+ | "Add these to [folder]" / "put these in folder X" | `add_media_to_folder` |
61
+ | "Remove these from [folder]" | `remove_media_from_folder` |
62
+ | "Share [folder] with alice@…" | `share_media_folder` with `user_emails: [...]` |
63
+ | "Revoke [user]'s access to [folder]" | `unshare_media_folder` with `user_id` |
64
+ | "Show my folders" / "what folders do I have?" | `list_media_folders` |
65
+
66
+ ## Rules and gotchas
67
+
68
+ 1. **"Delete" is soft by default.** Use `delete_media` / `bulk_delete_media` for normal "delete" intent — items go to trash for 30 days and are recoverable. Only use `permanently_delete_media` / `bulk_permanently_delete_media` when the user explicitly asks for unrecoverable deletion ("permanently", "forever", "wipe", "free up space"). **Always confirm before either permanent variant.**
69
+ 2. **Confirm before destructive folder ops.** `delete_media_folder` detaches items (they stay in the library) but the folder itself is gone — no undo. Confirm with the user.
70
+ 3. **`bulk_move_media` is atomic.** If you get a "not all items owned by you" error, do NOT retry partially. Surface the error to the user and let them pick a smaller batch.
71
+ 4. **Prefer `list_media` filters over post-filtering.** Pass `project_id` / `folder_id` / `category` / `type` / `search` to the backend; don't fetch the whole library and filter client-side.
72
+ 5. **`is_favorited` is per-user.** On shared projects, an item can be favorited by you and not by your teammates — the value reflects the calling user only.
73
+ 6. **"Empty trash" flow:** `list_media` with `include_deleted=true` → show the count → confirm → `bulk_permanently_delete_media`. Never call the bulk-permanent endpoint without listing first so the user knows the scope.
74
+ 7. **Bulk caps:** 1000 ids for `bulk_delete_media` / `bulk_restore_media` / `bulk_permanently_delete_media` / `bulk_move_media`; 500 ids for `add_media_to_folder` / `remove_media_from_folder`. Split larger jobs into successive calls.
75
+ 8. **Folder share resolution:** `share_media_folder` takes emails; users not found come back in `not_found`. Report those to the user — don't assume the share succeeded silently. Members can list/add/remove items but cannot delete the folder or reshare it.
76
+ 9. **`get_media` accepts a generation_id as a fallback** for the `media_id` arg, so you can chase down items the user references by their original generation rather than by library id.
@@ -0,0 +1,199 @@
1
+ # Product Photoshoot — Brand Product Imagery
2
+
3
+ Load this file when the user wants **brand-quality product images** — studio shots, lifestyle scenes, Pinterest pins, hero banners, social carousels, ad packs, virtual try-ons, conceptual / CGI product shots, or seasonal restyles.
4
+
5
+ For ad **video** see `workflows/marketing-studio.md`. For composed brand ads (brand kit + ad format + avatar) see `workflows/dtc-ads.md`. For marketplace listings (Amazon main + secondary + A+ content) see `workflows/marketplace-cards.md`.
6
+
7
+ ## The 10 Modes
8
+
9
+ Pick by intent, not surface keyword. When two modes could apply, prefer the more specific one.
10
+
11
+ | Mode | When user wants… |
12
+ |---|---|
13
+ | `product_shot` | Product on neutral / studio / catalog background (Shopify, white-bg) |
14
+ | `lifestyle_scene` | Product in a real environment — hands, action, atmosphere (kitchen, gym, outdoor) |
15
+ | `closeup_product_with_person` | Tight crop with hands or partial face — beauty application, demonstrating, holding |
16
+ | `moodboard_pin` | Vertical 2:3 Pinterest-native pin, moodboard feel |
17
+ | `hero_banner` | Wide-format website / email / campaign header |
18
+ | `social_carousel` | 3–10 connected slides for IG / LinkedIn / Facebook |
19
+ | `ad_creative_pack` | Coordinated pack of static ad variants for Meta / TikTok / Pinterest / Google Ads |
20
+ | `virtual_model_tryout` | Product worn or used by an AI-rendered model (fashion, accessories) |
21
+ | `conceptual_product` | Surreal / CGI / levitating / splash / sculptural product |
22
+ | `restyle` | Transform an EXISTING image's aesthetic, mood, or seasonal context (without changing the subject) |
23
+
24
+ ### Picking the Mode
25
+
26
+ | User phrasing | Mode |
27
+ |---|---|
28
+ | neutral / clean / white / studio / catalog / Shopify | `product_shot` |
29
+ | scene / in use / kitchen / outdoor / cafe / gym | `lifestyle_scene` |
30
+ | hands holding / face with product / beauty application / demonstrating | `closeup_product_with_person` |
31
+ | Pinterest / pin / vertical pin | `moodboard_pin` |
32
+ | hero / banner / website header / landing page / email header / wide format | `hero_banner` |
33
+ | carousel / slide post / multi-slide / swipeable | `social_carousel` |
34
+ | ads / ad pack / paid social / Meta / TikTok / Pinterest ads / Google ads | `ad_creative_pack` |
35
+ | model wearing / virtual try-on / on body / fashion shoot / lookbook | `virtual_model_tryout` |
36
+ | levitating / floating / splash / frozen motion / surreal / CGI / sculptural | `conceptual_product` |
37
+ | modify EXISTING image's aesthetic / mood / season — without changing subject | `restyle` |
38
+
39
+ **Tie-breakers:**
40
+ - "Pinterest pin of my product on a kitchen counter" → `moodboard_pin` (Pinterest is the platform)
41
+ - "Hero banner showing my product in use" → `hero_banner` (banner format wins)
42
+ - "Carousel of my product in different scenes" → `social_carousel` (multi-slide wins)
43
+ - "Closeup of person applying my serum" → `closeup_product_with_person` (specific genre wins)
44
+
45
+ ## Mode → Kolbo MCP Routing
46
+
47
+ The mode determines which Kolbo MCP tool to call and what defaults to use.
48
+
49
+ | Mode | Primary tool | Model preference | aspect_ratio | Count default |
50
+ |---|---|---|---|---|
51
+ | `product_shot` | `generate_image` | GPT Image 2 (clean studio look + dense label text) | `1:1` | 1 or `num_images: 3` for variants |
52
+ | `lifestyle_scene` | `generate_image` | Nano Banana 2 (best lifestyle realism) | `1:1` or `4:5` | 1 or `num_images: 3` |
53
+ | `closeup_product_with_person` | `generate_image` | Nano Banana 2 | `1:1` or `4:5` | 1 |
54
+ | `moodboard_pin` | `generate_image` | Nano Banana 2 | **`2:3`** (Pinterest native) | 1 or `num_images: 3` |
55
+ | `hero_banner` | `generate_image` | GPT Image 2 (large format + brand text) | `16:9` or `3:1` | 1 |
56
+ | `social_carousel` | **`generate_creative_director`** with `scene_count: 3–10` | Nano Banana 2 | `1:1` (IG) or `4:5` | `scene_count` |
57
+ | `ad_creative_pack` | **`generate_creative_director`** with `scene_count: 4–8` | GPT Image 2 or Nano Banana 2 | Mixed per ad placement (`1:1`, `9:16`, `1.91:1`) — fire one director call per aspect | `scene_count` |
58
+ | `virtual_model_tryout` | `generate_image_edit` with character Visual DNA + product source | Nano Banana Pro (identity-sensitive edits) | `1:1`, `4:5`, or `9:16` | 1–3 |
59
+ | `conceptual_product` | `generate_image` | Nano Banana 2 or GPT Image 2 | `1:1` or `2:3` | 1–4 |
60
+ | `restyle` | `generate_image_edit` with `source_images: [existing]` | Same model that produced the original (or Nano Banana 2 for safe re-render) | Inherit from source | 1–3 |
61
+
62
+ **For multi-output modes** (`social_carousel`, `ad_creative_pack`), always use `generate_creative_director` — never fire ≥2 `generate_image` calls in a loop. See `models/creative-director.md`.
63
+
64
+ **Always validate** `aspect_ratio` and `resolution` against the chosen model's `supported_aspect_ratios` / `supported_resolutions` via `list_models` — see SKILL.md "Resolution / Aspect / Duration — validate against caps".
65
+
66
+ ## Pre-Generation Interview (CRITICAL)
67
+
68
+ Ask **at most 4 short questions** before submitting, always with **labeled options, never open-ended**. Skip a question whose answer is obvious from context (uploaded image, prior turn, brand memory in `.kolbo/brand-kits/`).
69
+
70
+ Pick the question stack based on user state:
71
+
72
+ ### Type A — Uploaded a product photo, said "make me images / photoshoots"
73
+
74
+ 1. **How many?** `[1 / 3 / 5]`
75
+ 2. **What style/mood?** `[Clean studio / Lifestyle / Conceptual / With a model / Other]`
76
+ 3. **Where will you use them?** `[Shopify / Instagram / Pinterest / Paid ads / Website hero]`
77
+ 4. **Brand colors to match?** (skip if a brand kit exists at `.kolbo/brand-kits/<slug>.md`)
78
+
79
+ ### Type B — Uploaded a product photo + named a use case
80
+
81
+ E.g. "make ads for my product", "make a Pinterest pin", "make a hero banner". Mode is obvious. Ask only the gaps:
82
+
83
+ 1. **How many?** (only if multi-output mode)
84
+ 2. **What's the offer / mood / hook?**
85
+ 3. **Anything in particular to emphasize?**
86
+
87
+ ### Type C — Text only, no product photo
88
+
89
+ 1. **Can you upload a product photo?** (preferred — much higher fidelity)
90
+ 2. **If not, describe the product** — category, packaging, color, distinctive features
91
+ 3. **What style?** `[Clean studio / Lifestyle / Conceptual / With a model / Other]`
92
+ 4. **Where will you use it?** `[Shopify / Instagram / Pinterest / Paid ads / Website hero]`
93
+
94
+ ### Type D — Uploaded existing image, "redo / change vibe / different version"
95
+
96
+ → Mode: `restyle`
97
+
98
+ 1. **What aesthetic?** `[Clean girl / Cottagecore / Quiet luxury / Dark academia / Y2K / Other]`
99
+ 2. **Seasonal context?** `[Christmas / Valentine's / Halloween / Black Friday / None]`
100
+ 3. **What to preserve, what to change?** (only if ambiguous)
101
+
102
+ ### Type E — Model wearing a product (fashion, accessories)
103
+
104
+ → Mode: `virtual_model_tryout`
105
+
106
+ 1. **Model archetype?** (suggest 2–3 based on brand audience — don't open-end)
107
+ 2. **Environment?** `[Studio clean / Outdoor natural / Street style / Editorial / Home cozy]`
108
+ 3. **Framing?** `[Full body / Three-quarter / Waist up / Closeup on product area]`
109
+
110
+ ### Type F — Vague request, unclear subject
111
+
112
+ E.g. "make me something cool for my brand".
113
+
114
+ 1. **What product or topic?**
115
+ 2. **Goal?** `[Sell on a marketplace / Build awareness / Run paid ads / Update website]`
116
+ 3. **Upload a reference image?**
117
+
118
+ After answers → return to the relevant Type A–E.
119
+
120
+ ## Brand Kit Integration
121
+
122
+ Before any generation, check if `.kolbo/brand-kits/<slug>.md` exists for the brand:
123
+
124
+ - **Exists** → Read it. Pull `primary_color`, `accent_color`, `fonts`, `logo_url`. Bake hex codes + named fonts into the prompt. Pass the logo as `reference_images[0]` if relevant.
125
+ - **Doesn't exist** but user gave a brand URL → Run `workflows/research-first.md` first to build one.
126
+ - **Doesn't exist** and user gave no URL → Proceed without; ask in Type A's question 4 if relevant.
127
+
128
+ ## Multi-Variant Strategy
129
+
130
+ For `count > 1` on a single-output mode (`product_shot`, `lifestyle_scene`, `closeup_product_with_person`, `moodboard_pin`, `hero_banner`, `conceptual_product`):
131
+
132
+ - Use `num_images: N` on `generate_image` — same prompt, different seeds, fast.
133
+ - Variations come from the model's randomness, not intentional direction.
134
+
135
+ For `social_carousel` / `ad_creative_pack` (multi-output by design):
136
+
137
+ - Use `generate_creative_director` with `scene_count: N`.
138
+ - Each scene gets its **own intentional prompt** (different angle / framing / mood / palette) — not paraphrased copies of one scene.
139
+ - Pass the same `visual_dna_ids` and `reference_images` across all scenes to lock product identity.
140
+
141
+ ## Output Discipline
142
+
143
+ - Call the chosen MCP tool — single command, no preamble.
144
+ - For multi-output: `generate_creative_director` returns N URLs; share them as individual lines (do NOT build an HTML grid artifact — the canvas already shows the gallery).
145
+ - For single-output: one image URL.
146
+ - Log every URL + model + resolution + mode into `.kolbo/production.md` under `### <Mode>` subsection.
147
+
148
+ ## UX Rules
149
+
150
+ 1. **Pick the mode by intent**, not surface keyword. The user saying "Pinterest" → `moodboard_pin` regardless of what's IN the image.
151
+ 2. **Ask at most 4 labeled-option questions** before generating. Skip any question whose answer is obvious.
152
+ 3. **Always confirm aspect ratio + resolution + count** before firing — they materially change output and cost.
153
+ 4. **Reuse brand kits** — Read `.kolbo/brand-kits/<slug>.md` before generating.
154
+ 5. **Strict NO uninvited additions** — "NO captions, NO subtitles, NO watermarks, NO extra text beyond what's specified" in every prompt.
155
+ 6. **No auto-retry on failure** — surface and let the user adjust.
156
+
157
+ ## Prompt Template Seeds
158
+
159
+ ### `product_shot`
160
+ ```
161
+ Clean studio product photograph of @image1 (the product),
162
+ centered on a {neutral white | seamless gradient | catalog beige} background.
163
+ Soft front-fill + subtle rim light, no harsh shadows, no reflections.
164
+ Tack-sharp focus on the product, slight depth-of-field falloff on the background.
165
+ {Brand palette: primary #..., accent #...}
166
+ NO captions, NO watermarks, NO extra text.
167
+ ```
168
+
169
+ ### `lifestyle_scene`
170
+ ```
171
+ @image1 (the product) in a {real-world scene description},
172
+ natural {time-of-day} light, {natural action involving the product}.
173
+ Photographic, editorial style, {iPhone | 35mm film | medium format} feel.
174
+ {Optional: include hands, partial face — never identifiable people}.
175
+ {Brand palette baked into props/clothing}.
176
+ NO captions, NO watermarks.
177
+ ```
178
+
179
+ ### `moodboard_pin`
180
+ ```
181
+ Vertical 2:3 Pinterest pin, moodboard aesthetic.
182
+ @image1 (the product) integrated into a {seasonal/aesthetic theme} flatlay or scene.
183
+ {Aesthetic anchor: cottagecore / quiet luxury / Y2K / clean girl / dark academia}.
184
+ Soft natural light, low-saturation editorial palette,
185
+ optional textural overlay (paper, linen, marble).
186
+ Centered hero composition, generous negative space at top for pin overlay.
187
+ NO captions, NO text.
188
+ ```
189
+
190
+ ### `restyle`
191
+ ```
192
+ @image1 — preserve {subject / composition / camera angle / framing} exactly.
193
+ Change ONLY the {aesthetic / season / mood} to {target aesthetic description}.
194
+ Keep product geometry, label legibility, and identifying details unchanged.
195
+ {Specific change list, e.g.: "swap warm tones for cool blue/silver, add subtle snowflake bokeh,
196
+ shift wood prop to ceramic, keep everything else identical"}.
197
+ ```
198
+
199
+ (More seeds belong here as we learn from real Kolbo generations — append, don't replace.)