@kolbo/mcp 1.81.6 → 1.81.8

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.81.6",
3
+ "version": "1.81.8",
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": {
@@ -1,6 +1,6 @@
1
1
  # AUTO-GENERATED — do not edit
2
2
 
3
- This tree is mirrored from kolbo-code@a463d99, the single source of truth.
3
+ This tree is mirrored from kolbo-code@beae0e9, 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.7
2
+ version: 0.9.10
3
3
  name: kolbo
4
4
  description: |
5
5
  Generate, edit, analyze, and direct creative media through Kolbo AI: images,
@@ -300,14 +300,6 @@ Four surfaces show the same job. Use this map — never invent a fifth:
300
300
 
301
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
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
303
  **Detecting failure — a generation can fail three ways. Treat ALL as failure:**
312
304
 
313
305
  1. **Tool returns `error`** — explicit. Surface, suggest retry, log `generation_id`.
@@ -368,6 +360,18 @@ Write each session's `session_id` + plan name into `.kolbo/production.md` `### S
368
360
 
369
361
  **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.**
370
362
 
363
+ ## 🛑 Runaway-Loop Guard — ONE Generation per Requested Item (CRITICAL)
364
+
365
+ When the user asks for **one specific change**, the answer is **a single tool call**. After URLs return, **stop**. Surface and wait.
366
+
367
+ You are NOT allowed to:
368
+ - Fire the same tool 3+ times in a single turn unless the user explicitly asked for "N variations".
369
+ - Re-fire because you think the result might not be exactly what the user wanted.
370
+ - Auto-retry on success.
371
+ - Fire 5+ parallel `generate_video*` calls speculatively.
372
+
373
+ **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).
374
+
371
375
  ## ⚠️ Editing an Existing Video → ONE Call, Not Frames-First (CRITICAL)
372
376
 
373
377
  Existing video → modify → **single `generate_video_from_video` call** with source video URL + edit prompt.
package/skill/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.7
1
+ 0.9.10
@@ -5,113 +5,297 @@ channel art**: "thumbnail for my video", "YouTube cover", "Shorts cover", "make
5
5
  clickable", "higher CTR".
6
6
 
7
7
  A thumbnail is not a nice image at small size. It is a different craft with a different
8
- success test: **it is judged at ~200px inside a scrolling feed, next to a hundred others.**
8
+ success test: **it is judged at ~168px inside a scrolling feed, next to a hundred others.**
9
9
  Everything below follows from that.
10
10
 
11
11
  ---
12
12
 
13
- ## The four layers
14
-
15
- Every thumbnail that works has exactly these, in this order of importance.
16
-
17
- ### 1. ONE hero subject — 40–70% of the frame
13
+ ## ⚠️ Two things to get right before advising anyone
18
14
 
19
- A face with a big, readable emotion (eyes visible, mouth doing something), or a single
20
- object caught mid-action. Crop tight chest-up for a person.
15
+ **1. The metric is watch time, not clicks.** YouTube's own A/B thumbnail test optimises
16
+ "for overall watch time over other metrics, like click-through rate." A thumbnail that
17
+ wins the click and loses the viewer *loses the test*. This is the mechanical reason the
18
+ shock-face era ended. Never promise something the video does not deliver — it is both a
19
+ spam-policy violation ("malicious clickbait" names thumbnails explicitly) and a test loss.
21
20
 
22
- Kill on sight: full-body wide shots, three competing focal points, a floating UI panel, an
23
- abstract gradient, "a person at a desk". If the concept has no surprise, wit, or
24
- impossibility in it, it will not stop a scroll write the concept as one sentence first,
25
- and if that sentence is boring, invent harder before generating.
21
+ **2. Most thumbnail statistics online are fabricated.** This topic is saturated with
22
+ AI-generated SEO spam inventing authoritative-looking numbers ("47.3% of creators…",
23
+ "9% vs 4% CTR study…", "70% higher CTR for dark thumbnails"). Traced individually, they
24
+ have no source. **Do not quote a thumbnail statistic to a user unless it is in this file.**
25
+ Everything below is graded: **[A]** real study/primary source · **[A?]** real study, but
26
+ its page could not be opened directly — figures corroborated only via secondary quotes,
27
+ so treat as directional, not exact · **[B]** credible practitioner claim · **[C]** craft
28
+ convention, no data.
26
29
 
