LTX-2 19B · Image to Video
All the LTX, none of the 22GB text encoder
- image_url
- video
- task id
The pitch, in one line
LTX-2 19B is the open-weights model that generates picture and sound together, and this node runs it for you at from $0.0144 per second of output. A five-second clip is about seven cents. Twenty seconds is under thirty. There is no cheaper way to get sound-synced video out of a graph, locally or hosted.
Why would you pay anything for a model you can technically download? Because "technically" is doing heavy lifting. LTX-2 ships with a Gemma 3 12B text encoder - 22.71 GB in fp16 - and that encoder, not the video model, caused most of the install pain in January 2026: OOM reports on 16GB cards, 64GB system RAM as the practical floor, device-alignment patches, prompt enhancers you were advised to bypass. The community got very good at running it. It was never easy. This node asks for a key instead of an evening.
How it works
It's an HTTP client in node clothing. Your opening frame is uploaded as PNG (JPEG fallback if it's over the 10 MiB ceiling, hard failure past that), the request is quoted before anything is charged, submitted, then polled while progress is printed on the node. The finished MP4 comes back down and is decoded into a normal ComfyUI VIDEO, so Save Video handles the rest. Uploads are cached per account by content hash for twelve hours, which matters here: rerunning with a tweaked prompt doesn't re-upload the same photo.
One thing this node does not do is run silently. LTX-2 wants its soundtrack described, not just its picture.
Inputs
- prompt - describe the action, the camera and the sound. LTX-2 is audio-video in one pass, so the audio is a prompt field, not a downstream step. Long, specific prompts are the house style for this family; the model has never rewarded short ones.
- image_url - your opening frame, and it decides the aspect ratio. The clip inherits the photo's shape, which is why there's no aspect_ratio field on this node.
- resolution - 720p by default, and the other tiers cost more.
- duration_seconds - 5 to 20 whole seconds. That upper bound is the LTX signature: 20 seconds in one continuous shot was LTX's lead over the field long before 2.3 fixed its motion problems.
- seed - a real one, and it does what you'd hope. Same seed and settings, same result.
Outputs: video and task id. Wire the video to Save Video; keep the task id if you ever have to ask support what happened.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi
Restart ComfyUI. Open Settings > SpicyAPI, paste a key from spicyapi.ai/console/keys, restart once so your node list is built from your account. Headless machines can use SPICY_API_KEY instead - the key is stored in the ComfyUI user folder, never in the workflow or a saved image, so sharing a graph doesn't leak it. No dependencies, no checkpoints, no GPU required; a laptop will do. ComfyUI Manager users can search the pack title, SpicyAPI. Recent ComfyUI (V3 node API, tested on 0.39), Python 3.10+.
What to watch
This is the 19B, not 2.3. The version matters, because the January–March 2026 arc was rough: the 2.x-era I2V earned a reputation for frozen output and slow, pointless zooms, and 2.3 was the release that fixed it - the first LTX that a long-time skeptic called the best locally-runnable video model overall. Nothing on this node claims otherwise, and at this price that's the trade: near-zero cost, and if a clip comes back static, that's the model's known weak spot rather than your prompt. More motion in the description, less scene-setting.
The license isn't Apache-2.0, and people keep saying it is. LTX-2's community licence is free below $10M annual revenue with hosting explicitly allowed, but derivatives are share-alike and the incorporated acceptable use policy bans sexually explicit output even though the weights themselves carry no filter. Enforcement against a local or hosted user isn't documented. If that distinction is load-bearing for your project, read the terms rather than the vibe.
Seeds start on fixed. That's deliberate: every run is billed, so hitting Queue twice with an unchanged graph reuses the first result instead of quietly buying a second one. Switch control after generate to randomize when you actually want a new draw.
Cancel is not a refund. Cancelling stops you waiting; the task keeps running on SpicyAPI, is charged if it succeeds, and sits in your console for up to 14 days. Set Max cost per run in the settings panel if you'd like a ceiling - an over-budget quote stops before any charge.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe what happens after the opening frame: the action, the camera and the sound. | |
| image_url | IMAGE | Opening frame. The clip starts from this image and keeps its aspect ratio. | |
| resolution | COMBO | 720p | Output resolution. |
| duration_seconds | INT | 55–20 | Requested output length in whole seconds, from 5 to 20. |
| seed | INT | 00–2147483647 | Same seed and settings, same result. Set 'control after generate' to randomize to get a new result on every run; every run is billed. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| task id | STRING | The SpicyAPI task id, for the console logs or support. |