| name | create-character-sheet |
| description | Create, repair, normalize, validate, and version consistent webtoon character-sheet assets with a canonical identity, grounded turnaround views, torso reference, and expression families. Use when a character needs new or revised visual identity art under assets/characters/, when existing views or expressions drift, or when character-sheet PNGs and manifests must be prepared for episode art generation. |
Create Character Sheet
Create a versioned static reference set for one webtoon character. Use $imagegen for every authored visual; use bundled scripts only for manifests, guides, extraction, chroma removal, normalization, contact sheets, and QA.
Before generating
- Read
AGENTS.md, the character file, style/artwork-style.md, style/visual-style-guide.md, and style/character-sheet-spec.md when present.
- Read references/character-sheet-contract.md. It is the authoritative view, expression, geometry, provenance, and repair contract.
- Load and follow
$imagegen before any visual generation. Use its built-in path by default and make one call per distinct job. Label every attached input by input_images.role, copy selected project-bound results into the declared workspace paths, and never leave a referenced source only under the built-in generated-images location. Do not switch to a CLI/API path unless the user explicitly requests or confirms that fallback.
- Call
load_workspace_dependencies; set PYTHON to the returned Python executable. Run scripts through the repository lock as uv run --frozen --python "$PYTHON" python .... Stop if the bundled runtime or locked dependencies are unavailable. Do not use bare python.
- Never overwrite an approved
vNNN asset set. Prepare the next version instead.
Keep a visible plan with one active step: prepare, lock identity, build turnaround/torso, build expressions, validate/package.
Prepare the run
uv run --frozen --python "$PYTHON" python .agents/skills/create-character-sheet/scripts/prepare_character_sheet.py \
--project-root /absolute/path/to/webtoonista \
--character-id char-example \
--character-name "Example" \
--description "Stable visual identity description" \
--asset-version v001 \
--artwork-manifest assets/style-references/v001/artwork-manifest.json \
--palette '#20242a' \
--style-notes "Canonical line, color, rendering, and lighting direction" \
--reference /absolute/path/to/reference.png
The script creates a version directory under assets/characters/<slug>/<version>/ containing the request, dependency-aware imagegen jobs, concise prompts, layout guides, and a draft asset manifest. Inspect imagegen-jobs.json; a job is ready only when every depends_on job is complete.
Pass the canonical style guide's concise subject-level rules through --style-notes. The approved $create-artwork manifest is authoritative: preparation verifies its five anchor files and SHA-256 values and attaches all five to every imagegen job. Missing, stale, or unapproved artwork blocks preparation. Subject notes may not redefine the shared line, construction, anatomy, color, light, perspective, effects, or rendering language.
Only identity-front-full may be prompt-only. Every later job must attach every input_images entry with its declared role. Layout guides are construction references; visible boxes, labels, grid colors, or guide backgrounds in generated art are failures.
Generate and approve
Generate in this order:
identity-front-full; copy the selected output to the job's output_path, then copy it to references/canonical-base.png.
turnaround-anchors; approve all five view semantics before generating final views.
- Generate the four remaining full-body views and
torso-front-neutral. These jobs may run independently after the anchors pass.
- Generate
expression-core, then expression-story. Each expression job is one coherent 2x2 family.
For each job, record the exact selected source path and SHA-256 in imagegen-jobs.json. Mark it complete only after the selected file exists at output_path, deterministic checks pass, and visual QA approves identity and semantics. A changed canonical-base hash invalidates every descendant.
Extract and recompose the approved turnaround anchors before final-view generation:
uv run --frozen --python "$PYTHON" python .agents/skills/create-character-sheet/scripts/normalize_character_asset.py \
--input /absolute/run/raw/turnaround-anchors.png \
--output-dir /absolute/run/references/turnaround-anchors \
--items front,three-quarter-screen-right,profile-screen-right,back,profile-screen-left \
--profile anchor \
--grid 3x2 \
--chroma-key '#FF00FF' \
--composite-output /absolute/run/references/turnaround-anchors-approved.png \
--report /absolute/run/qa/turnaround-anchor-normalization.json
Normalize
Normalize full-body or torso singles:
uv run --frozen --python "$PYTHON" python .agents/skills/create-character-sheet/scripts/normalize_character_asset.py \
--input /absolute/run/raw/full-back.png \
--output-dir /absolute/run/normalized/views \
--items full-back-neutral \
--profile full-body \
--chroma-key '#FF00FF' \
--report /absolute/run/qa/full-back-normalization.json
Normalize a 2x2 expression family:
uv run --frozen --python "$PYTHON" python .agents/skills/create-character-sheet/scripts/normalize_character_asset.py \
--input /absolute/run/raw/expression-core.png \
--output-dir /absolute/run/normalized/expressions \
--items neutral,joy,sadness,anger \
--profile expression \
--grid 2x2 \
--chroma-key '#FF00FF' \
--report /absolute/run/qa/expression-core-normalization.json
Never use mirroring, non-uniform scaling, affine warps, replacement eyes/mouths, or local drawing to repair anatomy or identity. Deterministic scripts may only crop, uniformly scale, align, extract alpha, despill edges, compose, hash, and validate.
Validate and package
uv run --frozen --python "$PYTHON" python .agents/skills/create-character-sheet/scripts/make_character_contact_sheet.py \
--run-dir /absolute/run
uv run --frozen --python "$PYTHON" python .agents/skills/create-character-sheet/scripts/validate_character_sheet.py \
--run-dir /absolute/run \
--require-complete \
--json-out /absolute/run/qa/validation.json
Inspect the contact sheet at normal display size. Run independent blind classification for the five unlabeled turnaround views and eight unlabeled expressions as specified in the contract. Structural validation never substitutes for identity, view, or expression review.
After all gates pass, update the asset manifest to status: approved, write its approval timestamp and QA paths, then update the character Markdown to point at the exact version. Do not update canonical character metadata before approval.
Repair policy
- Fix extraction, chroma, crop, alignment, or manifest errors deterministically before regenerating art.
- Regenerate a failed final view alone, grounded by the canonical base and approved anchors.
- Regenerate the complete containing 2x2 expression family when one expression fails; never patch a final cell.
- Regenerate the base and invalidate all descendants when canonical identity is wrong.
- Never derive one side profile by mirroring the other.
- After the same root failure twice, change the anchor, layout, identity contract, or design complexity instead of merely rewording the prompt.