27
- ### 2. Extreme separation
30
+ Also useful to know: CTR *falling* as a video spreads is normal, not failure — early
31
+ impressions come from subscribers, then Browse/Suggested reach cold viewers. Half of all
32
+ channels sit between **2% and 10% CTR**. **[A]**
28
33
 
29
- The subject must pop off the background: a dark field behind a bright subject, or one
30
- saturated accent against its complement. **Mid-tone on mid-tone is the number-one
31
- unreadable-thumbnail failure.** Muted, tasteful palettes lose in a feed.
32
-
33
- ### 3. Text — 2 to 4 words, maximum
34
-
35
- - Quote the exact words in the prompt: `render only this text: "STOP DOING THIS"`.
36
- - Topmost layer, above every element and effect.
37
- - Roughly **35–45% of the canvas width**. Heavy condensed sans.
38
- - White or a single accent colour with a **thick dark outline or a solid backing bar** —
39
- raw text on a busy image is illegible small.
40
- - Upper or lower third. **Never across the face.**
41
- - Forbid everything else explicitly: `no other text, no taglines, no watermark, no logo,
42
- no captions, no placeholder text`.
34
+ ---
43
35
 
44
- Long strings come back mangled from every image model. If the user wrote a sentence, put
45
- three words on the image and tell them the rest belongs in the video title. For brand
46
- names, spell them letter-by-letter in the prompt and raise quality when the type is small.
36
+ ## The four layers
47
37
 
