NO8D-Dynamic-Prompt
MiniMax H3 wants a storyboard, not a prompt — NO8D-Dynamic-Prompt writes it for you
- images
- prompt
H3 will accept "woman walks down a rainy street" and give you something. It just won't give you what you're paying for. MiniMax H3 is a 33B omni-modal video model that generates 4–15 seconds with native stereo audio, and the way to get that out of it is the prompt its own guide describes: shot timings, camera moves from a fixed vocabulary, dialogue tags, a soundscape field, a separate music field. Writing that by hand is homework. NO8D-Dynamic-Prompt does the homework.
It doesn't call MiniMax and it doesn't make video. It's an LLM client that takes a reference image and a sentence of intent, runs them past a model you configured, and hands back a finished prompt string for the H3 node in your graph.
How it works: two passes and a compiler
Pass one is vision. With an image wired in, a multimodal model analyses the opening frame into a fixed set of "visual facts" - style, subject, clothing, pose and gaze, props, environment, composition and lens, lighting and palette, visible text - at near-zero temperature, so it describes rather than invents. Those facts are then locked; the second stage can't redesign them.
Pass two is planning. Your text model gets the facts plus extra_rules and returns a plan: an opening, shots carrying a start_seconds, visual_progression, camera_motion and synchronized_sound, an ending, overall_soundscape and non_diegetic_music. It uses the official motion names (Push In/Out, Truck, Pedestal, Arc Shot, Static Shot) rather than "moves forward", keeps your dialogue verbatim behind <d>[Language] ...</d> tags, and describes music by instrumentation and tempo rather than mood.
Python then compiles the plan into the final text, deterministically:
For the target video, at 0.00 seconds into the target video, <Picture 1> (from [Shot 1]) is fully referenced.
integrated_multimodal_description: [Shot 1] ... [Shot 2] At 00:03.500, the camera cuts to ...
overall_soundscape: ...
non_diegetic_music: ...
A validator re-checks it: shots numbered sequentially, timestamps increasing and inside the duration, no <Picture 1> in a text-only prompt, no abstract mood words in the music field, under 7000 characters. Fail and you get one correction round-trip before it errors - the RuntimeError names the exact complaints. Results are cached, so re-queueing an unchanged graph doesn't re-bill you.
The inputs that matter
duration- 4 to 15 seconds, default 8 - H3's own clip length.shot_count- 0, the default, lets the planner choose, preferring one continuous shot unless a cut earns its place. Set 1–6 to force an exact count.style_preset-自行判断(derive it, the default),不描述风格(strip style vocabulary entirely), or one of four pinned mediums: photographic, anime illustration, hand-drawn, digital art.seed- withcontrol_after_generate; treat it like a sampler seed.extra_rules- this is your prompt. No separate text field: intent and requested dialogue go here.images(optional) - a reference frame for image-to-video. Batch several and you get one prompt per image.- Output:
prompt, a STRING list, straight into the prompt input of your H3 node.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/no8d/ComfyUI-NO8D-controls.git
python -m pip install -r ComfyUI-NO8D-controls/requirements.txt
ComfyUI Manager handles dependencies if you install by search; on Windows Portable, run pip with python_embeded\python.exe from the portable root. Requirements.txt pulls json-repair (malformed-JSON recovery, not a model) plus openpyxl and rembg[cpu] for other nodes in the pack - and rembg brings onnxruntime along, so the download is chunky even if you never touch the image nodes.
The step everyone misses: this node ships no model. Open Settings → NO8D-control → API Manager, add an OpenAI-compatible service or a local Ollama endpoint, hit Validate API, then pick a text and a vision model. Set it as the default prompt API - Ollama needs no key, a remote endpoint does. Restart and hard-refresh the browser.
Where people get burned
Nothing comes out. No image and empty extra_rules returns an empty list on purpose - the node has nothing to work from. Text-only runs are fine, you just have to say something.
The service isn't configured, or the vision model can't see. The service has to be added and validated - the model lists come from that check, you don't type them in. And image-to-video needs a multimodal model in the vision slot; a plain chat model fails with a provider error rather than a friendly ComfyUI message.
A small local model can't hold the JSON schema. It replies with prose and markdown, and you get one repair attempt then a RuntimeError. Bigger text model, or an Ollama model that genuinely does structured output.
H3's own weights are territory-restricted (the community licence excludes the US, EU, UK and Korea), but that constrains running the model, not writing a prompt for it. And the older NO8D-Prompt node's H3 mode is gone - H3 prompting lives here now.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| duration | INT | 84–15 | — |
| shot_count | INT | 00–6 | — |
| style_preset | COMBO | 自行判断 | 6 options: 自行判断, 不描述风格, 写实摄影, 动漫插图, 手绘艺术, 数字艺术 |
| seed | INT | 00–18446744073709550000 | — |
| extra_rules | STRING | — | |
| imagesopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |