Multishot Advance AI Scenario Director
Let a local LLM write your MiniMax H3 scene script (and double-check it anyway)
- reference_images
- reference_video_1
- reference_video_2
- reference_video_3
- reference_audio_1
- reference_audio_2
- reference_audio_3
- prompt_output
Writing the H3 contract is the slow part. This node offloads it.
MiniMax H3 is a 33B omni-modal video model - 4–15 second clips at 24 FPS with native synced audio - and the Multishot Advance pack chains those clips into long scenes. The catch: H3 doesn't take a plain sentence. It wants a structured contract, with subject_definitions, a soundscape, per-clip [Shot N] blocks separated by ---, and (if you're doing dialogue) exact <d>[English] ...</d> tags. Great output, but the typing is brutal when you're iterating on a five-clip story.
That's what the Multishot Advance AI Scenario Director is for. It's the optional, explicitly experimental authoring node in this pack: you describe the story in plain language, and it hands back structured English fields ready to drop into the pack's Prompt Builder. It doesn't render a single frame - it's a text generator sitting before everything else. And the nice part: it's fully local. The source calls your LLM over urllib to http://127.0.0.1:11434 (Ollama) or your LM Studio / llama.cpp server. No API key, no cloud, no prompts leaving your machine - the same reason the community reaches for local LLMs for this kind of prompt-authoring job at all.
How it works
You give it scenario - the story, subjects, actions, environment, what each reference Picture should contribute. Optionally wire in up to nine reference_images, three reference_video_*, and three reference_audio_*. If analyze_visual_references is on and you've set a vision_model, it base64-encodes each Picture (and contact-sheet frames of each Video) and sends them to a multimodal model for analysis before the chat model writes anything.
The chat model then produces a structured response, which the node renders into one copyable block: subject name and description, retention focus, global/style/soundscape/music prompts, and the full shot script with [Shot N] camera cuts and --- scene separators. prompt_output is the single output, a STRING, and it's written so the Pack's Prompt Builder can eat it directly.
The inputs that actually matter
scenario- the primary input. It's an error to leave this andscene_briefsempty.chat_model- the exact name of an installed local instruction model, or typeautofor discovery. The greyed placeholder (gemma3:12b) is a hint, never a submitted default.scene_countandduration_per_scene- how many---clips to produce, and how long each (H3's 4–15s range).dialogue_language- spoken dialogue only. Prompt prose is always English; this just forces<d>[Turkish] ...</d>style tags without translating the words.vision_model- needed only if you want Pictures/Videos analyzed.qwen3.5:9b-class multimodal models do the job.
Wiring it in
AI Scenario Director.prompt_output -> Prompt Builder.external_prompt_input
First run imports the generated block into the Prompt Builder's editable fields and stops downstream. Review it, fix what the LLM got wrong, then run again to continue to the sampler. That stop is deliberate - this node is not feature-complete, and the author wants you to look before you render.
Installing
ComfyUI Manager → search "ComfyUI-H3-Multishot-Advance", or clone it manually:
cd ComfyUI/custom_nodes
git clone https://github.com/KursatAs/ComfyUI-H3-Multishot-Advance
Restart ComfyUI. There's no requirements.txt - the Director is pure stdlib, so no pip installs. But it assumes you already run a local LLM server. Install Ollama (or LM Studio / llama.cpp), ollama pull a chat model, and keep it running before you queue. The pack itself doesn't bundle H3 weights; load those through the pack's Multi Model Loader, and grab ComfyUI-GGUF if you use quantized H3 checkpoints.
Gotchas
- It's experimental. Quality and structured-output reliability vary by model - treat the output as a first draft.
scene_briefs(one brief per---block) must matchscene_countor the node errors out.- Audio isn't transcribed. If an audio ref is a voice-timbre source, name its owner in
reference_audio_notes- the Director won't guess. thinkingonly activates for Ollama models that advertise native thinking; unsupported models just skip it.
Like any local-LLM helper, it's a timesaver, not an oracle. Use it to beat writer's block on the H3 contract - then edit like you mean it.
Inputs (33)
| Name | Type | Default | Description |
|---|---|---|---|
| backend | COMBO | ollama | 3 options: ollama, lmstudio, llamacpp |
| server_url | STRING | http://127.0.0.1:11434 | Ollama, LM Studio, or llama.cpp server root URL. |
| chat_model | STRING | Exact local instruction-model name. The example text is only a hint and is never submitted as a default. Type 'auto' explicitly to request installed-model discovery. | |
| thinking | BOOLEAN | false | Enable native Thinking only when the selected Ollama chat model advertises support. Unsupported or unverified models safely generate without it; malformed Thinking JSON gets one non-thinking retry. |
| vision_model | STRING | Exact multimodal model name used for Picture/Video analysis. The example text is a hint, not a default. It may stay blank only when visual analysis is not needed or is disabled; type 'auto' explicitly for discovery. | |
| analyze_visual_references | BOOLEAN | true | Describe Picture/Video content with vision_model before prompt authoring. |
| temperature | FLOAT | 0.550–2 | — |
| num_ctx | INT | 163840–131072 | Ollama context length. 0 leaves the backend default unchanged. |
| timeout_seconds | INT | 12030–3600 | — |
| scene_count | INT | 11–30 | — |
| duration_per_scene | INT | 104–15 | — |
| dialogue_language | STRING | auto-detect and preserve spoken language | Spoken language only. Prompt prose is always English. A value such as Turkish forces <d>[Turkish] ...</d> without translating the words. |
| reference_image_groups | STRING | Legacy identity-only shorthand. '2,1' maps Pictures 1-2 to Subject 1 and Picture 3 to Subject 2. For flexible roles, describe what each Picture supplies in scenario or reference_image_notes. | |
| reference_image_role | COMBO | identity_reference | 5 options: identity_reference, first_frame_anchor, storyboard_reference, identity + first_frame_anchor, last_frame_anchor |
| reference_video_role | COMBO | video_structure_reference | 4 options: video_structure_reference, appearance_reference, video_edit_source, video_continuation_source |
| reference_audio_role | COMBO | voice_timbre_reference | 5 options: voice_timbre_reference, ambience_reference, rhythm_reference, audio_full_copy, audio_partial_copy |
| scene_briefs | STRING | Optional one standalone scene brief per --- block. | |
| visual_style | STRING | — | |
| camera_notes | STRING | — | |
| dialogue_notes | STRING | — | |
| soundscape_notes | STRING | — | |
| music_notes | STRING | — | |
| reference_image_notes | STRING | One note per Picture, or labeled lines such as '<Picture 2>: ...'. | |
| reference_video_notes | STRING | One note per Video, or labeled lines such as '<Video 1>: ...'. | |
| reference_audio_notes | STRING | One note per Audio, or labeled lines such as '<Audio 1>: ...'. | |
| scenario | STRING | PRIMARY INPUT: describe the story, subjects, actions, positions, environment, desired result, and what each Picture should contribute. | |
| reference_imagesopt | IMAGE | Optional Picture batch; maximum nine images. | |
| reference_video_1opt | VIDEO | Optional <Video 1>. | |
| reference_video_2opt | VIDEO | Optional <Video 2>. | |
| reference_video_3opt | VIDEO | Optional <Video 3>. | |
| reference_audio_1opt | AUDIO | Optional <Audio 1>. | |
| reference_audio_2opt | AUDIO | Optional <Audio 2>. | |
| reference_audio_3opt | AUDIO | Optional <Audio 3>. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| prompt_output | STRING | — |