h4 - Axis Driver
The node that drives h4's grid editor so you don't have to
- axis_x
- axis_y
- axis_z
- legacy_summary
If you've opened h4_Live and seen a node called "Axis Driver" and wondered what it actually drives, here's the short version: it's the plumbing between h4's visual grid editor and the H4_Gridinator. Gridinator is the monster that renders whole X/Y/Z parameter grids in one go; AxisDriver is the quiet part that serializes your axes into something Gridinator can eat. It's not a node you reach for on its own - it's a node that gets reached for by the editor.
The name comes from a real job. In grid workflows, every axis (X across, Y down, Z as stacked grids) needs its values packaged into a consistent format before the grid engine can iterate over them. That's what this node does. It parses a config blob and emits one payload per axis plus a summary. The catch, and it's a friendly one: the config box says "No need to touch it manually unless you are a cyborg." The visual grid editor writes it for you. If you're hand-typing JSON into this box, you're doing it the hard way.
The inputs that matter
- config - a multiline JSON string describing the three axes (each with a slot, a preset like
checkpointorprompt, and a list of items) plus a style block for labels, fonts, and colors. Leave it to the editor.
That's the whole input. There's no optional set, no secret second tab.
What comes out
Four outputs, and you'll usually only care about three:
- axis_x, axis_y, axis_z - JSON payloads for each grid axis. These are what you wire toward the grid machinery.
- legacy_summary - a plain-text summary meant for older h4 flows. If you inherited a workflow that predates the axis refactor, this is your compat path.
Installing it
AxisDriver ships inside the h4_Live pack, so there's nothing node-specific to grab. Install the pack once via ComfyUI Manager (search "h4_Live"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/m3rr/h4_Live
then restart ComfyUI. The core logic nodes are plain Python - no requirements.txt, no model downloads. The pack is a one-person project that's still under active development, and the README says so outright, so expect occasional churn in the grid tooling.
Where people get burned
The classic mistake is treating the config JSON as editable. It round-trips through the visual editor, and hand-editing it gets normalized on the next pass - your carefully typed tweak silently disappears. If the grid looks wrong, fix it in the editor, not in this box. Second gotcha: AxisDriver is a companion, not a standalone tool. Wire its axis outputs into the grid consumer; a lone AxisDriver on a canvas does nothing visible on its own.
One honest note: this is an in-development pack, and grid tools are where a one-person project's corners show up first. If the editor and the driver disagree, check the "?" button in the node's top-right - h4's in-app help ("The Book of H4") is genuinely better than the README for per-node behavior.
Keep it simple: let the editor fill the box, wire the three axis outputs onward, and only touch legacy_summary if you're debugging an old graph.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| config | STRING | { "axes": [ { "slot": "X", "preset": "checkpoint", "items": [] }, { "slot": "Y", "preset": "prompt", "items": [] }, { "slot": "Z", "preset": "none", "items": [] } ], "style": { "font_size": 22, "font_family": "DejaVuSans", "font_colour": "#FFFFFF", "background": "black60", "alignment": "center", "label_position": "top_left", "label_layout": "overlay", "custom_label_x": "X", "custom_label_y": "Y", "custom_label_z": "Z", "show_axis_headers": true } } | This box receives data from the visual grid editor. No need to touch it manually unless you are a cyborg. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| axis_x | STRING | — |
| axis_y | STRING | — |
| axis_z | STRING | — |
| legacy_summary | STRING | — |