Doss Motion Studio | LTX 2.5
Draw the motion path on the actual frame — LTX steering, minus the guesswork
- image
- image
- motion_plan
The most frustrating thing about LTX has never been speed - it's steering. Fast video is useless if the camera drifts somewhere you didn't ask for. The official Motion Track Control path fixes that by letting you define where things move, and Doss Motion Studio | LTX 2.5 is the drawing board for it: it shows you the actual starting frame and lets you draw named motion paths right on top of it before anything generates.
Think of it as the "authoring" node in a three-node set. Motion Settings collects the numbers, Motion Studio draws the paths, and Resolve Motion Tracks converts the drawing into data the model eats. On its own, Motion Studio is a frontend-heavy display-and-validate node: nothing generates, no latent math happens, and no API gets called. It's a canvas with a clipboard, which is exactly why it's useful.
How it works
You feed it the starting frame (image), the current plan (motion_plan - the default is an empty JSON plan), and the upstream image's filename (source_ref). It displays that frame inside the node, and you draw colored, named tracks across it. Each track is a series of points, so you can move individual points, right-click one to remove it, add and delete whole tracks, undo and redo, and scrub a START-to-END playhead to preview the path without running a single generation.
The paths are stored as normalized 0-to-1 coordinates, not pixels. That's the detail that makes the whole thing portable: the same plan survives a resolution change, because it's a proportion of the frame, not a position in it. On execution the node validates the plan (schema version, track names, colors, point bounds, source match) and passes two things through: the untouched image and the cleaned-up JSON motion_plan.
The fail-closed part is the feature
Change the upstream image or its dimensions after drawing, and the plan goes stale - the node refuses to run until you explicitly pick Keep & rescale or Clear tracks. It sounds annoying and it's actually the best thing here. The alternative is what most motion tooling does: silently drawing your path over the wrong image and letting you discover the mismatch three generations later. Doss blocks it up front. Annoyance now beats wasted hours later.
One honest warning from the docs: track names are organizational labels only. Naming a track "shoulder" does not tell LTX there's a shoulder - the model has no idea what a label means. The first point of a track goes on the object you're guiding, and the later points describe the path that object should travel. That's the mechanism, not a bug.
Install
It ships in Doss Node Suite, a pack with zero third-party Python dependencies - pure stdlib plus browser JavaScript, so no pip installs and no model files come from this repo. Install it, then restart ComfyUI:
- ComfyUI Manager - search for "Doss Node Suite" and install.
- Manual:
cd C:\AI\ComfyUI\custom_nodes
git clone https://github.com/JamesDanielDoss/Doss-Node-Suite.git ComfyUI-Doss-Node-Suite
Restart, search for Doss, and you'll find it under ⚡ Doss Node Suite/LTX-2.5.
Where people get burned
Mostly it's forgetting the compatibility boundary. Motion Studio does not replace the LTX model loader, the Motion Track IC-LoRA, or Lightricks' ComfyUI-LTXVideo nodes - you still need all of those, plus the downstream Resolve Motion Tracks node to turn the plan into per-frame coordinates. If you're drawing paths and nothing moves, it's usually that missing downstream half. And if you hit a "plan belongs to a different starting image" error, that's the stale fence working: go back into Studio, pick Keep & rescale (or Clear tracks if you're starting over), and the run unlocks.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| motion_plan | STRING | {"schemaVersion":1,"source":{"ref":"","width":0,"height":0},"stale":false,"tracks":[]} | — |
| source_ref | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| motion_plan | STRING | — |