VLA Policy — GR00T N1.7 ZMQ
NVIDIA's robot policy over ZeroMQ
- observation
- actions
- inference_report
NVIDIA's Isaac-GR00T is the most "official" robot foundation model stack around, and its N1.7 policy serves inference over a ZeroMQ MessagePack endpoint. VLA Policy - GR00T N1.7 ZMQ is the pack's native client for that protocol. If your robot stack is GR00T-based, this is the node that lets ComfyUI sit in the loop as a policy client - sending observations, getting action chunks - without installing the multi-gigabyte Isaac-GR00T runtime into ComfyUI's Python.
The shape is the same as the other policy clients, with transport-specific details. observation from the Observation Builder is the payload. host defaults to 127.0.0.1 and port to 5555 - GR00T's conventional ZMQ inference port - so a default setup means the GR00T server is running locally in its own environment (a separate WSL distro, container, or Linux box). timeout_seconds (120) caps how long you'll wait for a chunk, and allow_remote defaults to false; flipping it is the explicit opt-in for reaching a server on another machine. Since ZMQ on a remote box is exactly the kind of thing you don't want to accidentally point at, the caution is warranted.
Auth follows the pack-wide rule: GROOT_API_TOKEN is a fixed environment variable set in the environment that launches ComfyUI - it is never a workflow input and never serialized into your graph JSON. The GR00T server validates the same token. Outputs are actions (VLA_ACTIONS) and inference_report (JSON string with the server's response, timing, and chunk metadata).
It's also worth noting what the node doesn't do, because the pack is emphatic about it: it never sends commands to robot hardware. The boundary is observation → policy server → action chunk → (safety gate) → your own supervised controller bridge. ComfyUI ends where the numbers get validated; it does not touch motors.
Installing it
The ZMQ client needs the lightweight robotics extra:
cd ComfyUI/custom_nodes
git clone https://github.com/gokayfem/ComfyUI_VLM_nodes
python -m pip install -r ComfyUI/custom_nodes/ComfyUI_VLM_nodes/requirements.txt
python -m pip install -r ComfyUI/custom_nodes/ComfyUI_VLM_nodes/requirements-robotics-client.txt
That brings in pyzmq plus msgpack - tiny compared to the GR00T stack, which stays in its own Isaac environment per the pack's examples. ComfyUI Manager works for the main pack install.
Common issues
- Connection refused on 5555 → the GR00T server isn't up, or it's on another host and
allow_remoteis still false. Confirm the server's actual port - it's configurable on the GR00T side even though 5555 is the default here. - Auth rejection →
GROOT_API_TOKENmismatch between ComfyUI's environment and the GR00T server's. Set the same token in both and restart ComfyUI after changing it. - Timeout on heavy models → GR00T N1.7 is a big model; first inference after load can exceed 120s. Raise
timeout_secondsbefore assuming failure, and check the server logs to see if it's actually still warming up. - "Message format rejected" → you're talking to a ZMQ endpoint that isn't the GR00T MessagePack protocol (or is a different GR00T version). This client is native to the N1.7 server contract - verify the server is actually Isaac-GR00T N1.7.
Reach for this one when your policy stack is explicitly GR00T. For everything else, the Universal HTTP node is the simpler default - this is the specialist client for NVIDIA's ecosystem, and it's a good one.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| observation | VLA_OBSERVATION | — | |
| host | STRING | 127.0.0.1 | — |
| port | INT | 55551–65535 | — |
| timeout_seconds | FLOAT | 1200.1–600 | — |
| allow_remote | BOOLEAN | false | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| actions | VLA_ACTIONS | — |
| inference_report | STRING | — |