Nodes/NO8D-controls/NO8D-Dynamic-Prompt
ComfyUI Node

NO8D-Dynamic-Prompt

MiniMax H3 wants a storyboard, not a prompt — NO8D-Dynamic-Prompt writes it for you

By no8d·Created 4 months ago·Updated a day ago· 308
NO8D-Dynamic-Prompt
  • images
  • prompt
◄duration8►
◄shot_count0►
◄style_preset自行判断►
◄seed0►
◄extra_rules►

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 - with control_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.

CategoryNO8D-control

Inputs (6)

NameTypeDefaultDescription
durationINT84–15—
shot_countINT00–6—
style_presetCOMBO自行判断6 options: 自行判断, 不描述风格, 写实摄影, 动漫插图, 手绘艺术, 数字艺术
seedINT00–18446744073709550000—
extra_rulesSTRING—
imagesoptIMAGE—

Outputs (1)

NameTypeDescription
promptSTRING—