LTXV API Image to Video
Animate a still with LTX, on someone else's GPU
- image
- last_frame
- video
- info
- width
- height
- frame_rate
- frame_count
You've got a great still - a frame from a render, a photo, something Stable Diffusion nailed on the fortieth try - and you want it to move. LTXV API Image to Video sends that image to Lightricks' hosted LTX API and gets back a video that starts from your exact frame. No local model, no VAE, no VRAM gymnastics. What it does need is an LTX API key and the willingness to pay per second of output.
Why this node exists
This is the sibling of LTXV API Text to Video - same pack, same mechanism, one extra input. Where the T2V node is widgets-only, this one accepts an IMAGE and uses it as the first frame of the clip. The workflow shape is the familiar image-to-video one: Load Image → this node → SaveVideo, with your prompt describing how the still should animate. It slots into the exact place an API wrapper earns its keep - you get LTX-2.3's motion quality (the model family the community now rates as the best all-round locally-runnable video generator) without the ~100GB of weights and 24GB+ VRAM the local version wants.
How it works
The node takes your IMAGE, encodes it as a base64 PNG data URI, and includes it in a POST /v1/image-to-video request with the prompt and settings from its widgets. Lightricks renders on their side, streams the MP4 back, and the node wraps it in ComfyUI's native VIDEO type with lazy decode - nothing is decoded to pixels until a consumer asks. One detail worth knowing: if you wire a batch of images in, only frame 0 is used. It's a single-still node.
The inputs that matter
image- the first frame. Load it from disk or pipe it from anything else that outputsIMAGE.prompt- how the image should move. LTX is prompt-hungry and rewards long, concrete scene descriptions over one-liners.duration- seconds, billed per second. This is the money input.generate_audio- on by default, and it's a nice party trick: LTX-2 family generates a synced audio track and bakes it into the MP4, so the returnedvideois born with sound.
Then the shared plumbing: model (ltx-2-3-fast default, -pro for quality), resolution / resolution_custom (the API rejects off-list combos), fps, and camera_motion ((unset) lets the model decide).
The one genuinely cool optional input is last_frame: a second IMAGE used as the end frame, and the API interpolates between the two. That's end-frame interpolation for looping or matching a specific outro pose. Caveat from the tooltip: only ltx-2-3-fast / ltx-2-3-pro honor it - the legacy ltx-2 models silently ignore it.
Outputs are the standard sync set: video (MP4, audio rides through), info, and the width / height / frame_rate / frame_count metadata sockets.
Installing it
Same story as the rest of the pack, and there's nothing to download except the code - no model files, since inference is 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, look for LTXV API in the menu. The key goes in an environment variable, not a widget:
export LTXV_API_KEY="ltxv_..."
or in ~/.config/comfyui-ltxv-api/config.toml as api_key = "ltxv_...". Widgets get serialized into saved workflows and screenshots, which is why the author deliberately kept the key out of them. And read the pack's own framing once before you rely on it: MIT, self-serve, "not actively maintained." It works; just don't bet a studio pipeline on a fast response to bug reports.
Where people get burned
No LTX API key found- env var or config file isn't where the node expects it.HTTP 401/402- invalid key, then insufficient credits. Check the LTX developer console.HTTP 422- the safety filter rejected the prompt. The hosted API is moderated; soften the prompt.HTTP 400about resolution or fps - off the accepted list for that model.1920x1080atfps=24is the safe bet.last_framedoing nothing - you're onltx-2-fastorltx-2-pro, which ignore it. Switch to the 2-3 models.
The recurring theme across this pack: your inputs leave the machine and every second bills you. That's the whole deal - you're trading local control for not owning 100GB of model. Worth it when your card can't run LTX-2; a waste if it can.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | First frame of the generated video. Single frame; if a batch is wired, frame 0 is used. | |
| prompt | STRING | Text describing how the image should animate. | |
| model | COMBO | ltx-2-3-fast | LTX model variant. last_frame is only honored by ltx-2-3-fast / ltx-2-3-pro. |
| duration | INT | 41–30 | Output video length in seconds. Billed per second. |
| resolution | COMBO | 1920x1080 | Output frame size. Pick (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 in the MP4 (rides through the VIDEO socket). |
| camera_motion | COMBO | (unset) | Optional camera-motion hint. (unset) = let the model pick. |
| last_frameopt | IMAGE | Optional final frame for interpolation. ltx-2-3-fast / ltx-2-3-pro only — ignored by the legacy ltx-2 models. |
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. |
| 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. |