48
- **Depth trick:** let the subject overlap one word slightly (subject in front of one
49
- letter). Instant production value.
38
+ ### 1. ONE hero subject
39
+
40
+ A face with one **legible** emotion, or a single object caught mid-action. Crop tight.
41
+
42
+ **Faces scale with performance.** In a study of 500 breakout videos: 69% used a face,
43
+ rising to 75% of the top 100 and **80% of the top 50**. Face occupies about **one third
44
+ of the frame** in that top cohort. **[A?]** — the direction (faces matter, and matter more
45
+ at the top) is safe; the exact percentages are not verified at source.
46
+
47
+ **The exaggerated shocked face is dead as a default.** Only ~5% of those breakouts used
48
+ an exaggerated expression; 6% of the top 50. MrBeast's team A/B tested ~30 videos
49
+ open-mouth vs closed-mouth — **every closed-mouth version produced higher watch time**,
50
+ and they changed the channel's house style permanently. **[A]**
51
+
52
+ So: **a clear face beats a wild face.** Direct the expression to *one* readable emotion —
53
+ closed-mouth determination, a genuine restrained smile, focused concentration, real
54
+ scepticism. Direct eye contact into the lens, unless the gaze is deliberately pointing at
55
+ the subject. Forbid in the prompt: gaping "O" mouth, bulging eyes, strained forehead,
56
+ raised chin, any look of discomfort or effort.
57
+
58
+ **Legibility test:** at 168×94, can someone name the emotion in under a second?
59
+
60
+ **Faces are not mandatory** — 31% of breakouts had none. If the subject is a tool, an
61
+ interface, or a generated frame, the object can be the hero.
62
+
63
+ Kill on sight: three competing focal points, a floating UI panel over an abstract
64
+ gradient, "a person at a desk". If the concept has no surprise, wit, or impossibility in
65
+ it, invent harder before generating.
66
+
67
+ ### 2. Separation — luminance first, hue second
68
+
69
+ **Greyscale test: desaturate the thumbnail. If the subject stops separating from the
70
+ background, no palette will save it.** Complementary pairs (orange/teal, blue/orange)
71
+ work mostly because they *also* carry a luminance gap.
72
+
73
+ - **Three dominant colours maximum, text included.** **[B]**
74
+ - **Restrain saturation.** The over-saturated HDR/clarity look — "exaggerated vibrancy,
75
+ bright lighting and sharp contrast" — is now documented as the visual signature of
76
+ AI-generated imagery, inherited from advertising imagery in training data. **[A]**
77
+ Push *luminance* contrast hard; keep saturation on one or two accent elements only.
78
+ - **Check on both YouTube themes.** The UI is near-white or near-black with red accents.
79
+ A dark vignette that separates your subject in dark mode can vanish in light mode.
80
+ Saturated red as a dominant field reads as UI chrome, not content.
81
+ - A single-hue thumbnail is *not* automatically weak — Kurzgesagt and MKBHD ship
82
+ near-monochrome successfully. What fails is a single hue with no luminance separation.
83
+
84
+ ### 3. Text — often none at all
85
+
86
+ The real distribution among breakout thumbnails: **28% had no text** (the largest single
87
+ group), **24% had 1–3 words**, median among those that had any was 5. **[A?]** Over half
88
+ carried three words or fewer. The ubiquitous "3–5 bold words" advice describes a minority.
89
+
90
+ - **Drop text entirely** when the image already states the promise and the title carries
91
+ the specifics. Text is a crutch for a thumbnail that hasn't found its image.
92
+ - **Three words maximum** when used. Never repeat the title — the title is right next to
93
+ it. Text should add the *second half* of an idea the image starts.
94
+ - Quote the exact words in the prompt: `render only this text: "…"`, and forbid the rest:
95
+ `no other text, no taglines, no watermark, no logo, no captions, no gibberish letters`.
96
+ - Heavy-weight sans, one typeface. Cap height ≈ **12–15% of frame height**.
97
+ - **Always** an outline, drop shadow, or solid colour block behind it.
98
+ - Placement: top third or the side opposite the face. **Never the bottom-right quadrant.**
99
+ - Let the subject overlap one letter slightly — instant depth.
100
+
101
+ Long strings come back mangled from every image model. If words garble twice, generate the
102
+ plate **text-free** and set type in the Canvas tool or in HTML — a clean plate plus real
103
+ type beats a third mangled attempt. Logos are the same: **image models cannot render a
104
+ real brand mark.** Generate the plate without it and composite the actual logo file.
50
105
 
51
106
  ### 4. Platform-safe composition
52
107
 
53
- | Format | Rules |
108
+ | Zone | Rule |
54
109
  |---|---|
55
- | **16:9 — YouTube** | Centre-weighted. Nothing critical in the outer 15%: the duration chip sits bottom-right and the red progress bar covers the bottom edge on watched videos. |
56
- | **9:16 Shorts / Reels / TikTok** | Every critical element must survive a **centre-square crop** (feeds and grids crop vertical media to its middle). Keep the top ~15% and the bottom ~20% clear of the platform's title, avatar, caption and buttons. |
57
- | **1:1** | Community posts and square feeds. |
110
+ | **Bottom-right corner** | Duration chip sits here. Nothing important. |
111
+ | **Bottom edge, full width** | Red progress bar on partially-watched videos. Keep critical content ≥40px off the bottom (at 1280×720 scale). |
112
+ | **Overall safe area** | Everything load-bearing inside the centre ~1100×620 of a 1280×720 canvas. |
113
+ | **9:16 — Shorts/Reels/TikTok** | Must survive a **centre-square crop** (grids and cross-posts crop vertical media to the middle). Keep the top ~15% and bottom ~20% clear of platform UI. |
114
+ | **Validate at** | **168×94 px** — the desktop suggested-videos render size. Not 1280×720. |
58
115
 
59
- **Verification is a release gate, not a suggestion:** view the render at ~200px, and for
60
- 9:16 crop the centre square first. If the words or the face don't survive, iterate.
116
+ **File spec (updated most guides are stale):** YouTube now recommends **3840×2160**,
117
+ minimum width 640px, file cap **50 MB** on desktop. Driven by TV overtaking mobile as the
118
+ primary US YouTube device in Feb 2025. **Export at 4K; design for 168px.** **[A]**
61
119
 
