A skill that quickly renders 50+ panels of a single webtoon episode with codex-image, 5 at a time , and validates them. Taking the panel prompt list created by prompt-smith as input, it mass-produces and validates PNGs while maintaining consistency.
This skill layers ~/.claude/skills/codex-image's parallel pattern with webtoon-specific consistency, validation, and concurrency conventions. The original codex invocation method follows codex-image SKILL.md.
4 Core Principles (reflecting EP01 production feedback):
- Reference first (consistency). Before drawing panels, first render multi-angle/expression reference sheets for characters to lock in the appearance baseline (SSOT). Text tokens alone produce a different face every time.
- Bake all text in-image (absolutely no post-processing). Speech bubble dialogue, sound effects, on-screen UI, environmental text, etc. — draw all text together with the artwork at image generation time(no HTML overlay, no Photoshop typing, no post-processing compositing of any kind). Therefore, do not use "no text" negative prompts. Also, the result must look baked in — text must blend in with the same hand-drawn ink tone as the artwork, and a "pasted-on" feel of clean digital fonts laid flat is a failure (integrated lettering, EP01 P30·P33 feedback).
- Lock backgrounds per scene unit. Inject per-scene location tokens (LOC_*) into every panel to prevent abrupt background changes (road → indoors, etc.).
- Validation-regeneration loop. panel-validator inspects panels along 6 axes and re-renders substandard ones until they meet the criteria.
Pre-check (once per episode)
codex --version # 0.128+ 권장
codex login status # "Logged in using ChatGPT" 확인
codex features list | grep image_generation # stable/true 확인
If not logged in, ask the user to run codex login . Check before starting so rendering does not stop midway.
Step 0 — Render character reference sheets first (ref-sheet-artist)
Before panels, render multi-angle/expression reference sheetsfor the main characters to lock in the series appearance baseline. This is the anchor for all panel consistency and validation.
- Input:
_workspace/04_visual/character-sheets.md(immutable tokens),style-bible.md(art style). - 2 sheets recommended per character:
refs/{IDTAG}_turnaround.png— front/3-4/side/back full body, neutral solid background, even lighting, expressionless.refs/{IDTAG}_expressions.png— close-ups of 3–4 key expressions.
- Reference prompt conventions:
- Global art style tokens + character immutable tokens + "character reference sheet, multiple angles (front, 3/4, side, back), full body, neutral grey background, even flat lighting, model sheet".
- Make identifying marks (dots/scars/bracelets, etc.) clear, and fix left/right position.
- References alone without text:
no text, no labels, no speech bubbles, no watermark(a clean appearance catalog must be the baseline — the opposite of the panel's in-image speech bubbles).
- Save:
_workspace/04_visual/refs/(not in the episode folder, but series assets, reused in the next episode).refs/INDEX.mdRecord per-character paths + one-line key appearance + whether confirmed. - After rendering, check for 0 bytes/corruption/md5 duplicates, and visually inspect whether the same person is consistent across angles. If it wavers, re-render (up to 3 times). Once confirmed, hand off INDEX.md to prompt-smith·panel-validator.
- Subsequent episodes: if refs/ already exists, do not re-render and reuse it (series consistency). Only add renders for new characters.
Input — panel prompt list
_workspace/04_visual/ep{NN}_prompts.md. Each panel has the following format:
### panel_001
- scene_group: A
- scene_id: S2 / location: LOC_CLASSROOM
- prompt: "<글로벌 스타일 + 장소 토큰 + 캐릭터 토큰&레퍼런스 앵커 + 구도/상태색 + in-image 말풍선(한글 대사) + negative(no watermark/English/gibberish)>"
- output: _workspace/05_panels/ep{NN}/panel_001.png
Before rendering, create the output directory: mkdir -p _workspace/05_panels/ep{NN}
Consistency token validation (required before rendering)
If character appearance, art style, and background waver between panels, the webtoon collapses. Because codex-image has difficulty fixing seeds, consistency tokens in the prompt text + confirmed reference anchorsare the consistency mechanism. Therefore, immediately before rendering, check that each prompt includes the following:
- Art style token —
style-bible.md's fixed style keywords. - Appearance tokens + reference anchors for appearing characters —
character-sheets.md's fixed keyword set +refs/{IDTAG}_*.pngspecify confirmed references as the appearance baseline (including identifying marks left/right). - Scene location fixed token (LOC_*) — the same location background token for all panels with the same scene_id. The key to preventing abrupt background changes.
- Aspect ratio/composition/state color instructions — the shot list's angle, composition, and scene color (normal/rewind/settlement, etc.).
- in-image speech bubbles/Korean dialogue — lettering.md's speech bubbles (type, exact Korean source text, position). Exclude panels with no dialogue.
The negative prompt is no textnot no watermark, no English text, no gibberish/garbled/misspelled text(because speech bubbles/Korean must be drawn). If missing or ambiguous, request reinforcement from prompt-smith. Do not render panels without consistency tokens, references, or location tokens — the cost of redrawing is greater.
Key — simultaneous 5-image batch rendering
Never exceed 5 codex global concurrent sessions. Because of the ChatGPT plan's concurrent request limit, 6+ causes responses to fluctuate due to queueing and some tasks to become abnormally long. Even with 3 panel-artists, the combined simultaneous codex exec executions of the three artists must be 5 or fewer, so the orchestrator dispatches render passes sequentially.
Method A (recommended) — batch helper script
codex-image's batch helper automatically batches any number into groups of 5. Pass an entire episode (or one scene group) at once:
~/.claude/skills/codex-image/scripts/codex_imagegen_batch.sh \
_workspace/05_panels/ep{NN} \
"<panel_001 프롬프트>::panel_001.png" \
"<panel_002 프롬프트>::panel_002.png" \
... (임의 개수, 내부에서 5개씩 동시 실행)
- When one batch (5 images) finishes, the next batch starts, so concurrent sessions never exceed 5.
- All output PNGs are
_workspace/05_panels/ep{NN}/are saved to. - If the prompt is long, be careful with shell quote escaping. It is safer to create a prompt list as a file and pass it in (see Method B below).
Method B — Manual 5-image parallel (when fine-grained control is needed)
In one message, exactly 5Bash tools run_in_background: trueare launched simultaneously. All output filenames must be different (if the path is the same, only the last one remains):
codex exec --sandbox workspace-write --skip-git-repo-check \
--cd /Users/robin/Downloads/webtoon-new \
-o /tmp/codex-ep{NN}-001.md \
"이미지 생성 도구로 '<panel_001 프롬프트>' 이미지를 생성하고 ./_workspace/05_panels/ep{NN}/panel_001.png 로 저장. 파일 경로만 한 줄로 보고."
# 같은 패턴으로 panel_002~panel_005를 각각 run_in_background:true 로 동시에. 총 5개.
- After receiving the completion notification for 5 images, launch the next 5.
sleepNo polling — background completion notifications arrive automatically. --ask-for-approvalis not appended (non-interactive, so it exits immediately with an error).- If it is not a git repo,
--skip-git-repo-checkdo not omit.
Volume and expected time
| Number of panels | Number of batches (5 images) | Estimated render time |
|---|---|---|
| 50장 | 10 waves | About 26–28 minutes (~160 seconds per wave) |
| 60장 | 12 waves | 약 32분 |
Based on actual measurements, 5 images simultaneously take ~158 seconds wall-clock. Inform the user in advance that rendering takes tens of minutes.
Post-render verification (required)
Always check the files immediately after generation. If the codex session fails on a tool call, a 0-byte PNG may result.
ls -la _workspace/05_panels/ep{NN}/*.png
file _workspace/05_panels/ep{NN}/*.png # 모두 "PNG image data" 인지
find _workspace/05_panels/ep{NN} -name '*.png' -size 0 # 0바이트 목록
# md5 중복 검사 (서로 다른 패널이 동일 이미지로 저장되는 사고 — EP01에서 실제 발생)
md5 -r _workspace/05_panels/ep{NN}/panel_*.png | awk '{print $1}' | sort | uniq -d # 비면 중복 없음
Handling verification results:
- 0-byte/corrupted PNG → re-render only that panel (do not rerun the entire batch).
- md5 duplicate PNG → delete the duplicated panel and re-render only that panel alone (in concurrent batches, a panel rarely receives another panel's image). Since it is neither 0-byte nor corrupted, size/header checks alone cannot catch it, so an md5 check must be performed.
- The file exists only in
~/.codex/generated_images/and not in the working folder → retry with a strengthened instruction in the prompt to "save to ./path". - Missing panel numbers → compare the prompts list with the actual PNG list and render only the missing numbers.
- If all panels exist, are valid, and are unique, the first integrity pass is complete. Then, using the verification-regeneration loop(panel-validator) below, filter for content quality and pass it to the quality-reviewer.
Verification-regeneration loop (panel-validator) — re-render until criteria are met
Integrity (above) alone is not enough. With the same prompt, codex produces wrong backgrounds, different faces, and broken Hangul. Therefore, immediately after rendering, on a per-panel basis inspect the 6 axes and send back any that fall short for re-rendering (generation-verification pattern). Only passing panels go to assembly.
6-axis inspection (open each panel with Read for visual inspection + script):
- C1 Character consistency —
refs/{IDTAG}_*.pngIs it the same person as (hair/eyes/body type/identifying marks/left-right). Intended variations (e.g., settlement graying) are exceptions. - C2 Background/Location Continuity — Does the background match that panel's scene_id/location (LOC_*)? If it is the same scene but the location changes abruptly (road → indoors), REGEN.
- C3 Speech Bubbles & Korean Text (Highest Risk) — Does the speech bubble type match, and does the **Korean text exactly match the script (no typos, blurring, English/fake characters)** and is it legible? If a panel with no dialogue has a speech bubble, REGEN. + (d) Integrated lettering: Is the speech bubble/text in a hand-drawn ink tone that blends into the artwork — if it feels like a clean digital font laid flat as an "overlay/paste-on," REGEN even if the text is correct(mistaken for post-production text). Detection signals (OVERLAY=REGEN): mechanically uniform strokes, perfectly even letter spacing, system gothic look, excessively smooth edges, black tone separated from the artwork. Judge separately from spelling, covering 100% of all panels with text + a cross-comparison sweep after the first pass(whether only one panel stands out with a digital font). Record INTEGRATED/OVERLAY per panel in the validation.md lettering ledger — do not pass based only on an aggregate stamp (C3 strong ✓). For detailed procedure, see
panel-validatorthe "C3(d) Integrated Lettering" section of the definition. - C4 Prompt Fidelity — Are the shot size/angle/composition/emotion/state color as intended.
- C5 Dialogue Flow — Does the conversation read naturally when read in sequence with the preceding and following panels.
- C6 Technical Integrity — Not 0 bytes/corrupted/md5 duplicate, paths and numbers accurate.
Loop: For each panel, ACCEPT / REGEN (reason + correction instruction). REGEN → prompt-smith reinforces only that panel's prompt (abrupt background change → strengthen location tokens, broken Korean → quote/bold/shorten text, appearance deviation → reference anchors/marker emphasis, composition misalignment → specify angle) → the responsible panel-artist re-renders only that panel → re-inspect. Maximum 3 times per panel. If it still falls short after 3 times, close with the best version as ACCEPT-FLAG(pass + limitations stated) and record in ep{NN}_validation.md(to prevent infinite loops). If C3 (Korean) fails 3 times, close with "keep the speech bubble shape + adopt the most accurate text version" and flag it to quality-reviewer.
Output: _workspace/04_visual/ep{NN}_validation.md(per-panel verdict, 6-axis results, regeneration count, flag list).
Redrawing Only Some Parts (Follow-up Work)
Re-render only the panels that quality-reviewer designated as FIX/REDO. Do not redraw everything.
- Read the REDO panel numbers and correction instructions from qa_report.md.
- Reflect the correction instructions in that panel's prompt (coordinate with prompt-smith).
- Re-render only those panels in batches of 5 or fewer → re-verify.
- If the same panel still fails after 2 re-renders, pass it with a warning and state it in the report (to prevent infinite loops).
Anti-patterns
- Batches of 6 or more — Increased response dispersion due to queuing, abnormal delays for some tasks.
- Multiple artists each doing 5 panels simultaneously (10+ total) — Global 5 limit exceeded. Must dispatch sequentially.
- Foreground serial execution — Parallel effect lost. Always
run_in_background: true. sleepto wait for completion — Background notification is automatic. Do not poll.- Using N identical output paths simultaneously — Only the last remains. All filenames must differ.
- md5 duplicate not checked — In concurrent batches, you miss the accident where one panel receives another panel's image (actually occurred in EP01). Do not look only at size/header.
- Rendering with missing reference/location tokens — Appearance and background waver, causing rework costs to explode. Do not render panels before the reference sheet is finalized and before location tokens are injected.
no textto suppress speech bubbles — This harness bakes speech bubbles in-image.no textmakes dialogue not drawn. Negation isno English/gibberish/misspelled text만.- Going straight to assembly without validation — Do not pass panels to assembly before they pass the panel-validator 6 axes.
- C3 aggregate stamp — Passing everything in bulk as "C3 strong ✓" without individual lettering judgment per panel. In EP01, 13 panels' overlay-look leaked out this way. For panels containing text, record INTEGRATED/OVERLAY for all of them in the ledger.
- Omitting lettering cross-comparison — Looking at panels only separately fails to catch the drift where "only one panel stands out with a digital font." After the first pass, gather text panels and compare them side by side.
Cost caution
- Each codex call is an independent session → consumes token/plan message limits N times over.
- Before heavy batches (50+ panels),
codex login statusto check remaining plan quota.
Output
_workspace/05_panels/ep{NN}/panel_001.png…panel_0NN.png(50+장)- Report the render summary (number of generated/retried/failed panels) to episode-compositor and the leader.