arnavpuri/designskills

thumbnail-design

YouTube thumbnails, video/podcast/course covers, blog headers, and Open Graph (link-preview) images via Gemini 3.1 Flash image generation (default) or HTML/CSS.

查看源码

使用方法

  1. 复制安装命令,在自己的智能体环境安装前先检查源码包。
  2. 从原始文档核对所需工具、凭据和支持的宿主。
  3. 说明输入材料与期望交付物,并对照来源检查输出。
npx skills add https://github.com/arnavpuri/designskills --skill thumbnail-design

开始前需了解

  • 安装不包含模型订阅、API 额度或访问文件的权限。
  • 仓库星数和安装量反映活跃情况,不等于独立质量或安全测试。
仓库原始内容

按源仓库内容呈现,保留标题、案例、代码、表格、链接以及原文引用的演示图片。

Thumbnail Design

Create high-impact thumbnails optimized for clicks and readability at small sizes. Covers YouTube thumbnails, article headers, OG images, and video covers.


Step 1: Load Design Context

  1. Read .agents/design-context.md first -- brand colors (hex), fonts, style archetype
  2. If missing, use the design-context Default Fallbacks and tell the user defaults were used
  3. Thumbnails prioritize readability and impact over strict brand guidelines -- but brand colors create channel recognition

Gemini Image Generation Path

Pipeline/CLI: image-generation. Prompt craft, cropping, and text-overlay fallback: graphic-design Step 3.

  1. Generate at the Gemini ratio in the Step 2 table; crop with --resize WxH (e.g. --aspect-ratio 16:9 --resize 1280x720)
  2. Real people: pass their photo with --image and say "keep this person's face and identity unchanged". Don't invent likenesses of real people
  3. Read the output PNG, then check it shrunk: python -c "from PIL import Image; Image.open('thumb.png').resize((168,94), Image.LANCZOS).save('thumb_small.png')" and Read thumb_small.png. Text must still be readable and the face expression visible. Fix one issue per follow-up turn

Example Prompts

  • YouTube Thumbnail: "Create a YouTube thumbnail (16:9). [subject] on the left side with [expression/pose]. Bold text '[title]' in [color] with dark outline on the right. [background style]. High contrast, readable at small size."
  • Article Header: "Create a landscape article header image. Abstract [color palette] gradient background. Title '[headline]' in bold white sans-serif, centered. Subtle geometric shapes. Clean, editorial feel."
  • OG Image: "Create a landscape Open Graph image for [brand/site]. Keep all text inside the central 80%. Logo top-left, title '[text]' large and centered, tagline below in lighter weight. [brand color] gradient background. Professional, shareable."

Step 2: Identify Format and Dimensions

FormatDimensionsAspect RatioGemini ratioNotes
YouTube Thumbnail1280 x 72016:916:9Min 640px wide; JPG/PNG under 2 MB; must read at 168x94
YouTube Shorts Cover1080 x 19209:169:16Shelf shows a center crop -- keep text mid-frame
Article Header / Hero1200 x 6301.91:116:9 + cropBlog post header
OG Image (Open Graph)1200 x 6301.91:116:9 + cropLink previews on FB, LinkedIn, Slack, X
X large-image card1200 x 628~1.91:116:9 + cropX can crop toward 2:1 -- keep margins
Podcast Cover3000 x 30001:11:1 (4K)Apple: 1400-3000px square, JPG/PNG, RGB
Course Thumbnail1280 x 720 (Udemy min 750 x 422)16:916:9Udemy, Skillshare
Vimeo Thumbnail1280 x 72016:916:9Same as YouTube

Step 3: Thumbnail Composition Principles

The 3-Second Rule

A thumbnail must communicate its message in under 3 seconds. If someone cannot understand the topic at a glance, the thumbnail fails.

Readability at Small Sizes

YouTube thumbnails display as small as 168x94 pixels in the sidebar. Test every design mentally at that size.

Rules:

  • Maximum 5-7 words of text
  • Font size minimum: 60px at 1280x720 (equivalent to ~8px at sidebar size)
  • No thin fonts -- use bold or black weights only
  • High contrast between text and background (always)
  • No small details that vanish at reduced size