62
120
  ---
63
121
 
64
122
  ## Model choice
65
123
 
66
- Text fidelity is the entire constraint. Pick the image model that renders type most
67
- reliably, and raise the quality setting when the words are small or multi-font. If the
68
- words come back garbled twice, generate the image **text-free** and tell the user to set
69
- the type in the Canvas tool — a clean plate plus real type beats a third mangled attempt.
124
+ Text fidelity is the constraint. `gpt-image-2` is the strongest for type use
125
+ **quality: medium** (its sweet spot) or high, and it handles **Hebrew** notably better
126
+ than the alternatives. `nano-banana-2` is strong on cinematic people but weak on text.
127
+ For a text-free plate, either is fine and the cheaper one wins.
128
+
129
+ **Field result (Aug 2026, head-to-head, same prompt/refs/1K):** `nano-banana-2` beat
130
+ `gpt-image-2` on BOTH photorealism (looked like a real studio photo, not a render) and
131
+ reference-mark fidelity — and rendered a short Hebrew headline + Latin badge cleanly.
132
+ The "weak on text" caveat applies to long/dense copy, not a 3-word headline. When a
133
+ thumbnail is a photographic person + short text + referenced logos, run both models
134
+ once and pick — do not assume gpt-image-2 wins by default.
135
+
136
+ Lock the host with a **character Visual DNA** (`workflows/visual-dna.md`) so every
137
+ thumbnail in a series is the same person — and check you are using the DNA of the person
138
+ *as themselves*, not a costumed character DNA built for a film shoot.
139
+
140
+ ## Kolbo brand-asset kit — reuse these, do not rediscover them
141
+
142
+ Learned the hard way (Time Machine tutorial thumbnail, Aug 2026): re-deriving logo
143
+ files and the right Visual DNA from scratch every session, then patching AI mis-draws
144
+ with HTML overlays, is slow and produces a worse result than just generating natively
145
+ with the right references from the start. Check this list before generating anything
146
+ with a Kolbo or model logo, or with Zohar's likeness, in it.
147
+
148
+ | Asset | Where | Status |
149
+ |---|---|---|
150
+ | Kolbo K icon — **THE reference to use** | `Graphics\Logo\kolbo-ai-new-icon-black2.jpg` (white K on black) | ✅ verified real mark. **Always pass THIS file as the generation reference**, never a transparent cutout: the black background gives the model contrast to lock onto and it reproduces the K correctly. Proven tricks that keep the geometry exact fully in-model: (a) print it as a white chest logo on a black t-shirt, (b) render it inside a small dark-navy rounded chip next to a live-typed 'Kolbo.AI' wordmark — both mirror the reference's white-on-dark context |
151
+ | Kolbo K icon, clean cutout | `Youtube\מכונת הזמן\Exports\Thumbnail\assets\k-icon-clean.png` | ⚠️ white-on-transparent — fine for HTML/PIL compositing, but as a *generation reference* on a light background it gives zero contrast and the model redraws the K wrong. Use the black-background source above instead |
152
+ | Kolbo lockup (K + wordmark) | `Youtube\מכונת הזמן\Exports\Thumbnail\assets\kolbo-lockup.png` | ⚠️ this is the **stacked t-shirt lockup** (K on top, small wordmark below) — do not use for a horizontal corner mark, it misreads or gets redrawn wrong when scaled |
153
+ | ByteDance icon | `kolbo-api\assets\Bytedance icon.png` | ❌ **wrong file** — a generic blue bar-chart icon, not ByteDance's real mark. Confirmed by hash, pre-existing bug (not from any recent edit). Filed as `task_f3fab040`. Do not composite this into a "real logo" claim; if a real ByteDance mark is needed, source and verify one first |
154
+ | Zohar — real likeness Visual DNA | id `6a64b8fa5bd226f7e763367b`, name **`zohar`** (single token, so `@zohar` binds) | ✅ correct — use this whenever the ask is "me"/"my face" |
155
+ | Zohar — costumed character DNA | `@zohar_salon` and similar | ⚠️ these are **film-character** DNAs from specific shoots, not his real likeness — never substitute for a "me presenting" thumbnail |
156
+
157
+ **DNA naming rule that bit us:** the `@Name` prompt tag only binds if it exactly
158
+ matches the DNA's stored `name` field as one token. A DNA named "Zohar (Copy)" can
159
+ never bind via `@zohar` — rename the DNA (`update_visual_dna`) once, don't work around
160
+ it per-prompt.
70
161
 
