πͺ Primitive float
Primitive Float (Crystools)
- float
The decimal sibling of Crystools' primitive family - one number in, one FLOAT out, defaulting to 1 with a 0.01 step so the UI's nudge arrows give you two-decimal precision out of the box.
Why you'd reach for it
CFG scale, denoise strength, a LoRA weight - anywhere you've got a decimal value you want defined once and reused across several widgets instead of hunting down five copies of "0.75" scattered through a graph whenever you want to tweak it. It's the same single-source-of-truth move as the other Crystools primitives, just for numbers with a decimal point.
It's also a natural fit for anything you're planning to sweep manually across several runs - set the value here, run, bump it, run again - since having it isolated in one node makes it obvious what changed between generations when you're comparing outputs afterward with something like Preview from image.
How it works
No logic beyond passing the widget's value straight to the output. Worth noting: the schema reports min and max as unbounded - the node itself doesn't clamp your range, so whatever consumes the value downstream (a KSampler's own cfg limits, for instance) is what actually keeps you sane, not this node.
Inputs and outputs
One required field: float (default 1, step 0.01, no enforced min or max). One output: float. That's the entirety of the node's surface - no toggle, no mode, nothing to configure beyond the number itself.
Installing it
There's nothing node-specific to set up here beyond having the pack installed - every primitive in the family becomes available the moment Crystools loads. Through ComfyUI Manager, search crystools. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/crystian/ComfyUI-Crystools.git
cd ComfyUI-Crystools
pip install -r requirements.txt
Restart ComfyUI. Nothing extra needed for this node.
Common issues
Unlimited range plus a fine 0.01 step makes it easy to overshoot with a scroll-wheel or click-drag interaction without noticing - a quick glance at the widget before queuing saves you a wasted run with a CFG or weight value that's wildly off from what you meant to set. Beyond that, this is one of the pack's least eventful nodes - there isn't much else that goes wrong with it, and since it has no side effects and no dependency on anything else in the graph, it's safe to leave scattered around a workflow without worrying it'll be the thing that breaks. If you're seeing an unexpected value downstream, it's far more likely you're looking at the wrong copy of this node in a busy graph than anything the node itself did.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| float | FLOAT | 1.00 | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| float | FLOAT | β |