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 ↗
npx degit JimLiu/baoyu-skills/skills/baoyu-cover-image#main ~/.claude/skills/baoyu-cover-imageChecked ·commit main
Files of Cover Image Generator
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):
- Prefer built-in user-input tools exposed by the current agent runtime — e.g.,
AskUserQuestion,request_user_input,clarify,ask_user, or any equivalent. - 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.
- 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:
- Current-request override — if the user names a specific backend in the current message, use it.
- Saved preference — if
EXTEND.mdsetspreferred_image_backendto a backend available right now, use it. - 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 namedimagegenis listed, you are running inside Codex and MUST use it: invoke via theSkilltool withskill: "imagegen", passing the saved prompt file's content (plus output path and aspect ratio per Codeximagegen's own args). Codeximagegenis 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 differentpreferred_image_backend. - Codex via
codex exec(codex-imagegen) — if the current runtime exposes no nativeimagegenskill but thecodexCLI is onPATHwith an activecodex login, route throughbaoyu-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 nativeGenerateImagetool, you are running inside Cursor and it outranks any non-native skill the same way Codeximagegendoes. Two hard caveats: (a) it has no aspect-ratio parameter — state the target aspect ratio / dimensions explicitly in the prompt text passed asdescription; (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 inreference_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.
- Codex (
- 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.mddefaults, 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: trueinEXTEND.mdcounts 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
- Save reference images (if provided) → references/workflow/reference-images.md
- Save source content (if pasted, save to
source.md) - Analyze content: topic, tone, keywords, visual metaphors
- Deep analyze references ⚠️: Extract specific, concrete elements (see reference-images.md)
- Detect language: Compare source, user input, EXTEND.md preference
- 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 torefs/, pass via--refat generation. No description file needed — the model sees the face directly. - Model does NOT support
--ref(Jimeng, Seedream 3.0): Createrefs/ref-NN-{slug}.mdwith 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 frontmatterreferenceslist - 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
- Backup existing
cover.pngif regenerating - Select backend via the
## Image Generation Toolsrule at the top: use whatever is available; if multiple, ask the user once. Do this once per session before any generation. - Write the full final prompt to
prompts/01-cover-[slug].md(hard requirement) BEFORE invoking the backend. - Process references from prompt frontmatter:
directusage → pass via--ref(use ref-capable backend)style/palette→ extract traits, append to prompt
- Generate: Call the chosen backend with the prompt file, output path, aspect ratio.
codex-imagegen: see references/codex-imagegen.md for the invocation contract (preferredbaoyu-image-gen --provider codex-clipath, runtime wrapper discovery, parameter notes, stdout schema, batch semantics).- Codex
imagegen(native) or other runtime-native tools /baoyu-image-genskill: per the rule in## Image Generation Toolsabove.
- 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 | |
| 2 | name baoyu-cover-image |
| 3 | description 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". |
| 4 | version 1.117.5 |
| 5 | metadata |
| 6 | openclaw |
| 7 | homepage https://github.com/JimLiu/baoyu-skills#baoyu-cover-image |
| 8 | |
| 9 | |
| 10 | # Cover Image Generator |
| 11 | |
| 12 | Generate elegant cover images for articles with 5-dimensional customization. |
| 13 | |
| 14 | ## User Input Tools |
| 15 | |
| 16 | When this skill prompts the user, follow this tool-selection rule (priority order): |
| 17 | |
| 18 | **Prefer built-in user-input tools** exposed by the current agent runtime — e.g., `AskUserQuestion`, `request_user_input`, `clarify`, `ask_user`, or any equivalent. |
| 19 | **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. |
| 20 | **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 | |
| 22 | Concrete `AskUserQuestion` references below are examples — substitute the local equivalent in other runtimes. |
| 23 | |
| 24 | ## Image Generation Tools |
| 25 | |
| 26 | When this skill needs to render an image, resolve the backend in this order: |
| 27 | |
| 28 | **Current-request override** — if the user names a specific backend in the current message, use it. |
| 29 | **Saved preference** — if `EXTEND.md` sets `preferred_image_backend` to a backend available right now, use it. |
| 30 | **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] — 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. |
| 37 | **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 | |
| 43 | 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. |
| 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 | |
| 47 | Concrete 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 | |
| 51 | Default 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]) | |
| 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 | |
| 86 | Auto-selection rules: [references/auto-selection.md] |
| 87 | |
| 88 | ## Galleries |
| 89 | |
| 90 | **Types**: hero, conceptual, typography, metaphor, scene, minimal |
| 91 | → Details: [references/types.md] |
| 92 | |
| 93 | **Palettes**: warm, elegant, cool, dark, earth, vivid, pastel, mono, retro, duotone, macaron |
| 94 | → Details: [references/palettes/] |
| 95 | |
| 96 | **Renderings**: flat-vector, hand-drawn, painterly, digital, pixel, chalk, screen-print |
| 97 | → Details: [references/renderings/] |
| 98 | |
| 99 | **Text Levels**: none (pure visual) | title-only (default) | title-subtitle | text-rich (with tags) |
| 100 | → Details: [references/dimensions/text.md] |
| 101 | |
| 102 | **Mood Levels**: subtle (low contrast) | balanced (default) | bold (high contrast) |
| 103 | → Details: [references/dimensions/mood.md] |
| 104 | |
| 105 | **Fonts**: clean (sans-serif) | handwritten | serif | display (bold decorative) |
| 106 | → Details: [references/dimensions/font.md] |
| 107 | |
| 108 | ## File Structure |
| 109 | |
| 110 | Output 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 | |
| 132 | Cover 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 | |
| 144 | Input → [Step 0: Preferences] ─┬─ Found → Continue |
| 145 | └─ Not found → First-Time Setup ⛔ BLOCKING → Save EXTEND.md → Continue |
| 146 | ↓ |
| 147 | Analyze + 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 | |
| 154 | Check 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]) → Save → Continue | |
| 166 | |
| 167 | **CRITICAL**: If not found, complete setup BEFORE any other steps or questions. |
| 168 | |
| 169 | ### Step 1: Analyze Content |
| 170 | |
| 171 | **Save reference images** (if provided) → [references/workflow/reference-images.md] |
| 172 | **Save source content** (if pasted, save to `source.md`) |
| 173 | **Analyze content**: topic, tone, keywords, visual metaphors |
| 174 | **Deep analyze references** ⚠️: Extract specific, concrete elements (see reference-images.md) |
| 175 | **Detect language**: Compare source, user input, EXTEND.md preference |
| 176 | **Determine output directory**: Per File Structure rules |
| 177 | |
| 178 | **⚠️ People in Reference Images:** |
| 179 | |
| 180 | If 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 | |
| 185 | See [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] — 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 | |
| 193 | Full confirmation flow and question format: [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 | |
| 202 | Save to `prompts/cover.md`. Template: [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 | |
| 213 | **Backup existing** `cover.png` if regenerating |
| 214 | **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. |
| 215 | **Write the full final prompt** to `prompts/01-cover-[slug].md` (hard requirement) BEFORE invoking the backend. |
| 216 | **Process references** from prompt frontmatter: |
| 217 | `direct` usage → pass via `--ref` (use ref-capable backend) |
| 218 | `style`/`palette` → extract traits, append to prompt |
| 219 | **Generate**: Call the chosen backend with the prompt file, output path, aspect ratio. |
| 220 | **`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). |
| 221 | **Codex `imagegen` (native)** or other runtime-native tools / `baoyu-image-gen` skill: per the rule in `## Image Generation Tools` above. |
| 222 | On failure: auto-retry once |
| 223 | |
| 224 | ### Step 5: Completion Report |
| 225 | |
| 226 | |
| 227 | Cover Generated! |
| 228 | |
| 229 | Topic: [topic] |
| 230 | Type: [type] | Palette: [palette] | Rendering: [rendering] |
| 231 | Text: [text] | Mood: [mood] | Font: [font] | Aspect: [ratio] |
| 232 | Title: [title or "visual only"] |
| 233 | Language: [lang] | Watermark: [enabled/disabled] |
| 234 | References: [N images or "extracted style" or "none"] |
| 235 | Location: [directory path] |
| 236 | |
| 237 | Files: |
| 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 | |
| 250 | Text 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 | |
| 265 | EXTEND.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]. |
| 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] | [mood.md] | [font.md] |
| 279 | **Palettes**: [references/palettes/] |
| 280 | **Renderings**: [references/renderings/] |
| 281 | **Types**: [references/types.md] |
| 282 | **Auto-Selection**: [references/auto-selection.md] |
| 283 | **Style Presets**: [references/style-presets.md] |
| 284 | **Compatibility**: [references/compatibility.md] |
| 285 | **Visual Elements**: [references/visual-elements.md] |
| 286 | **Workflow**: [confirm-options.md] | [prompt-template.md] | [reference-images.md] |
| 287 | **Config**: [preferences-schema.md] | [first-time-setup.md] | [watermark-guide.md] |
| 288 |
Discussion
Alternatives
Browse more free Claude skills or everything in Content creator.





