2.7 KiB
2.7 KiB
아키텍처
이 프로젝트는 OpenToonz 아이디어를 가져온 작은 Python/ComfyUI line preparation 브릿지입니다. OpenToonz C++ 링크는 의도적으로 피합니다.
모듈 구조
ComfyUI-OpenToonzLineTools/
__init__.py ComfyUI custom-node 진입점
opentoonz_line_tools/
cleanup.py 블루 러프 선 추출
autoclose.py endpoint 기반 gap closing
regions.py fillable region labeling
nodes.py ComfyUI node class
tests/
test_line_tools.py core algorithm smoke test
docs/
architecture.md / .ko.md
visual_pipeline.md / .ko.md
설계 원칙
- core algorithm은 ComfyUI tensor에 의존하지 않게 둡니다.
- ComfyUI wrapper는 tensor 변환, parameter binding, JSON 출력만 담당합니다.
- C++ 직접 바인딩보다 Python/OpenCV 재구현을 우선합니다.
- 전처리 단계마다 시각 preview를 출력합니다.
- panel splitter pipeline에서 판단을 확인/재실행할 수 있도록 JSON artifact를 남깁니다.
데이터 흐름
flowchart TD
A[ComfyUI IMAGE tensor] --> B[nodes.py tensor adapter]
B --> C[cleanup.py blue line mask]
C --> D[clean line RGB]
D --> E[autoclose.py gap closure]
E --> F[regions.py label map]
F --> G[preview IMAGE tensor]
F --> H[regions JSON]
구현 메모
Cleanup
cleanup.py는 HSV 기반 블루 분류, morphology, connected-component despeckling을
사용합니다. OpenToonz cleanup/color-line processing 아이디어를 블루 러프 원고에
맞게 가볍게 재구성한 것입니다.
AutoClose
autoclose.py는 작은 Zhang-Suen thinning 구현, endpoint detection, local
direction estimation, distance/angle filtering을 사용합니다. 핵심은 OpenToonz의
유용한 발상, 즉 paint/fill 전에 작은 gap을 닫는 것입니다.
Region Map
regions.py는 line mask 밖의 fillable connected region을 labeling하고 간단한
palette-style metadata를 출력합니다. 아직 완전한 Toonz Raster palette-index format은
아니지만, 그쪽으로 가기 위한 데이터 경계를 만듭니다.
확장 계획
flowchart LR
A[v0 smoke nodes] --> B[v1 batch panel workflow]
B --> C[v2 palette JSON correction]
C --> D[v3 reference color matching]
D --> E[v4 ComfyUI reassemble integration]
검증
현재 검증 명령:
/Users/iwongyeong/AI/ComfyUI/.venv/bin/python -m unittest discover -s tests -v
테스트 범위:
- 블루 선 추출과 despeckling,
- 작은 수평 gap closure,
- 닫힌 영역 labeling.