refactor(skills): adapt baoyu-comic for Hermes
Port the upstream baoyu-comic skill to Hermes' tool ecosystem, matching the earlier baoyu-infographic adaptation: - metadata namespace openclaw -> hermes (+ tags, homepage) - drop EXTEND.md preferences system (references/config/ removed, workflow Step 1.1 removed) - user prompts via clarify (one question at a time) instead of AskUserQuestion batches - image generation via image_generate instead of baoyu-imagine, with aspect-ratio mapping to landscape/portrait/square - Windows/PowerShell/WSL shell snippets dropped - file I/O referenced via Hermes write_file/read_file tools - CLI-style --flags converted to natural-language options and user-intent cues (skill matching has no slash command trigger) Add PORT_NOTES.md documenting the adaptations and a sync procedure. Art-style/tone/layout reference files are preserved verbatim from upstream v1.56.1.
This commit is contained in:
61
skills/creative/baoyu-comic/PORT_NOTES.md
Normal file
61
skills/creative/baoyu-comic/PORT_NOTES.md
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
# Port Notes — baoyu-comic
|
||||||
|
|
||||||
|
Ported from [JimLiu/baoyu-skills](https://github.com/JimLiu/baoyu-skills) v1.56.1.
|
||||||
|
|
||||||
|
## Changes from upstream
|
||||||
|
|
||||||
|
### SKILL.md adaptations
|
||||||
|
|
||||||
|
| Change | Upstream | Hermes |
|
||||||
|
|--------|----------|--------|
|
||||||
|
| Metadata namespace | `openclaw` | `hermes` (with `tags` + `homepage`) |
|
||||||
|
| Trigger | Slash commands / CLI flags | Natural language skill matching |
|
||||||
|
| User config | EXTEND.md file (project/user/XDG paths) | Removed — not part of Hermes infra |
|
||||||
|
| User prompts | `AskUserQuestion` (batched) | `clarify` tool (one question at a time) |
|
||||||
|
| Image generation | baoyu-imagine (Bun/TypeScript) | `image_generate` tool |
|
||||||
|
| Platform support | Linux/macOS/Windows/WSL/PowerShell | Linux/macOS only |
|
||||||
|
| File operations | Generic instructions | Hermes file tools (`write_file`, `read_file`) |
|
||||||
|
| Runtime abstraction | `${BUN_X}` resolution | Direct `bun` invocation for `scripts/merge-to-pdf.ts` |
|
||||||
|
|
||||||
|
### Structural removals
|
||||||
|
|
||||||
|
- **`references/config/` directory** (removed entirely):
|
||||||
|
- `first-time-setup.md` — blocking first-time setup flow for EXTEND.md
|
||||||
|
- `preferences-schema.md` — EXTEND.md YAML schema
|
||||||
|
- `watermark-guide.md` — watermark config (tied to EXTEND.md)
|
||||||
|
- **Workflow Step 1.1** — "Load Preferences (EXTEND.md)" section removed from `workflow.md`; steps 1.2/1.3 renumbered to 1.1/1.2.
|
||||||
|
- **Generic "User Input Tools" and "Image Generation Tools" preambles** — SKILL.md no longer lists fallback rules for multiple possible tools; it references `clarify` and `image_generate` directly.
|
||||||
|
|
||||||
|
### SKILL.md reductions
|
||||||
|
|
||||||
|
- CLI option columns (`--art`, `--tone`, `--layout`, `--aspect`, `--lang`, `--ref`, `--storyboard-only`, `--prompts-only`, `--images-only`, `--regenerate`) converted to plain-English option descriptions.
|
||||||
|
- Preset files (`presets/*.md`) and `ohmsha-guide.md`: `` `--style X` `` / `` `--art X --tone Y` `` shorthand rewritten to `art=X, tone=Y` + natural-language references.
|
||||||
|
- `partial-workflows.md`: per-skill slash command invocations rewritten as user-intent cues.
|
||||||
|
- `auto-selection.md`: priority order dropped the EXTEND.md tier.
|
||||||
|
- `analysis-framework.md`: language-priority comment updated (user option → conversation → source).
|
||||||
|
|
||||||
|
### What was preserved verbatim
|
||||||
|
|
||||||
|
- All 6 art-style definitions (`references/art-styles/`)
|
||||||
|
- All 7 tone definitions (`references/tones/`)
|
||||||
|
- All 7 layout definitions (`references/layouts/`)
|
||||||
|
- Core templates: `character-template.md`, `storyboard-template.md`, `base-prompt.md`
|
||||||
|
- Preset bodies (only the first few intro lines adapted; special rules unchanged)
|
||||||
|
- `scripts/merge-to-pdf.ts` (Bun-compatible on Linux/macOS)
|
||||||
|
- Author, version, homepage attribution
|
||||||
|
|
||||||
|
## Syncing with upstream
|
||||||
|
|
||||||
|
To pull upstream updates:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Compare versions
|
||||||
|
curl -sL https://raw.githubusercontent.com/JimLiu/baoyu-skills/main/skills/baoyu-comic/SKILL.md | head -5
|
||||||
|
# Look for the version: line
|
||||||
|
|
||||||
|
# Diff a reference file
|
||||||
|
diff <(curl -sL https://raw.githubusercontent.com/JimLiu/baoyu-skills/main/skills/baoyu-comic/references/art-styles/manga.md) \
|
||||||
|
references/art-styles/manga.md
|
||||||
|
```
|
||||||
|
|
||||||
|
Art-style, tone, and layout reference files can usually be overwritten directly (they're upstream-verbatim). `SKILL.md`, `references/workflow.md`, `references/partial-workflows.md`, `references/auto-selection.md`, `references/analysis-framework.md`, `references/ohmsha-guide.md`, and `references/presets/*.md` must be manually merged since they contain Hermes-specific adaptations.
|
||||||
@@ -2,55 +2,38 @@
|
|||||||
name: baoyu-comic
|
name: baoyu-comic
|
||||||
description: Knowledge comic creator supporting multiple art styles and tones. Creates original educational comics with detailed panel layouts and sequential image generation. Use when user asks to create "知识漫画", "教育漫画", "biography comic", "tutorial comic", or "Logicomix-style comic".
|
description: Knowledge comic creator supporting multiple art styles and tones. Creates original educational comics with detailed panel layouts and sequential image generation. Use when user asks to create "知识漫画", "教育漫画", "biography comic", "tutorial comic", or "Logicomix-style comic".
|
||||||
version: 1.56.1
|
version: 1.56.1
|
||||||
|
author: 宝玉 (JimLiu)
|
||||||
|
license: MIT
|
||||||
metadata:
|
metadata:
|
||||||
openclaw:
|
hermes:
|
||||||
|
tags: [comic, knowledge-comic, creative, image-generation]
|
||||||
homepage: https://github.com/JimLiu/baoyu-skills#baoyu-comic
|
homepage: https://github.com/JimLiu/baoyu-skills#baoyu-comic
|
||||||
requires:
|
|
||||||
anyBins:
|
|
||||||
- bun
|
|
||||||
- npx
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Knowledge Comic Creator
|
# Knowledge Comic Creator
|
||||||
|
|
||||||
|
Adapted from [baoyu-comic](https://github.com/JimLiu/baoyu-skills) for Hermes Agent's tool ecosystem.
|
||||||
|
|
||||||
Create original knowledge comics with flexible art style × tone combinations.
|
Create original knowledge comics with flexible art style × tone combinations.
|
||||||
|
|
||||||
## User Input Tools
|
## When to Use
|
||||||
|
|
||||||
When this skill prompts the user, follow this tool-selection rule (priority order):
|
Trigger this skill when the user asks to create a knowledge/educational comic, biography comic, tutorial comic, or uses terms like "知识漫画", "教育漫画", or "Logicomix-style". The user provides content (text, file path, URL, or topic) and optionally specifies art style, tone, layout, aspect ratio, or language.
|
||||||
|
|
||||||
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:
|
|
||||||
|
|
||||||
- **Use whatever image-generation tool or skill is available** in the current runtime — e.g., Codex `imagegen`, Hermes `image_generate`, `baoyu-imagine`, or any equivalent the user has installed.
|
|
||||||
- **If multiple are available**, ask the user **once** at the start which to use (batch with any other initial questions).
|
|
||||||
- **If none are available**, tell the user and ask how to proceed.
|
|
||||||
|
|
||||||
**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`, `image_generate`, `baoyu-imagine`) above are examples — substitute the local equivalents under the same rule.
|
|
||||||
|
|
||||||
## Reference Images
|
## Reference Images
|
||||||
|
|
||||||
Users may supply reference images to guide art style, palette, scene composition, or subject. This is **separate from** the auto-generated character sheet (Step 7.1) — both can coexist: user refs guide the look, the character sheet anchors recurring character identity.
|
Users may supply reference images to guide art style, palette, scene composition, or subject. This is **separate from** the auto-generated character sheet (Step 7.1) — both can coexist: user refs guide the look, the character sheet anchors recurring character identity.
|
||||||
|
|
||||||
**Intake**: Accept via `--ref <files...>` or when the user provides file paths / pastes images in conversation.
|
**Intake**: Accept file paths when the user provides them (or pastes images in conversation).
|
||||||
- File path(s) → copy to `refs/NN-ref-{slug}.{ext}` alongside the comic output
|
- File path(s) → copy to `refs/NN-ref-{slug}.{ext}` alongside the comic output
|
||||||
- Pasted image with no path → ask the user for the path (per the User Input Tools rule above), or extract style traits verbally as a text fallback
|
- Pasted image with no path → ask the user for the path via `clarify`, or extract style traits verbally as a text fallback
|
||||||
- No reference → skip this section
|
- No reference → skip this section
|
||||||
|
|
||||||
**Usage modes** (per reference):
|
**Usage modes** (per reference):
|
||||||
|
|
||||||
| Usage | Effect |
|
| Usage | Effect |
|
||||||
|-------|--------|
|
|-------|--------|
|
||||||
| `direct` | Pass the file to the backend as a reference image on every page (or selected pages) |
|
| `direct` | Pass the file to `image_generate` as a reference image on every page (or selected pages) |
|
||||||
| `style` | Extract style traits (line treatment, texture, mood) and append to every page's prompt body |
|
| `style` | Extract style traits (line treatment, texture, mood) and append to every page's prompt body |
|
||||||
| `palette` | Extract hex colors and append to every page's prompt body |
|
| `palette` | Extract hex colors and append to every page's prompt body |
|
||||||
|
|
||||||
@@ -65,9 +48,9 @@ references:
|
|||||||
|
|
||||||
**At generation time**:
|
**At generation time**:
|
||||||
- Verify each referenced file exists on disk
|
- Verify each referenced file exists on disk
|
||||||
- If `usage: direct` AND the chosen backend accepts multiple reference images → pass both the character sheet (Step 7.2) and the user refs via the backend's ref parameter; compress images first per Step 7.1's guidance to avoid payload failures
|
- If `usage: direct` AND `image_generate` accepts multiple reference images → pass both the character sheet (Step 7.2) and the user refs; compress images first per Step 7.1's guidance to avoid payload failures
|
||||||
- If the backend accepts only one ref → prefer the character sheet for pages with recurring characters; embed user-ref traits in the prompt body instead
|
- If only one ref slot is available → prefer the character sheet for pages with recurring characters; embed user-ref traits in the prompt body instead
|
||||||
- For `style`/`palette` usage → embed extracted traits in every page's prompt text (applies regardless of backend capability)
|
- For `style`/`palette` usage → embed extracted traits in every page's prompt text
|
||||||
|
|
||||||
## Options
|
## Options
|
||||||
|
|
||||||
@@ -75,21 +58,21 @@ references:
|
|||||||
|
|
||||||
| Option | Values | Description |
|
| Option | Values | Description |
|
||||||
|--------|--------|-------------|
|
|--------|--------|-------------|
|
||||||
| `--art` | ligne-claire (default), manga, realistic, ink-brush, chalk, minimalist | Art style / rendering technique |
|
| Art | ligne-claire (default), manga, realistic, ink-brush, chalk, minimalist | Art style / rendering technique |
|
||||||
| `--tone` | neutral (default), warm, dramatic, romantic, energetic, vintage, action | Mood / atmosphere |
|
| Tone | neutral (default), warm, dramatic, romantic, energetic, vintage, action | Mood / atmosphere |
|
||||||
| `--layout` | standard (default), cinematic, dense, splash, mixed, webtoon, four-panel | Panel arrangement |
|
| Layout | standard (default), cinematic, dense, splash, mixed, webtoon, four-panel | Panel arrangement |
|
||||||
| `--aspect` | 3:4 (default, portrait), 4:3 (landscape), 16:9 (widescreen) | Page aspect ratio |
|
| Aspect | 3:4 (default, portrait), 4:3 (landscape), 16:9 (widescreen) | Page aspect ratio |
|
||||||
| `--lang` | auto (default), zh, en, ja, etc. | Output language |
|
| Language | auto (default), zh, en, ja, etc. | Output language |
|
||||||
| `--ref <files...>` | File paths | Reference images applied to every page for style / palette / scene guidance. See [Reference Images](#reference-images) above. |
|
| Refs | File paths | Reference images applied to every page for style / palette / scene guidance. See [Reference Images](#reference-images) above. |
|
||||||
|
|
||||||
### Partial Workflow Options
|
### Partial Workflow Options
|
||||||
|
|
||||||
| Option | Description |
|
| Option | Description |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
| `--storyboard-only` | Generate storyboard only, skip prompts and images |
|
| Storyboard only | Generate storyboard only, skip prompts and images |
|
||||||
| `--prompts-only` | Generate storyboard + prompts, skip images |
|
| Prompts only | Generate storyboard + prompts, skip images |
|
||||||
| `--images-only` | Generate images from existing prompts directory |
|
| Images only | Generate images from existing prompts directory |
|
||||||
| `--regenerate N` | Regenerate specific page(s) only (e.g., `3` or `2,5,8`) |
|
| Regenerate N | Regenerate specific page(s) only (e.g., `3` or `2,5,8`) |
|
||||||
|
|
||||||
Details: [references/partial-workflows.md](references/partial-workflows.md)
|
Details: [references/partial-workflows.md](references/partial-workflows.md)
|
||||||
|
|
||||||
@@ -111,20 +94,13 @@ Details: [references/partial-workflows.md](references/partial-workflows.md)
|
|||||||
|
|
||||||
- **Compatibility matrix** and **content-signal → preset** table live in [references/auto-selection.md](references/auto-selection.md). Read it before recommending combinations in Step 2.
|
- **Compatibility matrix** and **content-signal → preset** table live in [references/auto-selection.md](references/auto-selection.md). Read it before recommending combinations in Step 2.
|
||||||
|
|
||||||
## Script Directory
|
## Scripts
|
||||||
|
|
||||||
**Important**: All scripts are located in the `scripts/` subdirectory of this skill.
|
|
||||||
|
|
||||||
**Agent Execution Instructions**:
|
|
||||||
1. Determine this SKILL.md file's directory path as `{baseDir}`
|
|
||||||
2. Script path = `{baseDir}/scripts/<script-name>.ts`
|
|
||||||
3. Replace all `{baseDir}` in this document with the actual path
|
|
||||||
4. Resolve `${BUN_X}` runtime: if `bun` installed → `bun`; if `npx` available → `npx -y bun`; else suggest installing bun
|
|
||||||
|
|
||||||
**Script Reference**:
|
|
||||||
| Script | Purpose |
|
| Script | Purpose |
|
||||||
|--------|---------|
|
|--------|---------|
|
||||||
| `scripts/merge-to-pdf.ts` | Merge comic pages into PDF |
|
| `scripts/merge-to-pdf.ts` | Merge comic pages into PDF (runs with `bun`) |
|
||||||
|
|
||||||
|
Resolve `{baseDir}` as this SKILL.md's directory; script path is `{baseDir}/scripts/merge-to-pdf.ts`.
|
||||||
|
|
||||||
## File Structure
|
## File Structure
|
||||||
|
|
||||||
@@ -147,12 +123,11 @@ Output directory: `comic/{topic-slug}/`
|
|||||||
## Language Handling
|
## Language Handling
|
||||||
|
|
||||||
**Detection Priority**:
|
**Detection Priority**:
|
||||||
1. `--lang` flag (explicit)
|
1. User-specified language (explicit option)
|
||||||
2. EXTEND.md `language` setting
|
2. User's conversation language
|
||||||
3. User's conversation language
|
3. Source content language
|
||||||
4. Source content language
|
|
||||||
|
|
||||||
**Rule**: Use user's input language or saved language preference for ALL interactions:
|
**Rule**: Use user's input language for ALL interactions:
|
||||||
- Storyboard outlines and scene descriptions
|
- Storyboard outlines and scene descriptions
|
||||||
- Image generation prompts
|
- Image generation prompts
|
||||||
- User selection options and confirmations
|
- User selection options and confirmations
|
||||||
@@ -167,10 +142,8 @@ Technical terms remain in English.
|
|||||||
```
|
```
|
||||||
Comic Progress:
|
Comic Progress:
|
||||||
- [ ] Step 1: Setup & Analyze
|
- [ ] Step 1: Setup & Analyze
|
||||||
- [ ] 1.1 Preferences (EXTEND.md) ⛔ BLOCKING
|
- [ ] 1.1 Analyze content
|
||||||
- [ ] Found → load preferences → continue
|
- [ ] 1.2 Check existing directory
|
||||||
- [ ] Not found → run first-time setup → MUST complete before other steps
|
|
||||||
- [ ] 1.2 Analyze, 1.3 Check existing
|
|
||||||
- [ ] Step 2: Confirmation - Style & options ⚠️ REQUIRED
|
- [ ] Step 2: Confirmation - Style & options ⚠️ REQUIRED
|
||||||
- [ ] Step 3: Generate storyboard + characters
|
- [ ] Step 3: Generate storyboard + characters
|
||||||
- [ ] Step 4: Review outline (conditional)
|
- [ ] Step 4: Review outline (conditional)
|
||||||
@@ -178,7 +151,7 @@ Comic Progress:
|
|||||||
- [ ] Step 6: Review prompts (conditional)
|
- [ ] Step 6: Review prompts (conditional)
|
||||||
- [ ] Step 7: Generate images
|
- [ ] Step 7: Generate images
|
||||||
- [ ] 7.1 Generate character sheet (if needed) → characters/characters.png
|
- [ ] 7.1 Generate character sheet (if needed) → characters/characters.png
|
||||||
- [ ] 7.2 Generate pages (with --ref if character sheet exists)
|
- [ ] 7.2 Generate pages (with character ref if sheet exists)
|
||||||
- [ ] Step 8: Merge to PDF
|
- [ ] Step 8: Merge to PDF
|
||||||
- [ ] Step 9: Completion report
|
- [ ] Step 9: Completion report
|
||||||
```
|
```
|
||||||
@@ -186,24 +159,15 @@ Comic Progress:
|
|||||||
### Flow
|
### Flow
|
||||||
|
|
||||||
```
|
```
|
||||||
Input → [Preferences] ─┬─ Found → Continue
|
Input → Analyze → [Check Existing?] → [Confirm: Style + Reviews] → Storyboard → [Review?] → Prompts → [Review?] → Images → PDF → Complete
|
||||||
│
|
|
||||||
└─ Not found → First-Time Setup ⛔ BLOCKING
|
|
||||||
│
|
|
||||||
└─ Complete setup → Save EXTEND.md → Continue
|
|
||||||
│
|
|
||||||
┌─────────────────────────────────────────────────────────────────────┘
|
|
||||||
↓
|
|
||||||
Analyze → [Check Existing?] → [Confirm: Style + Reviews] → Storyboard → [Review?] → Prompts → [Review?] → Images → PDF → Complete
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Step Summary
|
### Step Summary
|
||||||
|
|
||||||
| Step | Action | Key Output |
|
| Step | Action | Key Output |
|
||||||
|------|--------|------------|
|
|------|--------|------------|
|
||||||
| 1.1 | Load EXTEND.md preferences ⛔ BLOCKING if not found | Config loaded |
|
| 1.1 | Analyze content | `analysis.md` |
|
||||||
| 1.2 | Analyze content | `analysis.md` |
|
| 1.2 | Check existing directory | Handle conflicts |
|
||||||
| 1.3 | Check existing directory | Handle conflicts |
|
|
||||||
| 2 | Confirm style, focus, audience, reviews | User preferences |
|
| 2 | Confirm style, focus, audience, reviews | User preferences |
|
||||||
| 3 | Generate storyboard + characters | `storyboard.md`, `characters/` |
|
| 3 | Generate storyboard + characters | `storyboard.md`, `characters/` |
|
||||||
| 4 | Review outline (if requested) | User approval |
|
| 4 | Review outline (if requested) | User approval |
|
||||||
@@ -214,42 +178,40 @@ Analyze → [Check Existing?] → [Confirm: Style + Reviews] → Storyboard →
|
|||||||
| 8 | Merge to PDF | `{slug}.pdf` |
|
| 8 | Merge to PDF | `{slug}.pdf` |
|
||||||
| 9 | Completion report | Summary |
|
| 9 | Completion report | Summary |
|
||||||
|
|
||||||
|
### User Questions
|
||||||
|
|
||||||
|
Use the `clarify` tool to confirm options. Since `clarify` handles one question at a time, ask the most important question first and proceed sequentially. See [references/workflow.md](references/workflow.md) for the full Step 2 question set.
|
||||||
|
|
||||||
### Step 7: Image Generation
|
### Step 7: Image Generation
|
||||||
|
|
||||||
**Pick a backend once per session** using the `## Image Generation Tools` rule at the top. If the backend is a repo skill (e.g., `baoyu-imagine`), read its `SKILL.md` and use its documented interface rather than its scripts.
|
Use Hermes' built-in `image_generate` tool for all image rendering.
|
||||||
|
|
||||||
**7.1 Character sheet** — generate it (to `characters/characters.png`, aspect `4:3`) when the comic is multi-page with recurring characters. Skip for simple presets (e.g., four-panel minimalist) or single-page comics. Compress to JPEG before use-as-`--ref` (`sips -s format jpeg -s formatOptions 80 …` on macOS, `pngquant --quality=65-80 …` elsewhere) to avoid payload failures. The prompt file at `characters/characters.md` must exist before invoking the backend.
|
**Prompt file requirement (hard)**: write each image's full, final prompt to a standalone file under `prompts/` (naming: `NN-{type}-[slug].md`) BEFORE calling `image_generate`. The prompt file is the reproducibility record.
|
||||||
|
|
||||||
**7.2 Pages** — each page's prompt MUST already be at `prompts/NN-{cover|page}-[slug].md` before invoking the backend; the file is the reproducibility record. Strategy depends on the character sheet:
|
**Aspect ratio mapping** — `image_generate` supports `landscape`, `portrait`, and `square`. Map as follows:
|
||||||
|
|
||||||
| Character sheet | Backend `--ref` | Strategy |
|
| Storyboard ratio | `image_generate` format |
|
||||||
|-----------------|-----------------|----------|
|
|------------------|-------------------------|
|
||||||
| Exists | Supported | Pass sheet as `--ref` on every page |
|
| `3:4`, `9:16`, `2:3` | `portrait` |
|
||||||
|
| `4:3`, `16:9`, `3:2` | `landscape` |
|
||||||
|
| `1:1` | `square` |
|
||||||
|
|
||||||
|
**7.1 Character sheet** — generate it (to `characters/characters.png`, aspect `landscape`) when the comic is multi-page with recurring characters. Skip for simple presets (e.g., four-panel minimalist) or single-page comics. Compress to JPEG before using as a reference (`sips -s format jpeg -s formatOptions 80 …` on macOS, `pngquant --quality=65-80 …` on Linux) to avoid payload failures. The prompt file at `characters/characters.md` must exist before invoking `image_generate`.
|
||||||
|
|
||||||
|
**7.2 Pages** — each page's prompt MUST already be at `prompts/NN-{cover|page}-[slug].md` before invoking `image_generate`. Strategy depends on the character sheet:
|
||||||
|
|
||||||
|
| Character sheet | `image_generate` reference support | Strategy |
|
||||||
|
|-----------------|------------------------------------|----------|
|
||||||
|
| Exists | Supported | Pass sheet as reference image on every page |
|
||||||
| Exists | Not supported | Prepend character descriptions to every prompt file |
|
| Exists | Not supported | Prepend character descriptions to every prompt file |
|
||||||
| Skipped | — | All descriptions inline in prompt |
|
| Skipped | — | All descriptions inline in prompt |
|
||||||
|
|
||||||
**Backup rule**: existing `prompts/…md` and `…png` files → rename with `-backup-YYYYMMDD-HHMMSS` suffix before regenerating. Aspect ratio from storyboard (default `3:4`; preset may override).
|
**Backup rule**: existing `prompts/…md` and `…png` files → rename with `-backup-YYYYMMDD-HHMMSS` suffix (use `write_file` / standard shell rename) before regenerating. Aspect ratio from storyboard (default `3:4`; preset may override).
|
||||||
|
|
||||||
**`--ref` failure recovery**: compress sheet → retry → still fails → drop `--ref` and embed character descriptions in the prompt text.
|
**Reference failure recovery**: compress sheet → retry → still fails → drop the reference and embed character descriptions in the prompt text.
|
||||||
|
|
||||||
Full step-by-step workflow (analysis, storyboard, review gates, regeneration variants): [references/workflow.md](references/workflow.md).
|
Full step-by-step workflow (analysis, storyboard, review gates, regeneration variants): [references/workflow.md](references/workflow.md).
|
||||||
|
|
||||||
### EXTEND.md Paths ⛔ BLOCKING
|
|
||||||
|
|
||||||
If EXTEND.md is not found, first-time setup is **blocking** — complete it before any content analysis or style/tone questions.
|
|
||||||
|
|
||||||
| Priority | Path | Scope |
|
|
||||||
|----------|------|-------|
|
|
||||||
| 1 | `.baoyu-skills/baoyu-comic/EXTEND.md` | Project |
|
|
||||||
| 2 | `$HOME/.baoyu-skills/baoyu-comic/EXTEND.md` | User home |
|
|
||||||
|
|
||||||
| Result | Action |
|
|
||||||
|--------|--------|
|
|
||||||
| Found | Read, parse, display summary → continue |
|
|
||||||
| Not found | ⛔ Run first-time setup ([references/config/first-time-setup.md](references/config/first-time-setup.md)) → save EXTEND.md → continue |
|
|
||||||
|
|
||||||
**EXTEND.md supports**: watermark, preferred art/tone/layout, custom style definitions, character presets, language preference. Schema: [references/config/preferences-schema.md](references/config/preferences-schema.md).
|
|
||||||
|
|
||||||
## References
|
## References
|
||||||
|
|
||||||
**Core Templates**:
|
**Core Templates**:
|
||||||
@@ -269,29 +231,22 @@ If EXTEND.md is not found, first-time setup is **blocking** — complete it befo
|
|||||||
- [auto-selection.md](references/auto-selection.md) - Content signal analysis
|
- [auto-selection.md](references/auto-selection.md) - Content signal analysis
|
||||||
- [partial-workflows.md](references/partial-workflows.md) - Partial workflow options
|
- [partial-workflows.md](references/partial-workflows.md) - Partial workflow options
|
||||||
|
|
||||||
**Config**:
|
|
||||||
- [config/preferences-schema.md](references/config/preferences-schema.md) - EXTEND.md schema
|
|
||||||
- [config/first-time-setup.md](references/config/first-time-setup.md) - First-time setup
|
|
||||||
- [config/watermark-guide.md](references/config/watermark-guide.md) - Watermark configuration
|
|
||||||
|
|
||||||
## Page Modification
|
## Page Modification
|
||||||
|
|
||||||
| Action | Steps |
|
| Action | Steps |
|
||||||
|--------|-------|
|
|--------|-------|
|
||||||
| **Edit** | **Update prompt file FIRST** → `--regenerate N` → Regenerate PDF |
|
| **Edit** | **Update prompt file FIRST** → regenerate image → regenerate PDF |
|
||||||
| **Add** | Create prompt at position → Generate with character ref → Renumber subsequent → Update storyboard → Regenerate PDF |
|
| **Add** | Create prompt at position → generate with character ref → renumber subsequent → update storyboard → regenerate PDF |
|
||||||
| **Delete** | Remove files → Renumber subsequent → Update storyboard → Regenerate PDF |
|
| **Delete** | Remove files → renumber subsequent → update storyboard → regenerate PDF |
|
||||||
|
|
||||||
**IMPORTANT**: When updating pages, ALWAYS update the prompt file (`prompts/NN-{cover|page}-[slug].md`) FIRST before regenerating. This ensures changes are documented and reproducible.
|
**IMPORTANT**: When updating pages, ALWAYS update the prompt file (`prompts/NN-{cover|page}-[slug].md`) FIRST before regenerating. This ensures changes are documented and reproducible.
|
||||||
|
|
||||||
## Notes
|
## Pitfalls
|
||||||
|
|
||||||
- Image generation: 10-30 seconds per page
|
- Image generation: 10-30 seconds per page; auto-retry once on failure
|
||||||
- Auto-retry once on generation failure
|
|
||||||
- Use stylized alternatives for sensitive public figures
|
- Use stylized alternatives for sensitive public figures
|
||||||
- Maintain style consistency via session ID
|
|
||||||
- **Step 2 confirmation required** - do not skip
|
- **Step 2 confirmation required** - do not skip
|
||||||
- **Steps 4/6 conditional** - only if user requested in Step 2
|
- **Steps 4/6 conditional** - only if user requested in Step 2
|
||||||
- **Step 7.1 character sheet** - recommended for multi-page comics, optional for simple presets
|
- **Step 7.1 character sheet** - recommended for multi-page comics, optional for simple presets
|
||||||
- **Step 7.2 character reference** - use `--ref` if sheet exists; compress/convert on failure; fall back to prompt-only
|
- **Step 7.2 character reference** - pass sheet as reference if it exists; compress/convert on failure; fall back to prompt-only
|
||||||
- Watermark/language configured once in EXTEND.md
|
- **Strip secrets** — scan source content for API keys, tokens, or credentials before writing any output file
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ title: "Alan Turing: The Father of Computing"
|
|||||||
topic: alan-turing-biography
|
topic: alan-turing-biography
|
||||||
time_span: 1912-1954
|
time_span: 1912-1954
|
||||||
source_language: en
|
source_language: en
|
||||||
user_language: zh # From EXTEND.md or detected
|
user_language: zh # User-specified or detected from conversation
|
||||||
aspect_ratio: "3:4"
|
aspect_ratio: "3:4"
|
||||||
recommended_page_count: 16
|
recommended_page_count: 16
|
||||||
recommended_art: ligne-claire # ligne-claire|manga|realistic|ink-brush|chalk
|
recommended_art: ligne-claire # ligne-claire|manga|realistic|ink-brush|chalk
|
||||||
@@ -161,7 +161,7 @@ recommended_layout: mixed # standard|cinematic|dense|splash|mixed|webtoon
|
|||||||
| Field | Description |
|
| Field | Description |
|
||||||
|-------|-------------|
|
|-------|-------------|
|
||||||
| `source_language` | Detected language of source content |
|
| `source_language` | Detected language of source content |
|
||||||
| `user_language` | Output language for comic (from EXTEND.md > --lang > source_language) |
|
| `user_language` | Output language for comic (user-specified option > conversation language > source_language) |
|
||||||
|
|
||||||
## Analysis Checklist
|
## Analysis Checklist
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,6 @@ Art Style × Tone combinations work best when matched appropriately:
|
|||||||
|
|
||||||
## Priority Order
|
## Priority Order
|
||||||
|
|
||||||
1. User-specified options (`--art`, `--tone`, `--style`)
|
1. User-specified options (art / tone / style)
|
||||||
2. EXTEND.md defaults
|
2. Content signal analysis → auto-selection
|
||||||
3. Content signal analysis → auto-selection
|
3. Fallback: ligne-claire + neutral + standard
|
||||||
4. Fallback: ligne-claire + neutral + standard
|
|
||||||
|
|||||||
@@ -1,154 +0,0 @@
|
|||||||
---
|
|
||||||
name: first-time-setup
|
|
||||||
description: First-time setup flow for baoyu-comic preferences
|
|
||||||
---
|
|
||||||
|
|
||||||
# First-Time Setup
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
|
|
||||||
When no EXTEND.md is found, guide user through preference setup.
|
|
||||||
|
|
||||||
**⛔ BLOCKING OPERATION**: This setup MUST complete before ANY other workflow steps. Do NOT:
|
|
||||||
- Ask about content/source material
|
|
||||||
- Ask about art style or tone
|
|
||||||
- Ask about layout preferences
|
|
||||||
- Proceed to content analysis
|
|
||||||
|
|
||||||
ONLY ask the questions in this setup flow, save EXTEND.md, then continue.
|
|
||||||
|
|
||||||
## Setup Flow
|
|
||||||
|
|
||||||
```
|
|
||||||
No EXTEND.md found
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
┌─────────────────────┐
|
|
||||||
│ AskUserQuestion │
|
|
||||||
│ (all questions) │
|
|
||||||
└─────────────────────┘
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
┌─────────────────────┐
|
|
||||||
│ Create EXTEND.md │
|
|
||||||
└─────────────────────┘
|
|
||||||
│
|
|
||||||
▼
|
|
||||||
Continue to Step 1
|
|
||||||
```
|
|
||||||
|
|
||||||
## Questions
|
|
||||||
|
|
||||||
**Language**: Use user's input language or preferred language for all questions. Do not always use English.
|
|
||||||
|
|
||||||
Use single AskUserQuestion with multiple questions (AskUserQuestion auto-adds "Other" option):
|
|
||||||
|
|
||||||
### Question 1: Watermark
|
|
||||||
|
|
||||||
```
|
|
||||||
header: "Watermark"
|
|
||||||
question: "Watermark text for generated comic pages? Type your watermark content (e.g., name, @handle)"
|
|
||||||
options:
|
|
||||||
- label: "No watermark (Recommended)"
|
|
||||||
description: "No watermark, can enable later in EXTEND.md"
|
|
||||||
```
|
|
||||||
|
|
||||||
Position defaults to bottom-right.
|
|
||||||
|
|
||||||
### Question 2: Preferred Art Style
|
|
||||||
|
|
||||||
```
|
|
||||||
header: "Art"
|
|
||||||
question: "Default art style preference? Or type another style name"
|
|
||||||
options:
|
|
||||||
- label: "Auto-select (Recommended)"
|
|
||||||
description: "Auto-select based on content analysis"
|
|
||||||
- label: "ligne-claire"
|
|
||||||
description: "Uniform lines, flat colors, European comic (Tintin style)"
|
|
||||||
- label: "manga"
|
|
||||||
description: "Japanese manga style, expressive eyes and emotions"
|
|
||||||
- label: "realistic"
|
|
||||||
description: "Digital painting, sophisticated and professional"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Question 3: Preferred Tone
|
|
||||||
|
|
||||||
```
|
|
||||||
header: "Tone"
|
|
||||||
question: "Default tone/mood preference?"
|
|
||||||
options:
|
|
||||||
- label: "Auto-select (Recommended)"
|
|
||||||
description: "Auto-select based on content signals"
|
|
||||||
- label: "neutral"
|
|
||||||
description: "Balanced, rational, educational"
|
|
||||||
- label: "warm"
|
|
||||||
description: "Nostalgic, personal, comforting"
|
|
||||||
- label: "dramatic"
|
|
||||||
description: "High contrast, intense, powerful"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Question 4: Language
|
|
||||||
|
|
||||||
```
|
|
||||||
header: "Language"
|
|
||||||
question: "Output language for comic text?"
|
|
||||||
options:
|
|
||||||
- label: "Auto-detect (Recommended)"
|
|
||||||
description: "Match source content language"
|
|
||||||
- label: "zh"
|
|
||||||
description: "Chinese (中文)"
|
|
||||||
- label: "en"
|
|
||||||
description: "English"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Question 5: Save Location
|
|
||||||
|
|
||||||
```
|
|
||||||
header: "Save"
|
|
||||||
question: "Where to save preferences?"
|
|
||||||
options:
|
|
||||||
- label: "Project"
|
|
||||||
description: ".baoyu-skills/ (this project only)"
|
|
||||||
- label: "User"
|
|
||||||
description: "~/.baoyu-skills/ (all projects)"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Save Locations
|
|
||||||
|
|
||||||
| Choice | Path | Scope |
|
|
||||||
|--------|------|-------|
|
|
||||||
| Project | `.baoyu-skills/baoyu-comic/EXTEND.md` | Current project |
|
|
||||||
| User | `~/.baoyu-skills/baoyu-comic/EXTEND.md` | All projects |
|
|
||||||
|
|
||||||
## After Setup
|
|
||||||
|
|
||||||
1. Create directory if needed
|
|
||||||
2. Write EXTEND.md with frontmatter
|
|
||||||
3. Confirm: "Preferences saved to [path]"
|
|
||||||
4. Continue to Step 1
|
|
||||||
|
|
||||||
## EXTEND.md Template
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
---
|
|
||||||
version: 2
|
|
||||||
watermark:
|
|
||||||
enabled: [true/false]
|
|
||||||
content: "[user input or empty]"
|
|
||||||
position: bottom-right
|
|
||||||
opacity: 0.5
|
|
||||||
preferred_art: [selected art style or null]
|
|
||||||
preferred_tone: [selected tone or null]
|
|
||||||
preferred_layout: null
|
|
||||||
preferred_aspect: null
|
|
||||||
language: [selected or null]
|
|
||||||
character_presets: []
|
|
||||||
---
|
|
||||||
```
|
|
||||||
|
|
||||||
## Modifying Preferences Later
|
|
||||||
|
|
||||||
Users can edit EXTEND.md directly or run setup again:
|
|
||||||
- Delete EXTEND.md to trigger setup
|
|
||||||
- Edit YAML frontmatter for quick changes
|
|
||||||
- Full schema: `config/preferences-schema.md`
|
|
||||||
@@ -1,156 +0,0 @@
|
|||||||
---
|
|
||||||
name: preferences-schema
|
|
||||||
description: EXTEND.md YAML schema for baoyu-comic user preferences
|
|
||||||
---
|
|
||||||
|
|
||||||
# Preferences Schema
|
|
||||||
|
|
||||||
## Full Schema
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
---
|
|
||||||
version: 2
|
|
||||||
|
|
||||||
watermark:
|
|
||||||
enabled: false
|
|
||||||
content: ""
|
|
||||||
position: bottom-right # bottom-right|bottom-left|bottom-center|top-right
|
|
||||||
|
|
||||||
preferred_art: null # ligne-claire|manga|realistic|ink-brush|chalk|minimalist
|
|
||||||
preferred_tone: null # neutral|warm|dramatic|romantic|energetic|vintage|action
|
|
||||||
preferred_layout: null # standard|cinematic|dense|splash|mixed|webtoon|four-panel
|
|
||||||
preferred_aspect: null # 3:4|4:3|16:9
|
|
||||||
|
|
||||||
language: null # zh|en|ja|ko|auto
|
|
||||||
|
|
||||||
character_presets:
|
|
||||||
- name: my-characters
|
|
||||||
roles:
|
|
||||||
learner: "Name"
|
|
||||||
mentor: "Name"
|
|
||||||
challenge: "Name"
|
|
||||||
support: "Name"
|
|
||||||
---
|
|
||||||
```
|
|
||||||
|
|
||||||
## Field Reference
|
|
||||||
|
|
||||||
| Field | Type | Default | Description |
|
|
||||||
|-------|------|---------|-------------|
|
|
||||||
| `version` | int | 2 | Schema version |
|
|
||||||
| `watermark.enabled` | bool | false | Enable watermark |
|
|
||||||
| `watermark.content` | string | "" | Watermark text (@username or custom) |
|
|
||||||
| `watermark.position` | enum | bottom-right | Position on image |
|
|
||||||
| `preferred_art` | string | null | Art style (ligne-claire, manga, realistic, ink-brush, chalk, minimalist) |
|
|
||||||
| `preferred_tone` | string | null | Tone (neutral, warm, dramatic, romantic, energetic, vintage, action) |
|
|
||||||
| `preferred_layout` | string | null | Layout preference or null |
|
|
||||||
| `preferred_aspect` | string | null | Aspect ratio (3:4, 4:3, 16:9) |
|
|
||||||
| `language` | string | null | Output language (null = auto-detect) |
|
|
||||||
| `character_presets` | array | [] | Preset character roles for styles like ohmsha |
|
|
||||||
|
|
||||||
## Art Style Options
|
|
||||||
|
|
||||||
| Value | 中文 | Description |
|
|
||||||
|-------|------|-------------|
|
|
||||||
| `ligne-claire` | 清线 | Uniform lines, flat colors, European comic tradition |
|
|
||||||
| `manga` | 日漫 | Large eyes, manga conventions, expressive emotions |
|
|
||||||
| `realistic` | 写实 | Digital painting, realistic proportions |
|
|
||||||
| `ink-brush` | 水墨 | Chinese brush strokes, ink wash effects |
|
|
||||||
| `chalk` | 粉笔 | Chalkboard aesthetic, hand-drawn warmth |
|
|
||||||
| `minimalist` | 极简 | Clean black line art, limited spot color, stick-figure characters |
|
|
||||||
|
|
||||||
## Tone Options
|
|
||||||
|
|
||||||
| Value | 中文 | Description |
|
|
||||||
|-------|------|-------------|
|
|
||||||
| `neutral` | 中性 | Balanced, rational, educational |
|
|
||||||
| `warm` | 温馨 | Nostalgic, personal, comforting |
|
|
||||||
| `dramatic` | 戏剧 | High contrast, intense, powerful |
|
|
||||||
| `romantic` | 浪漫 | Soft, beautiful, decorative elements |
|
|
||||||
| `energetic` | 活力 | Bright, dynamic, exciting |
|
|
||||||
| `vintage` | 复古 | Historical, aged, period authenticity |
|
|
||||||
| `action` | 动作 | Speed lines, impact effects, combat |
|
|
||||||
|
|
||||||
## Position Options
|
|
||||||
|
|
||||||
| Value | Description |
|
|
||||||
|-------|-------------|
|
|
||||||
| `bottom-right` | Lower right corner (default, works with most panel layouts) |
|
|
||||||
| `bottom-left` | Lower left corner |
|
|
||||||
| `bottom-center` | Bottom center (good for webtoon vertical scroll) |
|
|
||||||
| `top-right` | Upper right corner (avoid - conflicts with page numbers) |
|
|
||||||
|
|
||||||
## Character Preset Fields
|
|
||||||
|
|
||||||
| Field | Required | Description |
|
|
||||||
|-------|----------|-------------|
|
|
||||||
| `name` | Yes | Unique preset identifier |
|
|
||||||
| `roles.learner` | No | Character representing the learner/protagonist |
|
|
||||||
| `roles.mentor` | No | Character representing the teacher/guide |
|
|
||||||
| `roles.challenge` | No | Character representing obstacles/antagonist |
|
|
||||||
| `roles.support` | No | Character providing support/comic relief |
|
|
||||||
|
|
||||||
## Example: Minimal Preferences
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
---
|
|
||||||
version: 2
|
|
||||||
watermark:
|
|
||||||
enabled: true
|
|
||||||
content: "@myusername"
|
|
||||||
preferred_art: ligne-claire
|
|
||||||
preferred_tone: neutral
|
|
||||||
---
|
|
||||||
```
|
|
||||||
|
|
||||||
## Example: Full Preferences
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
---
|
|
||||||
version: 2
|
|
||||||
watermark:
|
|
||||||
enabled: true
|
|
||||||
content: "@comicstudio"
|
|
||||||
position: bottom-right
|
|
||||||
|
|
||||||
preferred_art: manga
|
|
||||||
preferred_tone: neutral
|
|
||||||
|
|
||||||
preferred_layout: webtoon
|
|
||||||
|
|
||||||
preferred_aspect: "3:4"
|
|
||||||
|
|
||||||
language: zh
|
|
||||||
|
|
||||||
character_presets:
|
|
||||||
- name: tech-tutorial
|
|
||||||
roles:
|
|
||||||
learner: "小明"
|
|
||||||
mentor: "教授"
|
|
||||||
challenge: "难题怪"
|
|
||||||
support: "小助手"
|
|
||||||
- name: doraemon
|
|
||||||
roles:
|
|
||||||
learner: "大雄"
|
|
||||||
mentor: "哆啦A梦"
|
|
||||||
challenge: "胖虎"
|
|
||||||
support: "静香"
|
|
||||||
---
|
|
||||||
```
|
|
||||||
|
|
||||||
## Migration from v1
|
|
||||||
|
|
||||||
If you have a v1 preferences file with `preferred_style`, migrate as follows:
|
|
||||||
|
|
||||||
| Old `preferred_style.name` | New `preferred_art` | New `preferred_tone` |
|
|
||||||
|---------------------------|---------------------|---------------------|
|
|
||||||
| classic | ligne-claire | neutral |
|
|
||||||
| dramatic | ligne-claire | dramatic |
|
|
||||||
| warm | ligne-claire | warm |
|
|
||||||
| sepia | realistic | vintage |
|
|
||||||
| vibrant | manga | energetic |
|
|
||||||
| ohmsha | manga | neutral |
|
|
||||||
| realistic | realistic | neutral |
|
|
||||||
| wuxia | ink-brush | action |
|
|
||||||
| shoujo | manga | romantic |
|
|
||||||
| chalkboard | chalk | neutral |
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
---
|
|
||||||
name: watermark-guide
|
|
||||||
description: Watermark configuration guide for baoyu-comic
|
|
||||||
---
|
|
||||||
|
|
||||||
# Watermark Guide
|
|
||||||
|
|
||||||
## Position Diagram
|
|
||||||
|
|
||||||
```
|
|
||||||
┌─────────────────────────────┐
|
|
||||||
│ [top-right]│ ← Avoid (conflicts with page numbers)
|
|
||||||
│ │
|
|
||||||
│ │
|
|
||||||
│ COMIC PAGE CONTENT │
|
|
||||||
│ │
|
|
||||||
│ │
|
|
||||||
│[bottom-left][bottom-center][bottom-right]│
|
|
||||||
└─────────────────────────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
## Position Recommendations
|
|
||||||
|
|
||||||
| Position | Best For | Avoid When |
|
|
||||||
|----------|----------|------------|
|
|
||||||
| `bottom-right` | Default choice, works with most panel layouts | Key panel in bottom-right |
|
|
||||||
| `bottom-left` | Right-heavy layouts | Key panel in bottom-left |
|
|
||||||
| `bottom-center` | Webtoon vertical scroll, centered designs | Text-heavy bottom area |
|
|
||||||
| `top-right` | **Not recommended for comics** | Always - conflicts with page numbers |
|
|
||||||
|
|
||||||
## Content Format
|
|
||||||
|
|
||||||
| Format | Example | Style |
|
|
||||||
|--------|---------|-------|
|
|
||||||
| Handle | `@username` | Social media style |
|
|
||||||
| Text | `Studio Name` | Professional branding |
|
|
||||||
| Chinese | `漫画工作室` | Chinese market |
|
|
||||||
| Initials | `ABC` | Minimal, clean |
|
|
||||||
|
|
||||||
## Best Practices for Comics
|
|
||||||
|
|
||||||
1. **Panel-aware placement**: Avoid placing over speech bubbles or key action
|
|
||||||
2. **Consistency**: Use same watermark across all pages in comic
|
|
||||||
3. **Size**: Keep subtle - should not distract from storytelling
|
|
||||||
4. **Style matching**: Watermark style should complement comic's visual style
|
|
||||||
5. **Webtoon special**: Use `bottom-center` for vertical scroll format
|
|
||||||
|
|
||||||
## Prompt Integration
|
|
||||||
|
|
||||||
When watermark is enabled, add to image generation prompt:
|
|
||||||
|
|
||||||
```
|
|
||||||
Include a subtle watermark "[content]" positioned at [position].
|
|
||||||
The watermark should be legible but not distracting from the comic panels
|
|
||||||
and storytelling. Ensure watermark does not overlap speech bubbles or key action.
|
|
||||||
```
|
|
||||||
|
|
||||||
## Common Issues
|
|
||||||
|
|
||||||
| Issue | Solution |
|
|
||||||
|-------|----------|
|
|
||||||
| Watermark invisible on dark panels | Adjust contrast or add subtle outline |
|
|
||||||
| Watermark overlaps speech bubble | Change position or lower on page |
|
|
||||||
| Watermark inconsistent across pages | Use session ID for consistency |
|
|
||||||
| Watermark too prominent | Change position or reduce size |
|
|
||||||
| Conflicts with page number | Never use top-right position |
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# Ohmsha Manga Guide Style
|
# Ohmsha Manga Guide Style
|
||||||
|
|
||||||
Guidelines for `--style ohmsha` educational manga comics.
|
Guidelines for educational manga comics using the `ohmsha` preset.
|
||||||
|
|
||||||
## Character Setup
|
## Character Setup
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@ Guidelines for `--style ohmsha` educational manga comics.
|
|||||||
| Mentor (Role B) | 哆啦A梦 | Knowledgeable, patient, uses gadgets as technical metaphors |
|
| Mentor (Role B) | 哆啦A梦 | Knowledgeable, patient, uses gadgets as technical metaphors |
|
||||||
| Antagonist (Role C, optional) | 胖虎 | Represents misunderstanding, or "noise" in the data |
|
| Antagonist (Role C, optional) | 胖虎 | Represents misunderstanding, or "noise" in the data |
|
||||||
|
|
||||||
Custom characters: `--characters "Student:小明,Mentor:教授,Antagonist:Bug怪"`
|
Custom characters: ask the user for role → name mappings (e.g., `Student:小明, Mentor:教授, Antagonist:Bug怪`).
|
||||||
|
|
||||||
## Character Reference Sheet Style
|
## Character Reference Sheet Style
|
||||||
|
|
||||||
|
|||||||
@@ -1,25 +1,23 @@
|
|||||||
# Partial Workflows
|
# Partial Workflows
|
||||||
|
|
||||||
Options to run specific parts of the workflow.
|
Options to run specific parts of the workflow. Trigger these via natural language (e.g., "just the storyboard", "regenerate page 3").
|
||||||
|
|
||||||
## Options Summary
|
## Options Summary
|
||||||
|
|
||||||
| Option | Steps Executed | Output |
|
| Option | Steps Executed | Output |
|
||||||
|--------|----------------|--------|
|
|--------|----------------|--------|
|
||||||
| `--storyboard-only` | 1-3 | `storyboard.md` + `characters/` |
|
| Storyboard only | 1-3 | `storyboard.md` + `characters/` |
|
||||||
| `--prompts-only` | 1-5 | + `prompts/*.md` |
|
| Prompts only | 1-5 | + `prompts/*.md` |
|
||||||
| `--images-only` | 7-9 | + images + PDF |
|
| Images only | 7-9 | + images + PDF |
|
||||||
| `--regenerate N` | 7 (partial) | Specific page(s) + PDF |
|
| Regenerate N | 7 (partial) | Specific page(s) + PDF |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Using `--storyboard-only`
|
## Storyboard-only
|
||||||
|
|
||||||
Generate storyboard and characters without prompts or images:
|
Generate storyboard and characters without prompts or images.
|
||||||
|
|
||||||
```bash
|
**User cue**: "storyboard only", "just the outline", "don't generate images yet".
|
||||||
/baoyu-comic content.md --storyboard-only
|
|
||||||
```
|
|
||||||
|
|
||||||
**Workflow**: Steps 1-3 only (stop after storyboard + characters)
|
**Workflow**: Steps 1-3 only (stop after storyboard + characters)
|
||||||
|
|
||||||
@@ -35,13 +33,11 @@ Generate storyboard and characters without prompts or images:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Using `--prompts-only`
|
## Prompts-only
|
||||||
|
|
||||||
Generate storyboard, characters, and prompts without images:
|
Generate storyboard, characters, and prompts without images.
|
||||||
|
|
||||||
```bash
|
**User cue**: "prompts only", "write the prompts but don't generate yet".
|
||||||
/baoyu-comic content.md --prompts-only
|
|
||||||
```
|
|
||||||
|
|
||||||
**Workflow**: Steps 1-5 (generate prompts, skip images)
|
**Workflow**: Steps 1-5 (generate prompts, skip images)
|
||||||
|
|
||||||
@@ -58,13 +54,11 @@ Generate storyboard, characters, and prompts without images:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Using `--images-only`
|
## Images-only
|
||||||
|
|
||||||
Generate images from existing prompts (starts at Step 7):
|
Generate images from existing prompts (starts at Step 7).
|
||||||
|
|
||||||
```bash
|
**User cue**: "generate images from existing prompts", "run the images now" (pointing at an existing `comic/topic-slug/` directory).
|
||||||
/baoyu-comic comic/topic-slug/ --images-only
|
|
||||||
```
|
|
||||||
|
|
||||||
**Workflow**: Skip to Step 7, then 8-9
|
**Workflow**: Skip to Step 7, then 8-9
|
||||||
|
|
||||||
@@ -85,29 +79,20 @@ Generate images from existing prompts (starts at Step 7):
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Using `--regenerate`
|
## Regenerate
|
||||||
|
|
||||||
Regenerate specific pages only:
|
Regenerate specific pages only.
|
||||||
|
|
||||||
```bash
|
**User cue**: "regenerate page 3", "redo pages 2, 5, 8", "regenerate the cover".
|
||||||
# Single page
|
|
||||||
/baoyu-comic comic/topic-slug/ --regenerate 3
|
|
||||||
|
|
||||||
# Multiple pages
|
|
||||||
/baoyu-comic comic/topic-slug/ --regenerate 2,5,8
|
|
||||||
|
|
||||||
# Cover page
|
|
||||||
/baoyu-comic comic/topic-slug/ --regenerate 0
|
|
||||||
```
|
|
||||||
|
|
||||||
**Workflow**:
|
**Workflow**:
|
||||||
1. Read existing prompts for specified pages
|
1. Read existing prompts for specified pages
|
||||||
2. Regenerate images only for those pages
|
2. Regenerate images only for those pages via `image_generate`
|
||||||
3. Regenerate PDF
|
3. Regenerate PDF
|
||||||
|
|
||||||
**Prerequisites** (must exist):
|
**Prerequisites** (must exist):
|
||||||
- `prompts/NN-{cover|page}-[slug].md` for specified pages
|
- `prompts/NN-{cover|page}-[slug].md` for specified pages
|
||||||
- `characters/characters.png` (for reference)
|
- `characters/characters.png` (for reference, if it was used originally)
|
||||||
|
|
||||||
**Output**:
|
**Output**:
|
||||||
- Regenerated `NN-{cover|page}-[slug].png` for specified pages
|
- Regenerated `NN-{cover|page}-[slug].png` for specified pages
|
||||||
|
|||||||
@@ -10,11 +10,11 @@
|
|||||||
| Tone | warm |
|
| Tone | warm |
|
||||||
| Layout | standard (default) |
|
| Layout | standard (default) |
|
||||||
|
|
||||||
Equivalent to: `--art manga --tone warm`
|
Equivalent to: art=manga, tone=warm
|
||||||
|
|
||||||
## Unique Rules
|
## Unique Rules
|
||||||
|
|
||||||
This preset includes special rules beyond the art+tone combination. When `--style concept-story` is used, ALL rules below must be applied.
|
This preset includes special rules beyond the art+tone combination. When the `concept-story` preset is selected, ALL rules below must be applied.
|
||||||
|
|
||||||
### Concept Visualization System (CRITICAL)
|
### Concept Visualization System (CRITICAL)
|
||||||
|
|
||||||
|
|||||||
@@ -11,11 +11,11 @@
|
|||||||
| Layout | four-panel (default) |
|
| Layout | four-panel (default) |
|
||||||
| Aspect | 4:3 (landscape) |
|
| Aspect | 4:3 (landscape) |
|
||||||
|
|
||||||
Equivalent to: `--art minimalist --tone neutral --layout four-panel --aspect 4:3`
|
Equivalent to: art=minimalist, tone=neutral, layout=four-panel, aspect=4:3
|
||||||
|
|
||||||
## Unique Rules
|
## Unique Rules
|
||||||
|
|
||||||
This preset includes special rules beyond the art+tone combination. When `--style four-panel` is used, ALL rules below must be applied.
|
This preset includes special rules beyond the art+tone combination. When the `four-panel` preset is selected, ALL rules below must be applied.
|
||||||
|
|
||||||
### 起承转合 Narrative Structure (CRITICAL)
|
### 起承转合 Narrative Structure (CRITICAL)
|
||||||
|
|
||||||
|
|||||||
@@ -10,11 +10,11 @@ Ohmsha预设 - Educational manga with visual metaphors
|
|||||||
| Tone | neutral |
|
| Tone | neutral |
|
||||||
| Layout | webtoon (default) |
|
| Layout | webtoon (default) |
|
||||||
|
|
||||||
Equivalent to: `--art manga --tone neutral`
|
Equivalent to: art=manga, tone=neutral
|
||||||
|
|
||||||
## Unique Rules
|
## Unique Rules
|
||||||
|
|
||||||
This preset includes special rules beyond the art+tone combination. When `--style ohmsha` is used, ALL rules below must be applied.
|
This preset includes special rules beyond the art+tone combination. When the `ohmsha` preset is selected, ALL rules below must be applied.
|
||||||
|
|
||||||
### Visual Metaphor Requirements (CRITICAL)
|
### Visual Metaphor Requirements (CRITICAL)
|
||||||
|
|
||||||
@@ -41,7 +41,7 @@ Every technical concept MUST be visualized as a metaphor:
|
|||||||
|
|
||||||
### Character Roles (Required)
|
### Character Roles (Required)
|
||||||
|
|
||||||
**DEFAULT: Use Doraemon characters** unless user explicitly specifies `--characters` or has character presets in EXTEND.md.
|
**DEFAULT: Use Doraemon characters** unless user explicitly specifies custom characters.
|
||||||
|
|
||||||
| Role | Default Character | Visual | Traits |
|
| Role | Default Character | Visual | Traits |
|
||||||
|------|-------------------|--------|--------|
|
|------|-------------------|--------|--------|
|
||||||
@@ -52,7 +52,7 @@ Every technical concept MUST be visualized as a metaphor:
|
|||||||
|
|
||||||
**IMPORTANT**: These Doraemon characters ARE the default for ohmsha preset. Generate character definitions using these exact characters unless user requests otherwise.
|
**IMPORTANT**: These Doraemon characters ARE the default for ohmsha preset. Generate character definitions using these exact characters unless user requests otherwise.
|
||||||
|
|
||||||
To use custom characters: `--characters "Student:小明,Mentor:教授"` or define in EXTEND.md.
|
To use custom characters: ask the user to provide role → character mappings (e.g., `Student:小明, Mentor:教授`).
|
||||||
|
|
||||||
### Page Title Convention
|
### Page Title Convention
|
||||||
|
|
||||||
|
|||||||
@@ -10,11 +10,11 @@
|
|||||||
| Tone | romantic |
|
| Tone | romantic |
|
||||||
| Layout | standard (default) |
|
| Layout | standard (default) |
|
||||||
|
|
||||||
Equivalent to: `--art manga --tone romantic`
|
Equivalent to: art=manga, tone=romantic
|
||||||
|
|
||||||
## Unique Rules
|
## Unique Rules
|
||||||
|
|
||||||
This preset includes special rules beyond the art+tone combination. When `--style shoujo` is used, ALL rules below must be applied.
|
This preset includes special rules beyond the art+tone combination. When the `shoujo` preset is selected, ALL rules below must be applied.
|
||||||
|
|
||||||
### Decorative Elements (Required)
|
### Decorative Elements (Required)
|
||||||
|
|
||||||
|
|||||||
@@ -10,11 +10,11 @@
|
|||||||
| Tone | action |
|
| Tone | action |
|
||||||
| Layout | splash (default) |
|
| Layout | splash (default) |
|
||||||
|
|
||||||
Equivalent to: `--art ink-brush --tone action`
|
Equivalent to: art=ink-brush, tone=action
|
||||||
|
|
||||||
## Unique Rules
|
## Unique Rules
|
||||||
|
|
||||||
This preset includes special rules beyond the art+tone combination. When `--style wuxia` is used, ALL rules below must be applied.
|
This preset includes special rules beyond the art+tone combination. When the `wuxia` preset is selected, ALL rules below must be applied.
|
||||||
|
|
||||||
### Qi/Energy Effects (Required)
|
### Qi/Energy Effects (Required)
|
||||||
|
|
||||||
|
|||||||
@@ -9,10 +9,9 @@ Copy and track progress:
|
|||||||
```
|
```
|
||||||
Comic Progress:
|
Comic Progress:
|
||||||
- [ ] Step 1: Setup & Analyze
|
- [ ] Step 1: Setup & Analyze
|
||||||
- [ ] 1.1 Load preferences
|
- [ ] 1.1 Analyze content
|
||||||
- [ ] 1.2 Analyze content
|
- [ ] 1.2 Check existing ⚠️ REQUIRED
|
||||||
- [ ] 1.3 Check existing ⚠️ REQUIRED
|
- [ ] Step 2: Confirmation - Style & options ⚠️ REQUIRED
|
||||||
- [ ] Step 2: Confirmation 1 - Style & options ⚠️ REQUIRED
|
|
||||||
- [ ] Step 3: Generate storyboard + characters
|
- [ ] Step 3: Generate storyboard + characters
|
||||||
- [ ] Step 4: Review outline (conditional)
|
- [ ] Step 4: Review outline (conditional)
|
||||||
- [ ] Step 5: Generate prompts
|
- [ ] Step 5: Generate prompts
|
||||||
@@ -27,72 +26,21 @@ Comic Progress:
|
|||||||
## Flow Diagram
|
## Flow Diagram
|
||||||
|
|
||||||
```
|
```
|
||||||
Input → Preferences → Analyze → [Check Existing?] → [Confirm 1: Style + Reviews] → Storyboard → [Review Outline?] → Prompts → [Review Prompts?] → Images → PDF → Complete
|
Input → Analyze → [Check Existing?] → [Confirm: Style + Reviews] → Storyboard → [Review Outline?] → Prompts → [Review Prompts?] → Images → PDF → Complete
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Step 1: Setup & Analyze
|
## Step 1: Setup & Analyze
|
||||||
|
|
||||||
### 1.1 Load Preferences (EXTEND.md)
|
### 1.1 Analyze Content → `analysis.md`
|
||||||
|
|
||||||
Check EXTEND.md existence (priority order):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# macOS, Linux, WSL, Git Bash
|
|
||||||
test -f .baoyu-skills/baoyu-comic/EXTEND.md && echo "project"
|
|
||||||
test -f "${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-comic/EXTEND.md" && echo "xdg"
|
|
||||||
test -f "$HOME/.baoyu-skills/baoyu-comic/EXTEND.md" && echo "user"
|
|
||||||
```
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
# PowerShell (Windows)
|
|
||||||
if (Test-Path .baoyu-skills/baoyu-comic/EXTEND.md) { "project" }
|
|
||||||
$xdg = if ($env:XDG_CONFIG_HOME) { $env:XDG_CONFIG_HOME } else { "$HOME/.config" }
|
|
||||||
if (Test-Path "$xdg/baoyu-skills/baoyu-comic/EXTEND.md") { "xdg" }
|
|
||||||
if (Test-Path "$HOME/.baoyu-skills/baoyu-comic/EXTEND.md") { "user" }
|
|
||||||
```
|
|
||||||
|
|
||||||
| Path | Location |
|
|
||||||
|------|----------|
|
|
||||||
| `.baoyu-skills/baoyu-comic/EXTEND.md` | Project directory |
|
|
||||||
| `$HOME/.baoyu-skills/baoyu-comic/EXTEND.md` | User home |
|
|
||||||
|
|
||||||
**When EXTEND.md Found** → Read, parse, **output summary to user**:
|
|
||||||
|
|
||||||
```
|
|
||||||
📋 Loaded preferences from [full path]
|
|
||||||
├─ Watermark: [enabled/disabled] [content if enabled]
|
|
||||||
├─ Art Style: [style name or "auto-select"]
|
|
||||||
├─ Tone: [tone name or "auto-select"]
|
|
||||||
├─ Layout: [layout or "auto-select"]
|
|
||||||
├─ Language: [language or "auto-detect"]
|
|
||||||
└─ Character presets: [count] defined
|
|
||||||
```
|
|
||||||
|
|
||||||
**MUST output this summary** so user knows their current configuration. Do not skip or silently load.
|
|
||||||
|
|
||||||
**When EXTEND.md Not Found** → First-time setup:
|
|
||||||
|
|
||||||
1. Inform user: "No preferences found. Let's set up your defaults."
|
|
||||||
2. Use AskUserQuestion to collect preferences (see `config/first-time-setup.md`)
|
|
||||||
3. Create EXTEND.md at user-chosen location
|
|
||||||
4. Confirm: "✓ Preferences saved to [path]"
|
|
||||||
|
|
||||||
**EXTEND.md Supports**: Watermark | Preferred art/tone/layout | Custom style definitions | Character presets | Language preference
|
|
||||||
|
|
||||||
Schema: `config/preferences-schema.md`
|
|
||||||
|
|
||||||
**Important**: Once EXTEND.md exists, watermark, language, and style defaults are NOT asked again in Confirmation 1 or 2. These are session-persistent settings.
|
|
||||||
|
|
||||||
### 1.2 Analyze Content → `analysis.md`
|
|
||||||
|
|
||||||
Read source content, save it if needed, and perform deep analysis.
|
Read source content, save it if needed, and perform deep analysis.
|
||||||
|
|
||||||
**Actions**:
|
**Actions**:
|
||||||
1. **Save source content** (if not already a file):
|
1. **Save source content** (if not already a file):
|
||||||
- If user provides a file path: use as-is
|
- If user provides a file path: use as-is
|
||||||
- If user pastes content: save to `source.md` in target directory
|
- If user pastes content: save to `source.md` in target directory using `write_file`
|
||||||
- **Backup rule**: If `source.md` exists, rename to `source-backup-YYYYMMDD-HHMMSS.md`
|
- **Backup rule**: If `source.md` exists, rename to `source-backup-YYYYMMDD-HHMMSS.md`
|
||||||
2. Read source content
|
2. Read source content
|
||||||
3. **Deep analysis** following `analysis-framework.md`:
|
3. **Deep analysis** following `analysis-framework.md`:
|
||||||
@@ -102,42 +50,32 @@ Read source content, save it if needed, and perform deep analysis.
|
|||||||
- Key figures and their story arcs
|
- Key figures and their story arcs
|
||||||
4. Detect source language
|
4. Detect source language
|
||||||
5. **Determine language**:
|
5. **Determine language**:
|
||||||
- If EXTEND.md has `language` → use it
|
- If user specified a language → use it
|
||||||
- Else if `--lang` option provided → use it
|
- Else → use detected source language or user's conversation language
|
||||||
- Else → use detected source language
|
|
||||||
6. Determine recommended page count:
|
6. Determine recommended page count:
|
||||||
- Short story: 5-8 pages
|
- Short story: 5-8 pages
|
||||||
- Medium complexity: 9-15 pages
|
- Medium complexity: 9-15 pages
|
||||||
- Full biography: 16-25 pages
|
- Full biography: 16-25 pages
|
||||||
7. Analyze content signals for art/tone/layout recommendations
|
7. Analyze content signals for art/tone/layout recommendations
|
||||||
8. **Save to `analysis.md`**
|
8. **Save to `analysis.md`** using `write_file`
|
||||||
|
|
||||||
**analysis.md Format**: YAML front matter (title, topic, time_span, source_language, user_language, aspect_ratio, recommended_page_count, recommended_art, recommended_tone) + sections for Target Audience, Value Proposition, Core Themes, Key Figures & Story Arcs, Content Signals, Recommended Approaches. See `analysis-framework.md` for full template.
|
**analysis.md Format**: YAML front matter (title, topic, time_span, source_language, user_language, aspect_ratio, recommended_page_count, recommended_art, recommended_tone) + sections for Target Audience, Value Proposition, Core Themes, Key Figures & Story Arcs, Content Signals, Recommended Approaches. See `analysis-framework.md` for full template.
|
||||||
|
|
||||||
### 1.3 Check Existing Content ⚠️ REQUIRED
|
### 1.2 Check Existing Content ⚠️ REQUIRED
|
||||||
|
|
||||||
**MUST execute before proceeding to Step 2.**
|
**MUST execute before proceeding to Step 2.**
|
||||||
|
|
||||||
Use Bash to check if output directory exists:
|
Check if the output directory exists (e.g., via `test -d "comic/{topic-slug}"`).
|
||||||
|
|
||||||
```bash
|
**If directory exists**, use `clarify`:
|
||||||
test -d "comic/{topic-slug}" && echo "exists"
|
|
||||||
```
|
|
||||||
|
|
||||||
**If directory exists**, use AskUserQuestion:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
header: "Existing"
|
question: "Existing content found at comic/{topic-slug}. How to proceed?"
|
||||||
question: "Existing content found. How to proceed?"
|
|
||||||
options:
|
options:
|
||||||
- label: "Regenerate storyboard"
|
- "Regenerate storyboard — Keep images, regenerate storyboard and characters only"
|
||||||
description: "Keep images, regenerate storyboard and characters only"
|
- "Regenerate images — Keep storyboard, regenerate images only"
|
||||||
- label: "Regenerate images"
|
- "Backup and regenerate — Backup to {slug}-backup-{timestamp}, then regenerate all"
|
||||||
description: "Keep storyboard, regenerate images only"
|
- "Exit — Cancel, keep existing content unchanged"
|
||||||
- label: "Backup and regenerate"
|
|
||||||
description: "Backup to {slug}-backup-{timestamp}, then regenerate all"
|
|
||||||
- label: "Exit"
|
|
||||||
description: "Cancel, keep existing content unchanged"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Save result and handle accordingly:
|
Save result and handle accordingly:
|
||||||
@@ -148,101 +86,77 @@ Save result and handle accordingly:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Step 2: Confirmation 1 - Style & Options ⚠️
|
## Step 2: Confirmation - Style & Options ⚠️
|
||||||
|
|
||||||
**Purpose**: Select visual style + decide whether to review outline before generation. **Do NOT skip.**
|
**Purpose**: Select visual style + decide whether to review outline before generation. **Do NOT skip.**
|
||||||
|
|
||||||
**Note**: Watermark and language already configured in EXTEND.md (Step 1).
|
**Display summary first**:
|
||||||
|
|
||||||
**Display summary**:
|
|
||||||
- Content type + topic identified
|
- Content type + topic identified
|
||||||
- Key figures extracted
|
- Key figures extracted
|
||||||
- Time span detected
|
- Time span detected
|
||||||
- Recommended page count
|
- Recommended page count
|
||||||
- Language: [from EXTEND.md or detected]
|
- Language (detected or user-specified)
|
||||||
- **Recommended style**: [art] + [tone] (based on content signals)
|
- **Recommended style**: [art] + [tone] (based on content signals)
|
||||||
|
|
||||||
**Use AskUserQuestion** for:
|
**Use `clarify` one question at a time**, in priority order:
|
||||||
|
|
||||||
### Question 1: Visual Style
|
### Question 1: Visual Style
|
||||||
|
|
||||||
If a preset is recommended (see `auto-selection.md`), show it first:
|
If a preset is recommended (see `auto-selection.md`), show it first:
|
||||||
|
|
||||||
```
|
```
|
||||||
header: "Style"
|
|
||||||
question: "Which visual style for this comic?"
|
question: "Which visual style for this comic?"
|
||||||
options:
|
options:
|
||||||
- label: "[preset name] preset (Recommended)" # If preset recommended
|
- "[preset name] preset (Recommended) — [preset description] with special rules"
|
||||||
description: "[preset description] - includes special rules"
|
- "[recommended art] + [recommended tone] (Recommended) — Best match for your content"
|
||||||
- label: "[recommended art] + [recommended tone] (Recommended)" # If no preset
|
- "ligne-claire + neutral — Classic educational, Logicomix style"
|
||||||
description: "Best match for your content based on analysis"
|
- "ohmsha preset — Educational manga with visual metaphors, gadgets, NO talking heads"
|
||||||
- label: "ligne-claire + neutral"
|
- "Custom — Specify your own art + tone or preset"
|
||||||
description: "Classic educational, Logicomix style"
|
|
||||||
- label: "ohmsha preset"
|
|
||||||
description: "Educational manga with visual metaphors, gadgets, NO talking heads"
|
|
||||||
- label: "Custom"
|
|
||||||
description: "Specify your own art + tone or preset"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Preset vs Art+Tone**: Presets include special rules beyond art+tone. `ohmsha` = manga + neutral + visual metaphor rules + character roles + NO talking heads. Plain `manga + neutral` does NOT include these rules.
|
**Preset vs Art+Tone**: Presets include special rules beyond art+tone. `ohmsha` = manga + neutral + visual metaphor rules + character roles + NO talking heads. Plain `manga + neutral` does NOT include these rules.
|
||||||
|
|
||||||
### Question 2: Narrative Focus (multiSelect: true)
|
### Question 2: Narrative Focus
|
||||||
|
|
||||||
```
|
```
|
||||||
header: "Focus"
|
question: "What should the comic emphasize? (Pick the primary focus; mention others in a follow-up if needed)"
|
||||||
question: "What should the comic emphasize? (Select all that apply)"
|
|
||||||
options:
|
options:
|
||||||
- label: "Biography/life story"
|
- "Biography/life story — Follow a person's journey through key life events"
|
||||||
description: "Follow a person's journey through key life events"
|
- "Concept explanation — Break down complex ideas visually"
|
||||||
- label: "Concept explanation"
|
- "Historical event — Dramatize important historical moments"
|
||||||
description: "Break down complex ideas visually"
|
- "Tutorial/how-to — Step-by-step educational guide"
|
||||||
- label: "Historical event"
|
|
||||||
description: "Dramatize important historical moments"
|
|
||||||
- label: "Tutorial/how-to"
|
|
||||||
description: "Step-by-step educational guide"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Question 3: Target Audience
|
### Question 3: Target Audience
|
||||||
|
|
||||||
```
|
```
|
||||||
header: "Audience"
|
|
||||||
question: "Who is the primary reader?"
|
question: "Who is the primary reader?"
|
||||||
options:
|
options:
|
||||||
- label: "General readers"
|
- "General readers — Broad appeal, accessible content"
|
||||||
description: "Broad appeal, accessible content"
|
- "Students/learners — Educational focus, clear explanations"
|
||||||
- label: "Students/learners"
|
- "Industry professionals — Technical depth, domain knowledge"
|
||||||
description: "Educational focus, clear explanations"
|
- "Children/young readers — Simplified language, engaging visuals"
|
||||||
- label: "Industry professionals"
|
|
||||||
description: "Technical depth, domain knowledge"
|
|
||||||
- label: "Children/young readers"
|
|
||||||
description: "Simplified language, engaging visuals"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Question 4: Outline Review
|
### Question 4: Outline Review
|
||||||
|
|
||||||
```
|
```
|
||||||
header: "Review"
|
|
||||||
question: "Do you want to review the outline before image generation?"
|
question: "Do you want to review the outline before image generation?"
|
||||||
options:
|
options:
|
||||||
- label: "Yes, let me review (Recommended)"
|
- "Yes, let me review (Recommended) — Review storyboard and characters before generating images"
|
||||||
description: "Review storyboard and characters before generating images"
|
- "No, generate directly — Skip outline review, start generating immediately"
|
||||||
- label: "No, generate directly"
|
|
||||||
description: "Skip outline review, start generating immediately"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Question 5: Prompt Review
|
### Question 5: Prompt Review
|
||||||
|
|
||||||
```
|
```
|
||||||
header: "Prompts"
|
|
||||||
question: "Review prompts before generating images?"
|
question: "Review prompts before generating images?"
|
||||||
options:
|
options:
|
||||||
- label: "Yes, review prompts (Recommended)"
|
- "Yes, review prompts (Recommended) — Review image generation prompts before generating"
|
||||||
description: "Review image generation prompts before generating"
|
- "No, skip prompt review — Proceed directly to image generation"
|
||||||
- label: "No, skip prompt review"
|
|
||||||
description: "Proceed directly to image generation"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**After response**:
|
**After responses**:
|
||||||
1. Update `analysis.md` with user preferences
|
1. Update `analysis.md` with user preferences
|
||||||
2. **Store `skip_outline_review`** flag based on Question 4 response
|
2. **Store `skip_outline_review`** flag based on Question 4 response
|
||||||
3. **Store `skip_prompt_review`** flag based on Question 5 response
|
3. **Store `skip_prompt_review`** flag based on Question 5 response
|
||||||
@@ -257,7 +171,7 @@ Create storyboard and character definitions using the confirmed style from Step
|
|||||||
**Loading Style References**:
|
**Loading Style References**:
|
||||||
- Art style: `art-styles/{art}.md`
|
- Art style: `art-styles/{art}.md`
|
||||||
- Tone: `tones/{tone}.md`
|
- Tone: `tones/{tone}.md`
|
||||||
- If preset (ohmsha/wuxia/shoujo): also load `presets/{preset}.md`
|
- If preset (ohmsha/wuxia/shoujo/concept-story/four-panel): also load `presets/{preset}.md`
|
||||||
|
|
||||||
**Generate**:
|
**Generate**:
|
||||||
|
|
||||||
@@ -275,7 +189,7 @@ Create storyboard and character definitions using the confirmed style from Step
|
|||||||
- Reference: `character-template.md`
|
- Reference: `character-template.md`
|
||||||
- **If using ohmsha preset**: Use default Doraemon characters (see below)
|
- **If using ohmsha preset**: Use default Doraemon characters (see below)
|
||||||
|
|
||||||
**Ohmsha Default Characters** (use these unless user specifies `--characters`):
|
**Ohmsha Default Characters** (use these unless user specifies custom characters):
|
||||||
|
|
||||||
| Role | Character | Visual Description |
|
| Role | Character | Visual Description |
|
||||||
|------|-----------|-------------------|
|
|------|-----------|-------------------|
|
||||||
@@ -304,20 +218,15 @@ These are the canonical ohmsha-style characters. Do NOT create custom characters
|
|||||||
- Page-by-page summary (Cover → P1 → P2...)
|
- Page-by-page summary (Cover → P1 → P2...)
|
||||||
- Character list with brief descriptions
|
- Character list with brief descriptions
|
||||||
|
|
||||||
**Use AskUserQuestion**:
|
**Use `clarify`**:
|
||||||
|
|
||||||
```
|
```
|
||||||
header: "Confirm"
|
|
||||||
question: "Ready to generate images with this outline?"
|
question: "Ready to generate images with this outline?"
|
||||||
options:
|
options:
|
||||||
- label: "Yes, proceed (Recommended)"
|
- "Yes, proceed (Recommended) — Generate character sheet and comic pages"
|
||||||
description: "Generate character sheet and comic pages"
|
- "Edit storyboard first — I'll modify storyboard.md before continuing"
|
||||||
- label: "Edit storyboard first"
|
- "Edit characters first — I'll modify characters/characters.md before continuing"
|
||||||
description: "I'll modify storyboard.md before continuing"
|
- "Edit both — I'll modify both files before continuing"
|
||||||
- label: "Edit characters first"
|
|
||||||
description: "I'll modify characters/characters.md before continuing"
|
|
||||||
- label: "Edit both"
|
|
||||||
description: "I'll modify both files before continuing"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**After response**:
|
**After response**:
|
||||||
@@ -338,7 +247,7 @@ Create image generation prompts for all pages.
|
|||||||
**For each page (cover + pages)**:
|
**For each page (cover + pages)**:
|
||||||
1. Create prompt following art style + tone guidelines
|
1. Create prompt following art style + tone guidelines
|
||||||
2. Include character visual descriptions for consistency
|
2. Include character visual descriptions for consistency
|
||||||
3. Save to `prompts/NN-{cover|page}-[slug].md`
|
3. Save to `prompts/NN-{cover|page}-[slug].md` using `write_file`
|
||||||
- **Backup rule**: If prompt file exists, rename to `prompts/NN-{cover|page}-[slug]-backup-YYYYMMDD-HHMMSS.md`
|
- **Backup rule**: If prompt file exists, rename to `prompts/NN-{cover|page}-[slug]-backup-YYYYMMDD-HHMMSS.md`
|
||||||
|
|
||||||
**Prompt File Format**:
|
**Prompt File Format**:
|
||||||
@@ -355,18 +264,9 @@ Art: [art style] | Tone: [tone] | Layout: [layout type]
|
|||||||
[From storyboard.md - panel descriptions, actions, dialogue]
|
[From storyboard.md - panel descriptions, actions, dialogue]
|
||||||
|
|
||||||
## Generation Prompt
|
## Generation Prompt
|
||||||
[Combined prompt for image generation skill]
|
[Combined prompt passed to image_generate]
|
||||||
```
|
```
|
||||||
|
|
||||||
**Watermark Application** (if enabled in preferences):
|
|
||||||
Add to each prompt:
|
|
||||||
```
|
|
||||||
Include a subtle watermark "[content]" positioned at [position]. The watermark should
|
|
||||||
be legible but not distracting from the comic panels and storytelling.
|
|
||||||
Ensure watermark does not overlap speech bubbles or key action.
|
|
||||||
```
|
|
||||||
Reference: `config/watermark-guide.md`
|
|
||||||
|
|
||||||
**After generation**:
|
**After generation**:
|
||||||
- If `skip_prompt_review` is true → Skip Step 6, go directly to Step 7
|
- If `skip_prompt_review` is true → Skip Step 6, go directly to Step 7
|
||||||
- If `skip_prompt_review` is false → Continue to Step 6
|
- If `skip_prompt_review` is false → Continue to Step 6
|
||||||
@@ -387,18 +287,14 @@ Reference: `config/watermark-guide.md`
|
|||||||
| P1 | [title] | [key elements] |
|
| P1 | [title] | [key elements] |
|
||||||
| ... | ... | ... |
|
| ... | ... | ... |
|
||||||
|
|
||||||
**Use AskUserQuestion**:
|
**Use `clarify`**:
|
||||||
|
|
||||||
```
|
```
|
||||||
header: "Confirm"
|
|
||||||
question: "Ready to generate images with these prompts?"
|
question: "Ready to generate images with these prompts?"
|
||||||
options:
|
options:
|
||||||
- label: "Yes, proceed (Recommended)"
|
- "Yes, proceed (Recommended) — Generate all comic page images"
|
||||||
description: "Generate all comic page images"
|
- "Edit prompts first — I'll modify prompts/*.md before continuing"
|
||||||
- label: "Edit prompts first"
|
- "Regenerate prompts — Regenerate all prompts with different approach"
|
||||||
description: "I'll modify prompts/*.md before continuing"
|
|
||||||
- label: "Regenerate prompts"
|
|
||||||
description: "Regenerate all prompts with different approach"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**After response**:
|
**After response**:
|
||||||
@@ -410,7 +306,15 @@ options:
|
|||||||
|
|
||||||
## Step 7: Generate Images
|
## Step 7: Generate Images
|
||||||
|
|
||||||
With confirmed prompts from Step 5/6:
|
With confirmed prompts from Step 5/6, use the `image_generate` tool for all image rendering.
|
||||||
|
|
||||||
|
**Aspect ratio mapping** — `image_generate` supports `landscape`, `portrait`, and `square`:
|
||||||
|
|
||||||
|
| Storyboard ratio | `image_generate` format |
|
||||||
|
|------------------|-------------------------|
|
||||||
|
| `3:4`, `9:16`, `2:3` | `portrait` |
|
||||||
|
| `4:3`, `16:9`, `3:2` | `landscape` |
|
||||||
|
| `1:1` | `square` |
|
||||||
|
|
||||||
### 7.1 Generate Character Reference Sheet (conditional)
|
### 7.1 Generate Character Reference Sheet (conditional)
|
||||||
|
|
||||||
@@ -427,47 +331,45 @@ Character sheet is recommended for multi-page comics with recurring characters,
|
|||||||
**When generating**:
|
**When generating**:
|
||||||
1. Use Reference Sheet Prompt from `characters/characters.md`
|
1. Use Reference Sheet Prompt from `characters/characters.md`
|
||||||
2. **Backup rule**: If `characters/characters.png` exists, rename to `characters/characters-backup-YYYYMMDD-HHMMSS.png`
|
2. **Backup rule**: If `characters/characters.png` exists, rename to `characters/characters-backup-YYYYMMDD-HHMMSS.png`
|
||||||
3. Generate → `characters/characters.png`
|
3. Call `image_generate` with `landscape` format → save to `characters/characters.png`
|
||||||
4. **Compress** to reduce API payload size when used as `--ref`:
|
4. **Compress** to reduce payload size when used as a reference:
|
||||||
- `sips -s format jpeg -s formatOptions 80 characters.png --out characters-compressed.jpg` (macOS)
|
- macOS: `sips -s format jpeg -s formatOptions 80 characters.png --out characters-compressed.jpg`
|
||||||
- Or: `pngquant --quality=65-80 characters.png -o characters-compressed.png`
|
- Linux: `pngquant --quality=65-80 characters.png -o characters-compressed.png`
|
||||||
|
|
||||||
### 7.2 Generate Comic Pages
|
### 7.2 Generate Comic Pages
|
||||||
|
|
||||||
**Before generating any page**:
|
**Before generating any page**:
|
||||||
1. Read the image generation skill's SKILL.md
|
1. Confirm each prompt file exists at `prompts/NN-{cover|page}-[slug].md`
|
||||||
2. Check if it supports reference image input (`--ref`, `--reference`, etc.)
|
2. Check whether `image_generate` accepts a reference image in the current runtime
|
||||||
3. Determine if character sheet exists
|
3. Determine if character sheet exists
|
||||||
4. Choose the appropriate strategy below
|
4. Choose the appropriate strategy below
|
||||||
|
|
||||||
**Page Generation Strategy**:
|
**Page Generation Strategy**:
|
||||||
|
|
||||||
| Character Sheet | Skill Capability | Strategy |
|
| Character Sheet | `image_generate` reference support | Strategy |
|
||||||
|-----------------|------------------|----------|
|
|-----------------|------------------------------------|----------|
|
||||||
| Exists | Supports `--ref` | **A**: Pass character sheet as `--ref` with every page |
|
| Exists | Supported | **A**: Pass character sheet as reference with every page |
|
||||||
| Exists | No `--ref` support | **B**: Embed character descriptions in every prompt |
|
| Exists | Not supported | **B**: Embed character descriptions in every prompt |
|
||||||
| Skipped | — | **C**: Prompt file contains all descriptions inline |
|
| Skipped | — | **C**: Prompt file contains all descriptions inline |
|
||||||
|
|
||||||
**Strategy A: Using `--ref` parameter** (e.g., baoyu-imagine)
|
**Strategy A: Pass reference image**
|
||||||
|
|
||||||
- Read the chosen image generation skill's `SKILL.md`
|
- For every page, read `prompts/NN-{type}-[slug].md` as the prompt input
|
||||||
- Invoke that installed skill via its documented interface, not by calling its scripts directly
|
- Save output to `NN-{type}-[slug].png`
|
||||||
- For every page, use `prompts/01-page-xxx.md` as the prompt-file input
|
- Use aspect ratio from storyboard (mapped to `landscape`/`portrait`/`square`)
|
||||||
- Save output to `01-page-xxx.png`
|
- Pass `characters/characters.png` (or compressed version) as the reference image
|
||||||
- Use aspect ratio from storyboard (default `3:4`, preset may override)
|
|
||||||
- Pass `characters/characters.png` (or compressed version) as `--ref`
|
|
||||||
|
|
||||||
**`--ref` failure recovery**:
|
**Reference failure recovery**:
|
||||||
If generation fails when using `--ref`:
|
If generation fails when passing the reference:
|
||||||
1. **Compress/convert** reference image:
|
1. **Compress/convert** reference image:
|
||||||
- `sips -s format jpeg -s formatOptions 70 characters.png --out characters-compressed.jpg`
|
- `sips -s format jpeg -s formatOptions 70 characters.png --out characters-compressed.jpg`
|
||||||
- Or reduce resolution: `sips -Z 1024 characters.png --out characters-small.png`
|
- Or reduce resolution: `sips -Z 1024 characters.png --out characters-small.png`
|
||||||
2. **Retry** with compressed/converted image as `--ref`
|
2. **Retry** with compressed/converted image
|
||||||
3. **If still fails**: Fall back to **Strategy C** — generate WITHOUT `--ref`, with character descriptions embedded in prompt text
|
3. **If still fails**: Fall back to **Strategy C** — generate WITHOUT reference, with character descriptions embedded in prompt text
|
||||||
|
|
||||||
**Strategy B: Embedding character descriptions in prompt**
|
**Strategy B: Embedding character descriptions in prompt**
|
||||||
|
|
||||||
When skill does NOT support reference images, create combined prompt files:
|
When reference images are not supported, create combined prompt files:
|
||||||
|
|
||||||
```markdown
|
```markdown
|
||||||
# prompts/01-page-xxx.md (with embedded character reference)
|
# prompts/01-page-xxx.md (with embedded character reference)
|
||||||
@@ -483,24 +385,18 @@ When skill does NOT support reference images, create combined prompt files:
|
|||||||
|
|
||||||
**Strategy C: Prompt-only (no character sheet)**
|
**Strategy C: Prompt-only (no character sheet)**
|
||||||
|
|
||||||
When character sheet was skipped or `--ref` failed:
|
When character sheet was skipped or the reference failed:
|
||||||
- Prompt file already contains all character descriptions inline
|
- Prompt file already contains all character descriptions inline
|
||||||
- No `--ref` parameter needed
|
- No reference image needed
|
||||||
- Rely on detailed text descriptions for character consistency
|
- Rely on detailed text descriptions for character consistency
|
||||||
|
|
||||||
**For each page (cover + pages)**:
|
**For each page (cover + pages)**:
|
||||||
1. Read prompt from `prompts/NN-{cover|page}-[slug].md`
|
1. Read prompt from `prompts/NN-{cover|page}-[slug].md`
|
||||||
2. **Backup rule**: If image file exists, rename to `NN-{cover|page}-[slug]-backup-YYYYMMDD-HHMMSS.png`
|
2. **Backup rule**: If image file exists, rename to `NN-{cover|page}-[slug]-backup-YYYYMMDD-HHMMSS.png`
|
||||||
3. Generate image using Strategy A, B, or C
|
3. Generate image via `image_generate` using Strategy A, B, or C
|
||||||
4. Save to `NN-{cover|page}-[slug].png`
|
4. Save to `NN-{cover|page}-[slug].png`
|
||||||
5. Report progress after each generation: "Generated X/N: [page title]"
|
5. Report progress after each generation: "Generated X/N: [page title]"
|
||||||
|
|
||||||
**Session Management**:
|
|
||||||
If image generation skill supports `--sessionId`:
|
|
||||||
1. Generate unique session ID: `comic-{topic-slug}-{timestamp}`
|
|
||||||
2. Use same session ID for all pages
|
|
||||||
3. Ensures visual consistency across generated images
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Step 8: Merge to PDF
|
## Step 8: Merge to PDF
|
||||||
@@ -508,10 +404,10 @@ If image generation skill supports `--sessionId`:
|
|||||||
After all images generated:
|
After all images generated:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
${BUN_X} {baseDir}/scripts/merge-to-pdf.ts <comic-dir>
|
bun {baseDir}/scripts/merge-to-pdf.ts <comic-dir>
|
||||||
```
|
```
|
||||||
|
|
||||||
Creates `{topic-slug}.pdf` with all pages as full-page images.
|
Where `{baseDir}` is this skill's directory. Creates `{topic-slug}.pdf` with all pages as full-page images.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -520,7 +416,6 @@ Creates `{topic-slug}.pdf` with all pages as full-page images.
|
|||||||
```
|
```
|
||||||
Comic Complete!
|
Comic Complete!
|
||||||
Title: [title] | Art: [art] | Tone: [tone] | Pages: [count] | Aspect: [ratio] | Language: [lang]
|
Title: [title] | Art: [art] | Tone: [tone] | Pages: [count] | Aspect: [ratio] | Language: [lang]
|
||||||
Watermark: [enabled/disabled]
|
|
||||||
Location: [path]
|
Location: [path]
|
||||||
✓ analysis.md
|
✓ analysis.md
|
||||||
✓ characters.png (if generated)
|
✓ characters.png (if generated)
|
||||||
|
|||||||
Reference in New Issue
Block a user