Flamin Galah Prompt Director (Ollama)
MiniMax H3 wants a three-field prompt, not a paragraph
- image
- h3_prompt
What this node is actually for
MiniMax H3 is MiniMax's 33B omni-modal video model - the one that generates 4–15 second clips with native synced audio rather than bolting a sound pass on afterwards. It's also picky about how you ask:
integrated_multimodal_description: [Shot 1] ...
overall_soundscape: ...
non_diegetic_music: ...
The pack's README calls it a "rigid three-field prompt," and it isn't exaggerating: one continuous shot paragraph opening with [Shot 1], a sound field that stays strictly diegetic (breathing, fabric, rain, room tone) and never bleeds into the picture, and a separate music line or N/A. Start from a still and you also prepend the frame lock:
For the target video, at 0.00 seconds into the target video, <Picture 1> (from [Shot 1]) is fully referenced.
Writing that by hand every take is the blank-page problem with extra steps. This node hands you the finished block on one h3_prompt socket.
Why local? Not because an 8B model writes better English than a frontier API, but because it's uncensored, offline and free per call - and every hosted path filters (llm-in-comfyui.md § 1).
How it works
One Ollama chat request, then a fair amount of string surgery. The writer model gets your fields assembled into a user message; _force_clean_format() then cleans up after it - strips field labels the model invented, strips any dialogue it wrote on its own, guarantees the [Shot 1] opener, appends "The shot lasts about N seconds.", inserts yours, and rebuilds the fields.
Two things to know before you blame the model:
soundscapeandmusicare yours, not the model's. Whatever you type in those widgets lands inoverall_soundscapeandnon_diegetic_music; the model's own sound prose is only a fallback, andnone/silent/n/anormalise toN/A.- Dialogue is verbatim or absent. Nothing is invented. With
include_dialogueon your line goes in as<d>[English] Come closer...</d>behind your speaker label; turned off, the model's version is stripped out.
Connect a still to the optional image input and it flips to I2VA: the still is described by vision_model (batch item 0 only), evolved by extra_description, and the frame-lock line is prepended. If that vision call fails you still get the I2VA header, just with a generic anchor; if Ollama is down entirely, a fallback builder assembles the block from your fields with no LLM at all.
The inputs you'll actually touch
extra_description- scene, subject, motion. The one field you really write, which is why the frontend forces the box ~180px tall. It ships with a whole example scene as the default, so clear it first.camera,style,lighting- 13, 9 and 10 presets. The deterministic backbone:dolly zoomwithfilm noirmeans the same thing in take 12 as it did in take 1.duration_seconds- 4–15, rendered as pills labelled Duration. Written into the shot as "The shot lasts about N seconds."ollama_model- required, and it's your writer. An uncensored screenwriter-tuned model is the point; the README suggestsjimscard/adult-film-screenwriter-nsfwandfluffy/l3-8b-stheno-v3.2.
One warning: negative_notes steers the writer but per the README is not written into the visual field. There is no negative prompt here.
Output is one h3_prompt string - wire it into whatever text node feeds your H3 sampler.
Install
Manager → search "Flamin Galah", or:
cd ComfyUI/custom_nodes
git clone https://github.com/flamin-galah/ComfyUI-Flamin-Galah.git
Restart fully; a refresh isn't enough the first time. No pip step - pyproject.toml declares an empty dependency list, so it needs nothing beyond the torch/numpy/Pillow your ComfyUI already has. Then, separately:
ollama run jimscard/adult-film-screenwriter-nsfw # writer
ollama pull llava # vision, only needed for I2VA
Start Ollama before ComfyUI, or restart ComfyUI after pulling a model - the dropdowns are filled from Ollama's /api/tags at load time.
Where it bites
That placeholder is a real dropdown value. If Ollama wasn't up when the node class loaded, ollama_model reads "(Ollama not running – start it and refresh)" - and that string is selectable. Leave it selected and the node quietly re-queries and uses your first installed model.
Duration pills are frontend-only. They're a JavaScript replacement for the widget, shipped in web/flamin_galah.js, and the row only covers 4,5,6,7,8,9,10,12,15 - 11, 13 and 14 exist in the widget with no pill. Headless and API runs read the underlying widget value, whatever the pills happened to be showing.
Old nodes on old workflows. If a canvas node still outputs prompt instead of h3_prompt, delete it and add a fresh one - the schema moved, and the stale node keeps the stale socket.
Installing any pack runs its code. This one is MIT, small, by one author - and so was ComfyUI_LLMVISION, the infostealer that arrived through this exact install path and ended in a federal conviction (llmvision-incident.json). Three nodes, ~1,800 lines of Python. Skim the file once.
Working from a still? Flamin Galah Image Describer is the local-only alternative; Flamin Galah Grok Image Describer does it via the xAI API.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| extra_description | STRING | A woman, slim body, huge firm breasts, sitting on a chair in an office, legs open wide, she looks directly at the camera with a seductive expression | — |
| camera | COMBO | static wide shot | 13 options: static wide shot, point of view, slow push-in, tracking shot from the side, dolly zoom, handheld following, +7 |
| style | COMBO | photorealistic | 9 options: live-action cinematic, photorealistic, erotic film, softcore cinematic, glamour photography, anime, +3 |
| lighting | COMBO | high-contrast dramatic | 10 options: soft red practical lights, warm candlelight, moody low-key, neon night with wet reflections, golden hour soft light, cool blue moonlight, +4 |
| duration_seconds | INT | 54–15 | — |
| include_dialogue | BOOLEAN | false | — |
| dialogue_speaker | STRING | the woman | — |
| dialogue | STRING | Come closer... | — |
| dialogue_language | COMBO | English | 8 options: English, Chinese, Japanese, Korean, Spanish, French, +2 |
| soundscape | STRING | soft breathing, fabric sliding, distant rain against the window | — |
| music | STRING | N/A | — |
| extra_details | STRING | subtle skin texture, soft shadows, intimate atmosphere, shallow depth of field | — |
| ollama_model | COMBO | (Ollama not running – start it and refresh) | 10 options: (Ollama not running – start it and refresh), llama3.2, llama3.1, llava, llava:13b, qwen2.5-vl, +4 |
| imageopt | IMAGE | — | |
| vision_modelopt | COMBO | (Ollama not running – start it and refresh) | 10 options: (Ollama not running – start it and refresh), llama3.2, llama3.1, llava, llava:13b, qwen2.5-vl, +4 |
| ollama_urlopt | STRING | http://localhost:11434 | — |
| temperatureopt | FLOAT | 0.700–1.5 | — |
| negative_notesopt | STRING | no text overlays, no logos, no jump cuts, no cartoonish proportions, no underage appearance | — |
| lora_tagsopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| h3_prompt | STRING | — |