2.5 KiB
Architecture
This project is a small Python/ComfyUI bridge for OpenToonz-inspired line preparation. It intentionally avoids OpenToonz C++ linkage.
Module Map
ComfyUI-OpenToonzLineTools/
__init__.py ComfyUI custom-node entrypoint
opentoonz_line_tools/
cleanup.py blue rough line extraction
autoclose.py endpoint-based gap closing
regions.py fillable region labeling
nodes.py ComfyUI node classes
tests/
test_line_tools.py smoke tests for core algorithms
docs/
architecture.md / .ko.md
visual_pipeline.md / .ko.md
Design Rules
- Keep core algorithms independent from ComfyUI tensors.
- Keep ComfyUI wrappers thin: tensor conversion, parameter binding, JSON output.
- Prefer Python/OpenCV reimplementation over direct C++ binding.
- Emit visual previews for every destructive-looking preprocessing step.
- Preserve JSON artifacts so the panel splitter pipeline can inspect or replay decisions.
Data Flow
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]
Implementation Notes
Cleanup
cleanup.py uses HSV blue classification plus morphology and connected-component
despeckling. This is the practical counterpart of OpenToonz cleanup/color-line
processing for blue rough manuscripts.
AutoClose
autoclose.py uses a small Zhang-Suen thinning implementation, endpoint
detection, local direction estimation, and distance/angle filtering. This mirrors
the useful OpenToonz idea: close small gaps before paint/fill operations.
Region Map
regions.py labels connected fillable regions outside the line mask and emits
simple palette-style metadata. It is not a full Toonz Raster palette-index format
yet, but it creates the data boundary needed for one.
Extension Plan
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]
Verification
Current verification:
/Users/iwongyeong/AI/ComfyUI/.venv/bin/python -m unittest discover -s tests -v
The tests cover:
- blue line extraction with despeckling,
- small horizontal gap closure,
- closed-region labeling.