ComfyUI Node

Curved Blur (Batch)

Progressive blur on a curve — the tile ControlNet trick you didn't know you wanted

By diffussy69·Created 11 months ago·Updated 9 months ago· 2
Curved Blur (Batch)
  • image
  • batch_images
  • curve_graph
  • stats
num_keyframes10
start_percent0.000
end_percent1.000
start_sigma0.50
end_sigma6.00
curve_typelinear
curve_param2.0
show_graphtrue

Here's a workflow idea you won't find in the stock nodes: give the tile ControlNet a sharp reference at the start of generation to lock composition, then hand it progressively blurrier versions so it loosens its grip and lets the model invent detail. This node makes that automatic. It takes one image, applies Gaussian blur at increasing strength along a curve, and emits a batch of images - sharp at one end, smeared at the other - that you feed to a keyframe scheduler one frame at a time.

How it works

The node runs a real Gaussian blur (the source uses proper 3-sigma kernels with reflect padding) at num_keyframes points between start_sigma and end_sigma. The curve in the name is the interpolation between those two sigmas - linear for a steady ramp, ease_in/ease_out/ease_in_out/exponential for acceleration, with curve_param controlling steepness. At sigma 0 the image passes through unblurred; the README explicitly optimizes that case, so a sharp-first schedule doesn't waste a frame on a no-op. The graph (show_graph) plots sigma against generation progress so you can see the ramp before committing.

The output batch_images is the batch of blurred frames, and the intended wiring is the pack's Batch Images to Timestep Keyframes node, which maps frame i to keyframe i. curve_graph is the preview image, and stats is text.

Where it fits

The classic pairing is with the tile ControlNet - the same family this node claims in its category name. Tile ControlNet's job is detail addition, and it's most useful when it's not glued to the source for all 30 steps. Blurred-to-sharp (start high, end_sigma near 0) gives you rough-structure-first, detail-late. Sharp-to-blurred is the reverse - lock the composition, then let it go. Either direction, you're syncing the blur with your strength curve so control strength and image sharpness move together instead of fighting.

Installing it

Standard pack install:

cd ComfyUI/custom_nodes
git clone https://github.com/diffussy69/comfyui-curved_weight_schedule
pip install matplotlib pillow numpy torch scipy

The blur itself is pure PIL/torch - no extra models, no downloads. Restart and hard-refresh. It shows up under ControlNet Preprocessors/tile.

Where people get burned

The recurring failure mode with blur schedules is the opposite of what you'd expect: not enough blur, or blur on the wrong end. If control stays strong everywhere, lower your sigmas (sharper = more control). If it's too weak, raise them (blurrier = the model pays less attention to the reference). And remember this node only produces the images - something downstream (Batch Images to Timestep Keyframes → Advanced scheduler) has to pair them with keyframes, or you've just made a weird gradient of blur with nothing to do with it.

CategoryControlNet Preprocessors/tile

Inputs (9)

NameTypeDefaultDescription
imageIMAGE
num_keyframesINT102–200
start_percentFLOAT0.0000–1
end_percentFLOAT1.0000–1
start_sigmaFLOAT0.500–32
end_sigmaFLOAT6.000–32
curve_typeCOMBOlinear5 options: linear, ease_in, ease_out, ease_in_out, exponential
curve_paramFLOAT2.00.1–10
show_graphBOOLEANtrue

Outputs (3)

NameTypeDescription
batch_imagesIMAGE
curve_graphIMAGE
statsSTRING