웹툰 strip을 패널로 자를 때, 거터(패널 사이 흰 띠) 가장자리에서 타이트하게 자르던 방식을 거터 중앙에서 자르도록 바꿨다. 각 패널이 흰 여백을 절반씩 머금은 채 말풍선 제거(clean)를 거치고, 마지막에 내용 바운딩박스로 여백을 잘라낸다. 가장자리에 걸친 풍선·그림이 잘려 LaMa 인페인팅이 깨지는 문제를 막는 것이 핵심.
거터의 첫 행에서 바로 잘라 여백 없이 타이트. 거터 검출(97% 흰 행)이 살짝 어긋나면 패널 끝 그림이 잘리고, 패널 경계에 걸친 말풍선이 두 동강 나 LaMa가 엉뚱하게 복원한다.
거터의 시작·끝을 재고 그 한가운데를 절단선으로. 풍선·그림이 온전히 패널 안에 들어와 clean이 안전하다. 흰 여백은 clean 뒤 내용 바운딩박스로 정확히 제거.
절단점이 거터와 1:1 대응이라 패널 개수·번호가 기존과 완전히 동일
(ep001 = 89개 그대로). 따라서 text 트랙의 VLM 메타(panel_NNN)와 정합성이 깨지지 않는다.
strip 스티칭 → 거터 중앙 절단 → panels_raw (여백 보존, 대사 有)
풍선(YOLO conf0.4·45px) ∪ 텍스트(thr0.5·24px) → LaMa → panels_clean
비흰색 바운딩박스로 상하좌우 여백 제거 → panels_final (학습용)
# 작품 무관 — WEBTOON_DS 로 전환 WEBTOON_DS=ijiklog python panel_split.py # 1차: raw → panels_raw (여백 보존) WEBTOON_DS=ijiklog python clean_panels.py # 말풍선 제거: → panels_clean WEBTOON_DS=ijiklog python trim_white.py # 2차: → panels_final (타이트)
각 줄 5컬럼. 구 방식 = 바로 타이트하게 자른 뒤 clean (1.edge → 2.edge→clean = 구 최종) · 신 방식 = 거터 중앙 절단으로 여백 보존 후 clean → 트리밍 (3.mid+margin → 4.mid→clean → 5.trim = 신 최종). 핵심 비교는 2번(구 최종) ↔ 5번(신 최종).
패널 경계에 풍선이 걸리면 잘린 채로 clean에 들어간다. 잘린 풍선의 외곽선·꼬리를 검출기가 온전히 못 잡아 LaMa가 다 못 지우고 경계에 곡선·띠 잔재를 남긴다.
풍선이 온전한 상태로 clean되어 인페인팅이 안정적. 깨끗해진 뒤 흰 여백만 바운딩박스로 정확히 제거.
ep001~ep008에서 YOLO 풍선 마스크가 패널 상/하단 경계(3px)에 닿는 패널을 자동 탐색(403개 검출). 그중 잘림이 심한 대표 4개를 구 방식(자르기→클린)과 신 방식(여백 보존 크롭→클린→트리밍) 두 행으로 비교. 이미지 아래에 각 과정 표기.
큰 말풍선("아 맞아 맥스, 어제 정류장에서…")이 패널 윗변에 걸쳐 있다.







말풍선("연봉협상을 다시 할까 해서요.")이 패널 윗변에 걸쳐 있다.







상단("우리…")·하단("같이 '이직 스터디' 할래요…?") 두 풍선이 모두 경계에 걸쳐, edge 크롭(1254px)이 mid(1728px)보다 474px 작다 = 그만큼 잘려나갔다.







말풍선이 아닌 나레이션 박스("본격적인 도파빈 충전…")의 윗변이 경계에 걸린 변종 사례. 풍선만의 문제가 아님을 보여준다.







왜 잘리나 — 풍선 안쪽은 흰색이라, 폭이 좁은 풍선의 내부 행이 패널 전체 폭 기준 ≥97% 흰색으로 읽혀 거터로 오인된다. 구 방식은 그 거터의 첫 행(=풍선 한가운데)에서 바로 자르므로 풍선이 동강 난다. 신 방식은 거터 중앙에서 자르고 여백을 남겨, 풍선 전체가 한 패널에 담긴다.
풍선이 경계에서 떨어져 있으면 두 방식 최종 결과는 사실상 동일하다. 정직하게 함께 제시.
| 단계 | 스크립트 | 핵심 파라미터 |
|---|---|---|
| 1차 분할 | panel_split.py |
WHITE≥235, GUTTER_FRAC 0.97, MIN_GUTTER 18px, MIN_PANEL 200px → 거터 런의 (start+end)//2 를 절단점으로 |
| 말풍선 제거 | clean_panels.py |
YOLO speech-bubble conf0.4 45px팽창 ∪ comic-text-detector seg0.5 24px팽창 → LaMa |
| 2차 트리밍 | trim_white.py |
비흰색(min<235) 바운딩박스, PAD 4px 여유 (전부 env 파라미터화) |
알려진 트레이드오프 — 거터 안에 가는 선(획)이 있으면 97% 흰색 판정은
통과하지만 trim의 비흰색 판정엔 걸려 인접 패널의 옅은 윤곽이 살짝 남을 수 있다. LoRA 학습엔 무시 가능한
노이즈이며, 거슬리면 GUTTER_FRAC를 0.99로 올린다. "여백 보존(풍선 안 잘림)" 대가로 택한 선택.