Axis To NUMBER
The converter that's generated from a JSON file at every startup
- axis
- NUMBER
There is no hand-written class behind this node. Axis To NUMBER is generated from a config file the moment ComfyUI starts, which makes it the cleanest way to understand how the whole Axis To family works: they're not a stack of carefully coded converters, they're one function run over a list of type names.
At import time the pack calls load_axis_config_and_create_classes, which reads axis-config.json sitting next to nodes.py. For every entry in that list - STRING, MODEL, INT, NUMBER, FLOAT, BOOLEAN, VAE, CLIP - it builds a class on the fly whose only difference is its return type, then registers it as "Axis To " + that type. Axis To NUMBER is literally type("AxisToNUMBER", (AxisBase,), {"RETURN_TYPES": ("NUMBER",)}). That's the whole node, and it's why the all-caps spelling is the one that shows up in node search.
Why care about the machinery? Because you can extend it. The pack also reads custom-axis-config.json, and the README is explicit: add a type there and on the next restart you get a brand-new Axis To converter for it. Working with a custom type from another pack and want to sweep it across a grid? That's the move. It's a one-line JSON list; just edit and restart.
In daily use it's identical to its title-case twin "Axis To Number" - same axis (AXIS_VALUE) input, same NUMBER output, no optional inputs, nothing to configure. NUMBER in ComfyUI means "a float or an int, could be either," so a grid axis of 5, 7, 9 and one of 6.5, 7.0, 7.5 both behave; the output snaps into INT and FLOAT slots alike. The one thing to remember is that the converter is deliberately dumb - the AXIS_VALUE it's handed must actually be numeric, or the downstream node will reject it.
The family you get out of the box covers the things grids actually sweep: numbers, strings, INT, FLOAT, BOOLEAN, and the model-family types MODEL, VAE and CLIP. Those last three are the giveaway for what the pack is for - you can grid models, not just sliders. The README's "Axis Packing Grid" example does exactly that, swapping unet, clip and vae on a single column at once.
Install is just the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/kenjiqq/qq-nodes-comfyui
then restart (Manager search "qq-nodes-comfyui" also works). No model downloads, no extra dependencies - the whole axis machinery runs on core ComfyUI. For the final grid image you'll also want LEv145/images-grid-comfy-plugin, which the pack's grid nodes inject via node expansion.
Common issues here are really the pack's issues. If you edited custom-axis-config.json and the node didn't appear, you probably didn't restart - the file is only read at import time. And if a converter starts erroring after a ComfyUI update, check you're current: the pack had a frontend hiccup in mid-2025 around its reset-button widget (a structuredClone crash) that's fixed in the shipped JS.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| axis | AXIS_VALUE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| NUMBER | NUMBER | — |