71
162
  ## Routing in Kolbo
72
163
 
73
164
  | Ask | Tool |
74
165
  |---|---|
75
- | One cover | `generate_image` (a single `text_to_image`) |
76
- | Several options at once | The in-app **Thumbnail Generator** — topic + style + font + aspect, and it fans out 4–8 art-directed variations in one run (it uses Creative Director underneath) |
77
- | A batch with a locked character or product | `generate_creative_director` with a Visual DNA attached |
78
- | Cover for a video the user already made | Never crop a frame out of the video — generate a fresh comp. A film frame is exposed for motion, not for a 200px grid |
166
+ | One cover | `generate_image` |
167
+ | Several options at once | The in-app **Thumbnail Generator** — fans out 4–8 art-directed variations |
168
+ | A batch with a locked character or product | `generate_creative_director` with a Visual DNA |
169
+ | Cover for a video the user already made | Never crop a frame out of the video — generate a fresh comp. A film frame is exposed for motion, not for a 168px grid |
170
+ | A second aspect ratio (e.g. 9:16 Shorts after a 16:9 main) | **Generate it natively at that aspect ratio**, do not crop/recompose the other one in HTML. Reuse the same brief, DNA, and reference logo files; write a fresh detailed prompt sized for the new canvas |
171
+
172
+ **Default workflow, one shot:** `generate_image` (or `_edit`) at **`quality: high`**,
173
+ native target resolution (1024-class for GPT Image 2), passing every real logo file the
174
+ comp needs as `reference_images` plus the matching `@Name`/`#Name` tags in the prompt
175
+ text, and the correct Visual DNA id. Ask for **3 concept variations in the same call
176
+ batch** per the ladder below rather than iterating one image through many small manual
177
+ fixes. Reserve HTML-compositing patches for the rare case a specific mark still comes
178
+ back wrong after 2–3 regenerations with references — it is a fallback, not the default
179
+ path.
180
+
181
+ **9:16 safe-zone discipline:** keep the hero content (face, gesture, headline, badge,
182
+ logo) inside roughly the **centre 70% of the canvas width**, not edge-to-edge — verified
183
+ by the centre-square-crop test below. State this explicitly in the prompt ("generous
184
+ margin on both sides, nothing touches the left/right edge") rather than fixing it after
185
+ generation.
79
186
 
80
187
  ## Variation ladder
81
188
 
82
- When producing a set, vary the **concept**, never the words. This is the ladder the in-app
83
- tool uses, and it is a good default order:
189
+ Vary the **concept**, never the words: bold dynamic · clean minimal · vibrant saturated ·
190
+ cinematic wide · close-up dramatic · typography-forward · dark moody · flat illustration.
191
+
192
+ Make **3 thumbnails and 10 titles** per video, and design them *before* shooting. Top
193
+ creators spend ~30% of their effort on packaging versus ~5% for small channels. **[B]**
194
+
195
+ ---
196
+
197
+ ## What now reads as dated or "AI slop"
84
198
 
85
- 1. Bold dynamic high contrast, dramatic light, scroll-stopping energy
86
- 2. Clean minimal one focal point, premium negative space
87
- 3. Vibrant saturated rich colour, maximum visual impact
88
- 4. Cinematic wide epic scale, movie-poster feeling
89
- 5. Close-up dramatic intense subject detail, emotional impact
90
- 6. Typography-forward — the text is the hero, graphic art direction
91
- 7. Dark moody — deep shadows, selective highlights
92
- 8. Flat bright illustration — playful shapes, bold outlines
199
+ **Correct the premise first: YouTube has NOT demoted AI thumbnails.** Its synthetic-content
200
+ policy explicitly exempts "using generative AI tools to create or improve a video outline,
201
+ script, **thumbnail**, title, or infographic." **[A]** Anyone claiming the algorithm
202
+ penalises AI thumbnails is repeating a fabrication. The damage is **competitive and
203
+ trust-based**, and it is real:
93
204
 
94
- ## Faces
205
+ - **The models converge — you disappear into sameness.** 700 generation trajectories
206
+ through image-model feedback loops all collapsed to just **12 dominant motifs**; the
207
+ authors call the result "visual elevator music." **[A]**
208
+ - **The gloss is the tell** — see the saturation note above. **[A]**
209
+ - **AI faces homogenise.** Diffusion models render same-demographic individuals as
210
+ near-identical across professions. Your AI face looks like everyone's AI face — which
211
+ is exactly why a real Visual DNA built from real photos matters. **[A]**
212
+
213
+ **Avoid — evidence-backed:** exaggerated open-mouth shock · over-saturated HDR/clarity ·
214
+ plastic AI skin · piles of arrows and circles (one or two maximum) · **imagery not
215
+ actually in the video** (policy risk *and* it loses the watch-time test) · AI likeness of
216
+ real public figures (YouTube likeness detection is live for all YPP creators).
217
+
218
+ **Avoid — credibility damage in tech/AI niches:** glowing brains, robot-hand-touching-
219
+ human-hand, circuit boards, binary code, humanoid robots, the default blue "tech" wash.
220
+ Each is sci-fi-derived and misleading about what AI actually is. For a channel whose
221
+ credibility *is* the product, these are self-harm.
222
+
223
+ **Avoid on taste, no data — don't cite numbers for these:** golden particle dust and
224
+ bokeh, radial speed lines, neon collage, holographic UI overlays, floating tech icons,
225
+ gradient-mesh purple/blue backgrounds, hexagon grids, generic fantasy creatures.
226
+
227
+ ---
228
+
229
+ ## Tech / AI-tool / filmmaking channels
230
+
231
+ The grammar here is the **opposite** of the MrBeast formula, and that is the point.
232
+ Restraint reads as authority: controlled product photography, matte dark grounds, one
233
+ accent pulled from the subject itself, minimal or no text, a composed direct-to-camera
234
+ expression rather than a reaction. **The absence of arrows and explosions is the brand
235
+ signal.** For a channel selling expertise, the thumbnail is a claim about whether you
236
+ know what you are talking about.
237
+
238
+ What works specifically:
239
+ - **The tool logo as the recognisable object** — high search intent, heavily used;
240
+ differentiate through treatment (scale, lighting, physical staging), not by dropping it.
241
+ - **Before/after** — genuinely strong for AI filmmaking because the transformation *is*
242
+ the promise and it is honest. Skip the arrow; let the two images do the work.
243
+ - **The interface as hero** — a real UI cropped tight to one striking element signals
244
+ "actual tutorial, not hype." Under-used.
245
+ - **Face + artefact** — face at ~⅓ frame, closed-mouth focused, beside the generated
246
+ frame. Satisfies both the face finding and "show the thing."
247
+
248
+ ---
249
+
250
+ ## Hebrew and RTL
251
+
252
+ > **No evidence base exists for any of this.** There is no measured data on Hebrew vs
253
+ > Latin thumbnail text, Hebrew legibility at 168px, or RTL thumbnail composition. What
254
+ > follows is typographic reasoning plus Israeli foundry commentary. For a Hebrew channel
255
+ > this is worth settling empirically — ship a text-right/subject-left variant against a
256
+ > mirrored one and let YouTube's own test decide.
257
+
258
+ - **Hebrew has no ascenders or descenders and a uniform x-height.** Latin words have a
259
+ ragged silhouette that aids word-shape recognition at small size; Hebrew words are
260
+ near-rectangular blocks. **Hebrew needs more size, more weight and more letterspacing
261
+ than Latin to hit the same legibility at 168px.** Budget for it. **[C]**
262
+ - **Fonts:** **Ploni** (AlefAlefAlef) is purpose-built bilingual — Hebrew plus Latin
263
+ designed to sit together without either overshadowing the other, which is exactly the
264
+ problem when a tool name like `Seedance 2.5` sits inside a Hebrew phrase. **Heebo** and
265
+ **Rubik** are strong free alternatives with real bold weights.
266
+ - **Mirror the layout, not the logos.** RTL readers scan a mirrored F-pattern entering
267
+ from the **top-right**, so the natural composition inverts: **text block right, subject
268
+ left**, gaze pointing right-to-left toward the text. Latin brand marks and numerals stay
269
+ LTR regardless. **[B]**
270
+ - **Language split:** Hebrew for the emotional/promise word, Latin for the tool name — the
271
+ tool name is the search-intent anchor and the audience already reads it in Latin.
272
+ - **Per-language thumbnails exist** but are gated behind multi-language audio tracks: you
273
+ need at least one added audio track before a localised thumbnail can attach to it. **[A]**
274
+
275
+ ---
95
276
 
96
- If the channel has a host, lock them with a **character Visual DNA**
97
- (`workflows/visual-dna.md`) so every thumbnail in the series is the same person. Expression
98
- is the payload: shock, delight, disbelief, triumph. A neutral face is a wasted thumbnail.
277
+ ## Honest limits
99
278
 
100
- ## Phone-shot thumbnails
279
+ Thumbnail design is a craft with weak empirical foundations. A study of 2,400 news
280
+ thumbnails across 21 visual features found **few statistically significant correlations
281
+ with engagement at all** **[A]**. The breakout data above describes what winning
282
+ thumbnails *look like*, not what *caused* the win. Genuinely unsettled: rule-of-thirds vs
283
+ centred (no data either way), and saturation levels (creator orthodoxy vs the aesthetics
284
+ literature). Do not present either as settled.
101
285
 
102
- A "raw / authentic" cover is a real style a phone-shot frame with big type over it beats
103
- a polished render for vlog and UGC channels. Build the plate from
104
- `workflows/ugc-smartphone.md`, then apply the text rules above unchanged. The type stays
105
- graphic and deliberate even when the photo is deliberately casual.
286
+ A/B testing needs ~10k impressions per variant to mean anything. Below that, just replace
287
+ the thumbnail outright.
106
288
 
107
289
  ---
108
290
 
109
291
  ## Checklist
110
292
 
111
- - [ ] One subject, 40–70% of frame, tight crop
112
- - [ ] Subject separates hard from the background
113
- - [ ] 4 words, quoted verbatim, everything else forbidden
114
- - [ ] Text has an outline or backing bar, sits off the face
115
- - [ ] Correct aspect, critical content inside the safe area
116
- - [ ] Checked at 200px (and centre-cropped first, for 9:16)
117
- - [ ] No watermark, no stray words, no gibberish letters
293
+ - [ ] One idea, nameable in under a second at 168×94
294
+ - [ ] Face ~⅓ of frame, **one legible emotion, closed-mouth**, eye contact
295
+ - [ ] Greyscale test: subject still separates
296
+ - [ ] ≤3 colours, restrained saturation, checked on light *and* dark themes
297
+ - [ ] 0–3 words, outlined, ~12–15% frame height, off the face, never bottom-right
298
+ - [ ] Nothing in the bottom-right quadrant or bottom 40px
299
+ - [ ] Real logos composited from files, never model-rendered
300
+ - [ ] Nothing in the image that isn't in the video
301
+ - [ ] Exported 3840×2160; verified at 168×94 (and centre-cropped first, for 9:16)