Cover Image Generator skill

Generates article cover images with 5 dimensions (type, palette, rendering, text, mood) combining 11 color palettes and 7 rendering styles.

by JimLiu·MIT license·★ 26,555 Stars on the repo·GitHub ↗

Use now

Real results

6 images made with this skill
None — sample in blueprint style posted by Jim Liu
Jim Liu · skill author · blueprint style · GitHub README · source ↗

Posted publicly by the author. AgentAlley did not make or edit these images. Click an image for the original.

Files of Cover Image Generator

JimLiu/main1 file shown
SKILL.md
Show the full text288 lines

Cover Image Generator

Generate elegant cover images for articles with 5-dimensional customization.

User Input Tools

When this skill prompts the user, follow this tool-selection rule (priority order):

  1. Prefer built-in user-input tools exposed by the current agent runtime — e.g., AskUserQuestion, request_user_input, clarify, ask_user, or any equivalent.
  2. Fallback: if no such tool exists, emit a numbered plain-text message and ask the user to reply with the chosen number/answer for each question.
  3. Batching: if the tool supports multiple questions per call, combine all applicable questions into a single call; if only single-question, ask them one at a time in priority order.

Concrete AskUserQuestion references below are examples — substitute the local equivalent in other runtimes.

Image Generation Tools

When this skill needs to render an image, resolve the backend in this order:

  1. Current-request override — if the user names a specific backend in the current message, use it.
  2. Saved preference — if EXTEND.md sets preferred_image_backend to a backend available right now, use it.
  3. Auto-select (when the preference is auto, unset, or the pinned backend isn't available):
    • Codex (imagegen) — first, inspect your available-skills / tool inventory. If a skill named imagegen is listed, you are running inside Codex and MUST use it: invoke via the Skill tool with skill: "imagegen", passing the saved prompt file's content (plus output path and aspect ratio per Codex imagegen's own args). Codex imagegen is the official raster backend in that runtime and outranks any non-native skill (e.g., baoyu-image-gen) unless the user has explicitly pinned a different preferred_image_backend.
    • Codex via codex exec (codex-imagegen) — if the current runtime exposes no native imagegen skill but the codex CLI is on PATH with an active codex login, route through baoyu-image-gen --provider codex-cli (preferred), or — if baoyu-image-gen is unavailable — invoke the bundled wrapper directly. Details, parameters, and the runtime-discovery procedure live in references/codex-imagegen.md — load that file only when this branch is selected.
    • Cursor (GenerateImage) — if the runtime exposes a native GenerateImage tool, you are running inside Cursor and it outranks any non-native skill the same way Codex imagegen does. Two hard caveats: (a) it has no aspect-ratio parameter — state the target aspect ratio / dimensions explicitly in the prompt text passed as description; (b) it does not accept an output directory — it saves to a tool-managed location, so after generation copy/move the file to the skill's expected output path (e.g., outputs/.../NN-xxx.png). Reference images go in reference_image_paths.
    • Other runtime-native tools — if the runtime exposes a different native image tool (e.g., Hermes image_generate), use it the same way.
    • Otherwise, if exactly one non-native backend is installed (e.g., baoyu-image-gen), use it.
    • Otherwise (multiple non-native backends with no runtime-native tool), ask the user once — batch with any other initial questions.
  4. If none are available, tell the user and ask how to proceed.

⛔ Never substitute SVG, HTML, canvas, or other code-based rendering for raster image generation. Codex imagegen's own description says it should be used "when the output should be a bitmap asset rather than repo-native code or vector." If you cannot resolve a raster backend via step 3, fall through to step 4 and ask the user — do not silently emit SVG, write inline <svg> markup, or produce HTML/CSS art as a substitute. This applies even if the article/section seems "diagram-like": the consumer skill calling this rule has already decided that a raster image is what it needs.

⛔ Never repair rendered text by painting over a generated bitmap. Do not use ImageMagick, Pillow, Canvas, SVG, HTML/CSS, OCR scripts, or any other programmatic overlay to cover, rewrite, erase, stroke, or replace title/subtitle text inside an already generated cover image. If text is wrong or unclear, regenerate from a corrected prompt, switch to a lower-text or no-title variant, or ask the user which imperfect candidate to keep.

Setting preferred_image_backend: ask forces the step-3 prompt every run regardless of available backends. Users change the pinned backend via the ## Changing Preferences section below.

