TBG ETUR ControlNet Pipeline
Per-tile control without per-tile node spaghetti
- controlnet
- model_patch
- Controlnet_Pipe
- custom_controlnet_image
- Controlnet_Pipe
- INFO
Tiled upscaling has a fundamental tension: each tile is sampled on its own, but you want every tile to stay faithful to the same source. Without a structure condition, tiles drift - the classic patchwork look, which is precisely why "skipping ControlNet Tile on tiled upscale" is a top-scored mistake in upscaling threads. In ETUR's world, the ControlNet Pipeline node is how you hand that structure condition to the tiler: you set it up once, in tile-space, and the refiner applies it per tile instead of you building a ControlNet graph for every region.
It's a pipe-construction node, not a sampler. You feed it a ControlNet model plus preprocessing settings, and it appends a config entry to the Controlnet_Pipe - a list that travels to the refiner, where the ETUR machinery crops the control image per tile and applies it during sampling. The README's pitch is "unlimited ControlNet inputs per tile," which is a fancier way of saying the pipe is a list and you can chain as many of these as you want.
The inputs that matter
- controlnet - the ControlNet model itself. For Flux, the README's model list points at the Shakker-Labs Union Pro 2.0 (canny/soft edge/depth/pose/gray) or the Flux.1-dev-ControlNet-Upscaler, which is the one you want for detail-preserving tile upscaling. Note the union dropped the tile condition in 2.0 - if you came for tile-ControlNet upscaling, load the dedicated upscaler ControlNet.
- preprocessor - runs before the control is applied. Options include
None,DepthAnythingV2,Canny Edge,Canny, andControlNetInpaintingAliMama. The Canny thresholds (canny_low_threshold100 /canny_high_threshold150) live right on this node. - strength (default 0.5) / start (0) / end (0.5) - the classic ControlNet weight and step window. The default end of 0.5 reflects the standing community advice: release the condition once composition has formed. Modern union models also publish lower-than-1.0 weights, so 0.5 is a sane start.
- controlnet_mode - the interesting ETUR-specific part. Besides
ControlNetthere'sReference_Image(which the code wires as a Flux Kontext "chained" reference path),Input Tile CFG Hook(a post-CFG pull back toward the source tile latent - strength controls that pull),Model_Patch, and the 42lux-Hildegard reference modes. If you're on a stock workflow, leave it onControlNet. - custom_controlnet_image - drop in your own preprocessed map (depth, canny, whatever you made elsewhere) instead of letting the node's preprocessor run.
Outputs: Controlnet_Pipe (wire into the refiner's optional input of the same name) and INFO (a string dump of the pipe - handy for confirming what got appended, nothing more).
Installing it
Part of the TBG ETUR pack:
cd ComfyUI/custom_nodes
git clone https://github.com/Ltamann/ComfyUI-TBG-ETUR
cd ComfyUI-TBG-ETUR
pip install -r requirements.txt
Or ComfyUI Manager → search "TBG" → TBG_Enhanced Tiled Upscaler & Refiner FLUX PRO, restart. You'll also want the actual ControlNet weights from the README's model list, and if you use the DepthAnythingV2 preprocessor, the model that goes with it.
Notes and gotchas
The biggest trap is the preprocessor × strength interaction. If your control image comes from Canny, the thresholds decide everything - 100/150 is fine for crisp edges, but on a soft photo you'll get a sparse edge map and the tiles will drift anyway. Preview the preprocessed map before committing to a 50-tile run.
Also: this is the pack's answer to a complaint the community levels at a lot of tiled pipelines - that ControlNet wiring per tile is a pain. It works, but only if the refiner actually has a ControlNet path configured; on the CE refiner the pipe is honored in the modes CE supports, and some PRO-only modes (like the full Kontext chaining) are member-gated. If the pipe shows up in INFO but your tiles look unconditioned, check which refiner you're on before blaming the ControlNet.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| strength | FLOAT | 0.500–1 | ControlNet strength for ControlNet modes. For Input Tile CFG Hook, controls the post-CFG pull toward the sampler input tile latent. Ignored by Reference_Image mode. |
| start | FLOAT | 0.000–1 | Start percentage for ControlNet or Input Tile CFG Hook influence. Ignored by Reference_Image mode. |
| end | FLOAT | 0.500–1 | End percentage for ControlNet or Input Tile CFG Hook influence. Ignored by Reference_Image mode. |
| canny_low_threshold | INT | 1000–255 | — |
| canny_high_threshold | INT | 1500–255 | — |
| preprocessor | COMBO | 5 options: None, DepthAnythingV2, Canny Edge, Canny, ControlNetInpaintingAliMama | |
| controlnet_modeopt | COMBO | ControlNet | 7 options: ControlNet, Reference_Image, Input Tile CFG Hook, 42lux-Hildegard Ref.Img, 42lux-Hildegard Ref.Img + CFG Hook, Model_Patch, +1 |
| controlnetopt | CONTROL_NET | — | |
| model_patchopt | MODEL_PATCH | — | |
| Controlnet_Pipeopt | Controlnet_Pipe | — | |
| custom_controlnet_imageopt | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| Controlnet_Pipe | Controlnet_Pipe | — |
| INFO | STRING | — |