Video Prompt Dexogen External
A video prompt writer that actually knows how long the clip will be
- first_frame
- last_frame
- text
- frames
- seconds
Generating video locally, the mismatch is always the same: you think in seconds, the model thinks in frames, and "about five seconds" lands on a frame count the model can't actually generate. Video Prompt Dexogen External is a prompt writer that keeps the two honest. You ask it for a duration and it hands back a ready-to-use prompt plus the exact frame count and real seconds for the target model - so what you type into the sampler actually matches what comes out the other end.
It's an LLM/VLM node under the hood, pointed at any OpenAI-compatible endpoint (Ollama, LM Studio, OpenRouter, whatever), but the video-specific value is the target profile. Pick MiniMax H3, Wan, or LTX and the node applies that model's formula, duration guidance, and frame grid. The frames and seconds outputs are snapped to the profile's legal grid, not your wishful round number.
How it works
The node decides what it's writing based on how many images you connect:
- No image - writes a text-to-video prompt from your idea.
- One image (
first_frame) - writes a first-frame/image-to-video prompt from that picture. - Two images (
first_frame+last_frame) - writes the transition from the first anchor to the last.
Then it does the duration math. Your requested length goes through the profile's frame recipe - MiniMax H3 clips, for example, land on its native 17k+5 frame stride, not arbitrary counts - and frames / seconds come out grid-snapped. The numbers are the point: feed frames into your sampler and you won't get the "off the model's grid" rejection you'd otherwise chase by hand.
There's also a Direct prompt mode, which is a strict bypass: it skips the endpoint and the image inputs entirely and passes your typed prompt through exactly as written, while still computing the frame-grid outputs. Handy when you've already got a perfect prompt and just want the timing math, or when your endpoint is down and you want to keep building the graph.
Inputs and outputs
first_frame(optional) - connecting it switches the node to first-frame mode.last_frame(optional) - with both connected, the node writes the first→last transition.textoutput - the generated prompt as a plain STRING. In Direct mode (or with no endpoint/model set), your entered text passes through unchanged.framesoutput - the requested duration converted to the profile's valid frame grid.secondsoutput - the real duration after grid-snapping:frames / fps.
Wire text into your video model's positive prompt, then use frames/seconds to size the actual generation. It plays nicely as a front-end to the pack's own storyboard and H3 sequence nodes, but there's nothing tying it to them - it'll write a prompt for any video model you name in the profile.
Install
Same pack as the rest of the Dexogen collection: ComfyUI Manager → search ComfyUI-Dexogen → restart, or
cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/dexogen/ComfyUI-Dexogen.git
python -m pip install -r ComfyUI-Dexogen/requirements.txt
Node lives under 🧬 Dexogen → 💬 Prompt & Text.
Gotchas
- No endpoint/model selected = passthrough. The text goes through unchanged, but you still get the frame-grid outputs - that's not a bug, it's Direct-mode-by-default.
- Duration is snapped, not rounded. Ask for 7.3 seconds on a model with a coarser grid and the node returns the nearest legal length; check
secondsrather than assuming your request was honored verbatim. - The
imagemodel needs vision. If you point this at a text-only LLM and connect a frame, expect an error - same rule as the pack's other prompt node. - It's an API node, which means it's only as available as your endpoint. If you're doing anything a hosted model's filter would refuse, run a local endpoint or you'll be fighting the provider's moderation, not the node's.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| first_frameopt | IMAGE | The starting picture. Connecting one image switches the node to first-frame mode. | |
| last_frameopt | IMAGE | The ending picture. With both images connected, the node writes the transition from the first to the last. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| text | STRING | The generated prompt as a plain STRING. In Direct prompt mode, or without an endpoint or model, the entered text passes through unchanged. |
| frames | INT | The requested duration converted to the target profile's valid frame grid. |
| seconds | FLOAT | The real duration after frame-grid snapping, calculated as frames / fps. |