| name | create-artwork |
| description | Create, version, validate, and maintain the shared webtoon artwork system used by character sheets, backgrounds, directed panels, effects, and integrated non-balloon text. Use when defining or changing line style, face/body proportions, palette, shading, materials, perspective, background detail, lighting, effects, SFX/onomatopoeia visual language, or approved style-anchor images; use before $create-character-sheet, $create-background, or $direct-webtoon image generation and when auditing cross-episode style drift or off-model art. |
Create Artwork
Create one immutable, approved art-style version that every visual skill consumes. This skill owns rendering language, not story canon, character identity, background geometry, or shot-specific direction.
Required Context And Runtime
Read AGENTS.md, project.md, style/artwork-style.md, style/visual-style-guide.md, and any existing artwork manifest. Load and follow $imagegen for every authored visual.
Call load_workspace_dependencies, set PYTHON, and run bundled tools through uv run --frozen --python "$PYTHON" python ....
Read artwork-contract.md before generation or approval.
Workflow
-
Define the style contract. Lock line/shape language, face/body proportions, anatomy conventions, palette, shading, materials, perspective, background detail by depth, character/background separation, lighting, effects, integrated non-balloon text, and explicit avoidances. Mark test subjects as noncanonical unless they are grounded in approved canon.
-
Prepare an immutable version. Run:
uv run --frozen --python "$PYTHON" python \
.agents/skills/create-artwork/scripts/prepare_artwork_scaffold.py \
--project-root . --asset-version v001 \
--style-brief "<precise shared rendering system>" \
--palette "#1A1D24" --palette "#B04A3A" \
--reference /absolute/path/to/style-reference.png
The script writes assets/style-references/vNNN/ with an artwork contract, dependency-aware imagegen jobs, prompts, a draft manifest, and QA templates. Never overwrite an approved version.
-
Generate bounded style anchors with $imagegen. Use the built-in image generation path by default, one call per job; do not substitute a CLI/API runner. Label every attached image by its manifest role. Copy the selected project-bound result from the built-in generated-images location into the workspace through record_artwork_anchor.py; never leave a referenced anchor outside the project. The graph contains:
line-character: line, face/body construction, anatomy, cloth, hair, and prop shape language;
color-light: palette, materials, shadow/highlight, and value hierarchy grounded in the line anchor;
background: perspective, depth/detail, atmosphere, materials, and character-value separation;
mixed-scene: one coherent character-in-background scene proving shared rendering;
effects-text: motion/impact/atmosphere plus exact non-balloon SFX/onomatopoeia integration, with no speech/thought balloons.
Only the first job may be prompt-only. Every descendant attaches all manifest-listed grounding inputs and previously approved anchors. Copy the exact selected outputs to the declared anchors/*.png paths before marking jobs complete.
Record each selected result in dependency order; this updates hashes in the job graph and draft manifest:
uv run --frozen --python "$PYTHON" python \
.agents/skills/create-artwork/scripts/record_artwork_anchor.py \
--project-root . \
--manifest assets/style-references/v001/artwork-manifest.json \
--job-id line-character \
--source /absolute/path/to/selected.png \
--qa-note "checked line, construction, anatomy, and exclusions"
-
Review style, not subject canon. Compare line weight/taper, facial construction, body/hand anatomy, palette, material response, shadow/highlight, perspective, detail density, atmosphere, effect shapes, and integrated-text color/contrast/perspective. Reject internal style disagreement even when each image is attractive alone.
-
Build the contact sheet, complete independent visual review, and approve. Fill every check in qa/visual-review.json, set its status to pass, and name the reviewer. Then run:
uv run --frozen --python "$PYTHON" python \
.agents/skills/create-artwork/scripts/make_artwork_contact_sheet.py \
--manifest assets/style-references/v001/artwork-manifest.json
uv run --frozen --python "$PYTHON" python \
.agents/skills/create-artwork/scripts/approve_artwork_scaffold.py \
--project-root . \
--manifest assets/style-references/v001/artwork-manifest.json
Approval is atomic: the command marks all anchors and the version approved, runs the complete --require-approved validator, and restores the draft manifest on failure. An approved version is immutable.
-
Link the approved version. Update style/artwork-style.md and project.md only after validation and independent visual QA. Record asset_version, manifest, and status: approved.
Consumer Contract
$create-character-sheet, $create-background, and $direct-webtoon must receive the approved manifest path. Their preparation scripts verify status, anchor files, and SHA-256 values, then attach required anchors to every $imagegen job. Missing, stale, unapproved, or hash-invalid artwork blocks generation. Consumer prompts may specialize subject, location, mood, or shot but may not redefine the shared style.
If a new art style is desired, create v002; do not mutate v001. Existing episodes remain pinned to the version they used.
Repair And Drift Policy
- Fix manifest, hash, path, or contact-sheet defects deterministically.
- Regenerate the smallest coherent anchor family when its source visual is wrong.
- If mixed-scene style disagrees with character/background anchors, revise the shared contract or upstream anchors before producing episodes.
- Treat face/body proportion, line, palette, shading, perspective, background density, effects, and integrated-text style drift as blockers.
- Never use raster warps, filters, or repaint overlays to disguise off-model art.