Float Literal (Citron Image Saver)
A decimal on a wire, with one sharp edge at the bottom of the range
- FLOAT
Denoise, LoRA strength, IP-Adapter weight, ControlNet strength, CFG-plus-something - every workflow accumulates floats that two different nodes need to agree on. Float Literal is the generic one of those: a decimal box with a FLOAT output, default 1, step 0.01.
The pack already has a CFG-specific float and a seed generator; this is the one for everything else. Its declared range is the whole floating-point spectrum - the tooltip says from 2.2250738585072014e-308 to 1.7976931348623157e+308, step 0.01 - which is a nice way of saying "no meaningful limit".
How it works
One required input, float. One output, FLOAT, carrying it untouched. That's the mechanism; the value is in the fan-out.
Typical wiring: one value into the KSampler's denoise (converted to an input) and into the save node's denoise, so a 0.45 img2img pass doesn't get recorded as 1.0. Or one value into three LoRA loader strength fields, so a style stack that's tuned as a unit can't drift out of sync. Or an IP-Adapter weight you're sweeping, going to the adapter and into the filename via a template variable.
Now the sharp edge. The minimum on that range isn't 0 - it's the smallest positive double, a hair above zero. In practice the widget won't let you type a negative number, and it won't let you reach exactly 0 either. For most float uses that's invisible. For the ones it isn't, it's annoying: negative LoRA weights (subtracting a concept, the "anti-style" trick) can't be dialled in here, and a strict 0 denoise isn't reachable. If you need negatives, convert the target widget to an input and feed it from a node with a signed range - this pack's Input Parameters covers denoise 0–1 with a proper zero, and other packs' primitives handle signed floats.
Second thing to know: floats in ComfyUI are widget values with a step. 0.01 is fine granularity for almost everything, but that's the increment the box moves in - if a model card tells you 0.0005 for something exotic, check what actually validates rather than trusting the typed digits.
The honest assessment: this node exists so the pack has a complete set of literals, and it's the least essential of them. ComfyUI's PrimitiveFloat does the same thing and is already installed. The reason to use this one anyway is consistency - if you're building a parameter block out of Citron literals and selectors for a save-metadata workflow, keeping the whole block in one family means one less thing to explain on a shared canvas. It won't make your images better.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/citronlegacy/ComfyUI-CitronNodes
# restart ComfyUI
ComfyUI Manager support isn't dependable yet - the README says "coming soon", the repo metadata is placeholder - so clone it. piexif is the pack's only pip dependency; a missing copy means the pack doesn't import at all:
pip install piexif
No models needed. Under Citron_ImageSaver/utils.
Common issues
- Can't enter a negative value. Expected - the floor is just above zero. Use a signed source instead.
- Value doesn't reach the target node. The target's widget wasn't converted to an input, so the widget value still wins.
- Denoise of 0 isn't possible. Same floor problem; wire denoise from
Input Parametersif you need a true zero. - Metadata's denoise says 1.0. Nothing is wired into the saver's
denoiseinput - that's its default, not a reflection of your run.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| float | FLOAT | 1.00 | floating point number |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| FLOAT | FLOAT | float (FLOAT) |