--- name: baoyu-cover-image description: Generates article cover images with 4 dimensions (type, style, text, mood) and 20 hand-drawn styles. Supports cinematic (2.35:1), widescreen (16:9), and square (1:1) aspects. Use when user asks to "generate cover image", "create article cover", "make cover", or mentions "封面图". --- # Cover Image Generator Generate elegant cover images for articles with 4-dimensional customization. ## Usage ```bash # Auto-select all dimensions based on content /baoyu-cover-image path/to/article.md # Quick mode: skip confirmation, use auto-selection /baoyu-cover-image article.md --quick # Specify dimensions /baoyu-cover-image article.md --type conceptual --style blueprint /baoyu-cover-image article.md --text title-subtitle --mood bold # Visual only (no title text) /baoyu-cover-image article.md --no-title # Direct content input /baoyu-cover-image [paste content] # Direct input with options /baoyu-cover-image --style notion --aspect 1:1 --quick [paste content] ``` ## Options | Option | Description | |--------|-------------| | `--type ` | Cover type: hero, conceptual, typography, metaphor, scene, minimal | | `--style ` | Cover style (see Style Gallery) | | `--text ` | Text density: none, title-only, title-subtitle, text-rich | | `--mood ` | Emotional intensity: subtle, balanced, bold | | `--aspect ` | 2.35:1 (default), 16:9, 1:1 | | `--lang ` | Title language (en, zh, ja, etc.) | | `--no-title` | Alias for `--text none` | | `--quick` | Skip confirmation, use auto-selection for missing dimensions | ## Four Dimensions | Dimension | Controls | Values | Default | |-----------|----------|--------|---------| | **Type** | Visual composition, information structure | hero, conceptual, typography, metaphor, scene, minimal | auto | | **Style** | Visual aesthetics, colors, technique | 20 built-in styles | auto | | **Text** | Text density, information hierarchy | none, title-only, title-subtitle, text-rich | title-only | | **Mood** | Emotional intensity, visual weight | subtle, balanced, bold | balanced | Dimensions can be freely combined. Example: `--type conceptual --style blueprint --text title-only --mood subtle` creates a calm technical concept visualization. ## Type Gallery | Type | Description | Best For | |------|-------------|----------| | `hero` | Large visual impact, title overlay | Product launch, brand promotion, major announcements | | `conceptual` | Concept visualization, abstract core ideas | Technical articles, methodology, architecture design | | `typography` | Text-focused layout, prominent title | Opinion pieces, quotes, insights | | `metaphor` | Visual metaphor, concrete expressing abstract | Philosophy, growth, personal development | | `scene` | Atmospheric scene, narrative feel | Stories, travel, lifestyle | | `minimal` | Minimalist composition, generous whitespace | Zen, focus, core concepts | ## Auto Type Selection When `--type` is omitted, select based on content signals: | Signals | Type | |---------|------| | Product, launch, announcement, release, reveal | `hero` | | Architecture, framework, system, API, technical, model | `conceptual` | | Quote, opinion, insight, thought, headline, statement | `typography` | | Philosophy, growth, abstract, meaning, reflection | `metaphor` | | Story, journey, travel, lifestyle, experience, narrative | `scene` | | Zen, focus, essential, core, simple, pure | `minimal` | ## Style Gallery | Style | Description | |-------|-------------| | `elegant` (default) | Refined, sophisticated | | `blueprint` | Technical schematics | | `bold-editorial` | Magazine impact | | `chalkboard` | Chalk on blackboard | | `dark-atmospheric` | Cinematic dark mode | | `editorial-infographic` | Visual storytelling | | `fantasy-animation` | Ghibli/Disney inspired | | `flat-doodle` | Pastel, cute shapes | | `intuition-machine` | Technical, bilingual | | `minimal` | Ultra-clean, zen | | `nature` | Organic, earthy | | `notion` | SaaS dashboard | | `pixel-art` | Retro 8-bit | | `playful` | Fun, whimsical | | `retro` | Halftone, vintage | | `sketch-notes` | Hand-drawn, warm | | `vector-illustration` | Flat vector | | `vintage` | Aged, expedition | | `warm` | Friendly, human | | `watercolor` | Soft hand-painted | Style definitions: [references/styles/](references/styles/) ## Auto Style Selection When `--style` is omitted, select based on content signals: | Signals | Style | |---------|-------| | Architecture, system design | `blueprint` | | Product launch, marketing | `bold-editorial` | | Education, tutorial | `chalkboard` | | Entertainment, premium | `dark-atmospheric` | | Tech explainer, research | `editorial-infographic` | | Fantasy, children | `fantasy-animation` | | Technical docs, bilingual | `intuition-machine` | | Personal story, emotion | `warm` | | Zen, focus, essential | `minimal` | | Fun, beginner, casual | `playful` | | Nature, wellness, eco | `nature` | | SaaS, dashboard | `notion` | | Workflow, productivity | `flat-doodle` | | Gaming, retro tech | `pixel-art` | | Knowledge sharing | `sketch-notes` | | Creative proposals | `vector-illustration` | | History, exploration | `vintage` | | Lifestyle, travel | `watercolor` | | Business, professional | `elegant` | ## Text Dimension | Value | Title | Subtitle | Tags | Use Case | |-------|:-----:|:--------:|:----:|----------| | `none` | - | - | - | Pure visual, no text | | `title-only` | ✓ (≤8字) | - | - | Simple headline (default) | | `title-subtitle` | ✓ | ✓ (≤15字) | - | Title + supporting context | | `text-rich` | ✓ | ✓ | ✓ (2-4) | Information-dense | Full guide: [references/dimensions/text.md](references/dimensions/text.md) ## Auto Text Selection When `--text` is omitted, select based on content signals: | Signals | Text Level | |---------|------------| | Visual-only, photography, abstract, art | `none` | | Article, blog, standard cover | `title-only` | | Series, tutorial, technical with context | `title-subtitle` | | Announcement, features, multiple points, infographic | `text-rich` | Default: `title-only` ## Mood Dimension | Value | Contrast | Saturation | Weight | Use Case | |-------|:--------:|:----------:|:------:|----------| | `subtle` | Low | Muted | Light | Corporate, thought leadership | | `balanced` | Medium | Normal | Medium | General articles (default) | | `bold` | High | Vivid | Heavy | Announcements, promotions | Full guide: [references/dimensions/mood.md](references/dimensions/mood.md) ## Auto Mood Selection When `--mood` is omitted, select based on content signals: | Signals | Mood Level | |---------|------------| | Professional, corporate, thought leadership, academic, luxury | `subtle` | | General, educational, standard, blog, documentation | `balanced` | | Launch, announcement, promotion, event, gaming, entertainment | `bold` | Default: `balanced` ## Compatibility Matrices ### Type × Style | | elegant | blueprint | notion | warm | minimal | watercolor | bold-editorial | dark-atmospheric | |---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| | hero | ✓✓ | ✓ | ✓ | ✓✓ | ✓ | ✓✓ | ✓✓ | ✓✓ | | conceptual | ✓✓ | ✓✓ | ✓✓ | ✓ | ✓✓ | ✗ | ✓ | ✓ | | typography | ✓✓ | ✓ | ✓✓ | ✓ | ✓✓ | ✓ | ✓✓ | ✓✓ | | metaphor | ✓✓ | ✗ | ✓ | ✓✓ | ✓ | ✓✓ | ✓ | ✓ | | scene | ✓ | ✗ | ✗ | ✓✓ | ✓ | ✓✓ | ✓ | ✓✓ | | minimal | ✓✓ | ✓ | ✓✓ | ✓ | ✓✓ | ✓ | ✗ | ✓ | ### Type × Text | | none | title-only | title-subtitle | text-rich | |---|:---:|:---:|:---:|:---:| | hero | ✓ | ✓✓ | ✓✓ | ✓ | | conceptual | ✓✓ | ✓✓ | ✓ | ✓ | | typography | ✗ | ✓ | ✓✓ | ✓✓ | | metaphor | ✓✓ | ✓ | ✓ | ✗ | | scene | ✓✓ | ✓ | ✓ | ✗ | | minimal | ✓✓ | ✓✓ | ✓ | ✗ | ### Type × Mood | | subtle | balanced | bold | |---|:---:|:---:|:---:| | hero | ✓ | ✓✓ | ✓✓ | | conceptual | ✓✓ | ✓✓ | ✓ | | typography | ✓ | ✓✓ | ✓✓ | | metaphor | ✓✓ | ✓✓ | ✓ | | scene | ✓✓ | ✓✓ | ✓ | | minimal | ✓✓ | ✓✓ | ✗ | ✓✓ = highly recommended | ✓ = compatible | ✗ = not recommended ## File Structure Each session creates an independent directory named by content slug: ``` cover-image/{topic-slug}/ ├── source-{slug}.{ext} # Source files (text, images, etc.) ├── prompts/cover.md # Generation prompt └── cover.png # Output image ``` **Slug Generation**: 1. Extract main topic from content (2-4 words, kebab-case) 2. Example: "The Future of AI" → `future-of-ai` **Conflict Resolution**: If `cover-image/{topic-slug}/` already exists: - Append timestamp: `{topic-slug}-YYYYMMDD-HHMMSS` - Example: `ai-future` exists → `ai-future-20260118-143052` **Source Files**: Copy all sources with naming `source-{slug}.{ext}`: - `source-article.md`, `source-reference.png`, etc. - Multiple sources supported: text, images, files from conversation ## Workflow ### Progress Checklist Copy and track progress: ``` Cover Image Progress: - [ ] Step 0: Check preferences (EXTEND.md) ⚠️ REQUIRED if not found - [ ] Step 1: Analyze content - [ ] Step 2: Confirm options (4 dimensions) ⚠️ REQUIRED unless --quick or all specified - [ ] Step 3: Create prompt - [ ] Step 4: Generate image - [ ] Step 5: Completion report ``` ### Flow ``` Input → [Step 0: Preferences/Setup] → Analyze → [Confirm: 4 Dimensions] → Prompt → Generate → Complete ↓ (skip if --quick or all dimensions specified) ``` ### Step 0: Load Preferences (EXTEND.md) ⚠️ **Purpose**: Load user preferences or run first-time setup. **Do NOT skip setup if EXTEND.md not found.** Use Bash to check EXTEND.md existence (priority order): ```bash # Check project-level first test -f .baoyu-skills/baoyu-cover-image/EXTEND.md && echo "project" # Then user-level (cross-platform: $HOME works on macOS/Linux/WSL) test -f "$HOME/.baoyu-skills/baoyu-cover-image/EXTEND.md" && echo "user" ``` ┌──────────────────────────────────────────────────┬───────────────────┐ │ Path │ Location │ ├──────────────────────────────────────────────────┼───────────────────┤ │ .baoyu-skills/baoyu-cover-image/EXTEND.md │ Project directory │ ├──────────────────────────────────────────────────┼───────────────────┤ │ $HOME/.baoyu-skills/baoyu-cover-image/EXTEND.md │ User home │ └──────────────────────────────────────────────────┴───────────────────┘ ┌───────────┬───────────────────────────────────────────────────────────────────────────┐ │ Result │ Action │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ Found │ Read, parse, display preferences summary (see below) → Continue to Step 1 │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ Not found │ ⚠️ MUST run first-time setup (see below) → Then continue to Step 1 │ └───────────┴───────────────────────────────────────────────────────────────────────────┘ **Preferences Summary** (when EXTEND.md found): Display loaded preferences: ``` Preferences loaded from [project/user]: • Watermark: [enabled/disabled] [content if enabled] • Type: [preferred_type or "auto"] • Style: [preferred_style or "auto"] • Text: [preferred_text or "title-only"] • Mood: [preferred_mood or "balanced"] • Aspect: [default_aspect] • Quick mode: [enabled/disabled] • Language: [language or "auto"] ``` **First-Time Setup** (when EXTEND.md not found): **Language**: Use user's input language or saved language preference. Use AskUserQuestion with ALL questions in ONE call: **Q1: Watermark** ```yaml header: "Watermark" question: "Watermark text for generated cover images?" options: - label: "No watermark (Recommended)" description: "Clean covers, can enable later in EXTEND.md" ``` **Q2: Preferred Type** ```yaml header: "Type" question: "Default cover type preference?" options: - label: "Auto-select (Recommended)" description: "Choose based on content analysis each time" - label: "hero" description: "Large visual impact - product launch, announcements" - label: "conceptual" description: "Concept visualization - technical, architecture" ``` **Q3: Preferred Style** ```yaml header: "Style" question: "Default cover style preference?" options: - label: "Auto-select (Recommended)" description: "Choose based on content analysis each time" - label: "elegant" description: "Refined, sophisticated - professional business" - label: "notion" description: "SaaS dashboard - productivity/tech content" ``` **Q4: Default Aspect Ratio** ```yaml header: "Aspect" question: "Default aspect ratio for cover images?" options: - label: "2.35:1 (Recommended)" description: "Cinematic widescreen, best for article headers" - label: "16:9" description: "Standard widescreen, versatile" - label: "1:1" description: "Square, social media friendly" ``` **Q5: Quick Mode** ```yaml header: "Quick" question: "Enable quick mode by default?" options: - label: "No (Recommended)" description: "Confirm dimension choices each time" - label: "Yes" description: "Skip confirmation, use auto-selection" ``` **Q6: Save Location** ```yaml header: "Save" question: "Where to save preferences?" options: - label: "Project (Recommended)" description: ".baoyu-skills/ (this project only)" - label: "User" description: "~/.baoyu-skills/ (all projects)" ``` **After setup**: Create EXTEND.md with user choices, then continue to Step 1. Full setup details: `references/config/first-time-setup.md` **EXTEND.md Supports**: Watermark | Preferred type | Preferred style | Preferred text | Preferred mood | Default aspect ratio | Quick mode | Custom style definitions | Language preference Schema: `references/config/preferences-schema.md` ### Step 1: Analyze Content Read source content, save it if needed, and perform analysis. **Actions**: 1. **Save source content** (if not already a file): - If user provides a file path: use as-is - If user pastes content: save to `source.md` in target directory 2. Read source content 3. **Content analysis**: - Extract: topic, core message, tone, keywords - Identify visual metaphor opportunities - Detect content type (technical/personal/business/creative) 4. **Language detection**: - Detect source content language - Note user's input language (from conversation) - Compare with language preference in EXTEND.md ### Step 2: Confirm Options ⚠️ **Purpose**: Validate all 4 dimensions. **Skip if `--quick` flag OR all 4 dimensions specified via CLI.** **Skip Conditions**: | Condition | Behavior | |-----------|----------| | `--quick` flag | Auto-select missing dimensions, skip to Step 3 | | All 4 dimensions specified | Use specified values, skip to Step 3 | | `quick_mode: true` in EXTEND.md | Auto-select missing dimensions, skip to Step 3 | | Otherwise | Show confirmation (current behavior) | **Quick Mode Output** (when skipping confirmation): ``` Quick Mode: Auto-selected dimensions • Type: [type] ([reason]) • Style: [style] ([reason]) • Text: [text] ([reason]) • Mood: [mood] ([reason]) • Aspect: [aspect] Generating... ``` **Confirmation Flow** (when NOT skipping): **Language**: Auto-determined (user's input language > saved preference > source language). No need to ask. Present options using AskUserQuestion: **Question 1: Type** (if not specified via `--type`) - Show recommended type based on content analysis + preferred type from EXTEND.md ```yaml header: "Type" question: "Which cover type?" multiSelect: false options: - label: "[auto-recommended type] (Recommended)" description: "[reason based on content signals]" - label: "hero" description: "Large visual impact, title overlay - product launch, announcements" - label: "conceptual" description: "Concept visualization - technical, architecture" - label: "typography" description: "Text-focused layout - opinions, quotes" ``` **Question 2: Style** (if not specified via `--style`) - Based on selected Type, show compatible styles (✓✓ first from compatibility matrix) - Format: `[style name] - [why it fits this content]` ```yaml header: "Style" question: "Which cover style?" multiSelect: false options: - label: "[best compatible style] (Recommended)" description: "[reason based on type + content]" - label: "[style2]" description: "[reason]" - label: "[style3]" description: "[reason]" ``` **Question 3: Text** (if not specified via `--text`) - Based on selected Type, show compatible text levels (✓✓ first from compatibility matrix) ```yaml header: "Text" question: "Text density level?" multiSelect: false options: - label: "title-only (Recommended)" description: "Simple headline, ≤8 characters" - label: "none" description: "Pure visual, no text elements" - label: "title-subtitle" description: "Title + supporting context" - label: "text-rich" description: "Title + subtitle + keyword tags" ``` **Question 4: Mood** (if not specified via `--mood`) - Based on content analysis, show recommended mood ```yaml header: "Mood" question: "Emotional intensity?" multiSelect: false options: - label: "balanced (Recommended)" description: "Medium contrast and saturation, versatile" - label: "subtle" description: "Low contrast, muted colors, calm" - label: "bold" description: "High contrast, vivid colors, dynamic" ``` **Question 5: Aspect Ratio** (if not specified via `--aspect`) ```yaml header: "Aspect" question: "Cover aspect ratio?" multiSelect: false options: - label: "2.35:1 (Recommended)" description: "Cinematic widescreen, best for article headers" - label: "16:9" description: "Standard widescreen, versatile" - label: "1:1" description: "Square, social media friendly" ``` **After response**: Proceed to Step 3 with confirmed dimensions. ### Step 3: Create Prompt Save to `prompts/cover.md`: ```markdown # Content Context Article title: [full original title from source] Content summary: [2-3 sentence summary of key points and themes] Keywords: [5-8 key terms extracted from content] # Visual Design Cover theme: [2-3 words visual interpretation] Type: [confirmed type] Style: [confirmed style] Text level: [confirmed text level] Mood: [confirmed mood] Aspect ratio: [confirmed ratio] Language: [confirmed language] # Text Elements [Based on text level:] - none: "No text elements" - title-only: "Title: [max 8 chars headline]" - title-subtitle: "Title: [headline] / Subtitle: [max 15 chars context]" - text-rich: "Title: [headline] / Subtitle: [context] / Tags: [2-4 keywords]" # Mood Application [Based on mood level:] - subtle: "Use low contrast, muted colors, light visual weight, calm aesthetic" - balanced: "Use medium contrast, normal saturation, balanced visual weight" - bold: "Use high contrast, vivid saturated colors, heavy visual weight, dynamic energy" # Composition Type composition: - [Type-specific layout and structure] Visual composition: - Main visual: [metaphor derived from content meaning] - Layout: [positioning based on type and aspect ratio] - Decorative: [style elements that reinforce content theme] Color scheme: [primary, background, accent from style, adjusted by mood] Type notes: [key characteristics from type definition] Style notes: [key characteristics from style definition] [Watermark section if enabled] ``` **Content-Driven Design**: - Article title and summary inform the visual metaphor choice - Keywords guide decorative elements and symbols - The skill controls visual style; the content drives meaning **Type-Specific Composition**: | Type | Composition Guidelines | |------|------------------------| | `hero` | Large focal visual (60-70% area), title overlay on visual, dramatic composition | | `conceptual` | Abstract shapes representing core concepts, information hierarchy, clean zones | | `typography` | Title as primary element (40%+ area), minimal supporting visuals, strong hierarchy | | `metaphor` | Concrete object/scene representing abstract idea, symbolic elements, emotional resonance | | `scene` | Atmospheric environment, narrative elements, mood-setting lighting and colors | | `minimal` | Single focal element, generous whitespace (60%+), essential shapes only | **Title guidelines** (when text level includes title): - Max 8 characters, punchy headline - Use hooks: numbers, questions, contrasts - Match confirmed language **Watermark Application** (if enabled in preferences): Add to prompt: ``` Include a subtle watermark "[content]" positioned at [position] with approximately [opacity*100]% visibility. The watermark should be legible but not distracting from the main content. ``` Reference: `references/config/watermark-guide.md` ### Step 4: Generate Image **Backup Existing Cover** (if regenerating): If `cover.png` already exists in the output directory: - Rename to `cover-backup-YYYYMMDD-HHMMSS.png` **Image Generation Skill Selection**: 1. Check available image generation skills 2. If multiple skills available, ask user preference 3. Call selected skill with: - Prompt file path - Output image path: `cover.png` - Aspect ratio parameter **On failure**: Auto-retry once before reporting error. ### Step 5: Completion Report ``` Cover Generated! Topic: [topic] Type: [type name] Style: [style name] Text: [text level] Mood: [mood level] Aspect: [ratio] Title: [title text or "visual only"] Language: [lang] Watermark: [enabled/disabled] Location: [directory path] Files: ✓ source-{slug}.{ext} ✓ prompts/cover.md ✓ cover.png [✓ cover-backup-{timestamp}.png (if regenerated)] ``` ## Image Modification | Action | Steps | |--------|-------| | **Regenerate** | Backup existing → Update prompt → Regenerate with same settings | | **Change type** | Backup existing → Confirm new type → Update prompt → Regenerate | | **Change style** | Backup existing → Confirm new style → Update prompt → Regenerate | | **Change text** | Backup existing → Confirm new text level → Update prompt → Regenerate | | **Change mood** | Backup existing → Confirm new mood → Update prompt → Regenerate | | **Change aspect** | Backup existing → Confirm new aspect → Update prompt → Regenerate | All modifications automatically backup the existing `cover.png` before regenerating. ## Notes - Cover must be readable at small preview sizes - Visual metaphors > literal representations - Title: max 8 chars, readable, impactful - **Two confirmation points**: Step 0 (first-time setup if no EXTEND.md) + Step 2 (options) - can skip Step 2 with `--quick` - Use confirmed language for title text - Maintain watermark consistency if enabled - Check compatibility matrices when selecting combinations - `--no-title` is preserved as alias for `--text none` ## References **Dimensions**: - `references/dimensions/text.md` - Text density dimension - `references/dimensions/mood.md` - Mood intensity dimension **Styles**: `references/styles/.md` - Style definitions **Config**: - `references/config/preferences-schema.md` - EXTEND.md schema - `references/config/first-time-setup.md` - First-time setup flow - `references/config/watermark-guide.md` - Watermark configuration ## Extension Support Custom configurations via EXTEND.md. See **Step 0** for paths and supported options.