Prompt file requirement (hard): write each image's full, final prompt to a standalone file under prompts/ (naming: NN-{type}-[slug].md) BEFORE invoking any backend. The backend receives the prompt file (or its content); the file is the reproducibility record and lets you switch backends without regenerating prompts.

Concrete tool names (imagegen, GenerateImage, image_generate, baoyu-image-gen) above are examples — substitute the local equivalents under the same rule.

Confirmation Policy

Default behavior: confirm before generation.

  • Treat explicit skill invocation, a file path, matched keywords/presets, EXTEND.md defaults, and any documented auto-selection as recommendation inputs only. None of them authorizes skipping confirmation.
  • Do not start Step 3 or Step 4 until the user confirms the dimensions / aspect / language / backend choices.
  • Skip confirmation only when the current request explicitly says to do so, for example: --quick, "直接生成", "不用确认", "跳过确认", "按默认出图", or equivalent wording. quick_mode: true in EXTEND.md counts as a standing explicit opt-out — set it only when you want every run to skip Step 2.
  • If confirmation is skipped explicitly, state the assumed dimensions / aspect / language / backend in the next user-facing update before generating.

Options

Option Description
--type <name> hero, conceptual, typography, metaphor, scene, minimal
--palette <name> warm, elegant, cool, dark, earth, vivid, pastel, mono, retro, duotone, macaron
--rendering <name> flat-vector, hand-drawn, painterly, digital, pixel, chalk, screen-print
--style <name> Preset shorthand (see Style Presets)
--text <level> none, title-only, title-subtitle, text-rich
--mood <level> subtle, balanced, bold
--font <name> clean, handwritten, serif, display
--aspect <ratio> 16:9 (default), 2.35:1, 4:3, 3:2, 1:1, 3:4
--lang <code> Title language (en, zh, ja, etc.)
--no-title Alias for --text none
--quick Skip confirmation, use auto-selection
--ref <files...> Reference images for style/composition guidance

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

Auto-selection rules: references/auto-selection.md

Galleries

Types: hero, conceptual, typography, metaphor, scene, minimal → Details: references/types.md

Palettes: warm, elegant, cool, dark, earth, vivid, pastel, mono, retro, duotone, macaron → Details: references/palettes/

Renderings: flat-vector, hand-drawn, painterly, digital, pixel, chalk, screen-print → Details: references/renderings/

Text Levels: none (pure visual) | title-only (default) | title-subtitle | text-rich (with tags) → Details: references/dimensions/text.md

Mood Levels: subtle (low contrast) | balanced (default) | bold (high contrast) → Details: references/dimensions/mood.md

Fonts: clean (sans-serif) | handwritten | serif | display (bold decorative) → Details: references/dimensions/font.md

File Structure

Output directory per default_output_dir preference:

  • same-dir: {article-dir}/
  • imgs-subdir: {article-dir}/imgs/
  • independent (default): cover-image/{topic-slug}/
<output-dir>/
├── source-{slug}.{ext}    # Source files
├── refs/                  # Reference images (if provided)
│   ├── ref-01-{slug}.{ext}
│   └── ref-01-{slug}.md   # Description file
├── prompts/cover.md       # Generation prompt
└── cover.png              # Output image

Slug: 2-4 words, kebab-case. Conflict: append -YYYYMMDD-HHMMSS

Workflow

Progress Checklist
Cover Image Progress:
- [ ] Step 0: Check preferences (EXTEND.md) ⛔ BLOCKING
- [ ] Step 1: Analyze content + save refs + determine output dir
- [ ] Step 2: Confirm options (6 dimensions) ⚠️ unless --quick
- [ ] Step 3: Create prompt
- [ ] Step 4: Generate image
- [ ] Step 5: Completion report
Flow
Input → [Step 0: Preferences] ─┬─ Found → Continue
                               └─ Not found → First-Time Setup ⛔ BLOCKING → Save EXTEND.md → Continue
        ↓
Analyze + Save Refs → [Output Dir] → [Confirm: 6 Dimensions] → Prompt → Generate → Complete
                                              ↓
                                     (skip if --quick or all specified)
Step 0: Load Preferences ⛔ BLOCKING

Check EXTEND.md in priority order — the first one found wins:

