Curve (CCN)
Draw a curve once, drive a dozen nodes with it
- curve
A curve is just a way to turn a 0–1 position into a 0–1 value along some shape you define - and once you have that, you can schedule anything. CFG across steps, a strength that ramps then fades, a weight by frame number. Curve (CCN) is the pack's reusable curve definition: a visual editor where you drag keyframes and tangents, and it outputs the curve as a CCN_CURVE that any of the pack's curve-aware nodes can consume. One editor, many consumers.
How it works
The curve lives in normalized 0–1 space, endpoints pinned at x=0 and x=1 (their heights stay free). You drag keyframes to shape it; drag tangent handles to change slope; double-click empty space to add a keyframe and double-click a keyframe to delete it; right-click for break/mirror/delete options. The underlying data is Hermite keyframes - position, value, and in/out tangents - evaluated with cubic Hermite interpolation, the same basis as Unity's AnimationCurves. The widget stores it as JSON, and the identical evaluation code runs in Python and in the editor, so the preview you draw is exactly what the sampler will compute. The node's curve_data text field holds that JSON, and when you connect the curve output to Curve Sample, Curve CFG Guider, or Curve To Core, they use the drawn shape directly.
Why define it separately?
Because one curve can feed several consumers. Draw the shape once here, fan the output out to a Curve CFG Guider and a Curve Sample driving some other strength, and you've got a single editable source of truth instead of re-drawing the same shape in three widgets. That's the whole point of the reusable form.
Install
ComfyUI Manager → search ComfyCollectorNodes → Install → restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/valkymaera/ComfyCollectorNodes
Restart, no pip step. It's under the (CCN) suffix.
The context that matters
The author is upfront that ComfyUI now ships native curves (Nodes 2.0-era CURVE with its own CurveEditor node), and this pack's curves predate that. So the honest question is why use CCN curves at all - and the answer is: this pack's guiders and samplers are built around CCN_CURVE. If you're using the Curve CFG Guider or Curve Sample, this is the native format. If you're already living in ComfyUI's native curve ecosystem, that's what the Curve From Core / Curve To Core converters are for - you don't have to pick a side, you can bridge. For a standalone curve editor, the native one may be enough; for this pack's sampling tools, this is the curve type they want.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| curve_data | STRING | [{"x":0,"y":0,"in":0,"out":1,"mirrored":true},{"x":1,"y":1,"in":1,"out":0,"mirrored":true}] | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| curve | CCN_CURVE | — |