Conditioning means everything the model is told before it generates, and text is only one channel.
Text is excellent for subject and style and nearly useless for spatial arrangement.
Describing a person standing three-quarters on with their left arm raised rarely produces that pose.
ControlNet solves this by adding a structural input alongside the prompt.
The input is a spatial map the same size as the image: edges, depth, segmentation, or a pose skeleton.
Generation is then required to respect that map while the prompt supplies everything else.
The architecture is the interesting part, because it avoids retraining the base model.
A trainable copy of the encoder is made, and the original weights are frozen.
The copy processes the control signal and its output is added back into the frozen network.
The connecting layers start at zero, so at the beginning of training the model behaves exactly as before.
That zero initialisation is why a ControlNet can be trained on a modest dataset without damaging the base.
Several can be stacked, combining a depth map for layout with a pose for the figure.
In production this is usually the difference between a demo and a usable tool.
Advertising, product imagery and game assets all need the composition fixed in advance.
The same idea appears elsewhere as adapters and reference conditioning, all trading freedom for control.