MiniMax H3 prompt maker
A local LLM writing video prompts for you
- image
- ui_widget
- image_2
- image_3
- image_4
- image_5
- image_6
- image_7
- image_8
- image_9
- prompt
- validation_report
- visual_inventory
MiniMax H3 generates video with native stereo audio - dialogue, sound effects, room tone - which means the prompt isn't a tag soup, it's a scene description with speaker turns and timing. That's a writing job, not a keyword job, and it's the one thing a language model in your graph is genuinely good for.
LF_H3PromptMaker does exactly that: you type a short idea, it asks a local LLM (LM Studio's native chat API) to write the H3 prompt, optionally has a second pass review that draft against your idea and images, and hands you the prose. No cloud, no API key, no per-call cost.
If you're in the US, EU, UK or Korea, read the licence before you get attached. H3's open weights are excluded from those territories - the hosted API is global, the downloadable weights aren't. The node works fine; the model does not, legally, for everyone.
How it works
It's deliberately prose-only. Earlier versions compiled a structured schema with planning steps, inventory passes and repair loops; those are gone. What runs now is one provider call when review is off, two when it's on: a writer stage, then a review stage that gets your original idea and the draft as plain text and returns a revised (or unchanged) complete prompt. The system prompt carries the H3 writing guidance - section order, reference-role labels, fixed-frame alignment wording, mode-specific teaching examples - and the model's final text comes back unchanged. No JSON parsing, no schema validation, no format-repair loop. Fewer places to fail, and the two-call shape is why it's cheap enough to iterate on.
Two stages show up as progress in the node, so a long thinking model doesn't look hung.
The inputs and outputs that matter
intent- your idea in ordinary words. "Walking from behind in a medieval town" is a complete input; add reference roles or constraints only when you want to override what it picks.mode-auto(the default, and the right answer most of the time: text-only without images, reference generation with them), then explicitt2va,i2va,fl2va,l2va,ref2vafor when you genuinely want fixed first/last frames.duration_seconds- exact target length, default 6.url- the LM Studio native chat endpoint,http://127.0.0.1:1234/api/v1/chat. This is the part people skip; the native route is what gives you blank-model discovery and vision.imagethroughimage_9- up to nine ordered references, flattened in socket order then batch order. Different sizes are fine, and an image is a reusable identity/content reference by default, not an opening frame.review- default on. Turn it off if you'd rather have the writer's single pass.- Also worth knowing:
temperature(0–1, default 0.2) andreasoning(visionby default - it reasons while actually looking at your pixels).
Outputs: prompt (the prose - feed it to your H3 sampler), validation_report, and visual_inventory. Both JSON sockets are kept for saved-workflow compatibility and both tell you the same thing: validation is not_performed and inventoryPerformed is false. Don't read a clean run as "the prompt is valid"; nothing validated it.
How to install it
ComfyUI Manager → search LF Nodes → install → restart, or manually clone and run the pack's requirements with ComfyUI's own Python. The old lucafoscili/comfyui-lf repo is archived; use lf-nodes.
This node needs a running LM Studio server with a model loaded. Load the model key, then hand that same key to LF_LMSLoadModel and wire the nodes up:
git clone https://github.com/lucafoscili/lf-nodes
cd ComfyUI/custom_nodes && python -m pip install -r lf-nodes/requirements.txt
Common issues & troubleshooting
Connection refused. LM Studio's server isn't started, or it's on another port, or the url still points at a friend's machine. Check the "Start server" toggle before touching the node.
Temperature above 1 gets rejected. That's the native endpoint's limit, not the pack being fussy.
"ref2va requires between 1 and 9 reference images." You picked an explicit reference mode with no references, or an explicit fixed-frame mode with images attached. Set mode back to auto and let it decide.
It's slow. Two calls through a local model, with thinking enabled, plus a review pass over the whole draft. Drop reasoning to off for a fast first look, and turn review off while you're iterating on the idea.
An empty model field. That's the designed behavior on LM Studio's native route - it resolves whatever LLM instance is currently loaded. If you have two loaded, specify one.
The prompt is good and the video isn't. That's the usual ceiling, and it's worth internalizing before you spend an evening on it: a passing prompt review proves nothing about the render. Identity drifts between shots even when the prompt holds. Review catches lazy writing, not bad video.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| intent | STRING | A short idea is enough, e.g. walking from behind in a medieval town. Add reference roles or constraints only when you want to override the automatic choices. | |
| mode | COMBO | auto | Auto uses text generation without images and reusable references with images. Choose i2va/fl2va/l2va only for fixed first/last frames. |
| duration_seconds | FLOAT | 6.0000.001–5999.999 | Exact target video duration in seconds. |
| url | STRING | http://127.0.0.1:1234/api/v1/chat | LM Studio native /api/v1/chat endpoint. This route supports blank-model discovery, vision, and the pipeline reasoning profiles. |
| imageopt | IMAGE | Picture 1 (or an ordered image list). Connect more references below; different sizes are preserved. | |
| modelopt | STRING | Optional model identifier. A blank native LM Studio request uses its sole loaded LLM instance. | |
| temperatureopt | FLOAT | 0.20–1 | Response randomness shared by every stage. |
| reasoningopt | COMBO | vision | Vision reasons while inspecting or reviewing pixels; other profiles apply to every stage. |
| ui_widgetopt | LF_CODE | — | |
| reviewopt | BOOLEAN | true | Review the completed prompt against your idea and images. Off returns the writer's prose directly. |
| image_2opt | IMAGE | Next ordered Picture reference; no shared size required. | |
| image_3opt | IMAGE | Next ordered Picture reference; no shared size required. | |
| image_4opt | IMAGE | Next ordered Picture reference; no shared size required. | |
| image_5opt | IMAGE | Next ordered Picture reference; no shared size required. | |
| image_6opt | IMAGE | Next ordered Picture reference; no shared size required. | |
| image_7opt | IMAGE | Next ordered Picture reference; no shared size required. | |
| image_8opt | IMAGE | Next ordered Picture reference; no shared size required. | |
| image_9opt | IMAGE | Next ordered Picture reference; no shared size required. | |
| instructionsopt | STRING | Optional authoring direction alongside the H3 writing guidance. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | Prompt prose returned by the writer or optional reviewer, without schema compilation. |
| validation_report | JSON | Authoring status on the legacy report socket; no format validation is performed. |
| visual_inventory | JSON | Ordered reference receipt; images are read directly without an intermediate facts ledger. |