Nodes/ComfyUI/Apply Controlnet with VAE
ComfyUI Node Runs on cloud

Apply Controlnet with VAE

The deprecated SD3 applier you'll still find in old workflows

By Comfy-Org·Created 4 years ago·Updated about 6 hours ago· 129,874
Apply Controlnet with VAE
  • positive
  • negative
  • control_net
  • vae
  • image
  • positive
  • negative
strength1.00
start_percent0.000
end_percent1.000

Let's be direct: this node is deprecated, and ComfyUI marks it as such. ControlNetApplySD3, displayed as "Apply Controlnet with VAE," was the SD3-era ControlNet applier, and it survives mainly in downloaded workflows that predate the consolidation. The good news is that it does exactly the same thing as the modern ControlNetApplyAdvanced - the one meaningful difference is that this version makes the vae input required instead of optional. If you load an old workflow and this node is in it, it will still run fine. The question is whether to keep it or swap it.

How it works

The mechanism is identical to the standard applier: it takes your positive and negative conditioning, a control_net, and a control image, and it stamps a control hint onto both conditionings so the sampler guides generation toward the structure in that image - edges, depth, pose, whatever your ControlNet was trained on. The strength dial (default 1, up to 10) sets how hard that structure pulls; start_percent and end_percent (both 0–1) set when during denoising the condition applies. That last pair is the one people underrate: starting at 0 and ending at 0.5 applies the ControlNet only during composition, letting the model add its own detail in the back half - the community's standing advice for structure-heavy work.

The required vae input exists because some SD3-style ControlNets expect the control hint to be encoded into latent space rather than fed as pixels. When the model wants that, the VAE does the encode. When it doesn't, the input just sits there unused - which is part of why requiring it was judged a mistake and later relaxed.

Inputs and outputs

Both positive and negative conditioning in, both out (with the control hint attached), plus control_net, image, strength, start_percent, end_percent, and that required vae. The two outputs feed your KSampler exactly like any other conditioned positive/negative pair. strength == 0 is a supported shortcut - the node passes the conditionings through untouched, so you can zero a ControlNet branch without bypassing the node.

Should you swap it?

If the workflow runs, leave it. It produces identical conditioning to ControlNetApplyAdvanced, and rewiring a working graph to satisfy aesthetics is how you break it. But if you're building new, use ControlNetApplyAdvanced - the vae becomes optional, which is the one real functional difference and it matters on SD1.5/SDXL pixel-space ControlNets where passing a VAE is unnecessary. Model files go in models/controlnet as always, and the ControlNet world itself moved on: on modern bases you're usually loading a union ControlNet (see Set Union ControlNet Type) at strengths around 0.65–0.8 rather than the old 1.0. None of that changes this node's job - it just changes what you hand it.

Categorymodel/conditioning/controlnet

Inputs (8)

NameTypeDefaultDescription
positiveCONDITIONING
negativeCONDITIONING
control_netCONTROL_NET
vaeVAE
imageIMAGE
strengthFLOAT1.000–10
start_percentFLOAT0.0000–1
end_percentFLOAT1.0000–1

Outputs (2)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING