| name | webtoon-bubble-overlay |
| description | codex의 image-to-image 기능으로 기존 컷 이미지에 손그림 말풍선·효과음을 직접 박아 진짜 웹툰 스타일 임팩트를 만드는 스킬. shout·큰 SFX·강조 dialogue만 처리하는 하이브리드 분담. CSS 말풍선의 어색함을 넘어설 때 반드시 사용. bubble-artist 에이전트가 호출한다. |
Webtoon Bubble Overlay — 이미지에 손그림 말풍선 박기
왜 이미지에 박는가
CSS clip-path로 만든 가시 말풍선은 기계적이고 단조롭다. 진짜 한국 웹툰의 손그림 말풍선은 거친 외곽선·자연스러운 가시·약간 기울어진 글씨로 독자의 시선을 잡는다. 모든 텍스트가 아닌 임팩트 텍스트(shout · 큰 SFX · 강조 dialogue)에만 적용하여 시간·비용을 통제한다.
핵심 룰
- codex
-i <image> 옵션 사용. 기존 PNG를 첨부 → 말풍선 추가 → 새 PNG 생성.
- 원본 백업 필수.
cut_{NN}.png → cut_{NN}.orig.png 백업 후 작업.
- 원본 시그니처 보존. 청록 UI, 흑백 실루엣, 자홍 글리치, 캐릭터 외형은 절대 손대지 않는다.
- 컷당 최대 2개 말풍선. 그 이상은 가독성 깨짐.
- 말풍선 크기 ≤ 컷의 1/4. 위치와 디자인으로 임팩트.
워크플로우
Step 1 — 처리 대상 식별
shot_list_enriched.json의 각 컷에서 render_target: "image"인 텍스트만 추출.
자동 분류 기본값:
| 텍스트 타입 | render_target 기본값 |
|---|
| shout | image |
| sfx (큰 효과음: 쾅·콰지직·퍼억·쿵·쾅쾅 등) | image |
| sfx (작은 효과음: 터벅·ping·지직 등) | html |
| dialogue (1-3단어, 감정 강함) | image |
| dialogue (일반 대화) | html |
| thought, whisper, narration | html (항상) |
| system_ui_text, operator_text, monster_emotion, glitch_text | html (항상) |
dialogue-writer가 enriched JSON 작성 시 이 분류를 적용.
Step 2 — 원본 백업
cp images/cut_{NN}.png images/cut_{NN}.orig.png
이미 .orig.png가 있으면 건너뜀 (재실행 시 원본 보존).
Step 3 — codex 호출
입력 이미지 첨부 + 정밀 프롬프트:
cd <ep_dir>/images
codex exec --sandbox workspace-write --skip-git-repo-check --cd . \
-i ./cut_{NN}.orig.png \
-o /tmp/codex-bubble-{ep}-{cut}.md \
"첨부한 이미지를 입력으로 받아 한국 웹툰 스타일의 손그림 말풍선/효과음을 추가한 새 이미지를 생성하세요.
요구사항:
(1) [위치]에 [말풍선 종류] 모양 [요소]을 그리고 그 안에 [한글 텍스트] 텍스트를 넣으세요.
(2) [디자인 명세 — 색, 외곽선, 글씨 굵기]
(3) 원본 이미지의 [보존할 시그니처]는 절대 손대지 말고 그대로 유지.
(4) 말풍선/효과음 크기는 컷의 [1/4 / 1/3] 이하, [영역 제한]에만 배치.
./cut_{NN}.png 로 저장하고 경로만 한 줄 보고."
Step 4 — 결과 검증
- 생성 파일 존재 확인
- 파일 크기 비교 (원본의 80-120% 범위, 너무 작으면 깨진 것)
- 임팩트 컷은 한 번 더 메인 작가(사람) 검수 권장
Step 5 — 메타 기록
cut_{NN}.bubble.meta.json 작성.
디자인 패턴 라이브러리
Shout 빨강 가시 (분노/외침)
"좌측 하단에 빨간색 가시(spike) 모양의 외침 말풍선(shout bubble)을 그리고 그 안에 흰색 굵은 한글 '안 돼!!!' 텍스트를 넣으세요. 말풍선은 손그림 느낌의 거친 외곽선, 빨강 #FF3B3B 채움, 검정 굵은 테두리. 가시는 8-10개. 말풍선 크기는 좌측 하단 1/4 영역에만 배치."
Shout 노랑 (놀람)
"우측 상단에 노란색 가시 모양의 외침 말풍선을 그리고 안에 검정 굵은 한글 '뭐야?!' 텍스트. 말풍선은 손그림 느낌의 거친 외곽선, 노랑 #FFD93D 채움, 검정 굵은 테두리. 가시 6-8개. 우측 상단 1/5 영역에만 배치."
Large SFX (폭발·임팩트)
"컷 중앙 상단에 굵은 산세리프 한글 '쾅—————' 효과음을 그리세요. 글씨는 흰색 채움 + 검정 굵은 외곽선(3-4px), 5-10도 기울임, 컷 가로폭의 60% 정도 크기. 글씨 끝의 '—'는 갈라지듯 길게 흩어짐. 원본 4분할 구도와 시스템 UI는 그대로."
Medium SFX (액션)
"검 충돌 지점(좌측 상단 1/4)에 굵은 한글 '챙—' 효과음을 그리세요. 흰색 채움 + 검정 외곽선, 약간 기울임. 컷의 1/8 크기. 청록 검광 효과는 그대로 유지."
Dialogue Emphasis (강조 1-3단어)
"우측 하단에 둥근 흰 말풍선을 그리고 안에 검정 굵은 한글 '믿어줘.' 텍스트를 넣으세요. 말풍선은 손그림 거친 외곽선, 흰 #FFFFFF 채움, 검정 굵은 테두리(2-3px), 둥근 꼬리가 화자 쪽을 향함. 우측 하단 1/4 영역에만 배치."
자주 실수하는 패턴 (피하기)
- 말풍선이 캐릭터 얼굴을 가림 → 위치를 화자가 보이는 쪽 모서리로 명시
- 말풍선 크기가 너무 큼 → "1/4 영역" / "1/5 영역" 명시
- 원본 시그니처 손상 → "원본의 청록 UI 그대로 유지" 등 보존 항목 명시
- 글씨가 한글 아닌 다른 문자로 렌더 → 프롬프트에 "한글로" 명시 + 정확한 텍스트 따옴표 인용
- 여러 말풍선 한 번에 시도 → 실패 → 한 컷당 1-2개로 제한, 그 이상은 두 번 호출
비용 가이드
- 컷당 codex 호출 1회 ≈ 80-110초 (image-to-image는 일반 생성보다 약간 더 걸림)
- 5장 병렬 가능
- 회차당 임팩트 컷 2-3개 × 30화 = 약 70-90 호출 = 약 70분 (병렬)
체크리스트