VLA Actions From JSON
Paste robot actions as JSON and replay them in ComfyUI
- actions
- actions_summary
Sometimes you don't need a policy to generate actions - you need to replay the ones you already have. That's what VLA Actions From JSON is for: it parses raw numeric action arrays, named action-stream objects, or the pack's versioned VLA action JSON, and turns them into a validated VLA_ACTIONS socket that everything else in the robotics section understands. If you've got a recorded trajectory from a real robot, a simulation dump, or a saved policy response, this is the node that feeds it back into the graph for inspection, plotting, or the safety gate.
The single required input is actions_json, a multiline text field with a default of [[0, 0, 0, 0, 0, 0, 0, 0]] - an 8-dimensional, single-step, all-zeros action chunk. That default is a hint about the format: an action chunk is a list of steps, and each step is a list of numeric action values. Your recorded trajectory is just a bigger version of that. The parser also accepts named action-stream objects (each key a stream, each value its array) and the versioned VLA action JSON the pack's policy nodes emit - so you can round-trip a inference_report or a saved actions JSON straight back into the graph.
Two outputs: actions (the typed VLA_ACTIONS handle) and actions_summary - a short string describing what got parsed (how many steps, what horizon, what action dimension). That summary is your first sanity check: if it says 8 dimensions and you expected 7, you've caught the bug before it reaches the safety gate.
Installing it
Part of the main pack - ComfyUI Manager (search "ComfyUI VLM nodes") or:
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
No extra dependencies. This is a pure data node; it never talks to a policy server or a robot.
Common issues
- Malformed JSON → the parser is strict by design. Watch for trailing commas, single quotes instead of double, and non-numeric entries - all common when pasting from a log.
- Dimension surprises → an 8-value row when your embodiment expects 7 will flow through here fine but get caught later by the safety gate. Check
actions_summaryearly and you'll save yourself the trip. - "Why is my trajectory only one step?" → you gave it a single step, in other words. The format is a list of lists; make sure the outer list wraps all your steps.
- Not sure what format you have → try the raw numeric array first; if that fails validation, the error message usually points at what shape it expected.
Where this node shines is testing and simulation: you can take a recorded trajectory, run it through the safety gate, feed it to the trajectory preview/inspect nodes, and verify your downstream tooling without a live robot in the loop. It's the "let's make sure everything downstream is sane before we trust the hardware" node.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| actions_json | STRING | [[0, 0, 0, 0, 0, 0, 0, 0]] | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| actions | VLA_ACTIONS | — |
| actions_summary | STRING | — |