Nodes/VLM_nodes/VLA Policy — GR00T N1.7 ZMQ
ComfyUI Node Runs on cloud

VLA Policy — GR00T N1.7 ZMQ

NVIDIA's robot policy over ZeroMQ

By gokayfem·Created 3 years ago·Updated 9 days ago· 583
VLA Policy — GR00T N1.7 ZMQ
  • observation
  • actions
  • inference_report
host127.0.0.1
port5555
timeout_seconds120
allow_remotefalse

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_remote is still false. Confirm the server's actual port - it's configurable on the GR00T side even though 5555 is the default here.
  • Auth rejectionGROOT_API_TOKEN mismatch 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_seconds before 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.

CategoryVLM Nodes/Robotics/Policies

Inputs (5)

NameTypeDefaultDescription
observationVLA_OBSERVATION
hostSTRING127.0.0.1
portINT55551–65535
timeout_secondsFLOAT1200.1–600
allow_remoteBOOLEANfalse

Outputs (2)

NameTypeDescription
actionsVLA_ACTIONS
inference_reportSTRING