Nodes/ComfyUI TK3R Extensions/TK3R ControlNet Apply Advanced
ComfyUI Node

TK3R ControlNet Apply Advanced

ControlNet strength that fades out instead of snapping off

By TK3R·Created 7 months ago·Updated 7 months ago· 2
TK3R ControlNet Apply Advanced
  • positive
  • negative
  • control_net
  • image
  • vae
  • positive
  • negative
strength1.00
start_percent0.000
end_percent1.000
decaynone

The stock ControlNet Apply node already has start and end percent. What it doesn't give you is a curve: the condition runs at full strength right up to end_percent, and then it's gone. If the model is mid-detail when that happens, you can see the seam. TK3R ControlNet Apply Advanced adds a decay mode so the controlnet's influence eases off gradually instead of cutting out, which is the difference between "the model suddenly redraws the edges" and "the model smoothly takes over the detail pass."

If you've read the ControlNet advice anywhere, you know the standing trick: release the condition once composition has formed, and let the model spend its later steps on detail. This node is the more forgiving version of that trick. Instead of choosing "control for the first 70% of steps and not at all after," you choose "control for the first 70%, then let it bleed out."

How it works

Under the hood it wraps whatever ControlNet you hand it in a thin DecayControlNetWrapper. On each sampling step it reads the current sigma, converts your start_percent/end_percent into a sigma window using the model's own sampling schedule, and scales that step's control output by a multiplier. The decay curves behave like you'd expect: linear ramps evenly, cosine is an S-curve, exponential drops fast at first, and inverse_exponential (the confusingly-named one) holds strength for a while and then drops fast at the end. none is stock behavior - full strength inside the window, hard cutoff at the end.

Because it just delegates to the underlying controlnet, this works on any architecture - SD 1.5, SDXL, Flux, Qwen, you name it. There's no extra model to download and no measurable VRAM cost; it's a per-step multiplier, not a second model.

The inputs that matter

  • strength - overall control weight, 0–10, default 1.0. Same job as the stock node's strength.
  • start_percent / end_percent - 0–1. Keep end_percent below 1.0 and the model gets a free run at the end of sampling. That's the main reason to reach for this node.
  • decay - the enum that makes it interesting: none, linear, cosine, exponential, inverse_exponential.

Everything else is standard: positive and negative conditioning, control_net, image, and an optional vae. The two outputs are positive and negative conditioning, which wire straight into your sampler's conditioning ports, usually replacing what the stock Apply node was feeding.

Installing

This ships in the TK3R Extensions pack, so you install all the nodes at once:

  • ComfyUI Manager → search "TK3R Extensions" → Install, then restart ComfyUI.
  • Or manually: cd ComfyUI/custom_nodes && git clone https://github.com/TK3R/ComfyUI_TK3R_Ext and restart.

The pack's only Python dependency is rich, which Manager handles for you. No model files ship with it - you bring your own ControlNet and conditioning image, same as with the stock node.

Where people get tripped up

The classic mistake is leaving end_percent at 1.0 and wondering why nothing changed. Set it to something like 0.7–0.85 first, then choose a decay. If you still see a sharp seam at the cutoff, that's none doing its job - switch to linear or cosine. And remember this is the per-architecture strength world we live in now: modern union ControlNets are published at lower weights (0.65–0.8 range) than the old 1.0 default, so don't be shy about dialing strength down too.

CategoryTK3R/Advanced

Inputs (9)

NameTypeDefaultDescription
positiveCONDITIONING
negativeCONDITIONING
control_netCONTROL_NET
imageIMAGE
strengthFLOAT1.000–10
start_percentFLOAT0.0000–1
end_percentFLOAT1.0000–1
decayCOMBOnoneStrength decay: none, linear, cosine, exponential, inverse_exponential.
vaeoptVAE

Outputs (2)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING