From 372e03cef3df291047e725d11e05d688f8ff0b06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jim=20Liu=20=E5=AE=9D=E7=8E=89?= Date: Fri, 6 Feb 2026 16:13:47 -0600 Subject: [PATCH] refactor(baoyu-cover-image): optimize SKILL.md from 532 to 233 lines --- skills/baoyu-cover-image/SKILL.md | 480 ++++-------------- .../references/workflow/reference-images.md | 86 ++++ 2 files changed, 177 insertions(+), 389 deletions(-) create mode 100644 skills/baoyu-cover-image/references/workflow/reference-images.md diff --git a/skills/baoyu-cover-image/SKILL.md b/skills/baoyu-cover-image/SKILL.md index af177bc..0239d78 100644 --- a/skills/baoyu-cover-image/SKILL.md +++ b/skills/baoyu-cover-image/SKILL.md @@ -10,169 +10,94 @@ Generate elegant cover images for articles with 5-dimensional customization. ## Usage ```bash -# Auto-select all dimensions based on content +# Auto-select dimensions based on content /baoyu-cover-image path/to/article.md -# Quick mode: skip confirmation, use auto-selection +# Quick mode: skip confirmation /baoyu-cover-image article.md --quick -# Specify dimensions (new 5D system) +# Specify dimensions /baoyu-cover-image article.md --type conceptual --palette warm --rendering flat-vector -/baoyu-cover-image article.md --text title-subtitle --mood bold -# Style presets (backward-compatible shorthand for palette + rendering) +# Style presets (shorthand for palette + rendering) /baoyu-cover-image article.md --style blueprint -/baoyu-cover-image article.md --style blueprint --rendering hand-drawn # override rendering - -# 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 --palette mono --rendering digital --aspect 1:1 --quick -[paste content] # With reference images /baoyu-cover-image article.md --ref style-ref.png -/baoyu-cover-image article.md --ref ref1.png ref2.png --quick + +# Direct content input +/baoyu-cover-image --palette mono --aspect 1:1 --quick +[paste content] ``` ## Options | Option | Description | |--------|-------------| -| `--type ` | Cover type: hero, conceptual, typography, metaphor, scene, minimal | -| `--palette ` | Color palette: warm, elegant, cool, dark, earth, vivid, pastel, mono, retro | -| `--rendering ` | Rendering style: flat-vector, hand-drawn, painterly, digital, pixel, chalk | -| `--style ` | Preset shorthand (expands to palette + rendering, see [Style Presets](references/style-presets.md)) | -| `--text ` | Text density: none, title-only, title-subtitle, text-rich | -| `--mood ` | Emotional intensity: subtle, balanced, bold | -| `--font ` | Font style: clean, handwritten, serif, display | +| `--type ` | hero, conceptual, typography, metaphor, scene, minimal | +| `--palette ` | warm, elegant, cool, dark, earth, vivid, pastel, mono, retro | +| `--rendering ` | flat-vector, hand-drawn, painterly, digital, pixel, chalk | +| `--style ` | Preset shorthand (see [Style Presets](references/style-presets.md)) | +| `--text ` | none, title-only, title-subtitle, text-rich | +| `--mood ` | subtle, balanced, bold | +| `--font ` | clean, handwritten, serif, display | | `--aspect ` | 16:9 (default), 2.35:1, 4:3, 3:2, 1:1, 3:4 | | `--lang ` | Title language (en, zh, ja, etc.) | | `--no-title` | Alias for `--text none` | -| `--quick` | Skip confirmation, use auto-selection for missing dimensions | +| `--quick` | Skip confirmation, use auto-selection | | `--ref ` | Reference images for style/composition guidance | ## Five Dimensions -| Dimension | Controls | Values | Default | -|-----------|----------|--------|---------| -| **Type** | Visual composition, information structure | hero, conceptual, typography, metaphor, scene, minimal | auto | -| **Palette** | Colors, color scheme, decorative hints | warm, elegant, cool, dark, earth, vivid, pastel, mono, retro | auto | -| **Rendering** | Line quality, texture, depth, element style | flat-vector, hand-drawn, painterly, digital, pixel, chalk | auto | -| **Text** | Text density, information hierarchy | none, title-only, title-subtitle, text-rich | title-only | -| **Mood** | Emotional intensity, visual weight | subtle, balanced, bold | balanced | -| **Font** | Typography style, character feel | clean, handwritten, serif, display | clean | +| Dimension | Values | Default | +|-----------|--------|---------| +| **Type** | hero, conceptual, typography, metaphor, scene, minimal | auto | +| **Palette** | warm, elegant, cool, dark, earth, vivid, pastel, mono, retro | auto | +| **Rendering** | flat-vector, hand-drawn, painterly, digital, pixel, chalk | auto | +| **Text** | none, title-only, title-subtitle, text-rich | title-only | +| **Mood** | subtle, balanced, bold | balanced | +| **Font** | clean, handwritten, serif, display | clean | -Dimensions can be freely combined. Auto-selection rules: [references/auto-selection.md](references/auto-selection.md) +Auto-selection rules: [references/auto-selection.md](references/auto-selection.md) -## Type Gallery +## Galleries -| 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 | +**Types**: hero, conceptual, typography, metaphor, scene, minimal +→ Details: [references/types.md](references/types.md) -Type composition details: [references/types.md](references/types.md) +**Palettes**: warm, elegant, cool, dark, earth, vivid, pastel, mono, retro +→ Details: [references/palettes/](references/palettes/) -## Palette Gallery +**Renderings**: flat-vector, hand-drawn, painterly, digital, pixel, chalk +→ Details: [references/renderings/](references/renderings/) -| Palette | Vibe | Primary Colors | -|---------|------|----------------| -| `warm` | Friendly, approachable | Orange, golden yellow, terracotta | -| `elegant` | Sophisticated, refined | Soft coral, muted teal, dusty rose | -| `cool` | Technical, professional | Engineering blue, navy, cyan | -| `dark` | Cinematic, premium | Electric purple, cyan, magenta | -| `earth` | Natural, organic | Forest green, sage, earth brown | -| `vivid` | Energetic, bold | Bright red, neon green, electric blue | -| `pastel` | Gentle, whimsical | Soft pink, mint, lavender | -| `mono` | Clean, focused | Black, near-black, white | -| `retro` | Nostalgic, vintage | Muted orange, dusty pink, maroon | +**Text Levels**: none (pure visual) | title-only (default) | title-subtitle | text-rich (with tags) +→ Details: [references/dimensions/text.md](references/dimensions/text.md) -Palette definitions: [references/palettes/](references/palettes/) +**Mood Levels**: subtle (low contrast) | balanced (default) | bold (high contrast) +→ Details: [references/dimensions/mood.md](references/dimensions/mood.md) -## Rendering Gallery - -| Rendering | Description | Key Characteristics | -|-----------|-------------|---------------------| -| `flat-vector` | Clean modern vector | Uniform outlines, flat fills, geometric icons | -| `hand-drawn` | Sketchy organic illustration | Imperfect strokes, paper texture, doodles | -| `painterly` | Soft watercolor/paint | Brush strokes, color bleeds, soft edges | -| `digital` | Polished modern digital | Precise edges, subtle gradients, UI components | -| `pixel` | Retro 8-bit pixel art | Pixel grid, dithering, chunky shapes | -| `chalk` | Chalk on blackboard | Chalk strokes, dust effects, board texture | - -Rendering definitions: [references/renderings/](references/renderings/) - -## Text & Mood - -| Text Level | Title | Subtitle | Tags | Use Case | -|------------|:-----:|:--------:|:----:|----------| -| `none` | - | - | - | Pure visual, no text | -| `title-only` | ✓ | - | - | Simple headline (default) | -| `title-subtitle` | ✓ | ✓ | - | Title + supporting context | -| `text-rich` | ✓ | ✓ | ✓ (2-4) | Information-dense | - -| Mood | 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 guides: [references/dimensions/text.md](references/dimensions/text.md) | [references/dimensions/mood.md](references/dimensions/mood.md) - -## Font Gallery - -| Font | Description | Best For | -|------|-------------|----------| -| `clean` | Modern geometric sans-serif | Tech, professional, minimal | -| `handwritten` | Warm hand-lettered style | Personal, friendly, lifestyle | -| `serif` | Classic elegant typography | Editorial, academic, luxury | -| `display` | Bold decorative headlines | Announcements, entertainment | - -Full guide: [references/dimensions/font.md](references/dimensions/font.md) - -## Style Presets & Compatibility - -- **Style Presets**: `--style X` expands to palette + rendering. See [references/style-presets.md](references/style-presets.md) -- **Compatibility Matrices**: Palette×Rendering, Type×Rendering, Type×Text, Type×Mood. See [references/compatibility.md](references/compatibility.md) - - ✓✓ = highly recommended | ✓ = compatible | ✗ = not recommended +**Fonts**: clean (sans-serif) | handwritten | serif | display (bold decorative) +→ Details: [references/dimensions/font.md](references/dimensions/font.md) ## File Structure -Output directory depends on `default_output_dir` preference: - -| Preference | Output Path | -|------------|-------------| -| `same-dir` | `{article-dir}/` | -| `imgs-subdir` | `{article-dir}/imgs/` | -| `independent` (default) | `cover-image/{topic-slug}/` | -| Pasted content | `cover-image/{topic-slug}/` (always) | +Output directory per `default_output_dir` preference: +- `same-dir`: `{article-dir}/` +- `imgs-subdir`: `{article-dir}/imgs/` +- `independent` (default): `cover-image/{topic-slug}/` ``` / -├── source-{slug}.{ext} # Source files (text, images, etc.) +├── source-{slug}.{ext} # Source files ├── refs/ # Reference images (if provided) │ ├── ref-01-{slug}.{ext} -│ ├── ref-01-{slug}.md # Description file (optional) -│ ├── ref-02-{slug}.{ext} -│ ├── ref-02-{slug}.md # Description file (optional) -│ └── extracted-style.md # Verbally extracted style (if no file path) +│ └── ref-01-{slug}.md # Description file ├── prompts/cover.md # Generation prompt └── cover.png # Output image ``` -**Slug**: Extract main topic (2-4 words, kebab-case). Example: "The Future of AI" → `future-of-ai` -**Conflict**: If directory exists, append timestamp: `{topic-slug}-YYYYMMDD-HHMMSS` -**Source Files**: Copy all sources with naming `source-{slug}.{ext}` (multiple supported) +**Slug**: 2-4 words, kebab-case. Conflict: append `-YYYYMMDD-HHMMSS` ## Workflow @@ -181,20 +106,10 @@ Output directory depends on `default_output_dir` preference: ``` Cover Image Progress: - [ ] Step 0: Check preferences (EXTEND.md) ⛔ BLOCKING - - [ ] Found → load preferences → continue - - [ ] Not found → run first-time setup → MUST complete before Step 1 -- [ ] Step 1: Analyze content + determine output directory - - [ ] 1.1 Reference images ⚠️ (if provided) - - [ ] File path given → saved to refs/ ✓ - - [ ] No path → asked user OR extracted verbally - - [ ] 1.2 Output directory determined -- [ ] Step 2: Confirm options (6 dimensions) ⚠️ REQUIRED unless --quick or all specified +- [ ] Step 1: Analyze content + save refs + determine output dir +- [ ] Step 2: Confirm options (6 dimensions) ⚠️ unless --quick - [ ] Step 3: Create prompt - - [ ] References in prompt ONLY if files exist in refs/ - - [ ] Extracted style/palette appended to prompt body (if no file) - [ ] Step 4: Generate image - - [ ] 4.1 References verified before generation - - [ ] 4.2 Pass refs via --ref if skill supports AND files exist - [ ] Step 5: Completion report ``` @@ -202,153 +117,40 @@ Cover Image Progress: ``` Input → [Step 0: Preferences] ─┬─ Found → Continue - │ - └─ Not found → First-Time Setup ⛔ BLOCKING - │ - └─ Complete setup → Save EXTEND.md → 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) +Analyze + Save Refs → [Output Dir] → [Confirm: 6 Dimensions] → Prompt → Generate → Complete + ↓ + (skip if --quick or all specified) ``` -### Step 0: Load Preferences (EXTEND.md) ⛔ BLOCKING - -**Purpose**: Load user preferences or run first-time setup. - -**CRITICAL**: If EXTEND.md not found, MUST complete first-time setup before ANY other questions or steps. Do NOT proceed to content analysis, do NOT ask about reference images, do NOT ask about dimensions — ONLY complete the preferences setup first. - -Use Bash to check EXTEND.md existence (priority order): +### Step 0: Load Preferences ⛔ BLOCKING +Check EXTEND.md existence (priority: project → user): ```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" ``` | Result | Action | |--------|--------| -| Found | Read, parse, display preferences summary → Continue to Step 1 | -| Not found | ⛔ **BLOCKING**: Run first-time setup ONLY ([references/config/first-time-setup.md](references/config/first-time-setup.md)) → Complete and save EXTEND.md → Then continue to Step 1 | +| Found | Load, display summary → Continue | +| Not found | ⛔ Run first-time setup ([references/config/first-time-setup.md](references/config/first-time-setup.md)) → Save → Continue | -**Preferences Summary** (when found): - -``` -Preferences loaded from [project/user]: -• Watermark: [enabled/disabled] [content if enabled] -• Type/Palette/Rendering: [value or "auto"] -• Text: [value or "title-only"] | Mood: [value or "balanced"] -• Aspect: [default_aspect] | Output: [dir or "not set — will ask in Step 1.5"] -• Quick mode: [enabled/disabled] | Language: [value or "auto"] -``` - -**EXTEND.md Supports**: Watermark | Preferred type | Preferred palette | Preferred rendering | Preferred text | Preferred mood | Preferred font | Default aspect ratio | Default output directory | Quick mode | Custom palette definitions | Language preference - -Schema: [references/config/preferences-schema.md](references/config/preferences-schema.md) +**CRITICAL**: If not found, complete setup BEFORE any other steps or questions. ### Step 1: Analyze Content -**1.0 Detect & Save Reference Images** ⚠️ REQUIRED if images provided - -Check if user provided reference images. Handle based on input type: - -| Input Type | Action | -|------------|--------| -| Image file path provided | Copy to `refs/` subdirectory → can use `--ref` | -| Image in conversation (no path) | **ASK user for file path** with AskUserQuestion | -| User can't provide path | Extract style/palette verbally → append to prompt (NO frontmatter references) | - -**CRITICAL**: Only add `references` to prompt frontmatter if files are ACTUALLY SAVED to `refs/` directory. - -**If user provides file path**: -1. Copy to `refs/ref-NN-{slug}.{ext}` (NN = 01, 02, ...) -2. Create description: `refs/ref-NN-{slug}.md` -3. Verify files exist before proceeding - -**If user can't provide path** (extracted verbally): -1. Analyze image visually, extract: colors, style, composition -2. Create `refs/extracted-style.md` with extracted info -3. DO NOT add `references` to prompt frontmatter -4. Instead, append extracted style/colors directly to prompt text - -**Description File Format** (only when file saved): -```yaml ---- -ref_id: NN -filename: ref-NN-{slug}.{ext} -usage: direct | style | palette ---- -[User's description or auto-generated description] -``` - -| Usage | When to Use | -|-------|-------------| -| `direct` | Reference matches desired output closely | -| `style` | Extract visual style characteristics only | -| `palette` | Extract color scheme only | - -**Verification** (only for saved files): -``` -Reference Images Saved: -- ref-01-{slug}.png ✓ (can use --ref) -- ref-02-{slug}.png ✓ (can use --ref) -``` - -**Or for extracted style**: -``` -Reference Style Extracted (no file): -- Colors: #E8756D coral, #7ECFC0 mint... -- Style: minimal flat vector, clean lines... -→ Will append to prompt text (not --ref) -``` - ---- - -**1.1 Save Source Content** -- If pasted, save to `source.md` in target directory; if file path, use as-is -- **Backup rule**: If `source.md` exists, rename to `source-backup-YYYYMMDD-HHMMSS.md` - -**1.2 Content Analysis** -- Extract topic, core message, tone, keywords -- Identify visual metaphors -- Detect content type - -**1.3 Reference Image Deep Analysis** ⚠️ CRITICAL (if provided in Step 1.0) - -References are high-priority inputs. Perform deep visual analysis to extract **specific, concrete, reproducible** elements — not vague summaries. - -For each reference image, extract ALL of the following: - -| Analysis | Description | Example (good vs bad) | -|----------|-------------|----------------------| -| **Brand elements** | Logos, wordmarks, specific typography treatments | Good: "Logo uses vertical parallel lines for 'm'" / Bad: "Has a logo" | -| **Signature patterns** | Unique decorative motifs, textures, geometric patterns | Good: "Woven intersecting curves forming diamond grid" / Bad: "Has patterns" | -| **Color palette** | Exact hex values or close approximations for key colors | Good: "#2D4A3E dark teal, #F5F0E0 cream" / Bad: "Dark and light colors" | -| **Layout structure** | Specific spatial arrangement, banner placement, zone splits | Good: "Bottom 30% dark banner with branding" / Bad: "Has a banner" | -| **Typography** | Font style, weight, spacing, case, positioning | Good: "Uppercase, wide letter-spacing, handwritten ep number" / Bad: "Has text" | -| **Content/subject** | What the reference depicts | Factual description | -| **Usage recommendation** | `direct` / `style` / `palette` | Based on analysis | - -**Output format**: List each element as a bullet point that can be directly copy-pasted into a prompt as a mandatory instruction. - -**1.4 Language Detection** -- Detect source language -- Note user's input language -- Compare with EXTEND.md preference - -**1.5 Determine Output Directory** -- Per File Structure rules -- If no `default_output_dir` preference + file path input, include in Step 2 Q4 +1. **Save reference images** (if provided) → [references/workflow/reference-images.md](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 ### Step 2: Confirm Options ⚠️ -Validate all 6 dimensions + aspect ratio. Full confirmation flow: [references/workflow/confirm-options.md](references/workflow/confirm-options.md) - -**Skip Conditions**: +Full confirmation flow: [references/workflow/confirm-options.md](references/workflow/confirm-options.md) | Condition | Skipped | Still Asked | |-----------|---------|-------------| @@ -357,97 +159,24 @@ Validate all 6 dimensions + aspect ratio. Full confirmation flow: [references/wo ### Step 3: Create Prompt -**Backup rule**: If `prompts/cover.md` exists, rename to `prompts/cover-backup-YYYYMMDD-HHMMSS.md` +Save to `prompts/cover.md`. Template: [references/workflow/prompt-template.md](references/workflow/prompt-template.md) -Save to `prompts/cover.md`. Full template: [references/workflow/prompt-template.md](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}` -**CRITICAL - References in YAML Frontmatter**: - -When reference files are saved to `refs/`, **MUST add `references` field in frontmatter**: - -```yaml ---- -type: cover -palette: warm -rendering: flat-vector -references: - - ref_id: 01 - filename: refs/ref-01-podcast-thumbnail.jpg - usage: style ---- -``` - -| Rule | Action | -|------|--------| -| Files saved to `refs/` | Add to frontmatter `references` list | -| Style extracted verbally (no file) | Omit `references` field, describe in body | -| Before writing | Verify: `test -f refs/ref-NN-{slug}.{ext}` | - -**Reference Embedding**: - -| Situation | Frontmatter | Body | -|-----------|-------------|------| -| Reference file saved to `refs/` | Add to `references` ✓ | **Detailed mandatory style instructions** (see below) | -| Style extracted verbally (no file) | Omit `references` | Full style description | -| File in frontmatter but doesn't exist | ERROR - fix or remove | — | - -⚠️ **"Brief style note" is NOT sufficient.** When references are provided, the prompt body MUST contain a dedicated `# Reference Style — MUST INCORPORATE` section with: -1. Per-reference breakdown of **specific visual elements** extracted in Step 1.3 -2. Each element prefixed with "MUST" or "REQUIRED" -3. An **integration approach** describing exactly how reference elements should be composed into the cover layout (e.g., "Use a split layout: illustration area 65% + dark branded banner 35%") +**Reference elements in body** MUST be detailed, prefixed with "MUST"/"REQUIRED", with integration approach. ### Step 4: Generate Image -**4.1 Backup existing** `cover.png` → `cover-backup-YYYYMMDD-HHMMSS.png` (if regenerating) - -**4.2 Check available image generation skills**; if multiple, ask user preference - -**4.3 Process References** ⚠️ REQUIRED if references in frontmatter - -**Read `references` from prompt frontmatter** and process each entry: - -1. **Parse frontmatter** to get references list: - ```yaml - references: - - ref_id: 01 - filename: refs/ref-01-podcast-thumbnail.jpg - usage: style - ``` - -2. **VERIFY each file exists**: - ```bash - test -f refs/ref-NN-{slug}.{ext} && echo "exists" || echo "MISSING" - ``` - - If file MISSING → ERROR, fix prompt or remove from references - - If file exists → proceed with processing - -3. Process based on `usage` type: - -| Usage | Action | Example | -|-------|--------|---------| -| `direct` | Add reference path to `--ref` parameter | `--ref refs/ref-01-brand.png` | -| `style` | Analyze reference, append style traits to prompt | "Style: clean lines, gradient backgrounds..." | -| `palette` | Extract colors from reference, append to prompt | "Colors: #E8756D coral, #7ECFC0 mint..." | - -3. Check image generation skill capability: - -| Skill Supports `--ref` | Action | -|------------------------|--------| -| Yes (e.g., baoyu-image-gen with Google/OpenAI) | Pass reference images via `--ref` | -| No | If usage is `direct`, switch to a ref-capable backend (baoyu-image-gen + Google multimodal or OpenAI GPT Image edits). If unavailable, convert to text description and remove direct refs | - -**Verification**: Before generating, confirm reference processing: -``` -Reference Processing: -- ref-01-brand.png: using as direct reference ✓ -- ref-02-style.png: extracted palette ✓ -``` - -**4.4 Generate** - -1. Call selected skill with prompt file path, output path (`cover.png`), aspect ratio -2. If references with `direct` usage: use ref-capable backend and include `--ref` (recommend `baoyu-image-gen --provider google --model gemini-3-pro-image-preview` or `--provider openai --model gpt-image-1.5`) -3. On failure: auto-retry once before reporting error +1. **Backup existing** `cover.png` if regenerating +2. **Check image generation skills**; if multiple, ask preference +3. **Process references** from prompt frontmatter: + - `direct` usage → pass via `--ref` (use ref-capable backend) + - `style`/`palette` → extract traits, append to prompt +4. **Generate**: Call skill with prompt file, output path, aspect ratio +5. On failure: auto-retry once ### Step 5: Completion Report @@ -457,75 +186,48 @@ Cover Generated! Topic: [topic] Type: [type] | Palette: [palette] | Rendering: [rendering] Text: [text] | Mood: [mood] | Font: [font] | Aspect: [ratio] -Title: [title text or "visual only"] +Title: [title or "visual only"] Language: [lang] | Watermark: [enabled/disabled] -References: [N images (direct/style/palette) or "extracted style" or "none"] +References: [N images or "extracted style" or "none"] Location: [directory path] Files: ✓ source-{slug}.{ext} -[✓ refs/ref-01-{slug}.{ext} ... (if references saved)] -[✓ refs/ref-01-{slug}.md ... (description files)] -[✓ refs/extracted-style.md (if style extracted verbally)] ✓ prompts/cover.md ✓ cover.png -[✓ cover-backup-{timestamp}.png (if regenerated)] ``` ## Image Modification | Action | Steps | |--------|-------| -| **Regenerate** | Backup existing → **Update prompt file FIRST** → Regenerate with same settings | -| **Change dimension** | Backup existing → Confirm new value → **Update prompt file FIRST** → Regenerate | +| **Regenerate** | Backup → Update prompt file FIRST → Regenerate | +| **Change dimension** | Backup → Confirm new value → Update prompt → Regenerate | -**IMPORTANT**: When regenerating, ALWAYS update the prompt file (`prompts/cover.md`) FIRST before regenerating. This ensures changes are documented and reproducible. +## Composition Principles -All modifications automatically backup existing `cover.png` before regenerating. +- **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 -## Notes +## Extension Support -- Cover must be readable at small preview sizes -- Visual metaphors > literal representations -- Title: readable, impactful -- Two confirmation points: Step 0 (first-time setup) + Step 2 (6 dimensions) - 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 alias for `--text none` -- `--style` presets are backward-compatible; explicit `--palette`/`--rendering` override preset values +Custom configurations via EXTEND.md. See **Step 0** for paths. -### Reference Image Priority ⚠️ +Supports: Watermark | Preferred dimensions | Default aspect/output | Quick mode | Custom palettes | Language -When user provides reference images, they are **HIGH PRIORITY** and MUST strongly influence the generated cover: - -- **References override defaults**: If reference images conflict with preferred palette/rendering, the reference visual identity takes precedence in the prompt -- **Concrete > abstract**: Extract specific, reproducible visual elements (exact patterns, logo treatments, color hex values, layout structures) — not vague descriptions like "clean style" -- **Mandatory language**: Use "MUST", "REQUIRED", "CRITICAL" in the prompt for reference elements — generic "follow the style" is insufficient for image generation models -- **Visible in output**: After generation, verify that reference elements are actually present in the cover. If not, strengthen the prompt and regenerate - -### Composition Principles - -- **Generous whitespace**: 40-60% breathing room; avoid cluttered layouts -- **Visual anchor**: Main element centered or offset left (reserve right for title) -- **Character handling**: Simplified silhouettes or icon-style figures; NO realistic humans -- **Icon vocabulary**: Use simple, recognizable symbols (see [references/visual-elements.md](references/visual-elements.md)) - -### Title Handling - -- **Source**: Use the exact title provided by user, or extract from source content -- **Do NOT invent titles**: Stay faithful to the original -- If no title in source and user doesn't provide one, ask user to specify +Schema: [references/config/preferences-schema.md](references/config/preferences-schema.md) ## References **Dimensions**: [text.md](references/dimensions/text.md) | [mood.md](references/dimensions/mood.md) | [font.md](references/dimensions/font.md) **Palettes**: [references/palettes/](references/palettes/) **Renderings**: [references/renderings/](references/renderings/) +**Types**: [references/types.md](references/types.md) **Auto-Selection**: [references/auto-selection.md](references/auto-selection.md) **Style Presets**: [references/style-presets.md](references/style-presets.md) **Compatibility**: [references/compatibility.md](references/compatibility.md) -**Types**: [references/types.md](references/types.md) **Visual Elements**: [references/visual-elements.md](references/visual-elements.md) -**Workflow**: [confirm-options.md](references/workflow/confirm-options.md) | [prompt-template.md](references/workflow/prompt-template.md) +**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) **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) diff --git a/skills/baoyu-cover-image/references/workflow/reference-images.md b/skills/baoyu-cover-image/references/workflow/reference-images.md new file mode 100644 index 0000000..d1e57e7 --- /dev/null +++ b/skills/baoyu-cover-image/references/workflow/reference-images.md @@ -0,0 +1,86 @@ +# Reference Image Handling + +Guide for processing user-provided reference images in cover generation. + +## Input Detection + +| Input Type | Action | +|------------|--------| +| Image file path provided | Copy to `refs/` → can use `--ref` | +| Image in conversation (no path) | **ASK user for file path** with AskUserQuestion | +| User can't provide path | Extract style/palette verbally → append to prompt (NO frontmatter references) | + +**CRITICAL**: Only add `references` to prompt frontmatter if files are ACTUALLY SAVED to `refs/` directory. + +## File Saving + +**If user provides file path**: +1. Copy to `refs/ref-NN-{slug}.{ext}` (NN = 01, 02, ...) +2. Create description: `refs/ref-NN-{slug}.md` +3. Verify files exist before proceeding + +**Description File Format**: +```yaml +--- +ref_id: NN +filename: ref-NN-{slug}.{ext} +usage: direct | style | palette +--- +[User's description or auto-generated description] +``` + +| Usage | When to Use | +|-------|-------------| +| `direct` | Reference matches desired output closely | +| `style` | Extract visual style characteristics only | +| `palette` | Extract color scheme only | + +## Verbal Extraction (No File) + +When user can't provide file path: +1. Analyze image visually, extract: colors, style, composition +2. Create `refs/extracted-style.md` with extracted info +3. DO NOT add `references` to prompt frontmatter +4. Append extracted style/colors directly to prompt text + +## Deep Analysis ⚠️ CRITICAL + +References are high-priority inputs. Extract **specific, concrete, reproducible** elements: + +| Analysis | Description | Example (good vs bad) | +|----------|-------------|----------------------| +| **Brand elements** | Logos, wordmarks, specific typography | Good: "Logo uses vertical parallel lines for 'm'" / Bad: "Has a logo" | +| **Signature patterns** | Unique decorative motifs, textures | Good: "Woven intersecting curves forming diamond grid" / Bad: "Has patterns" | +| **Color palette** | Exact hex values for key colors | Good: "#2D4A3E dark teal, #F5F0E0 cream" / Bad: "Dark and light colors" | +| **Layout structure** | Specific spatial arrangement | Good: "Bottom 30% dark banner with branding" / Bad: "Has a banner" | +| **Typography** | Font style, weight, spacing, case | Good: "Uppercase, wide letter-spacing" / Bad: "Has text" | +| **Content/subject** | What the reference depicts | Factual description | +| **Usage recommendation** | `direct` / `style` / `palette` | Based on analysis | + +**Output format**: List each element as bullet that can be copy-pasted into prompt as mandatory instruction. + +## Verification Output + +**For saved files**: +``` +Reference Images Saved: +- ref-01-{slug}.png ✓ (can use --ref) +- ref-02-{slug}.png ✓ (can use --ref) +``` + +**For extracted style**: +``` +Reference Style Extracted (no file): +- Colors: #E8756D coral, #7ECFC0 mint... +- Style: minimal flat vector, clean lines... +→ Will append to prompt text (not --ref) +``` + +## Priority Rules + +When user provides references, they are **HIGH PRIORITY**: + +- **References override defaults**: If reference conflicts with preferred palette/rendering, reference takes precedence +- **Concrete > abstract**: Extract specific elements — not vague "clean style" +- **Mandatory language**: Use "MUST", "REQUIRED" in prompt for reference elements +- **Visible in output**: Verify elements are present after generation; strengthen prompt if not