ControlNet & Preprocessors — structural guidance as its own data pipeline
Hansen presents the ControlNet/preprocessor area separately from the sampler. For beginners, this is an important principle: ControlNet is not simply a checkbox attached to a model, but an independent chain that creates a control image, selects its source, loads the matching ControlNet and adds structural conditioning to generation.
Two structural channels: Depth and Canny
Stack order
Depth stack 417 feeds Canny stack 419; 419 feeds Apply ControlNet Stack 418.
| Channel | Generated source | Model | Strength |
|---|---|---|---|
| Depth | DepthAnythingV2Preprocessor 38 | SDXL Depth ControlNet 21 | shared control 723 = 0.36 |
| Canny / edges | Image Edge Detection Filter 165 | SDXL Canny ControlNet 23 | shared control 722 = 0.31 |
A control image can come from an external map or be generated inside the workflow
Node 456 defines the shared source mode: external maps or generated preprocessors. This allows the downstream ControlNet chain to remain unchanged when the source changes.
The reusable ControlNet architecture
Depth and Canny preserve different kinds of information
Depth is therefore often the first structural guardrail, while Canny can add stronger preservation of fine contours. This is a general principle, not a dependency on one specific model.
| Control | Primary signal | ArchViz use |
|---|---|---|
| Depth | Volume and relative depth | Major geometry, perspective, massing |
| Canny / edges | Contours and hard boundaries | Fine facade lines, openings, rhythm, edges |
Debug ControlNet before the sampler
- Verify the source image.
- Inspect the preprocessor-map preview.
- Verify source selector 456.
- Verify the correct ControlNet model for the map type.
- Verify strength / start / end.
- Verify stack order and Apply ControlNet Stack 418.
- Only then evaluate the sampler result.
Exercise: explain the Depth branch without model names
Find the Depth path and describe it as a system: “source → depth map → selector → structural control → conditioning → sampler.” If you can do that without naming a particular checkpoint, you understand the principle.