Cover Image Generator
Adapted from baoyu-cover-image for Hermes Agent.
Generate elegant article cover images with 5-dimensional customization: Type × Palette × Rendering × Text × Mood. Supports cinematic (2.35:1), widescreen (16:9), square (1:1), and custom aspect ratios.
When to Use
Trigger when the user asks to "generate cover image", "create article cover", "make cover", "封面图", or provides an article and wants a cover. The user provides content (file, URL, or pasted text) and optionally specifies dimensions.
Five Dimensions
| Dimension |
Values |
Default |
| Type |
hero, conceptual, typography, metaphor, scene, minimal |
auto |
| Palette |
warm, elegant, cool, dark, earth, vivid, pastel, mono, retro, duotone, macaron |
auto |
| Rendering |
flat-vector, hand-drawn, painterly, digital, pixel, chalk, screen-print |
auto |
| Text |
none, title-only, title-subtitle, text-rich |
title-only |
| Mood |
subtle, balanced, bold |
balanced |
| Font |
clean, handwritten, serif, display |
clean |
Type (Visual Composition)
| Type |
Description |
Best For |
hero |
Large focal visual (60-70% area), dramatic composition |
Product launch, announcements |
conceptual |
Abstract shapes, information hierarchy, clean zones |
Technical articles, architecture |
typography |
Title as primary element (40%+ area), minimal visuals |
Opinion, quotes, insights |
metaphor |
Concrete object representing abstract idea |
Philosophy, growth, reflection |
scene |
Atmospheric environment, narrative feel |
Stories, travel, lifestyle |
minimal |
Single focal element, generous whitespace (60%+) |
Zen, focus, core concepts |
Palette (Color Scheme)
11 palettes: warm (personal/story), elegant (business/luxury), cool (tech/system), dark (cinematic/premium), earth (nature/wellness), vivid (launch/promotion), pastel (fantasy/gentle), mono (zen/focus), retro (history/vintage), duotone (movie poster/dramatic), macaron (education/tutorial).
Rendering (Visual Style)
| Rendering |
Line Quality |
Best For |
flat-vector |
Clean, geometric |
Tech, WeChat, infographic |
hand-drawn |
Sketchy, organic |
Personal, casual, doodle |
painterly |
Soft, watercolor |
Art, dreamy, fantasy |
digital |
Polished, crisp |
Data, SaaS, corporate |
pixel |
Blocky, 8-bit |
Gaming, retro, nostalgic |
chalk |
Chalk-textured |
Education, tutorial |
screen-print |
Bold, limited layers |
Poster, movie, album |
Text Level
| Level |
Title |
Subtitle |
Tags |
Visual Area |
none |
- |
- |
- |
100% |
title-only |
✓ |
- |
- |
85% |
title-subtitle |
✓ |
✓ |
- |
75% |
text-rich |
✓ |
✓ |
2-4 tags |
60% |
Mood (Emotional Intensity)
| Mood |
Contrast |
Saturation |
Weight |
subtle |
Low (-20-30%) |
Muted (-20-30%) |
Light |
balanced |
Standard |
Standard |
Standard |
bold |
High (+20-30%) |
Vivid (+20-30%) |
Heavy |
Style Presets (shortcuts)
--style <name> sets Palette + Rendering in one shot. Explicit --palette/--rendering overrides preset values.
| Preset |
Palette |
Rendering |
blueprint |
cool |
digital |
chalkboard |
dark |
chalk |
corporate |
elegant |
digital |
minimal |
mono |
flat-vector |
sketch-notes |
warm |
hand-drawn |
warm |
warm |
hand-drawn |
watercolor |
earth |
painterly |
nature |
earth |
hand-drawn |
notion |
mono |
digital |
pixel-art |
vivid |
pixel |
poster-art |
retro |
screen-print |
vintage |
retro |
hand-drawn |
cinematic |
duotone |
screen-print |
Auto-Selection
When dimensions are omitted, select based on content signals:
Type
| Signals |
Type |
| Product, launch, announcement, release |
hero |
| Architecture, framework, system, API, technical |
conceptual |
| Quote, opinion, insight, headline |
typography |
| Philosophy, growth, abstract, reflection |
metaphor |
| Story, journey, travel, lifestyle |
scene |
| Zen, focus, essential, simple |
minimal |
Palette
| Signals |
Palette |
| Personal story, emotion, lifestyle |
warm |
| Business, professional, luxury |
elegant |
| Architecture, system, API, code |
cool |
| Entertainment, cinematic, premium |
dark |
| Nature, wellness, eco, organic |
earth |
| Product launch, gaming, promotion |
vivid |
| Fantasy, creative, whimsical |
pastel |
| Zen, focus, pure, simple |
mono |
| History, vintage, classic |
retro |
| Movie poster, concert, dramatic |
duotone |
| Education, tutorial, knowledge |
macaron |
Rendering
| Signals |
Rendering |
| Clean, modern, tech, infographic |
flat-vector |
| Sketch, personal, casual, doodle |
hand-drawn |
| Art, watercolor, dreamy, fantasy |
painterly |
| Data, dashboard, SaaS, polished |
digital |
| Gaming, retro, nostalgic |
pixel |
| Education, tutorial, classroom |
chalk |
| Poster, movie, album, silhouette |
screen-print |
Text
| Signals |
Text |
| Visual-only, photography, abstract |
none |
| Article, blog, standard cover |
title-only |
| Series, tutorial, technical with context |
title-subtitle |
| Announcement, features, multiple points |
text-rich |
Mood
| Signals |
Mood |
| Professional, corporate, academic, luxury |
subtle |
| General, educational, blog, documentation |
balanced |
| Launch, promotion, event, gaming, entertainment |
bold |
Font
| Signals |
Font |
| Personal, lifestyle, warm, friendly |
handwritten |
| Technical, professional, modern, clean |
clean |
| Editorial, academic, luxury, classic |
serif |
| Announcement, entertainment, bold, event |
display |
Output Structure
cover-image/{topic-slug}/
├── source-{slug}.md # Saved source content
├── prompts/cover.md # Generation prompt (reproducibility record)
└── cover.png # Output image
Slug: 2-4 words kebab-case. Conflict: append -YYYYMMDD-HHMMSS.
Workflow
- [ ] Step 1: Analyze content
- [ ] Step 2: Confirm options (clarify)
- [ ] Step 3: Create prompt → prompts/cover.md
- [ ] Step 4: Generate image → cover.png
- [ ] Step 5: Completion report
Step 1: Analyze Content
- Save source content (file → read_file, pasted text → write_file to
source-{slug}.md)
- Analyze: topic, tone, keywords, visual metaphors
- Detect language (source, user input, or explicit
--lang)
- Determine output directory:
cover-image/{topic-slug}/
- Strip secrets: scan for API keys, tokens, credentials — never include in outputs
Step 2: Confirm Options
Use the clarify tool. Ask at most 2-3 questions in sequence:
Q1 — Type, Palette, Rendering: Present 2-3 auto-recommended combinations with rationale. User picks one.
Q2 — Text & Aspect: Confirm text level and aspect ratio (16:9 default, or 2.35:1/4:3/3:2/1:1).
Q3 — Language (only if source ≠ user language): which language for title text?
Skip questions where user already specified values. Skip entirely if user said "quick" or "不用确认".
Step 3: Create Prompt → prompts/cover.md
Write a structured prompt file with YAML frontmatter:
---
type: cover
palette: [confirmed]
rendering: [confirmed]
---
# Content Context
Article title: [exact title from source]
Content summary: [2-3 sentences]
Keywords: [5-8 terms]
# Visual Design
Type: [confirmed] | Palette: [confirmed] | Rendering: [confirmed]
Font: [confirmed] | Text level: [confirmed] | Mood: [confirmed]
Aspect ratio: [confirmed] | Language: [confirmed]
# Text Elements
[Title/subtitle/tags per text level — use exact title from source; never invent]
# Composition
[Type-specific layout + visual metaphor from content + palette colors + rendering notes]
Principles:
- Title text: Use exact title from source/user. Do NOT invent.
- Visual metaphor: Derived from content meaning, not literal illustration
- Whitespace: 40-60% breathing room
- Characters: Simplified silhouettes; NO realistic humans
- Color constraint: hex values are rendering guidance — do NOT display as visible text in image
- Strip secrets from all output files
Step 4: Generate Image
- Write full prompt to
prompts/cover.md (reproducibility record — MUST do before generation)
- Call
image_generate(prompt=..., aspect_ratio=...) with the prompt content
- Map aspect:
16:9/4:3→landscape, 9:16/3:4→portrait, 1:1→square
image_generate returns a URL — download via terminal:curl -sSL -o "/absolute/path/to/cover-image/{slug}/cover.png" "{url}"
- Verify file exists and is non-empty
- On failure, auto-retry once
Prompt file requirement (hard): write prompts/cover.md BEFORE calling image_generate. The file is the reproducibility record.
Step 5: Completion Report
Cover Generated!
Topic: [topic]
Type: [type] | Palette: [palette] | Rendering: [rendering]
Text: [text] | Mood: [mood] | Font: [font] | Aspect: [ratio]
Language: [lang]
Files:
✓ source-{slug}.md
✓ prompts/cover.md
✓ cover.png
Composition Principles
- Whitespace: 40-60% breathing room; avoid clutter
- Visual anchor: Main element centered or offset left (right side for title)
- Characters: Simplified silhouettes only — NO realistic human faces
- Title: Use exact title from user/source; never invent
- Icon vocabulary: Simple recognizable icons (code window, lightbulb, gear, lock, etc.) rather than detailed illustrations
Modification
| Action |
Steps |
| Regenerate |
Backup cover.png → Update prompt file → Regenerate |
| Change dimension |
Backup → Confirm new value → Update prompt → Regenerate |
Pitfalls
- Data integrity: Use exact title from source — never invent or modify
- Strip secrets: Scan for API keys, tokens, credentials before writing any file
- Prompt file first: Write prompts/cover.md BEFORE image_generate — it's the reproducibility record
- image_generate returns URL not file: Always download via
curl -sSL -o {absolute path} {url}
- Aspect ratio mapping:
16:9→landscape, 9:16→portrait, 1:1→square; custom ratios→nearest
- No backend selection from agent:
image_generate uses user-configured backend; don't write model names into prompts
- Visualize concepts not metaphors: If article says "电锯切西瓜", illustrate the underlying concept, not the literal image
- No text repair on bitmaps: If title is garbled, regenerate from corrected prompt — never overlay/Photoshop
1---2name: baoyu-cover-image3description: Article cover images: 5D dimension system (Type × Palette × Rendering × Text × Mood).4license: MIT5---67# Cover Image Generator89Adapted from [baoyu-cover-image](https://github.com/JimLiu/baoyu-skills) for Hermes Agent.1011Generate elegant article cover images with **5-dimensional customization**: Type × Palette × Rendering × Text × Mood. Supports cinematic (2.35:1), widescreen (16:9), square (1:1), and custom aspect ratios.1213## When to Use1415Trigger when the user asks to "generate cover image", "create article cover", "make cover", "封面图", or provides an article and wants a cover. The user provides content (file, URL, or pasted text) and optionally specifies dimensions.1617## Five Dimensions1819| Dimension | Values | Default |20|-----------|--------|---------|21| **Type** | `hero`, `conceptual`, `typography`, `metaphor`, `scene`, `minimal` | auto |22| **Palette** | `warm`, `elegant`, `cool`, `dark`, `earth`, `vivid`, `pastel`, `mono`, `retro`, `duotone`, `macaron` | auto |23| **Rendering** | `flat-vector`, `hand-drawn`, `painterly`, `digital`, `pixel`, `chalk`, `screen-print` | auto |24| **Text** | `none`, `title-only`, `title-subtitle`, `text-rich` | `title-only` |25| **Mood** | `subtle`, `balanced`, `bold` | `balanced` |26| **Font** | `clean`, `handwritten`, `serif`, `display` | `clean` |2728### Type (Visual Composition)2930| Type | Description | Best For |31|------|-------------|----------|32| `hero` | Large focal visual (60-70% area), dramatic composition | Product launch, announcements |33| `conceptual` | Abstract shapes, information hierarchy, clean zones | Technical articles, architecture |34| `typography` | Title as primary element (40%+ area), minimal visuals | Opinion, quotes, insights |35| `metaphor` | Concrete object representing abstract idea | Philosophy, growth, reflection |36| `scene` | Atmospheric environment, narrative feel | Stories, travel, lifestyle |37| `minimal` | Single focal element, generous whitespace (60%+) | Zen, focus, core concepts |3839### Palette (Color Scheme)404111 palettes: `warm` (personal/story), `elegant` (business/luxury), `cool` (tech/system), `dark` (cinematic/premium), `earth` (nature/wellness), `vivid` (launch/promotion), `pastel` (fantasy/gentle), `mono` (zen/focus), `retro` (history/vintage), `duotone` (movie poster/dramatic), `macaron` (education/tutorial).4243### Rendering (Visual Style)4445| Rendering | Line Quality | Best For |46|-----------|-------------|----------|47| `flat-vector` | Clean, geometric | Tech, WeChat, infographic |48| `hand-drawn` | Sketchy, organic | Personal, casual, doodle |49| `painterly` | Soft, watercolor | Art, dreamy, fantasy |50| `digital` | Polished, crisp | Data, SaaS, corporate |51| `pixel` | Blocky, 8-bit | Gaming, retro, nostalgic |52| `chalk` | Chalk-textured | Education, tutorial |53| `screen-print` | Bold, limited layers | Poster, movie, album |5455### Text Level5657| Level | Title | Subtitle | Tags | Visual Area |58|-------|:-----:|:--------:|:----:|:-----------:|59| `none` | - | - | - | 100% |60| `title-only` | ✓ | - | - | 85% |61| `title-subtitle` | ✓ | ✓ | - | 75% |62| `text-rich` | ✓ | ✓ | 2-4 tags | 60% |6364### Mood (Emotional Intensity)6566| Mood | Contrast | Saturation | Weight |67|------|:--------:|:----------:|:------:|68| `subtle` | Low (-20-30%) | Muted (-20-30%) | Light |69| `balanced` | Standard | Standard | Standard |70| `bold` | High (+20-30%) | Vivid (+20-30%) | Heavy |7172### Style Presets (shortcuts)7374`--style <name>` sets Palette + Rendering in one shot. Explicit `--palette`/`--rendering` overrides preset values.7576| Preset | Palette | Rendering |77|--------|---------|-----------|78| `blueprint` | cool | digital |79| `chalkboard` | dark | chalk |80| `corporate` | elegant | digital |81| `minimal` | mono | flat-vector |82| `sketch-notes` | warm | hand-drawn |83| `warm` | warm | hand-drawn |84| `watercolor` | earth | painterly |85| `nature` | earth | hand-drawn |86| `notion` | mono | digital |87| `pixel-art` | vivid | pixel |88| `poster-art` | retro | screen-print |89| `vintage` | retro | hand-drawn |90| `cinematic` | duotone | screen-print |9192## Auto-Selection9394When dimensions are omitted, select based on content signals:9596### Type97| Signals | Type |98|---------|------|99| Product, launch, announcement, release | `hero` |100| Architecture, framework, system, API, technical | `conceptual` |101| Quote, opinion, insight, headline | `typography` |102| Philosophy, growth, abstract, reflection | `metaphor` |103| Story, journey, travel, lifestyle | `scene` |104| Zen, focus, essential, simple | `minimal` |105106### Palette107| Signals | Palette |108|---------|---------|109| Personal story, emotion, lifestyle | `warm` |110| Business, professional, luxury | `elegant` |111| Architecture, system, API, code | `cool` |112| Entertainment, cinematic, premium | `dark` |113| Nature, wellness, eco, organic | `earth` |114| Product launch, gaming, promotion | `vivid` |115| Fantasy, creative, whimsical | `pastel` |116| Zen, focus, pure, simple | `mono` |117| History, vintage, classic | `retro` |118| Movie poster, concert, dramatic | `duotone` |119| Education, tutorial, knowledge | `macaron` |120121### Rendering122| Signals | Rendering |123|---------|-----------|124| Clean, modern, tech, infographic | `flat-vector` |125| Sketch, personal, casual, doodle | `hand-drawn` |126| Art, watercolor, dreamy, fantasy | `painterly` |127| Data, dashboard, SaaS, polished | `digital` |128| Gaming, retro, nostalgic | `pixel` |129| Education, tutorial, classroom | `chalk` |130| Poster, movie, album, silhouette | `screen-print` |131132### Text133| Signals | Text |134|---------|------|135| Visual-only, photography, abstract | `none` |136| Article, blog, standard cover | `title-only` |137| Series, tutorial, technical with context | `title-subtitle` |138| Announcement, features, multiple points | `text-rich` |139140### Mood141| Signals | Mood |142|---------|------|143| Professional, corporate, academic, luxury | `subtle` |144| General, educational, blog, documentation | `balanced` |145| Launch, promotion, event, gaming, entertainment | `bold` |146147### Font148| Signals | Font |149|---------|------|150| Personal, lifestyle, warm, friendly | `handwritten` |151| Technical, professional, modern, clean | `clean` |152| Editorial, academic, luxury, classic | `serif` |153| Announcement, entertainment, bold, event | `display` |154155## Output Structure156157```158cover-image/{topic-slug}/159├── source-{slug}.md # Saved source content160├── prompts/cover.md # Generation prompt (reproducibility record)161└── cover.png # Output image162```163164Slug: 2-4 words kebab-case. Conflict: append `-YYYYMMDD-HHMMSS`.165166## Workflow167168```169- [ ] Step 1: Analyze content170- [ ] Step 2: Confirm options (clarify)171- [ ] Step 3: Create prompt → prompts/cover.md172- [ ] Step 4: Generate image → cover.png173- [ ] Step 5: Completion report174```175176### Step 1: Analyze Content1771781. Save source content (file → read_file, pasted text → write_file to `source-{slug}.md`)1792. Analyze: topic, tone, keywords, visual metaphors1803. Detect language (source, user input, or explicit `--lang`)1814. Determine output directory: `cover-image/{topic-slug}/`1825. **Strip secrets**: scan for API keys, tokens, credentials — never include in outputs183184### Step 2: Confirm Options185186Use the `clarify` tool. Ask at most 2-3 questions in sequence:187188**Q1 — Type, Palette, Rendering**: Present 2-3 auto-recommended combinations with rationale. User picks one.189**Q2 — Text & Aspect**: Confirm text level and aspect ratio (16:9 default, or 2.35:1/4:3/3:2/1:1).190**Q3 — Language** (only if source ≠ user language): which language for title text?191192Skip questions where user already specified values. Skip entirely if user said "quick" or "不用确认".193194### Step 3: Create Prompt → `prompts/cover.md`195196Write a structured prompt file with YAML frontmatter:197198```yaml199---200type: cover201palette: [confirmed]202rendering: [confirmed]203---204205# Content Context206Article title: [exact title from source]207Content summary: [2-3 sentences]208Keywords: [5-8 terms]209210# Visual Design211Type: [confirmed] | Palette: [confirmed] | Rendering: [confirmed]212Font: [confirmed] | Text level: [confirmed] | Mood: [confirmed]213Aspect ratio: [confirmed] | Language: [confirmed]214215# Text Elements216[Title/subtitle/tags per text level — use exact title from source; never invent]217218# Composition219[Type-specific layout + visual metaphor from content + palette colors + rendering notes]220```221222**Principles**:223- Title text: Use exact title from source/user. Do NOT invent.224- Visual metaphor: Derived from content meaning, not literal illustration225- Whitespace: 40-60% breathing room226- Characters: Simplified silhouettes; NO realistic humans227- Color constraint: hex values are rendering guidance — do NOT display as visible text in image228- Strip secrets from all output files229230### Step 4: Generate Image2312321. Write full prompt to `prompts/cover.md` (reproducibility record — MUST do before generation)2332. Call `image_generate(prompt=..., aspect_ratio=...)` with the prompt content234 - Map aspect: `16:9`/`4:3`→`landscape`, `9:16`/`3:4`→`portrait`, `1:1`→`square`2353. `image_generate` returns a URL — download via terminal:236 ```bash237 curl -sSL -o "/absolute/path/to/cover-image/{slug}/cover.png" "{url}"238 ```2394. Verify file exists and is non-empty2405. On failure, auto-retry once241242**Prompt file requirement (hard)**: write `prompts/cover.md` BEFORE calling `image_generate`. The file is the reproducibility record.243244### Step 5: Completion Report245246```247Cover Generated!248249Topic: [topic]250Type: [type] | Palette: [palette] | Rendering: [rendering]251Text: [text] | Mood: [mood] | Font: [font] | Aspect: [ratio]252Language: [lang]253254Files:255✓ source-{slug}.md256✓ prompts/cover.md257✓ cover.png258```259260## Composition Principles261262- **Whitespace**: 40-60% breathing room; avoid clutter263- **Visual anchor**: Main element centered or offset left (right side for title)264- **Characters**: Simplified silhouettes only — NO realistic human faces265- **Title**: Use exact title from user/source; never invent266- **Icon vocabulary**: Simple recognizable icons (code window, lightbulb, gear, lock, etc.) rather than detailed illustrations267268## Modification269270| Action | Steps |271|--------|-------|272| Regenerate | Backup cover.png → Update prompt file → Regenerate |273| Change dimension | Backup → Confirm new value → Update prompt → Regenerate |274275## Pitfalls2762771. **Data integrity**: Use exact title from source — never invent or modify2782. **Strip secrets**: Scan for API keys, tokens, credentials before writing any file2793. **Prompt file first**: Write prompts/cover.md BEFORE image_generate — it's the reproducibility record2804. **image_generate returns URL not file**: Always download via `curl -sSL -o {absolute path} {url}`2815. **Aspect ratio mapping**: `16:9`→`landscape`, `9:16`→`portrait`, `1:1`→`square`; custom ratios→nearest2826. **No backend selection from agent**: `image_generate` uses user-configured backend; don't write model names into prompts2837. **Visualize concepts not metaphors**: If article says "电锯切西瓜", illustrate the underlying concept, not the literal image2848. **No text repair on bitmaps**: If title is garbled, regenerate from corrected prompt — never overlay/Photoshop