Video Editing Skillpack
Public Made by Adomby adom
Adom's video editing kit: house skills for YouTube thumbnails (X-safe, brand-styled, with a builder script), titles and descriptions, plus the animated Adom logo sting (cut out on transparency, or blooming into the full-screen ADOM wordmark) with its sound effect, ready for Premiere.
name: adom-youtube-thumbnails description: >- The authority on thumbnails for Adom's YouTube channel (@adominc) and on how they look when the link is shared on X. Style spec measured from the published thumbnails (plain navy, no grid, teal and purple glow, huge Familjen Grotesk headline with a teal-to-purple last line ending in a period, presenter cutout, 3D board or app screenshot), X-safe and YouTube-safe zones in px, the white orbital logo rule, house arrows and prompt bubbles, copy rules, a checklist, and make_thumbnail.py which composes a 1280x720 thumbnail and renders the safe-zone check. Trigger words: youtube thumbnail, thumbnail, video thumbnail, x card, twitter card, thumbnail headline, safe zone, make a thumbnail, thumbnail check.
Parent skill: video-editing-skillpack
Adom YouTube thumbnails
Titles live in adom-youtube-titles, descriptions in adom-youtube-descriptions. This skill
owns the picture. Everything below was measured from the 4 published thumbnails
(iMIVb8FOXnI Fusion 360, k-_wNFG1R3o Hydrogen, vKUMzy261zs KiCad / Claude Code,
wFHON9yi8Yc radio), 1280 x 720, and from adom-wiki brand show adom --json.
make_thumbnail.py spec.json -o out.jpg --check # compose + safe-zone report + out-xcheck.png
make_thumbnail.py -o out.jpg --bg frame.png --cutout person.png \
--headline "AI PCBs in|Altium." --orbital left --check # quick mode
make_thumbnail.py --check-only someone-elses.jpg # overlay the zones on any thumbnail
make_thumbnail.py --arrow-assets DIR # re-render the standard arrow PNGs
Needs Pillow and numpy (pip install --target <dir> numpy and set PYTHONPATH if the system
Python lacks it). Fonts and logo load from assets/, so run it from anywhere.
1. Style spec (measured)
| Element | Spec at 1280 x 720 |
|---|---|
| Canvas | 1280 x 720, JPG (quality 92, auto-lowered) or PNG, under 2 MB |
| Background | #0d1117 base lifting to #0c0e1a at the top, plain. Never a grid or any line pattern: the first published thumbnails had a faint 40 px grid and Anastasia ruled it out for every thumbnail (2026-10-21), so the script no longer draws one |
| Glow | teal #00b8b1 radial from beyond the bottom-left corner (centre -60, 800; radius 700; about 55 % at the core, measured #0c525e at 10, 700); purple #8c6bf7 radial from beyond the bottom-right (1340, 820; radius 640; about 50 %, measured #342868 at 1270, 710) |
| Headline font | Familjen Grotesk Bold (700). Confirmed by the single-story "a" in "radio", "town". Not Satoshi, not Inter |
| Headline size | cap height 73 to 100 px (KiCad 73, Fusion 78, radio 85, Hydrogen 100), i.e. 112 to 150 px font size (Familjen cap = 0.65 em). Default 120 px. A long 3-line claim drops to 84 to 90 px |
| Headline position | left-aligned at x = 46 to 59 (Hydrogen 83); default x = 52 |
| Line pitch | 0.96 x font size (Fusion 115 px at 120 px). 2 or 3 lines |
| Line colours | all lines white #ffffff except the LAST line, which carries the gradient and ends with a period |
| Gradient | horizontal across the last line's ink: #00b8b1 0 %, #2fd0c3 40 %, #5fb0e6 70 %, #8c6bf7 100 % (assets/gradient.json) |
| Kicker (optional) | Familjen Grotesk Bold, about 40 to 46 px caps, tracked +14 %, accent #00e6dc, 34 px above the headline ("ELECTRONICS PROTOTYPING") |
| Sub line (optional) | Familjen Grotesk Bold 40 to 46 px, white with teal keywords ("Meet Hydrogen") |
| Visual | right 45 to 50 % of the frame: tilted app screenshot (perspective, 1 px #30363d border, rounded, teal edge glow), a 3D board render popping out in front, presenter cutout between them |
| Cutouts | soft black drop shadow, blur 18 px, 55 %, offset 0, 10 |
| Extras | at most 1 or 2: house arrow, prompt bubble, teal starburst (#00e6dc, 22 points, navy text, rotated about 12 deg), teal glow outline |
Small text (bubbles, labels) is Satoshi Bold; body copy is Satoshi Medium. Familjen Grotesk is for the headline, kicker and sub line only.
2. Safe zones (hard rule)
When an Adom YouTube link is posted on X, X lays a title pill over the bottom-left of the card (on the radio thumbnail it covered "for a radio."). YouTube puts the duration badge bottom-right.
0 768 1088 1280
0 +--------------------------------------------------------------+
| [orb] [orb] | orbital slots
| 24 px edge margin for text and faces | 30,28 / 1192,28, 58 px
| |
| HEADLINE / faces / product: anywhere above y = 562 |
| on the left, anywhere outside the orange box on the right |
562|- - - - - - - - - - - - - - - - - + |
| X TITLE PILL ZONE | |
| x 0..768, y 562..720 | +-----------+ 634
| (left 60 %, bottom 22 %) | | YT 12:34 |
720+-----------------------------------+--------------+-----------+
x 1088..1280, y 634..720
| Zone | px at 1280 x 720 | Fraction |
|---|---|---|
| X title pill | x 0 to 768, y 562 to 720 | left 60 %, bottom 22 % |
| YouTube duration badge | x 1088 to 1280, y 634 to 720 | right 15 %, bottom 12 % |
| Edge margin | 24 px on every side for text and faces |
Nothing important in either zone: no headline, no face, no key product (board, logo, bubble).
Background, glow, bodies below the chin, desks and laptops may run through them.
--check reports every checked element (headline, bubble, badge, text, orbital and any layer
marked "important": true) that crosses a zone, and writes <out>-xcheck.png: the thumbnail
with the zones drawn (red X zone, orange YouTube zone, teal orbital slots, yellow boxes for
checked elements) plus a 320 x 180 preview and a mock X card underneath.
Practical consequence: the headline block ends above y = 562. A 3-line headline at 86 px that starts at y = 196 ends at about 430. The radio thumbnail's headline (y 420 to 638) breaks this rule; do not copy that placement.
3. Logo rule
- The Adom orbital mark only (no wordmark, no "+ partner" pill), as a white cutout:
assets/adom-orbital-white-512.pngor-1024.png(white fill, transparent background, rasterised fromassets/adom-icon.svg, the brand page'sassets/adom-icon.svg). - 58 x 58 px, 30 px from the side, 28 px from the top (measured on 3 of the 4 thumbnails). Soft shadow 8 px, 35 %.
- Top-left when the headline sits on the left (the default, like every existing thumbnail). Top-right when the headline or the main subject sits on the right, or when the top-left corner is busy. Pick the less busy corner. Never both, never a bottom corner.
- Partner logos (Altium, KiCad, Claude) may appear as content, never in the orbital's corner. Recolour a black partner wordmark to white for the dark background, keep its mark colours.
4. Arrows (house style)
Every arrow matches the ones in vKUMzy261zs (swoosh under "PCBs.") and wFHON9yi8Yc (hook
down to the car screen). The full arrow spec and ready-made PNGs are in the adom-arrows skill.
| Property | Value (1280 x 720) |
|---|---|
| Colour | accent #00e6dc (measured #06e3d9 / #05e0d5 after JPEG) |
| Stroke | one smooth quadratic curve, uniform 11 px (0.86 % of the width), round caps |
| Head | solid filled triangle, base 44 px (4.0 x stroke), length 40 px (3.6 x stroke), corners softened by 0.15 x stroke, aligned to the curve's end tangent, the stroke ends inside the head |
| Glow | same colour, gaussian sigma 8 px, about 60 % opacity at the stroke edge, fading out by about 24 px |
| Curve | control point offset 0.25 to 0.35 of the chord (bend); a hook uses an explicit control point at (end x, start y) so it leaves sideways and lands vertically |
| Length | 250 to 360 px; points from the claim to the thing (headline to board, prompt to result) |
| Count | one per thumbnail |
{"type": "arrow", "from": [x, y], "to": [x, y], "bend": 0.28} (positive bulges to the right
of the direction of travel, so a left-to-right arrow sags), or "control": [x, y], and
"scale" (1.0 = 11 px). PNGs: assets/arrow-swoosh-right.png, arrow-hook-down.png,
arrow-curve-left.png, arrow-straight-right.png.
5. Prompt bubbles
Any prompt shown in a thumbnail uses the "Make me an AM/FM radio." bubble style (wFHON9yi8Yc).
| Property | Value (1280 x 720) |
|---|---|
| Shape | rounded rectangle, radius 20 px, no tail |
| Fill | #0b0e13 at 94 % (measured constant over a varied background) |
| Border | 2 px, #e6edf3 at 35 % |
| Text | Satoshi Bold 37 px (cap height about 26 px), white, curly quotes “…”, the period inside the closing quote |
| Padding | 46 px left and right; height = 37 px + 2 x 31 px (about 99 px) |
| Shadow | black, blur 16 px, 55 %, offset 0, 6 |
| Tilt | 3 deg counter-clockwise (right end higher), as measured |
| Width | follows the text; keep the prompt to one line, scale 0.8 to 1.0 for long prompts |
{"type": "bubble", "text": "Design a 12 V to 5 V buck converter in Altium.", "center": [x, y], "scale": 0.82}.
The script adds the curly quotes and the final period if missing.
6. Composition recipes (the three archetypes)
A. Presenter + board (Fusion 360 "1st EVER", KiCad "AI Engineered PCBs.") Brand background. Headline left (x 52). Right half: app screenshot tilted slightly (quad about [740, 92] [1292, 58] [1292, 430] [740, 418]), presenter cutout(s) chest-up over it with a 60 px bottom fade, the 3D board in front, bottom edge above y 615 and left edge right of x 768. One extra: arrow from the headline to the board, or the starburst.
B. POV / vlog (radio)
Full-bleed photo from the video ("type": "photo", blur 0 for a real POV shot, 12 to 16 for a
lab backdrop behind cutouts), navy darken 35 to 55 % and a scrim on the headline side. People
large on the side opposite the headline, faces above y 562. Prompt bubble near the top, clear of
faces and the orbital. The headline moves UP compared with the radio original.
C. App screenshot (Hydrogen "New app in town.") Brand background. Headline left, optional kicker and sub line. A big screenshot in perspective running off the right edge with the teal edge glow, the bottom-right corner above y 620 or treated as background. Optional partner logo or the board over the screenshot. No presenter.
Sources: grab 4K frames read-only with
adom-bridge --target <mac> premiere_preview_frame '{"time":<s>,"width":3840}' (the PNG is
.image.base64; stream the JSON into /home/..., not /tmp). Avoid frames with lower-third
name titles. Cut people out with rembg (isnet-general-use, run on a half-size crop: the
4K crop is killed on a 4 GB box); a 3D board rendered on a flat background cuts out by
thresholding against the background colour plus a flood fill.
7. Copy rules
- One idea. Either 2 to 4 words per line over 2 or 3 lines ("AI PCBs in / Fusion 360.", "New app / in town."), or a 3-line factual claim ("Less than 2 hours / from prompt to / finished board."). Break lines at phrase boundaries; the last line is the payoff.
- Ends with a period on the gradient line. No exclamation marks, no question bait, no emoji, no all-caps headline (the kicker is the only caps).
- Adds to the title, does not repeat it. Title "AI Designs a PCB in Altium" + headline "Less than 2 hours from prompt to finished board." is the model: the title says what, the thumbnail says how fast. Claims must be checkable (the video shows 1 h 48 min).
- Numbers as digits ("2 hours", "12 V"). Brand voice: plain, precise, no hype.
- A prompt bubble quotes the real prompt, shortened only by cutting, never reworded.
8. Spec file
{
"background": {"type": "brand"} | {"type": "photo", "path": "f.jpg", "blur": 16, "darken": 0.5, "scrim": "left|right"},
"orbital": "left" | "right",
"layers": [
{"type": "screen", "path": "shot.jpg", "quad": [[x,y],[x,y],[x,y],[x,y]], "dim": 0.1, "glow": true, "crop": [l,t,r,b]},
{"type": "image", "path": "cutout.png", "box": [x, y, width], "fade_bottom": 60, "shadow": true,
"important": true, "important_box": [l, t, r, b], "name": "board"},
{"type": "headline", "lines": ["...", "..."], "x": 52, "y": 220, "size": 120, "max_width": 640,
"align": "left|right", "leading": 0.96, "kicker": "Part 3", "sub": [["Meet ", "white"], ["Hydrogen", "teal"]]},
{"type": "arrow", "from": [x,y], "to": [x,y], "bend": 0.28},
{"type": "bubble", "text": "...", "center": [x,y], "scale": 1.0, "rotate": 3},
{"type": "badge", "lines": ["1st", "EVER"], "center": [x,y], "r": 130},
{"type": "text", "text": "...", "at": [x,y], "size": 40, "font": "display|body|bodybold", "color": "#ffffff"}
]
}
Layers draw in order; the orbital is drawn last. y of a headline is the top of the first
line's capitals. max_width shrinks the size until every line fits. Relative paths resolve
next to the spec. Worked examples: examples/altium-A.json, -B.json, -C.json (their
source images are in /home/adom/work/thumbs/altium/specs/).
9. Checklist before publishing
- 1280 x 720, under 2 MB, JPG or PNG.
- Plain navy background with the two glows: no grid, no line pattern.
-
--checkprintssafe zones: clear; look at the-xcheck.pngyourself: nothing important in the red (X) or orange (YouTube) box, nothing within 24 px of an edge. - Headline in Familjen Grotesk Bold, white lines plus one gradient last line ending in a period.
- Readable in the 320 x 180 preview (cap height at least about 55 px at full size).
- White orbital only, 58 px at 30 / 28, top-left (or top-right when the headline is right).
- At most 2 extras; any arrow and bubble rendered by the script (house style).
- Faces clean: no lower-third titles, no background people, no hard cut edges at the chest unless something covers them.
- Copy adds to the title, checkable claim, no exclamation marks, no emoji.
- Partner logo legible on dark (white wordmark), never in the orbital's corner.
Files
make_thumbnail.py: composer, arrow and bubble renderers, safe-zone checker.assets/adom-orbital-white-512.png,assets/adom-orbital-white-1024.png,assets/adom-icon.svg.assets/gradient.json: headline gradient stops and the measurements behind them.assets/arrow-*.png: standard arrows (transparent, glow included).assets/fonts/: Familjen Grotesk (SIL OFL,FamiljenGrotesk-OFL.txt) and Satoshi (Fontshare free licence, shipped by the adom/brand page), converted to TTF for Pillow.examples/: the specs of the three Altium example thumbnails.
---
name: adom-youtube-thumbnails
description: >-
The authority on thumbnails for Adom's YouTube channel (@adominc) and on how they look when
the link is shared on X. Style spec measured from the published thumbnails (plain navy, no grid, teal
and purple glow, huge Familjen Grotesk headline with a teal-to-purple last line ending in a
period, presenter cutout, 3D board or app screenshot), X-safe and YouTube-safe zones in px,
the white orbital logo rule, house arrows and prompt bubbles, copy rules, a checklist, and
make_thumbnail.py which composes a 1280x720 thumbnail and renders the safe-zone check.
Trigger words: youtube thumbnail, thumbnail, video thumbnail, x card, twitter card, thumbnail
headline, safe zone, make a thumbnail, thumbnail check.
---
Parent skill: **video-editing-skillpack**
# Adom YouTube thumbnails
Titles live in `adom-youtube-titles`, descriptions in `adom-youtube-descriptions`. This skill
owns the picture. Everything below was measured from the 4 published thumbnails
(`iMIVb8FOXnI` Fusion 360, `k-_wNFG1R3o` Hydrogen, `vKUMzy261zs` KiCad / Claude Code,
`wFHON9yi8Yc` radio), 1280 x 720, and from `adom-wiki brand show adom --json`.
```
make_thumbnail.py spec.json -o out.jpg --check # compose + safe-zone report + out-xcheck.png
make_thumbnail.py -o out.jpg --bg frame.png --cutout person.png \
--headline "AI PCBs in|Altium." --orbital left --check # quick mode
make_thumbnail.py --check-only someone-elses.jpg # overlay the zones on any thumbnail
make_thumbnail.py --arrow-assets DIR # re-render the standard arrow PNGs
```
Needs Pillow and numpy (`pip install --target <dir> numpy` and set `PYTHONPATH` if the system
Python lacks it). Fonts and logo load from `assets/`, so run it from anywhere.
## 1. Style spec (measured)
| Element | Spec at 1280 x 720 |
|---|---|
| Canvas | 1280 x 720, JPG (quality 92, auto-lowered) or PNG, under 2 MB |
| Background | `#0d1117` base lifting to `#0c0e1a` at the top, plain. **Never a grid** or any line pattern: the first published thumbnails had a faint 40 px grid and Anastasia ruled it out for every thumbnail (2026-10-21), so the script no longer draws one |
| Glow | teal `#00b8b1` radial from beyond the bottom-left corner (centre -60, 800; radius 700; about 55 % at the core, measured `#0c525e` at 10, 700); purple `#8c6bf7` radial from beyond the bottom-right (1340, 820; radius 640; about 50 %, measured `#342868` at 1270, 710) |
| Headline font | Familjen Grotesk Bold (700). Confirmed by the single-story "a" in "radio", "town". Not Satoshi, not Inter |
| Headline size | cap height 73 to 100 px (KiCad 73, Fusion 78, radio 85, Hydrogen 100), i.e. 112 to 150 px font size (Familjen cap = 0.65 em). Default 120 px. A long 3-line claim drops to 84 to 90 px |
| Headline position | left-aligned at x = 46 to 59 (Hydrogen 83); default x = 52 |
| Line pitch | 0.96 x font size (Fusion 115 px at 120 px). 2 or 3 lines |
| Line colours | all lines white `#ffffff` except the LAST line, which carries the gradient and ends with a period |
| Gradient | horizontal across the last line's ink: `#00b8b1` 0 %, `#2fd0c3` 40 %, `#5fb0e6` 70 %, `#8c6bf7` 100 % (`assets/gradient.json`) |
| Kicker (optional) | Familjen Grotesk Bold, about 40 to 46 px caps, tracked +14 %, accent `#00e6dc`, 34 px above the headline ("ELECTRONICS PROTOTYPING") |
| Sub line (optional) | Familjen Grotesk Bold 40 to 46 px, white with teal keywords ("Meet **Hydrogen**") |
| Visual | right 45 to 50 % of the frame: tilted app screenshot (perspective, 1 px `#30363d` border, rounded, teal edge glow), a 3D board render popping out in front, presenter cutout between them |
| Cutouts | soft black drop shadow, blur 18 px, 55 %, offset 0, 10 |
| Extras | at most 1 or 2: house arrow, prompt bubble, teal starburst (`#00e6dc`, 22 points, navy text, rotated about 12 deg), teal glow outline |
Small text (bubbles, labels) is Satoshi Bold; body copy is Satoshi Medium. Familjen Grotesk is
for the headline, kicker and sub line only.
## 2. Safe zones (hard rule)
When an Adom YouTube link is posted on X, X lays a title pill over the bottom-left of the card
(on the radio thumbnail it covered "for a radio."). YouTube puts the duration badge bottom-right.
```
0 768 1088 1280
0 +--------------------------------------------------------------+
| [orb] [orb] | orbital slots
| 24 px edge margin for text and faces | 30,28 / 1192,28, 58 px
| |
| HEADLINE / faces / product: anywhere above y = 562 |
| on the left, anywhere outside the orange box on the right |
562|- - - - - - - - - - - - - - - - - + |
| X TITLE PILL ZONE | |
| x 0..768, y 562..720 | +-----------+ 634
| (left 60 %, bottom 22 %) | | YT 12:34 |
720+-----------------------------------+--------------+-----------+
x 1088..1280, y 634..720
```
| Zone | px at 1280 x 720 | Fraction |
|---|---|---|
| X title pill | x 0 to 768, y 562 to 720 | left 60 %, bottom 22 % |
| YouTube duration badge | x 1088 to 1280, y 634 to 720 | right 15 %, bottom 12 % |
| Edge margin | 24 px on every side for text and faces | |
Nothing important in either zone: no headline, no face, no key product (board, logo, bubble).
Background, glow, bodies below the chin, desks and laptops may run through them.
`--check` reports every checked element (headline, bubble, badge, text, orbital and any layer
marked `"important": true`) that crosses a zone, and writes `<out>-xcheck.png`: the thumbnail
with the zones drawn (red X zone, orange YouTube zone, teal orbital slots, yellow boxes for
checked elements) plus a 320 x 180 preview and a mock X card underneath.
Practical consequence: the headline block ends above y = 562. A 3-line headline at 86 px that
starts at y = 196 ends at about 430. The radio thumbnail's headline (y 420 to 638) breaks this
rule; do not copy that placement.
## 3. Logo rule
- The Adom **orbital mark only** (no wordmark, no "+ partner" pill), as a **white** cutout:
`assets/adom-orbital-white-512.png` or `-1024.png` (white fill, transparent background,
rasterised from `assets/adom-icon.svg`, the brand page's `assets/adom-icon.svg`).
- **58 x 58 px**, **30 px** from the side, **28 px** from the top (measured on 3 of the 4
thumbnails). Soft shadow 8 px, 35 %.
- **Top-left** when the headline sits on the left (the default, like every existing thumbnail).
**Top-right** when the headline or the main subject sits on the right, or when the top-left
corner is busy. Pick the less busy corner. Never both, never a bottom corner.
- Partner logos (Altium, KiCad, Claude) may appear as content, never in the orbital's corner.
Recolour a black partner wordmark to white for the dark background, keep its mark colours.
## 4. Arrows (house style)
Every arrow matches the ones in `vKUMzy261zs` (swoosh under "PCBs.") and `wFHON9yi8Yc` (hook
down to the car screen). The full arrow spec and ready-made PNGs are in the `adom-arrows` skill.
| Property | Value (1280 x 720) |
|---|---|
| Colour | accent `#00e6dc` (measured `#06e3d9` / `#05e0d5` after JPEG) |
| Stroke | one smooth quadratic curve, uniform **11 px** (0.86 % of the width), round caps |
| Head | solid filled triangle, base **44 px** (4.0 x stroke), length **40 px** (3.6 x stroke), corners softened by 0.15 x stroke, aligned to the curve's end tangent, the stroke ends inside the head |
| Glow | same colour, gaussian sigma **8 px**, about **60 %** opacity at the stroke edge, fading out by about 24 px |
| Curve | control point offset 0.25 to 0.35 of the chord (`bend`); a hook uses an explicit control point at (end x, start y) so it leaves sideways and lands vertically |
| Length | 250 to 360 px; points from the claim to the thing (headline to board, prompt to result) |
| Count | one per thumbnail |
`{"type": "arrow", "from": [x, y], "to": [x, y], "bend": 0.28}` (positive bulges to the right
of the direction of travel, so a left-to-right arrow sags), or `"control": [x, y]`, and
`"scale"` (1.0 = 11 px). PNGs: `assets/arrow-swoosh-right.png`, `arrow-hook-down.png`,
`arrow-curve-left.png`, `arrow-straight-right.png`.
## 5. Prompt bubbles
Any prompt shown in a thumbnail uses the "Make me an AM/FM radio." bubble style (`wFHON9yi8Yc`).
| Property | Value (1280 x 720) |
|---|---|
| Shape | rounded rectangle, radius **20 px**, **no tail** |
| Fill | `#0b0e13` at **94 %** (measured constant over a varied background) |
| Border | **2 px**, `#e6edf3` at **35 %** |
| Text | Satoshi **Bold 37 px** (cap height about 26 px), white, curly quotes `“…”`, the period inside the closing quote |
| Padding | **46 px** left and right; height = 37 px + 2 x 31 px (about 99 px) |
| Shadow | black, blur 16 px, 55 %, offset 0, 6 |
| Tilt | **3 deg counter-clockwise** (right end higher), as measured |
| Width | follows the text; keep the prompt to one line, scale 0.8 to 1.0 for long prompts |
`{"type": "bubble", "text": "Design a 12 V to 5 V buck converter in Altium.", "center": [x, y], "scale": 0.82}`.
The script adds the curly quotes and the final period if missing.
## 6. Composition recipes (the three archetypes)
**A. Presenter + board** (Fusion 360 "1st EVER", KiCad "AI Engineered PCBs.")
Brand background. Headline left (x 52). Right half: app screenshot tilted slightly
(quad about [740, 92] [1292, 58] [1292, 430] [740, 418]), presenter cutout(s) chest-up over it
with a 60 px bottom fade, the 3D board in front, bottom edge above y 615 and left edge right of
x 768. One extra: arrow from the headline to the board, or the starburst.
**B. POV / vlog** (radio)
Full-bleed photo from the video (`"type": "photo"`, blur 0 for a real POV shot, 12 to 16 for a
lab backdrop behind cutouts), navy darken 35 to 55 % and a scrim on the headline side. People
large on the side opposite the headline, faces above y 562. Prompt bubble near the top, clear of
faces and the orbital. The headline moves UP compared with the radio original.
**C. App screenshot** (Hydrogen "New app in town.")
Brand background. Headline left, optional kicker and sub line. A big screenshot in perspective
running off the right edge with the teal edge glow, the bottom-right corner above y 620 or
treated as background. Optional partner logo or the board over the screenshot. No presenter.
Sources: grab 4K frames read-only with
`adom-bridge --target <mac> premiere_preview_frame '{"time":<s>,"width":3840}'` (the PNG is
`.image.base64`; stream the JSON into `/home/...`, not `/tmp`). Avoid frames with lower-third
name titles. Cut people out with `rembg` (`isnet-general-use`, run on a half-size crop: the
4K crop is killed on a 4 GB box); a 3D board rendered on a flat background cuts out by
thresholding against the background colour plus a flood fill.
## 7. Copy rules
- One idea. Either 2 to 4 words per line over 2 or 3 lines ("AI PCBs in / Fusion 360.",
"New app / in town."), **or a 3-line factual claim** ("Less than 2 hours / from prompt to /
finished board."). Break lines at phrase boundaries; the last line is the payoff.
- Ends with a period on the gradient line. No exclamation marks, no question bait, no emoji,
no all-caps headline (the kicker is the only caps).
- Adds to the title, does not repeat it. Title "AI Designs a PCB in Altium" + headline "Less than
2 hours from prompt to finished board." is the model: the title says what, the thumbnail says
how fast. Claims must be checkable (the video shows 1 h 48 min).
- Numbers as digits ("2 hours", "12 V"). Brand voice: plain, precise, no hype.
- A prompt bubble quotes the real prompt, shortened only by cutting, never reworded.
## 8. Spec file
```json
{
"background": {"type": "brand"} | {"type": "photo", "path": "f.jpg", "blur": 16, "darken": 0.5, "scrim": "left|right"},
"orbital": "left" | "right",
"layers": [
{"type": "screen", "path": "shot.jpg", "quad": [[x,y],[x,y],[x,y],[x,y]], "dim": 0.1, "glow": true, "crop": [l,t,r,b]},
{"type": "image", "path": "cutout.png", "box": [x, y, width], "fade_bottom": 60, "shadow": true,
"important": true, "important_box": [l, t, r, b], "name": "board"},
{"type": "headline", "lines": ["...", "..."], "x": 52, "y": 220, "size": 120, "max_width": 640,
"align": "left|right", "leading": 0.96, "kicker": "Part 3", "sub": [["Meet ", "white"], ["Hydrogen", "teal"]]},
{"type": "arrow", "from": [x,y], "to": [x,y], "bend": 0.28},
{"type": "bubble", "text": "...", "center": [x,y], "scale": 1.0, "rotate": 3},
{"type": "badge", "lines": ["1st", "EVER"], "center": [x,y], "r": 130},
{"type": "text", "text": "...", "at": [x,y], "size": 40, "font": "display|body|bodybold", "color": "#ffffff"}
]
}
```
Layers draw in order; the orbital is drawn last. `y` of a headline is the top of the first
line's capitals. `max_width` shrinks the size until every line fits. Relative paths resolve
next to the spec. Worked examples: `examples/altium-A.json`, `-B.json`, `-C.json` (their
source images are in `/home/adom/work/thumbs/altium/specs/`).
## 9. Checklist before publishing
- [ ] 1280 x 720, under 2 MB, JPG or PNG.
- [ ] Plain navy background with the two glows: no grid, no line pattern.
- [ ] `--check` prints `safe zones: clear`; look at the `-xcheck.png` yourself: nothing
important in the red (X) or orange (YouTube) box, nothing within 24 px of an edge.
- [ ] Headline in Familjen Grotesk Bold, white lines plus one gradient last line ending in a period.
- [ ] Readable in the 320 x 180 preview (cap height at least about 55 px at full size).
- [ ] White orbital only, 58 px at 30 / 28, top-left (or top-right when the headline is right).
- [ ] At most 2 extras; any arrow and bubble rendered by the script (house style).
- [ ] Faces clean: no lower-third titles, no background people, no hard cut edges at the chest
unless something covers them.
- [ ] Copy adds to the title, checkable claim, no exclamation marks, no emoji.
- [ ] Partner logo legible on dark (white wordmark), never in the orbital's corner.
## Files
- `make_thumbnail.py`: composer, arrow and bubble renderers, safe-zone checker.
- `assets/adom-orbital-white-512.png`, `assets/adom-orbital-white-1024.png`, `assets/adom-icon.svg`.
- `assets/gradient.json`: headline gradient stops and the measurements behind them.
- `assets/arrow-*.png`: standard arrows (transparent, glow included).
- `assets/fonts/`: Familjen Grotesk (SIL OFL, `FamiljenGrotesk-OFL.txt`) and Satoshi (Fontshare
free licence, shipped by the adom/brand page), converted to TTF for Pillow.
- `examples/`: the specs of the three Altium example thumbnails.