| name | direct-webtoon |
| description | Direct webtoon visuals from narrative beat through storyboard, sketch, panel generation, and final vertical section layout. Use when defining character blocking, acting, gaze, camera, background view, lighting, effects, integrated non-balloon text, balloon-safe regions, $imagegen prompts, visual QA, crops, overlaps, gutters, reveals, bridge layers, safe seams, or approved 690px-wide section PNGs. |
Direct Webtoon
Own visual direction from the first storyboard image through the final 690px section. Keep story intent with the narrative skill; translate each approved beat into one traceable direction contract and preserve that contract through generation and layout.
Runtime
Before running bundled scripts, call load_workspace_dependencies, set PYTHON to its exact Python path, then use the project environment because Pillow and PyYAML are project dependencies:
uv run --frozen --python "$PYTHON" python <script> ...
Do not use bare bundled Python for nested frontmatter workflows.
Direction Workflow
- Read
project.md, the target episode, storyboard, panel and section records, and all relevant storytelling, visual, lettering, character, background, and material sources.
- Preserve the narrative beat. Do not rewrite its promise, reveal, or character choice merely to make an easier image.
- Before sketch or panel generation, write the section's JSON direction contract using direction-layout-contract.md. Point its top-level
artwork_manifest at the approved shared assets/style-references/vNNN/artwork-manifest.json; consume that manifest instead of inventing another style schema. For every panel lock:
- character blocking, depth, screen side, pose, expression, facing, gesture, and gaze;
- camera height, angle, lens feel, movement, focus, and intended crop;
- background id, approved view, perspective anchors, and spatial continuity;
- lighting direction, value hierarchy, palette, atmosphere, effects, and reveal timing;
- integrated non-balloon SFX, onomatopoeia, captions, or signage with exact wording and placement;
- balloon-safe regions even though balloons are rendered elsewhere.
- Approve previsualization before generating finished art. Use the same
direction_id for sketches, imagegen jobs, approved art, and final layout layers.
- Use
$imagegen's built-in path by default for sketches, panels, cells, bridges, ambient continuations, and texture layers, with one call per distinct asset. Attach and explicitly role-label the exact approved character, background, material, and preceding continuity references named by the direction contract, plus all five approved anchor paths from the shared artwork manifest. Copy every selected project-bound result into its declared workspace source path; never leave it 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.
- Never ask imagegen or this compositor to draw speech or thought balloons. Non-balloon integrated text remains part of the owning panel art; visually verify its exact wording, perspective, contrast, and material interaction. Regenerate the owning image when it is wrong—do not overlay substitute text here.
- Run visual QA against the direction contract and shared artwork manifest. Reject identity drift, wrong blocking or gaze, incorrect camera or background view, lighting contradiction, obscured action, unreadable integrated text, or invasion of balloon-safe regions. Also reject style drift in line treatment, face/body proportion, palette, shading, perspective, detail density, effects, or integrated-text style.
Section Direction
After panel or cell art is approved:
- Plan a 2,000–4,000px section with a single story job and deliberate vertical rhythm.
- Use crop, scale, position, overlap, bleed, silence, gutters, and reveal distance intentionally. Every image or procedural layer must carry owning
panel_ids and one approved direction_id.
- Generate painted bridges, ambient continuations, or textures with
$imagegen when deterministic solid or gradient gutters cannot serve the transition. Save and approve them as normal source assets before layout.
- Keep content out of the declared top and bottom seam guards. Only gutter, ambient, or intentional continuation layers may enter them.
- Compose an explicit draft under a QA path when needed, make the scroll preview, and obtain final direction approval.
- Recompose without
--draft, validate the final image, and inspect the scroll preview.
- Only after those checks, set the linked
webtoon_section frontmatter direction_approved: true, seam_safe: true, and status: final, then rerun record-final validation.
- Finish the episode-level
episodes/ep.NN/direction.md approval record. $publish-webtoon must gate on that final episode direction approval, not on an unattached JSON layout.
Commands
Compose an approval-stage draft only under a QA path:
uv run --frozen --python "$PYTHON" python \
.agents/skills/direct-webtoon/scripts/compose_section.py \
--project-root . --layout assets/episodes/ep.01/layouts/001.json \
--output assets/episodes/ep.01/qa/001-draft.png --draft
After approval, compose and validate the final section:
uv run --frozen --python "$PYTHON" python \
.agents/skills/direct-webtoon/scripts/compose_section.py \
--project-root . --layout assets/episodes/ep.01/layouts/001.json
uv run --frozen --python "$PYTHON" python \
.agents/skills/direct-webtoon/scripts/validate_section.py \
--project-root . --layout assets/episodes/ep.01/layouts/001.json \
--json-out assets/episodes/ep.01/qa/001-validation.json
Create a reduced-width seamless episode preview:
uv run --frozen --python "$PYTHON" python \
.agents/skills/direct-webtoon/scripts/make_scroll_preview.py \
--project-root . \
--section assets/episodes/ep.01/sections/001.png \
--section assets/episodes/ep.01/sections/002.png \
--output assets/episodes/ep.01/qa/scroll-preview.png
After preview approval and section-record updates, rerun validate_section.py with --require-record-final.
Completion Gate
- Direction ids connect narrative beats, previsualization, generation, approved art, and layout.
- Every source is repository-relative, exists, and is approved.
- The approved shared artwork manifest is linked, all five anchor hashes match, and every generation job references all five anchor paths.
- Final direction approval names a reviewer and records a concrete note.
- Output is opaque RGB PNG, exactly 690px wide and 2,000–4,000px tall.
- Safe seams contain no panel content, face, silhouette, required action, integrated text, or balloon.
- Speech and thought balloons were neither generated nor re-rendered by this skill.
- Integrated non-balloon text remains inside approved panel art and passes exact-wording visual QA.
- Final validation and scroll preview pass before the section record becomes final.
- The section record links
layout_manifest, direction_contract, and final source; the episode direction.md links every final section and carries the publish-gating approval.