The Three-Element Maximum

The best thumbnails have at most 3 visual elements:

  1. A face or focal image
  2. Bold text (2-5 words)
  3. A supporting visual element (icon, arrow, emoji, product)

More than 3 elements creates clutter.


Step 4: Click-Worthy Composition Frameworks

Curiosity Gap

Show enough to intrigue but not enough to satisfy. The viewer must click to learn more.

Layout:
- Left side: Expressive face (surprise, shock, excitement)
- Right side: Bold text with ONE missing piece
- Example: "I tried [PRODUCT] for 30 days..." with shocked face
- Use "?" or "..." to create open loops

Before / After

Show transformation. The contrast drives clicks.

css
.before-after {
  display: grid;
  grid-template-columns: 1fr 1fr;
  height: 100%;
}
.before {
  background: #E5E7EB; /* muted, desaturated */
  filter: grayscale(30%);
  display: flex;
  align-items: center;
  justify-content: center;
}
.after {
  background: linear-gradient(135deg, var(--primary), var(--accent));
  display: flex;
  align-items: center;
  justify-content: center;
}
.divider-arrow {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  font-size: 64px;
  z-index: 10;
  /* Large arrow pointing right: → */
}

Numbers / Lists

Numbers grab attention. "7 Tips", "$10K", "100 Days".

Layout:
- Giant number: 120-200px, bold, gradient or accent color
- Supporting text: 36-48px next to or below number
- Background: clean gradient, not busy
- Optional icon related to the topic

Reaction / Emotion

Human faces expressing emotion are the highest-performing thumbnail element.

Layout:
- Face/headshot: 60% of frame, positioned left or right
- Expressive emotion: surprise, excitement, disbelief, joy
- 2-3 words of text on the opposite side
- Colored border or glow behind the face to separate from background

Versus / Comparison

Two things side by side with "VS" in the middle.

