Nodes/Comfyui-Echo-WM-T8/Echo-WM T8 · Action
ComfyUI Node

Echo-WM T8 · Action

Steering a generated video with WASD keys

By T8mars·Created a day ago·Updated about 18 hours ago· 1
Echo-WM T8 · Action
    • action
    • action_metadata
    presetsmoke_1s_forward_turn_jump
    custom_actionw-6,wl-6,wj-6,w-6

    Text-to-video gives you a prompt and a prayer that the camera does something interesting. Echo-WM is a different beast: it's a world model that takes a first frame and then lets you steer, in discrete game-key chunks. "Echo-WM T8 · Action" is the small node that turns your keypresses into the action string the model understands - and it's where you'll spend most of your time once Echo-WM is actually running, because this is your camera control.

    The action DSL is exactly what it looks like: comma-separated keys-frames segments. Forward for six frames, turn while moving for six, and so on:

    w-6,wl-6,wj-6,w-6
    

    The letters are WASD/IJKL and they map to camera intent: w/s forward/backward, a/d strafe, i/k pitch up/down, j/l yaw. Keys combine into one segment (wj-60 is "forward while turning"), none holds the camera still, and each segment lasts 1–2400 frames. The built-in presets are just two canned routes:

    • smoke_1s_forward_turn_jump - 24 frames of motion (w-6,wl-6,wj-6,w-6), for the 25-frame smoke test.
    • low_10s_forward_turn_jump - the same route stretched to 240 frames (w-60,wl-60,wj-60,w-60), for the ~10-second low-res preset.

    The frame math will bite you once

    Here's the gotcha that trips up everyone on their first custom action: the action and the output length are linked. Your action runs for N frames, and the generated video is N+1 frames - the reference image plus the rollout. So an action that totals 24 frames pairs with a 25-frame generate request, 240 pairs with 241, and so on. The Generate node refuses to run on a mismatch with an error like action schedule has 24 frames; this output needs 48, and Generate's num_frames only accepts 1 + 24n values (25, 49, 73…). If you're in custom mode on both nodes, update the action and num_frames together - that pairing is on you.

    Inputs and outputs

    • preset - smoke_1s_forward_turn_jump, low_10s_forward_turn_jump, or custom. The two presets are hard-coded to exactly match the smoke/10-second generation presets on the Generate node, so if you pick a preset here, leave Generate on its matching preset.
    • custom_action - only read when preset is custom. Syntax per the tooltip: keys-frames,keys-frames.

    The node doesn't just pass your string through - it validates and canonicalizes. It normalizes unicode, strips whitespace, sorts the keys in each segment into a fixed order, rejects any key outside wsadikjl, rejects duplicate or empty key segments, and caps the whole schedule at 2400 frames. Feed it garbage like q-12 or a stray space and you get a precise error instead of a silent mid-generation failure 40 minutes in. That's a real kindness for a model where a bad action wastes a whole rollout.

    Outputs: action (typed ECHO_WM_ACTION) goes straight into Causal Flash Generate's action input, and action_metadata is a JSON string of the canonicalized action with its total frame count - handy for checking your math before you commit.

    Install is just the pack (Manager or git clone https://github.com/T8mars/Comfyui-Echo-WM-T8.git into custom_nodes) plus the separate Echo-WM environment the Runtime node points at - nothing here installs extra Python packages into ComfyUI. Think of this node as the fun part: it's where "make the camera glide left around that statue" becomes a concrete spec the world model can actually follow.

    CategoryEcho-WM T8

    Inputs (2)

    NameTypeDefaultDescription
    presetCOMBOsmoke_1s_forward_turn_jump3 options: smoke_1s_forward_turn_jump, low_10s_forward_turn_jump, custom
    custom_actionSTRINGw-6,wl-6,wj-6,w-6Used only when preset is custom. Syntax: keys-frames,keys-frames.

    Outputs (2)

    NameTypeDescription
    actionECHO_WM_ACTION
    action_metadataSTRING