Divide and Conquer Algorithm
The brain of the Divide and Conquer suite — it picks your upscale size so the tiles actually fit
- image
- upscale_model
- IMAGE
- dac_data
This is the node that makes "Divide and Conquer" a workflow instead of a slogan. Steudio's pack is a tiled upscaling suite - the same family as Ultimate SD Upscale and Tiled Diffusion, but built so you can process each tile individually with its own img2img pass, its own ControlNet conditioning, even its own caption. This node is the first of the three you wire up: it looks at your image, your tile size, and how much overlap you're willing to tolerate, then decides the exact dimensions the upscale needs to hit and actually performs the upscale.
Why does it get to choose? Because naive tiling looks like garbage. If you just blow an image up 4× and cut it into 1024px squares, the tiles don't tile - you get partial pixels at the seams and a grid that doesn't line up. So this node works backwards: given tile_width, tile_height, min_overlap, and min_scale_factor, it computes how many tiles fit across, how much the image has to grow so every tile is whole, and then rounds everything so the grid comes out even. The result is a clean target resolution that hits at least your minimum scale factor without wasting tiles.
The inputs that matter
image- what you're upscaling. Feed the output of aLoadImageor any IMAGE you have.upscale_model- optional, and worth saying plainly because older builds show it as required. Plug anUpscaleModelLoader(a 4x ESRGAN like 4x-UltraSharp or 4xRealWebPhoto) in here and the node runs a real model upscale. Leave it empty and it falls back to plain interpolation usingscaling_method(default lanczos), which is the "more pixels, no new detail" job from the upscaling ladder.tile_width/tile_height- default 1024. The size of each tile you'll process later. 1024 is the sweet spot for SDXL-class models; match it to whatever model you'll run on the tiles.min_overlap- how much adjacent tiles share. Default1/32 Tile, which is tiny.1/8to1/4is where most people actually land; the overlap is what the combine step uses to blend, so cheaping out here is how you get seams.min_scale_factor- default 3, range 1–8. The minimum scale; the node may push higher so the grid comes out clean. 3 is aggressive. If you just want a 2× upscale, set it to 2.tile_order-spiral(default) orlinear. This sets the order tiles are numbered and processed later. Spiral works outward from the center, which matters when you're only regenerating some tiles - the center is usually the subject.
What comes out
Two wires. IMAGE is the upscaled image, already resized to the computed dimensions. dac_data is the payload - a little dictionary carrying the upscaled size, tile size, overlap, grid, and order. You don't touch it; you just run it from this node into Divide Image and Select Tile and later into Combine Tiles. Those two nodes are dumb without it, and it's exactly why the suite stays consistent: the algorithm decides, everyone else just follows the plan.
The node also prints a summary in its UI - original size, upscaled size, grid like 3x3 (9 tiles), overlap in pixels, effective scale - which is the easiest way to see what it actually decided.
Install and gotchas
Install once for the whole suite: ComfyUI Manager, search ComfyUI Steudio, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/Steudio/ComfyUI_Steudio
Restart ComfyUI and you're done - no pip deps, no model downloads for the nodes themselves. The bundled example workflow (Workflow → Browse Templates → comfyui_steudio) pulls in optional companions like Florence2 for per-tile captions and a Tile ControlNet; those are yours to supply.
Where people get burned: seams are almost always an overlap problem, not a quality problem - bump min_overlap. And if you upgraded from the 1.x pack, delete the old nodes and rebuild; the 2.x rename won't migrate your graph. Community consensus on r/comfyui is that this is one of the best tiled upscalers going, with noticeably fewer seams than Ultimate SD Upscale - the trade is that it's not magic, it's per-tile work, and the captioning pass is usually the slow part.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| upscale_model | UPSCALE_MODEL | — | |
| scaling_method | COMBO | lanczos | 5 options: nearest-exact, bilinear, area, bicubic, lanczos |
| tile_width | INT | 1024 | — |
| tile_height | INT | 1024 | — |
| min_overlap | COMBO | 1/32 Tile | 7 options: None, 1/64 Tile, 1/32 Tile, 1/16 Tile, 1/8 Tile, 1/4 Tile, +1 |
| min_scale_factor | FLOAT | 3.001–8 | — |
| tile_order | COMBO | spiral | 2 options: linear, spiral |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| dac_data | DAC_DATA | — |