create-thumbnail
GitHub基于品牌规范生成1920x1080 ClassroomIO缩略图。通过HTML+CSS构建设计,利用无头Chrome渲染PNG,确保字体、Logo及配色符合品牌标准,支持多样化布局以避免重复。
触发场景
安装
npx skills add classroomio/classroomio --skill create-thumbnail -g -y
SKILL.md
Frontmatter
{
"name": "create-thumbnail",
"description": "Generate on-brand ClassroomIO thumbnails (blog posts, changelogs, YouTube videos) as 1920×1080 PNGs. Builds HTML+CSS from the brand token system and renders deterministically via headless Chrome. Use when the user asks to create\/make a thumbnail, cover image, or video\/blog banner for ClassroomIO."
}
You are producing a 1920×1080 (16:9) ClassroomIO thumbnail by writing an HTML file that
consumes the brand token CSS in this skill, then rendering it to PNG with render.py. The
output must look designed-in-Figma, not templated. The "Self-Host ClassroomIO with Dokploy"
two-tile thumbnail is the quality bar to match or beat — it is NOT a template to clone.
Vary the composition — do not default to one layout
The brand system is fixed (colors, font, tiles, pills, gradients). The composition is not. Every thumbnail must be a deliberate design choice, not a find-and-replace of the last one.
- Pick the pattern from the content, not from what you made last time (see the catalog below). A release is a hero icon; a guide is editorial; a multi-item feature is a concept map. Only a true "X with/via Y" integration should reach for the two-tile connect.
- When you DO reuse a pattern (e.g. a series like "self-host with Dokploy / Coolify / Railway" where consistency is the point), still vary within it — the focal treatment, the pill copy, the headline emphasis, the accent/texture. Series consistency is a choice the user should confirm, not your default.
- Actively avoid shipping three near-identical images in a row. If the last thumbnail you made used a layout, reach for a different one unless the user asked to match a set.
- Treat
template-two-tile.htmlas one starting point among the patterns, not THE template. For other patterns, compose fresh fromthumbnail.cssclasses.
If a request is ambiguous about style, propose a pattern (and, for a series, ask whether to match the existing set) before generating — don't silently reuse the previous layout.
Why this pipeline produces quality (do not skip these)
- Deterministic fonts. Geist is embedded as base64
@font-face. A Google Fonts<link>does NOT load before the headless screenshot — the headline silently falls back to system sans and looks off-brand. This is the single biggest failure mode.render.pyhandles it. - Real assets, recolored. ClassroomIO logo = the actual
apps/website/static/logo-512.png, recolored white viafilter: brightness(0) invert(1). Never redraw it. - Official third-party logos. For a partner/tool, fetch the OFFICIAL svg (e.g. Dokploy:
https://dokploy.com/icon.svg). Prefer an svg whose paths arefill="white"(or force white) so it drops onto the blue tile cleanly. A wrong-but-close logo destroys credibility. - Honest gradients, never frosted-white chips. Tiles and pills are real blue gradients with
iridescent borders (see
thumbnail.css).rgba(255,255,255,0.1)frosted glass reads off-brand.
Design spec (source of truth)
The full pattern catalog and Figma-exact tokens live in
company/blog-thumbnail-agent/README.md — read it before generating, alongside the six
reference PNGs in that folder. thumbnail.css in this skill already encodes those tokens
(background vignette, glass tiles, pills, frame, title). Consume the CSS classes; don't re-derive.
Pick the pattern from the content (each is a distinct look — rotate them)
- A — Editorial / link: blog posts, guides pointing to a URL. Frame on TOP. Link pill + optional
Guidepill. Title centered or bottom-left. No tiles. - B — Concept map: multi-item features (languages, integrations) as a connected node graph over a faint globe.
- C — Before → After: upgrades, limit increases. Two glass tiles + arrow, action pill below, title bottom. Frame on BOTTOM.
- D — Hero icon: releases, security, single-concept. One big centered glass tile, version/
New Featurepill, 2-line title. Frame on BOTTOM. - Two-tile connect (C/D hybrid): "X with/via Y" integrations — two tiles joined by an arrow node.
template-two-tile.htmlis a starting point. Powerful but overused — don't reach for it by reflex.
Beyond the pattern, vary the levers that keep a set from looking identical: background texture (chevrons / stacked cards / constellation / globe — match the topic), title placement (centered vs bottom-left), pill copy, and the focal treatment. A guide about one platform often reads better as Pattern A or D (single hero) than as another two-tile clone.
Workflow
- Choose a pattern deliberately and confirm intent if unstated: pattern, the partner/tool (and whether to use its real logo), the headline, the pill text, and any URL. Recommend a pattern that fits the content; don't over-ask. If this belongs to an existing series, ask whether to match that set or give it a fresh look — do not silently reuse the last layout.
- Fetch third-party assets if needed (official svg logo). Verify it renders white on blue.
- Author the HTML in the scratchpad. Copy a template (e.g.
template-two-tile.html) as a starting point, or write fresh linkingthumbnail.css:<link rel="stylesheet" href="<abs-path-to-skill>/thumbnail.css" />- Use
data:image/png;base64,__CIO_LOGO_B64__for the ClassroomIO logo (render.py fills it). - Paste the partner's white svg inline inside a
.svg-iconcontainer. - Keep everything except the headline low-contrast so it reads at thumbnail size.
- Render:
python3 <skill>/render.py <input.html> <output.png>. This inlines local stylesheets, substitutes__GEIST_WOFF2_B64__/__CIO_LOGO_B64__, and screenshots at 1920×1080 (device scale 1). Requires Google Chrome at the standard macOS path. - Review the PNG visually (Read the image). Check: brand font actually applied, logos correct and white, text not clipped, gradients present, ≤2 title lines. Iterate on the HTML if needed.
- Deliver: save the final PNG to
~/Downloads/(or a path the user names) and report it. Output is ~880KB — under YouTube's 2MB thumbnail cap.
Files in this skill
SKILL.md— this guide.thumbnail.css— Figma-exact brand tokens (background, tiles, pills, connector, frame, title).template-two-tile.html— starting point for the two-tile connect pattern.render.py— inlines assets + renders HTML → PNG via headless Chrome.
Brand palette: deep blue #0233BD · brand blue #2F6BF1 · light blue #ADC3FF · violet #8071F2.
版本历史
- 4fae088 当前 2026-08-20 12:08