Priority Path Scope
1 .baoyu-skills/baoyu-cover-image/EXTEND.md Project
2 ${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-cover-image/EXTEND.md XDG
3 $HOME/.baoyu-skills/baoyu-cover-image/EXTEND.md User home
Result Action
Found Load, display summary → Continue
Not found ⛔ Run first-time setup (references/config/first-time-setup.md) → Save → Continue

CRITICAL: If not found, complete setup BEFORE any other steps or questions.

Step 1: Analyze Content
  1. Save reference images (if provided) → references/workflow/reference-images.md
  2. Save source content (if pasted, save to source.md)
  3. Analyze content: topic, tone, keywords, visual metaphors
  4. Deep analyze references ⚠️: Extract specific, concrete elements (see reference-images.md)
  5. Detect language: Compare source, user input, EXTEND.md preference
  6. Determine output directory: Per File Structure rules

⚠️ People in Reference Images:

If reference images contain people who should appear in the cover:

  • Model supports --ref (default): Copy image to refs/, pass via --ref at generation. No description file needed — the model sees the face directly.
  • Model does NOT support --ref (Jimeng, Seedream 3.0): Create refs/ref-NN-{slug}.md with per-character description (hair, glasses, skin tone, clothing). Embed as MUST/REQUIRED instructions in prompt text.

See reference-images.md for full decision table.

Step 2: Confirm Options ⚠️

Hard gate: this step is mandatory per the Confirmation Policy — Steps 3–4 cannot start until the user confirms here (or explicitly opts out with --quick / quick_mode: true / equivalent wording in the current request).

MUST use AskUserQuestion tool to present options as interactive selection — NOT plain text tables. Present up to 4 questions in a single AskUserQuestion call (Type, Palette, Rendering, Font + Settings). Each question shows the recommended option first with reason, followed by alternatives.

Full confirmation flow and question format: references/workflow/confirm-options.md

Condition Skipped Still Asked
--quick or quick_mode: true 6 dimensions Aspect ratio (unless --aspect)
All 6 + --aspect specified All None
Step 3: Create Prompt

Save to prompts/cover.md. Template: references/workflow/prompt-template.md

CRITICAL - References in Frontmatter:

  • Files saved to refs/ → Add to frontmatter references list
  • Style extracted verbally (no file) → Omit references, describe in body
  • Before writing → Verify: test -f refs/ref-NN-{slug}.{ext}

Reference elements in body MUST be detailed, prefixed with "MUST"/"REQUIRED", with integration approach.

Step 4: Generate Image
  1. Backup existing cover.png if regenerating
  2. Select backend via the ## Image Generation Tools rule at the top: use whatever is available; if multiple, ask the user once. Do this once per session before any generation.
  3. Write the full final prompt to prompts/01-cover-[slug].md (hard requirement) BEFORE invoking the backend.
  4. Process references from prompt frontmatter:
    • direct usage → pass via --ref (use ref-capable backend)
    • style/palette → extract traits, append to prompt
  5. Generate: Call the chosen backend with the prompt file, output path, aspect ratio.
    • codex-imagegen: see references/codex-imagegen.md for the invocation contract (preferred baoyu-image-gen --provider codex-cli path, runtime wrapper discovery, parameter notes, stdout schema, batch semantics).
    • Codex imagegen (native) or other runtime-native tools / baoyu-image-gen skill: per the rule in ## Image Generation Tools above.
  6. On failure: auto-retry once
Step 5: Completion Report
Cover Generated!

Topic: [topic]
Type: [type] | Palette: [palette] | Rendering: [rendering]
Text: [text] | Mood: [mood] | Font: [font] | Aspect: [ratio]
Title: [title or "visual only"]
Language: [lang] | Watermark: [enabled/disabled]
References: [N images or "extracted style" or "none"]
Location: [directory path]

Files:
✓ source-{slug}.{ext}
✓ prompts/cover.md
✓ cover.png

Image Modification

Action Steps
Regenerate Backup → Update prompt file FIRST → Regenerate
Change dimension Backup → Confirm new value → Update prompt → Regenerate

Text correction policy:

  • If the title/subtitle is misspelled, garbled, hard to read, or visually weak, do not patch the bitmap with code.
  • For text-correction regenerations, write a new prompt file and a new output path so the flawed candidate is preserved for comparison.
  • Post-processing is limited to crop, resize, compression, or format conversion that does not alter text or the main composition.

Composition Principles

  • Whitespace: 40-60% breathing room
  • Visual anchor: Main element centered or offset left
  • Characters: Simplified silhouettes; NO realistic humans
  • Title: Use exact title from user/source; never invent

Changing Preferences

EXTEND.md lives at the path noted in Step 0. Three ways to change it:

  • Edit directly — open EXTEND.md and change fields. Full schema: references/config/preferences-schema.md.
  • Reconfigure interactively — delete EXTEND.md (or ask "reconfigure baoyu-cover-image preferences" / "重新配置"). The next run re-triggers first-time setup.
  • Common one-line edits:
    • preferred_image_backend: auto — default; runtime-native tool wins, falls back to the only installed backend, asks only if multiple non-native are present.
    • preferred_image_backend: codex-imagegen — pin to Codex's built-in.
    • preferred_image_backend: baoyu-image-gen — pin to the baoyu-image-gen skill.
    • preferred_image_backend: ask — confirm backend every run.
    • watermark.enabled: true, preferred_type, preferred_palette, preferred_rendering, default_aspect, quick_mode: true, language — shift the auto-selection defaults and confirmation flow.

References

Dimensions: text.md | mood.md | font.md Palettes: references/palettes/ Renderings: references/renderings/ Types: references/types.md Auto-Selection: references/auto-selection.md Style Presets: references/style-presets.md Compatibility: references/compatibility.md Visual Elements: references/visual-elements.md Workflow: confirm-options.md | prompt-template.md | reference-images.md Config: preferences-schema.md | first-time-setup.md | watermark-guide.md

1---
2name: baoyu-cover-image
3description: Generates article cover images with 5 dimensions (type, palette, rendering, text, mood) combining 11 color palettes and 7 rendering 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", or "make cover".
4version: 1.117.5
5metadata:
6 openclaw:
7 homepage: https://github.com/JimLiu/baoyu-skills#baoyu-cover-image
8---
9 
10# Cover Image Generator
11 
12Generate elegant cover images for articles with 5-dimensional customization.
13 
14## User Input Tools
15 
16When this skill prompts the user, follow this tool-selection rule (priority order):
17 
181. **Prefer built-in user-input tools** exposed by the current agent runtime — e.g., `AskUserQuestion`, `request_user_input`, `clarify`, `ask_user`, or any equivalent.
192. **Fallback**: if no such tool exists, emit a numbered plain-text message and ask the user to reply with the chosen number/answer for each question.
203. **Batching**: if the tool supports multiple questions per call, combine all applicable questions into a single call; if only single-question, ask them one at a time in priority order.
21 
22Concrete `AskUserQuestion` references below are examples — substitute the local equivalent in other runtimes.
23 
24## Image Generation Tools
25 
26When this skill needs to render an image, resolve the backend in this order:
27 
281. **Current-request override** — if the user names a specific backend in the current message, use it.
292. **Saved preference** — if `EXTEND.md` sets `preferred_image_backend` to a backend available right now, use it.
303. **Auto-select** (when the preference is `auto`, unset, or the pinned backend isn't available):
31 - **Codex (`imagegen`)** — first, inspect your available-skills / tool inventory. If a skill named `imagegen` is listed, you are running inside Codex and MUST use it: invoke via the `Skill` tool with `skill: "imagegen"`, passing the saved prompt file's content (plus output path and aspect ratio per Codex `imagegen`'s own args). Codex `imagegen` is the official raster backend in that runtime and outranks any non-native skill (e.g., `baoyu-image-gen`) unless the user has explicitly pinned a different `preferred_image_backend`.
32 - **Codex via `codex exec` (`codex-imagegen`)** — if the current runtime exposes no native `imagegen` skill but the `codex` CLI is on `PATH` with an active `codex login`, route through `baoyu-image-gen --provider codex-cli` (preferred), or — if baoyu-image-gen is unavailable — invoke the bundled wrapper directly. Details, parameters, and the runtime-discovery procedure live in [references/codex-imagegen.md](references/codex-imagegen.md) — load that file only when this branch is selected.
33 - **Cursor (`GenerateImage`)** — if the runtime exposes a native `GenerateImage` tool, you are running inside Cursor and it outranks any non-native skill the same way Codex `imagegen` does. Two hard caveats: (a) it has no aspect-ratio parameter — state the target aspect ratio / dimensions explicitly in the prompt text passed as `description`; (b) it does not accept an output directory — it saves to a tool-managed location, so after generation copy/move the file to the skill's expected output path (e.g., `outputs/.../NN-xxx.png`). Reference images go in `reference_image_paths`.
34 - **Other runtime-native tools** — if the runtime exposes a different native image tool (e.g., Hermes `image_generate`), use it the same way.
35 - Otherwise, if exactly one non-native backend is installed (e.g., `baoyu-image-gen`), use it.
36 - Otherwise (multiple non-native backends with no runtime-native tool), ask the user once — batch with any other initial questions.
374. **If none are available**, tell the user and ask how to proceed.
38 
39**⛔ Never substitute SVG, HTML, canvas, or other code-based rendering for raster image generation.** Codex `imagegen`'s own description says it should be used "when the output should be a bitmap asset rather than repo-native code or vector." If you cannot resolve a raster backend via step 3, fall through to step 4 and ask the user — do **not** silently emit SVG, write inline `<svg>` markup, or produce HTML/CSS art as a substitute. This applies even if the article/section seems "diagram-like": the consumer skill calling this rule has already decided that a raster image is what it needs.
40 
41**⛔ Never repair rendered text by painting over a generated bitmap.** Do not use ImageMagick, Pillow, Canvas, SVG, HTML/CSS, OCR scripts, or any other programmatic overlay to cover, rewrite, erase, stroke, or replace title/subtitle text inside an already generated cover image. If text is wrong or unclear, regenerate from a corrected prompt, switch to a lower-text or no-title variant, or ask the user which imperfect candidate to keep.
42 
43Setting `preferred_image_backend: ask` forces the step-3 prompt every run regardless of available backends. Users change the pinned backend via the `## Changing Preferences` section below.
44 
45**Prompt file requirement (hard)**: write each image's full, final prompt to a standalone file under `prompts/` (naming: `NN-{type}-[slug].md`) BEFORE invoking any backend. The backend receives the prompt file (or its content); the file is the reproducibility record and lets you switch backends without regenerating prompts.
46 
47Concrete tool names (`imagegen`, `GenerateImage`, `image_generate`, `baoyu-image-gen`) above are examples — substitute the local equivalents under the same rule.
48 
49## Confirmation Policy
50 
51Default behavior: **confirm before generation**.
52 
53- Treat explicit skill invocation, a file path, matched keywords/presets, `EXTEND.md` defaults, and any documented auto-selection as **recommendation inputs only**. None of them authorizes skipping confirmation.
54- Do **not** start Step 3 or Step 4 until the user confirms the dimensions / aspect / language / backend choices.
55- Skip confirmation only when the current request explicitly says to do so, for example: `--quick`, "直接生成", "不用确认", "跳过确认", "按默认出图", or equivalent wording. `quick_mode: true` in `EXTEND.md` counts as a standing explicit opt-out — set it only when you want every run to skip Step 2.
56- If confirmation is skipped explicitly, state the assumed dimensions / aspect / language / backend in the next user-facing update before generating.
57 
58## Options
59 
60| Option | Description |
61|--------|-------------|
62| `--type <name>` | hero, conceptual, typography, metaphor, scene, minimal |
63| `--palette <name>` | warm, elegant, cool, dark, earth, vivid, pastel, mono, retro, duotone, macaron |
64| `--rendering <name>` | flat-vector, hand-drawn, painterly, digital, pixel, chalk, screen-print |
65| `--style <name>` | Preset shorthand (see [Style Presets](references/style-presets.md)) |
66| `--text <level>` | none, title-only, title-subtitle, text-rich |
67| `--mood <level>` | subtle, balanced, bold |
68| `--font <name>` | clean, handwritten, serif, display |
69| `--aspect <ratio>` | 16:9 (default), 2.35:1, 4:3, 3:2, 1:1, 3:4 |
70| `--lang <code>` | Title language (en, zh, ja, etc.) |
71| `--no-title` | Alias for `--text none` |
72| `--quick` | Skip confirmation, use auto-selection |
73| `--ref <files...>` | Reference images for style/composition guidance |
74 
75## Five Dimensions
76 
77| Dimension | Values | Default |
78|-----------|--------|---------|
79| **Type** | hero, conceptual, typography, metaphor, scene, minimal | auto |
80| **Palette** | warm, elegant, cool, dark, earth, vivid, pastel, mono, retro, duotone, macaron | auto |
81| **Rendering** | flat-vector, hand-drawn, painterly, digital, pixel, chalk, screen-print | auto |
82| **Text** | none, title-only, title-subtitle, text-rich | title-only |
83| **Mood** | subtle, balanced, bold | balanced |
84| **Font** | clean, handwritten, serif, display | clean |
85 
86Auto-selection rules: [references/auto-selection.md](references/auto-selection.md)
87 
88## Galleries
89 
90**Types**: hero, conceptual, typography, metaphor, scene, minimal
91→ Details: [references/types.md](references/types.md)
92 
93**Palettes**: warm, elegant, cool, dark, earth, vivid, pastel, mono, retro, duotone, macaron
94→ Details: [references/palettes/](references/palettes/)
95 
96**Renderings**: flat-vector, hand-drawn, painterly, digital, pixel, chalk, screen-print
97→ Details: [references/renderings/](references/renderings/)
98 
99**Text Levels**: none (pure visual) | title-only (default) | title-subtitle | text-rich (with tags)
100→ Details: [references/dimensions/text.md](references/dimensions/text.md)
101 
102**Mood Levels**: subtle (low contrast) | balanced (default) | bold (high contrast)
103→ Details: [references/dimensions/mood.md](references/dimensions/mood.md)
104 
105**Fonts**: clean (sans-serif) | handwritten | serif | display (bold decorative)
106→ Details: [references/dimensions/font.md](references/dimensions/font.md)
107 
108## File Structure
109 
110Output directory per `default_output_dir` preference:
111- `same-dir`: `{article-dir}/`
112- `imgs-subdir`: `{article-dir}/imgs/`
113- `independent` (default): `cover-image/{topic-slug}/`
114 
115```
116<output-dir>/
117├── source-{slug}.{ext} # Source files
118├── refs/ # Reference images (if provided)
119│ ├── ref-01-{slug}.{ext}
120│ └── ref-01-{slug}.md # Description file
121├── prompts/cover.md # Generation prompt
122└── cover.png # Output image
123```
124 
125**Slug**: 2-4 words, kebab-case. Conflict: append `-YYYYMMDD-HHMMSS`
126 
127## Workflow
128 
129### Progress Checklist
130 
131```
132Cover Image Progress:
133- [ ] Step 0: Check preferences (EXTEND.md) ⛔ BLOCKING
134- [ ] Step 1: Analyze content + save refs + determine output dir
135- [ ] Step 2: Confirm options (6 dimensions) ⚠️ unless --quick
136- [ ] Step 3: Create prompt
137- [ ] Step 4: Generate image
138- [ ] Step 5: Completion report
139```
140 
141### Flow
142 
143```
144Input → [Step 0: Preferences] ─┬─ Found → Continue
145 └─ Not found → First-Time Setup ⛔ BLOCKING → Save EXTEND.md → Continue
146 ↓
147Analyze + Save Refs → [Output Dir] → [Confirm: 6 Dimensions] → Prompt → Generate → Complete
148 ↓
149 (skip if --quick or all specified)
150```
151 
152### Step 0: Load Preferences ⛔ BLOCKING
153 
154Check EXTEND.md in priority order — the first one found wins:
155 
156| Priority | Path | Scope |
157|----------|------|-------|
158| 1 | `.baoyu-skills/baoyu-cover-image/EXTEND.md` | Project |
159| 2 | `${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-cover-image/EXTEND.md` | XDG |
160| 3 | `$HOME/.baoyu-skills/baoyu-cover-image/EXTEND.md` | User home |
161 
162| Result | Action |
163|--------|--------|
164| Found | Load, display summary → Continue |
165| Not found | ⛔ Run first-time setup ([references/config/first-time-setup.md](references/config/first-time-setup.md)) → Save → Continue |
166 
167**CRITICAL**: If not found, complete setup BEFORE any other steps or questions.
168 
169### Step 1: Analyze Content
170 
1711. **Save reference images** (if provided) → [references/workflow/reference-images.md](references/workflow/reference-images.md)
1722. **Save source content** (if pasted, save to `source.md`)
1733. **Analyze content**: topic, tone, keywords, visual metaphors
1744. **Deep analyze references** ⚠️: Extract specific, concrete elements (see reference-images.md)
1755. **Detect language**: Compare source, user input, EXTEND.md preference
1766. **Determine output directory**: Per File Structure rules
177 
178**⚠️ People in Reference Images:**
179 
180If reference images contain **people** who should appear in the cover:
181 
182- **Model supports `--ref`** (default): Copy image to `refs/`, pass via `--ref` at generation. No description file needed — the model sees the face directly.
183- **Model does NOT support `--ref`** (Jimeng, Seedream 3.0): Create `refs/ref-NN-{slug}.md` with per-character description (hair, glasses, skin tone, clothing). Embed as MUST/REQUIRED instructions in prompt text.
184 
185See [reference-images.md](references/workflow/reference-images.md) for full decision table.
186 
187### Step 2: Confirm Options ⚠️
188 
189**Hard gate**: this step is mandatory per the [Confirmation Policy](#confirmation-policy) — Steps 3–4 cannot start until the user confirms here (or explicitly opts out with `--quick` / `quick_mode: true` / equivalent wording in the current request).
190 
191**MUST use `AskUserQuestion` tool** to present options as interactive selection — NOT plain text tables. Present up to 4 questions in a single `AskUserQuestion` call (Type, Palette, Rendering, Font + Settings). Each question shows the recommended option first with reason, followed by alternatives.
192 
193Full confirmation flow and question format: [references/workflow/confirm-options.md](references/workflow/confirm-options.md)
194 
195| Condition | Skipped | Still Asked |
196|-----------|---------|-------------|
197| `--quick` or `quick_mode: true` | 6 dimensions | Aspect ratio (unless `--aspect`) |
198| All 6 + `--aspect` specified | All | None |
199 
200### Step 3: Create Prompt
201 
202Save to `prompts/cover.md`. Template: [references/workflow/prompt-template.md](references/workflow/prompt-template.md)
203 
204**CRITICAL - References in Frontmatter**:
205- Files saved to `refs/` → Add to frontmatter `references` list
206- Style extracted verbally (no file) → Omit `references`, describe in body
207- Before writing → Verify: `test -f refs/ref-NN-{slug}.{ext}`
208 
209**Reference elements in body** MUST be detailed, prefixed with "MUST"/"REQUIRED", with integration approach.
210 
211### Step 4: Generate Image
212 
2131. **Backup existing** `cover.png` if regenerating
2142. **Select backend** via the `## Image Generation Tools` rule at the top: use whatever is available; if multiple, ask the user once. Do this once per session before any generation.
2153. **Write the full final prompt** to `prompts/01-cover-[slug].md` (hard requirement) BEFORE invoking the backend.
2164. **Process references** from prompt frontmatter:
217 - `direct` usage → pass via `--ref` (use ref-capable backend)
218 - `style`/`palette` → extract traits, append to prompt
2195. **Generate**: Call the chosen backend with the prompt file, output path, aspect ratio.
220 - **`codex-imagegen`**: see [references/codex-imagegen.md](references/codex-imagegen.md) for the invocation contract (preferred `baoyu-image-gen --provider codex-cli` path, runtime wrapper discovery, parameter notes, stdout schema, batch semantics).
221 - **Codex `imagegen` (native)** or other runtime-native tools / `baoyu-image-gen` skill: per the rule in `## Image Generation Tools` above.
2226. On failure: auto-retry once
223 
224### Step 5: Completion Report
225 
226```
227Cover Generated!
228 
229Topic: [topic]
230Type: [type] | Palette: [palette] | Rendering: [rendering]
231Text: [text] | Mood: [mood] | Font: [font] | Aspect: [ratio]
232Title: [title or "visual only"]
233Language: [lang] | Watermark: [enabled/disabled]
234References: [N images or "extracted style" or "none"]
235Location: [directory path]
236 
237Files:
238✓ source-{slug}.{ext}
239✓ prompts/cover.md
240✓ cover.png
241```
242 
243## Image Modification
244 
245| Action | Steps |
246|--------|-------|
247| **Regenerate** | Backup → Update prompt file FIRST → Regenerate |
248| **Change dimension** | Backup → Confirm new value → Update prompt → Regenerate |
249 
250Text correction policy:
251 
252- If the title/subtitle is misspelled, garbled, hard to read, or visually weak, do not patch the bitmap with code.
253- For text-correction regenerations, write a new prompt file and a new output path so the flawed candidate is preserved for comparison.
254- Post-processing is limited to crop, resize, compression, or format conversion that does not alter text or the main composition.
255 
256## Composition Principles
257 
258- **Whitespace**: 40-60% breathing room
259- **Visual anchor**: Main element centered or offset left
260- **Characters**: Simplified silhouettes; NO realistic humans
261- **Title**: Use exact title from user/source; never invent
262 
263## Changing Preferences
264 
265EXTEND.md lives at the path noted in **Step 0**. Three ways to change it:
266 
267- **Edit directly** — open EXTEND.md and change fields. Full schema: [references/config/preferences-schema.md](references/config/preferences-schema.md).
268- **Reconfigure interactively** — delete EXTEND.md (or ask "reconfigure baoyu-cover-image preferences" / "重新配置"). The next run re-triggers first-time setup.
269- **Common one-line edits**:
270 - `preferred_image_backend: auto` — default; runtime-native tool wins, falls back to the only installed backend, asks only if multiple non-native are present.
271 - `preferred_image_backend: codex-imagegen` — pin to Codex's built-in.
272 - `preferred_image_backend: baoyu-image-gen` — pin to the baoyu-image-gen skill.
273 - `preferred_image_backend: ask` — confirm backend every run.
274 - `watermark.enabled: true`, `preferred_type`, `preferred_palette`, `preferred_rendering`, `default_aspect`, `quick_mode: true`, `language` — shift the auto-selection defaults and confirmation flow.
275 
276## References
277 
278**Dimensions**: [text.md](references/dimensions/text.md) | [mood.md](references/dimensions/mood.md) | [font.md](references/dimensions/font.md)
279**Palettes**: [references/palettes/](references/palettes/)
280**Renderings**: [references/renderings/](references/renderings/)
281**Types**: [references/types.md](references/types.md)
282**Auto-Selection**: [references/auto-selection.md](references/auto-selection.md)
283**Style Presets**: [references/style-presets.md](references/style-presets.md)
284**Compatibility**: [references/compatibility.md](references/compatibility.md)
285**Visual Elements**: [references/visual-elements.md](references/visual-elements.md)
286**Workflow**: [confirm-options.md](references/workflow/confirm-options.md) | [prompt-template.md](references/workflow/prompt-template.md) | [reference-images.md](references/workflow/reference-images.md)
287**Config**: [preferences-schema.md](references/config/preferences-schema.md) | [first-time-setup.md](references/config/first-time-setup.md) | [watermark-guide.md](references/config/watermark-guide.md)
288 

Discussion

Alternatives

Article IllustratorAnalyzes article structure, identifies positions requiring visual aids, generates illustrations with Type × Style × Palette three-dimension approach. Use when user asks to "illustrate article", "add images", "generate images for article", or "为文章配图".Creator · MITArticle extractorExtract clean article content from URLs (blog posts, articles, tutorials) and save as readable text. Use when user wants to download, extract, or save an article/blog post from a URL without ads, navigation, or clutter.Creator · MITEnd-of-Article CTA DesignerDesigns end-of-article CTAs — copy, layout, placement, A/B test plan, accessibility — for blog posts, newsletters, and essays. Use whenever the user asks to write, review, or improve a CTA at the bottom of an article; mentions "end-of-post CTA", "call-to-action", "signup box", "newsletter CTA", "subscribe block", or "what should I put at the bottom"; or asks how to turn readers into subscribers, leads, customers, or paying supporters. Covers personal blogs, paid newsletters (Substack, beehiiv, Ghost), and brand content-marketing blogs. Do NOT use for opening hooks, ledes, or post titles — use samber/cc-skills@copywriting-hooks instead. Not for landing-page, ad, or email copy.Creator · MITBrand Storytelling & Narrative Video Content for Seedance 2.0 on HiggsfieldGenerate brand storytelling and narrative video prompts for Seedance 2.0 on Higgsfield. Use whenever the user wants to create a brand story video, company origin story, mission video, about us video, brand film, corporate narrative, founder story, brand anthem, company culture video, or emotional brand content. Triggers on: brand story, brand video, company story, origin story, about us, mission video, brand film, brand anthem, corporate video, company culture, founder story, brand narrative, or any request for brand/company storytelling video. Use even for "tell our company story" or "make a video about our mission.Creator · MIT