LTX2.5 Prompt Generator ๐
Your LTX-2.5 video is only as good as its caption โ let an LLM write it
- llm_service_connector
- image
- ltx25_prompt
First, the name is doing double duty. The LTX2.5 Prompt Generator ๐ doesn't generate LTX-2.5 video, and it doesn't touch your GPU's VRAM. It writes the caption that the LTX-2.5 model conditions on, using the exact official system prompt Lightricks bundles for its own Gemma-4 captioning pipeline. You type a rough idea, it returns a single audio-visual caption paragraph, and you feed that text into the real LTX-2.5 sampler nodes. Think of it as the official workflow's prompt-enhancer step, outsourced to any LLM you can reach.
That matters because LTX-2 and its descendants are famously hungry for detail. If you don't spell out the camera movement, lighting, shot type and layered audio, you get soft, drifting clips. The fix everyone converged on - and the KB's community evidence agrees - is letting a second LLM write the structured prompt instead of hand-typing a cinema paragraph every time. This node is that second LLM, and it won't make you load Lightricks' 12B+ Gemma text encoder just to enhance a prompt.
How it works
Under the hood it's deliberately simple: one LLM call, two modes. The official gemma4 system prompts for t2v and i2v are bundled verbatim in the pack, so no network fetch, no API-to-generate-the-prompt, no model download.
t2v(ๆ็่ง้ข) - text-only call. Your idea goes in as the user turn, the model expands it into a caption.i2v(ๅพ็่ง้ข) - a single multimodal call. The image you connect toimageis attached directly to the LLM's user turn, right next to your prompt, so the model writes a caption that starts from that exact first frame. It takes the first tensor if you feed a batch.
Output is one ltx25_prompt STRING, and the pack cleans it up: a leading <think>...</think> block from reasoning models is stripped, and any preamble is rejected by the system prompt itself. Wire the string into your LTX-2.5 conditioning and go.
The inputs that matter
llm_service_connector- required, and it's the whole ballgame. This is a MieNodes connector node:SetOllamaLLMServiceConnectorfor a local Ollama (no key, free), or any of the API ones (SiliconFlow, DeepSeek, Gemini, โฆ). Fori2vthe model has to be vision-capable - Gemini, or an Ollama vision model likeqwen2.5vlorllava, otherwise it can't see the frame.mode-t2v - ๆ็่ง้ข(default) ori2v - ๅพ็่ง้ข.user_prompt- your short idea. Every element you state is preserved; leave it blank and the node synthesizes a default idea rather than stalling.image(i2v only) - the exact first frame of your video.temperature- default 0.8, which matches the pack's LTX-2 sibling. The official gemma4 enhancement runs greedy for deterministic captions, so set 0.0 if you want to reproduce that.multishot- a newer LTX-2.5 thing: flip it on and the node appends the C1โC4 multi-cut directive (and an opening-shot note in i2v). Default off is the safe single-shot style.
seed, image_detail, max_tokens (8192) and timeout (120s) exist too, but you mostly leave them alone.
Installing it
The normal ComfyUI custom-node dance - no model files needed for this node:
cd ComfyUI/custom_nodes
git clone https://github.com/MieMieeeee/ComfyUI-MieNodes
โฆthen restart ComfyUI. Easier: ComfyUI Manager โ Custom Nodes Manager โ search ComfyUI_MieNodes โ Install. Manager pulls the dependencies (pillow, huggingface_hub, opencv-python and friends) automatically; manual installs should run pip install -r requirements.txt.
To run it you still need a connector. API keys can live in a mie_llm_keys.json copied from the example next to the README, so secrets don't end up baked into workflows. And yes, this is arbitrary Python that ships your keys to whatever service you point it at - install the pack from the official repo, same as any custom node.
Where people get burned
- i2v output looks unstyled? Check your
imageconnection. The node intentionally returns your original prompt unchanged when i2v has no first frame, so a missing image silently means no enhancement instead of an error. - "Returned empty after Xs" in the logs. The pack's own source flags the cause: reasoning models (DeepSeek-R1, GLM-5.x, MiniMax-M3) burn their token budget on the
<think>chain before the answer. Switch to a non-reasoning connector model, or bumpmax_tokens. - First-call timeouts. A big Ollama model cold-loading can eat the 120s default. Raise
timeoutto 300 on the node or the connector. - Captions vary between runs. That's the 0.8 temperature doing its creative thing. Set 0.0 (plus a fixed
seed) for reproducible output.
One honest caveat: this node is only as smart as the connector model you give it. A tiny local model writing "cinematic, 8k, masterpiece" slop won't save you. Reach for a capable model and treat the output as a strong draft, not scripture - LTX still rewards a human read before the long render.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| llm_service_connector | LLMServiceConnector | โ | |
| mode | COMBO | t2v - ๆ็่ง้ข | t2v: text-to-video caption (text-only LLM call). i2v: image-to-video caption -- connect the reference first frame to `image`; it is attached directly to the multimodal LLM call, which then writes the caption that begins on that exact frame. |
| user_prompt | STRING | Short idea / raw request to expand into a LTX-2.5 caption. Every element you state is preserved; left blank, the node synthesizes a default idea. | |
| seed | INT | 00โ18446744073709550000 | โ |
| imageopt | IMAGE | i2v only: the exact first frame of the video. Required in i2v mode; without it the node returns the original prompt. | |
| image_detailopt | COMBO | auto | 3 options: auto, low, high |
| temperatureopt | FLOAT | 0.800โ2 | 0.8 matches the LTX2 sibling node. Official gemma4 enhancement runs greedy for deterministic captions -- set 0.0 to reproduce that. |
| max_tokensopt | INT | 819264โ32768 | โ |
| timeoutopt | COMBO | 120 | 4 options: 30, 60, 120, 300 |
| multishotopt | BOOLEAN | false | โ |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| ltx25_prompt | STRING | โ |