css
.versus {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  height: 100%;
}
.vs-badge {
  font-size: 72px;
  font-weight: 900;
  color: var(--accent);
  text-shadow: 0 0 30px rgba(var(--accent-rgb), 0.5);
  z-index: 2;
}
.side-a { background: linear-gradient(135deg, #1a1a2e, #16213e); }
.side-b { background: linear-gradient(135deg, #2d1b00, #462300); }

Step 5: Text Treatment for Thumbnails

Maximum Impact Text

css
/* Primary thumbnail text */
.thumb-text {
  font-family: 'Inter', 'Arial Black', sans-serif;
  font-size: 80px;
  font-weight: 900;
  color: #FFFFFF;
  text-transform: uppercase;
  line-height: 0.95;
  letter-spacing: -0.02em;

  /* Always add stroke + shadow for readability over any background */
  -webkit-text-stroke: 3px rgba(0, 0, 0, 0.8);
  paint-order: stroke fill;
  text-shadow:
    4px 4px 0 rgba(0, 0, 0, 0.9),
    0 0 20px rgba(0, 0, 0, 0.5);
}

/* Accent word highlight */
.thumb-text .highlight {
  color: var(--accent);
  -webkit-text-stroke-color: rgba(0, 0, 0, 0.9);
}

Text Background Techniques

css
/* Solid pill behind text */
.text-pill {
  display: inline-block;
  background: var(--primary);
  padding: 8px 24px;
  border-radius: 8px;
  font-weight: 800;
  font-size: 48px;
}

/* Angled highlight bar */
.text-bar {
  display: inline-block;
  background: var(--accent);
  padding: 8px 20px;
  transform: skewX(-5deg);
}
.text-bar span {
  display: inline-block;
  transform: skewX(5deg); /* counter-skew for straight text */
}

/* Blurred backdrop */
.text-backdrop {
  background: rgba(0, 0, 0, 0.6);
  backdrop-filter: blur(8px);
  padding: 12px 24px;
  border-radius: 8px;
}

Step 6: Face and Emotion Techniques

Face Cutout with Glow

css
.face-container {
  position: relative;
  z-index: 2;
}
.face-container img {
  /* Remove background in advance or use object-fit */
  height: 100%;
  object-fit: contain;
  object-position: bottom;
  filter: drop-shadow(0 0 30px rgba(var(--primary-rgb), 0.6));
}
/* Glow ring behind face */
.face-container::before {
  content: '';
  position: absolute;
  width: 80%;
  height: 80%;
  top: 10%;
  left: 10%;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(var(--primary-rgb), 0.4), transparent 70%);
  z-index: -1;
}

Emoji Accents (When No Face Available)

Use oversized emojis as visual anchors when no photo is available:

css
.emoji-accent {
  font-size: 120px;
  position: absolute;
  /* Slight rotation adds energy */
  transform: rotate(-10deg);
  filter: drop-shadow(4px 4px 0 rgba(0,0,0,0.3));
}

Step 7: Color Psychology for Thumbnails

ColorAssociationBest For
Red (#EF4444)Urgency, excitement, dangerBreaking news, warnings, hot takes
Yellow (#EAB308)Attention, optimism, energyTips, positive content, highlights
Blue (#3B82F6)Trust, calm, professionalismTutorials, educational, tech
Green (#22C55E)Growth, success, moneyFinance, results, positive outcomes
Orange (#F97316)Energy, creativity, warmthCreative content, DIY, food
Purple (#8B5CF6)Premium, mystery, wisdomLuxury, deep dives, advanced topics
Black (#000000)Power, elegance, sophisticationDramatic reveals, premium content
White (#FFFFFF)Clean, minimal, modernMinimalist channels, Apple-style

Contrast Pairings That Pop

  • Yellow text on dark blue background
  • White text on deep red or purple
  • Black text on bright yellow
  • Cyan accent on dark background
  • Red accent on dark gray/charcoal

Step 8: YouTube-Specific Optimization

Sidebar Readability Test

The thumbnail will appear at roughly 168x94px in the sidebar. At this size:

  • Only bold, high-contrast text is readable
  • Faces must be large enough to show expression
  • Details vanish -- keep it simple
  • The overall color scheme must be distinct from surrounding thumbnails

Overlay Zones

YouTube overlays the video duration in the bottom-right corner (dark pill with white text), a red watch-progress bar along the bottom edge for watched videos, and hover icons (Watch Later, Add to queue) in the top-right. Keep critical content out of all three.

css
/* Duration overlay safe zone */
.youtube-safe {
  /* Avoid content in this area */
  position: absolute;
  bottom: 0;
  right: 0;
  width: 120px;
  height: 40px;
  /* This zone is covered by YouTube's duration badge */
}

Channel Consistency

Create a thumbnail system with recurring elements:

  • Consistent background color or gradient per series
  • Same font treatment across all thumbnails
  • Recurring layout structure (face left + text right, or vice versa)
  • Brand color as a signature element (colored border, text highlight)

Step 9: Article Header / OG Image Design

OG Image Requirements

  • Dimensions: 1200 x 630 (recommended by most platforms); declare them with og:image:width / og:image:height meta tags
  • File size: under 1MB for fast loading (platform caps are higher, e.g. 5-8MB)
  • Use an absolute HTTPS URL in og:image; add twitter:card = summary_large_image for X
  • Text: readable when scaled to ~600x315 (half size in some feeds)
  • Avoid text in the outer 10% margins (may be cropped)

Article Header Layout

css
.article-header {
  width: 1200px;
  height: 630px;
  position: relative;
  display: flex;
  align-items: center;
  padding: 60px 80px;
  background: linear-gradient(135deg, #0F172A, #1E293B);
  overflow: hidden;
}

.article-header .title {
  font-family: var(--font-heading);
  font-size: 56px;
  font-weight: 800;
  color: #F8FAFC;
  line-height: 1.15;
  max-width: 700px;
  text-wrap: balance;
}

.article-header .meta {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: 24px;
  font-size: 18px;
  color: rgba(248, 250, 252, 0.7);
}

.article-header .brand {
  position: absolute;
  bottom: 40px;
  right: 60px;
  font-size: 20px;
  font-weight: 700;
  color: var(--primary);
}

/* Decorative accent */
.article-header::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 6px;
  background: linear-gradient(90deg, var(--primary), var(--accent));
}

Step 10: Output and Export

Generate as self-contained HTML with fixed dimensions:

html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@700;800;900&display=swap" rel="stylesheet">
  <style>
    body { margin: 0; padding: 0; display: flex; justify-content: center; align-items: center;
           min-height: 100vh; background: #1a1a1a; }
    .thumbnail {
      width: 1280px;
      height: 720px;
      position: relative;
      overflow: hidden;
      /* ... design styles ... */
    }
  </style>
</head>
<body>
  <div class="thumbnail">
    <!-- Thumbnail content -->
  </div>
</body>
</html>
<!-- Export (window size = canvas size, so the centered canvas fills the frame exactly):
     node <graphic-design>/scripts/render.mjs thumb.html --size 1280x720 --out thumb.png
     (without the graphic-design skill: chromium --headless --hide-scrollbars --window-size=1280,720 --screenshot=thumb.png thumb.html) -->

Then Read the PNG and run the same 168x94 shrink test as for Gemini output.


Quality Checklist

  • [ ] Output PNG was Read at full size and shrunk to 168x94px -- text spelled right and readable
  • [ ] Maximum 5-7 words of text
  • [ ] 3 or fewer visual elements
  • [ ] High contrast text (stroke + shadow for safety)
  • [ ] Clear focal point that communicates the topic
  • [ ] Bottom-right corner, bottom edge, and top-right are clear (duration badge, progress bar, hover icons)
  • [ ] Colors are distinct from platform UI (avoid pure white or YouTube red)
  • [ ] Brand consistency with other thumbnails in the series
  • [ ] Emotional hook -- face, number, or curiosity element
  • [ ] Design-context colors and fonts are applied where appropriate

按任务相关推荐

来自同一仓库

更多 Skills

全部 Skills
arnavpuri
社区

banner-design

Banner graphics for owned channels: website hero/section banner images, email header images, event and conference banners, sidebar house promos, and announcement bars, via Gemini 3.1 Flash image generation (default) or HTML/CSS. Covers standard sizes, Gemini ratios and cropping, CTA placement, responsive art direction, and email constraints. For paid display/IAB ads use ad-creative-design; for a coded above-the-fold section use hero-section; for a full email template use email-design. Trigger ph

安装量
1
GitHub Stars
10
最近更新
9月28日
arnavpuri
社区

design-context

Foundational design context skill. Establishes brand identity, color system, typography, design style, and audience preferences, saved to .agents/design-context.md for every other design skill to reuse. Trigger phrases: "set up design context", "define brand style", "style guide setup", "initialize design", "set brand colors", "use our brand". To build a full token system and components use design-system; to generate a palette use color-palette; to create a logo and identity use brand-identity.

安装量
1
GitHub Stars
10
最近更新
9月28日
arnavpuri
社区

design-critique

Critique an existing design (web page, HTML/React UI, screenshot, generated image, or Figma frame) with a repeatable procedure: capture it (Playwright screenshots or Read for images), run automated checks (axe, style inventory), score against a weighted rubric, and output severity-ranked fixes with code, then re-verify. Use after any design is produced or when asked to review one. Trigger phrases: "design critique", "review design", "improve design", "design audit", "design feedback", "evaluate

安装量
1
GitHub Stars
10
最近更新
9月28日
arnavpuri
社区

image-generation

Foundational skill for AI-powered image generation using Gemini 3.1 Flash Image Preview. Handles text-to-image, image editing, multi-turn refinement, and batch generation. Use directly for one-off images; for posters, ads, thumbnails, social posts, etc. prefer the matching graphic design skill, which layers format-specific rules on top of this pipeline. Trigger phrases: "generate an image", "create an image", "AI image", "Gemini image", "generate with Gemini", "image generation", "product image

安装量
1
GitHub Stars
10
最近更新
9月28日