ND Slider
A one-row slider that turns into INT or FLOAT depending on a gear
- value
ComfyUI's stock number widget is a text field you drag. It works. It's also one row of mediocre, and if you're tuning a denoise value on a twenty-node graph you'll drag the same number fifty times, which is forty-nine more than a slider would need.
What it is
One row across the width of the node: gear on the left, slider in the middle, current value on the right (click it to type an exact number), output pin on the right edge level with the slider. Node is one row high, so it sits in a graph without cutting a hole in your layout.
The thing that makes it more than decoration: it isn't a fixed-typed node. The gear sets Type to Integer or Float, and the output pin becomes INT or FLOAT accordingly, with Min, Max and Step following. For integers the step is rounded and floored at 1. So it's one node in your search menu that covers "I need a slider for denoise" and "I need a slider for steps".
There are no inputs. That's the design - this is a source, not a pass-through. It's the same role as a core PrimitiveFloat, just with a range and a drag handle that respects it.
The inputs and outputs
The schema looks strange until you know how it works. The only field is:
state(STRING, required) - a JSON blob:{"value": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "integer": false}. The browser writes it whenever you touch the slider or the gear; the server parses it. That's why your value and your range survive a save and reload.
Output: value - INT when integer mode is on, FLOAT otherwise.
What the server does with state is worth knowing because it's why the node never produces a nonsense number. It parses the range, swaps min/max if you somehow set them backwards, snaps the value to the step relative to min, and clamps inside the range. Integer mode rounds the range and forces the step to at least 1. So a workflow saved with a value outside a later-narrowed range still runs - it comes out clamped rather than out-of-bounds.
Where it's actually useful
Denoise on a second pass is the classic. 0.3–0.6 in steps of 0.01, draggable, and you can feel the difference between 0.42 and 0.48 in ways that retyping a number never shows you. Same for ControlNet strength, LoRA weight, or a batch count you keep fiddling with.
The type switch has one behaviour to plan around: change the type and wires into inputs that don't accept the new type are removed. Go from Float to Integer and a FLOAT input gets unplugged. It's a sensible guard against silently feeding 7.5 into a step count, but it means the type is a real decision - set it before you wire, not after.
Note that the value is the node's whole state, so it's a saved value, not something that randomizes. If you want it to randomize you'll need to drive the target from something else - this node is for values you tune by hand.
Install
Part of Neural Dreamer Nodes (v1.1.0, MIT). No Python dependencies - the pyproject.toml declares dependencies = [] and there's no requirements file, no models.
cd ComfyUI/custom_nodes
git clone https://github.com/neural-dreamer/ComfyUI-NeuralDreamer-Nodes.git
Restart and refresh the tab; the slider itself is frontend code. ComfyUI Manager users can search "Neural Dreamer Nodes".
Common issues
The slider won't go where I want. Step is doing it. Integer mode silently forces step ≥ 1, and Float mode snaps to step from min - so min 0.0, step 0.1 can never land on 0.45. Set step finer than the precision you need.
Output is INT but I need a decimal. Gear → Type → Float. And expect any FLOAT wires you'd already connected to be dropped when you go the other way.
Value resets. It shouldn't - state is saved with the workflow - but if you're copying nodes between workflows by hand, copy the whole node rather than rebuilding it, or you'll rebuild the state from defaults.
Wheel over the node zooms the canvas. Same as the rest of the pack: middle-drag pans, wheel zooms. The value is set by dragging the slider or clicking the number to type.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| state | STRING | {"value": 0.5, "min": 0.0, "max": 1.0, "step": 0.01, "integer": false} | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| value | * | — |