LTXV API Text to Video
LTX over the API
- video
- info
- width
- height
- frame_rate
- frame_count
The name is a little lie, in the best way: LTXV API Text to Video doesn't run LTX on your machine at all. It packages your prompt, sends it to Lightricks' hosted API at api.ltx.video, and drops the returned MP4 back into your graph as a native VIDEO. No 100GB of weights, no 32GB VRAM, no VAE decode on your card. The trade is real, though - it bills per second of video, and every frame of your prompt leaves the machine.
Why you'd reach for this
LTX-2 and LTX-2.3 are Lightricks' synced-audio-video family - by mid-2026 the community's pick for the best all-round locally runnable video model. "Locally runnable" is doing a lot of work there. LTX-2 pairs a 19B DiT with a Gemma text encoder and is comfortable around 24GB+ of VRAM; LTX-2.3 is 22B. If your card isn't there - or you just don't want to babysit a 100GB download and a Python environment that fights back - the hosted API is the door that stays open. This node is the classic "open model on someone else's GPU" play: you keep the LTX look and the long, prose-y prompting style, you just don't keep the model.
How it works
Hit Queue Prompt and the node assembles a JSON body from its widgets, POSTs to /v1/text-to-video, and streams the response MP4 to a temp file as it arrives. That file is wrapped in ComfyUI's native VIDEO type with lazy decoding - nothing is actually rasterized to pixels until a downstream node asks for it. When generate_audio is on, the API bakes a synced audio track into the same container, and it rides along on the video socket automatically. Save it straight with stock SaveVideo, or split it apart with GetVideoComponents when you want the frames and the audio track as separate things.
The inputs that actually matter
There are no image inputs here - this is widgets-only, which makes it the simplest node in the pack. Most runs touch just three of them:
prompt- LTX is famously prompt-hungry; short prompts reliably underperform. Give it a paragraph of concrete scene detail, camera direction, and mood. Let an LLM write it if you can.model-ltx-2-3-fastis the default and a fine starting point;ltx-2-pro/ltx-2-3-procost more for better quality, and the-fastvariants are the budget tier.duration- seconds, and this is the one that hits your wallet. Billed per second, so 4s at 1080p is a very different day from 30s.
Also worth knowing: resolution is a dropdown (1920x1080, 1080x1920, or (custom) with a literal WxH in resolution_custom), because the API only accepts certain (model, resolution, fps) combinations and rejects the rest with an HTTP 400. fps defaults to 24. camera_motion is optional - (unset) lets the model pick.
The outputs are the same shape across the three sync nodes: video (the MP4, audio inline), plus info (a human-readable summary) and width / height / frame_rate / frame_count metadata sockets you can wire anywhere.
Installing it
It's a normal custom node, and it needs no model files at all - everything remote:
cd ComfyUI/custom_nodes
git clone https://github.com/am-pipeline-prod/comfyui-ltxv-api.git
cd comfyui-ltxv-api
pip install -r requirements.txt
Restart ComfyUI and you'll have the LTXV API category. (Or search comfyui-ltxv-api in ComfyUI Manager once it's published there.) Dependencies are light - requests, imageio, Pillow, numpy, opencv-python - and there's no weights directory to babysit.
The key is deliberately not a widget (widgets get baked into saved workflows and screenshots). Set it as an environment variable:
export LTXV_API_KEY="ltxv_..."
or drop api_key = "ltxv_..." into ~/.config/comfyui-ltxv-api/config.toml. One honest warning: the author calls this a self-serve project - it works, it's MIT, and bug reports may sit unanswered. Don't build a production pipeline on it without keeping a fork.
Where people get burned
No LTX API key found- the env var or config file isn't where the node looks.HTTP 401/402- bad or revoked key, then insufficient credits. Top up the console.HTTP 422- the prompt tripped LTX's safety filter. Soften it and retry; the hosted API is not the uncensored local weights.HTTP 400with "FPS ... not supported ... at resolution ..." - you picked a combination off the accepted list. Try1920x1080atfps=24, which is confirmed across models.HTTP 429- you're queuing too fast. The sync endpoints surface it as an error rather than retrying, so space out your queue.
And the quiet one: early LTX-2 API users complained about audio fumbles and the occasional still frame. LTX-2.3 is a different, better model - but if a clip comes back with a weird audio track, that's the API, not your wiring.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Text prompt describing the desired video content. | |
| model | COMBO | ltx-2-3-fast | LTX model variant. ltx-2-fast / ltx-2-3-fast = lower cost, lower quality. ltx-2-pro / ltx-2-3-pro = higher quality, higher cost. The 2-3 line is the newer LTX-2.3 family. |
| duration | INT | 41–30 | Output video length in seconds. Billed per second. |
| resolution | COMBO | 1920x1080 | Output frame size. Pick (custom) and type into resolution_custom for non-listed sizes. |
| resolution_custom | STRING | Literal 'WxH' override. Ignored unless resolution=(custom). | |
| fps | INT | 241–60 | Output frame rate (LTX API default 24). |
| generate_audio | BOOLEAN | true | When On, the API generates a synced audio track and includes it in the MP4 (rides through the VIDEO socket). Off = silent video. |
| camera_motion | COMBO | (unset) | Optional camera-motion hint. (unset) = let the model pick. Other values steer the camera deterministically. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | Native ComfyUI VIDEO wrapping the downloaded MP4 (lazy decode). Wire to SaveVideo / GetVideoComponents / partner API nodes. Carries the API-generated audio track when generate_audio=True. |
| info | STRING | Human-readable summary: dimensions, fps, frame count, model. |
| width | INT | Frame width in pixels. |
| height | INT | Frame height in pixels. |
| frame_rate | FLOAT | MP4 frame rate as probed from the container. |
| frame_count | INT | Number of frames in the MP4 container. |