BlendScreentone
The node that finally stitches color art and screentone into one manga look
- colored
- screentone
- sketch
- IMAGE
- IMAGE
Sketch2Manga (arXiv 2403.08266) turns line drawings and colored illustrations into manga-style art by running two diffusion passes: one colorizes your image, one "screens" it with halftone shading. That leaves you with two images that don't quite line up - a color render and a screentone render. BlendScreentone is the glue that fuses them into the final manga page. If you've loaded this pack's drag-and-drop workflow, this is the last node in the graph, and it's doing most of the visible work.
How it works
The node takes your colored image and your screentone image and blends them region by region. First it clusters the colored image into cluster color regions using KMeans (the code is adapted from mattyamonaca/layerdivider), so "hair" and "background" become separate zones. For each zone it reads the screentone's local darkness and scales the saturation of the colored pixels in HSV space - hue stays, shading follows the screentone. That's the trick: instead of overlaying dots on top of color, it pushes the color's saturation down exactly where the screentone is dark, which reads as "ink over paint" instead of "texture slapped on."
Then it builds a grayscale version as screentone_scale * screentone + color_scale * colored_gray, and histogram-matches it to the colorized result's tonal range so the black-and-white and color outputs feel like the same render rather than two different images.
Inputs that matter
- colored (IMAGE) - the colorization-pass output. Feed it the result of your color model + ControlNet lineart.
- screentone (IMAGE) - the output of the finetuned
mangatone.ckptscreening pass. - cluster (INT, default 15) - how many color regions to segment. More regions = finer blending but slower; if you get banding, try more.
- screentone_scale / color_scale (FLOAT, 0.75 / 0.25) - how much the grayscale result leans on the screentone vs. the original colors. Sum is roughly your inkiness.
- scale_by_region (BOOLEAN, default true) - the region-aware KMeans path. Turn it off for a fast global blend while you're iterating.
- sketch (IMAGE, optional) - feed the original lineart in and it multiplies it back on top so your lines stay crisp instead of getting buried under shading.
Outputs
Two IMAGEs: the first is the final grayscale screentone composite (with your sketch baked in if you gave one) - that's your "finished manga page." The second is the colorized version with screentone shading applied. Wire whichever one you want into a Save Image node.
Install and gotchas
Same as the whole pack: ComfyUI Manager (search "Sketch2Manga"), or git clone https://github.com/dmMaze/sketch2manga into ComfyUI/custom_nodes/, then pip install -r requirements.txt and restart. The pipeline needs real model files before anything renders: a colorization SD1.5 checkpoint (the author used meinapastel from CivitAI), control_v11p_sd15_lineart.pth, and the finetuned mangatone.ckpt + mangatone_default.ckpt VAE from Hugging Face (dreMaz/sketch2manga).
Where people get burned: the requirements.txt bundles the pack's standalone gradio demo, so it pins old stuff like gradio==3.41.2 and numpy==1.26.4 that has nothing to do with this node - if pip resolution suddenly fights your other custom nodes, that pin is why. The node itself only really needs scikit-image, opencv, scikit-learn, and einops. Also, mismatched sizes: colored gets resized to the screentone's dimensions, so if your two passes ran at different resolutions the screentone wins. And the whole thing is batch-aware (it loops per image), so you can run a whole page of panels at once.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| colored | IMAGE | — | |
| screentone | IMAGE | — | |
| cluster | INT | 15 | — |
| screentone_scale | FLOAT | 0.75 | — |
| color_scale | FLOAT | 0.25 | — |
| scale_by_region | BOOLEAN | true | — |
| sketchopt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| IMAGE | IMAGE | — |