⚙️ MiniMax H3 Prompt Enhancer — V7.3 Turn simple ideas into detailed, structured prompts for MiniMax video generation.
This ComfyUI workflow is a prompt enhancer built around the official MiniMax H3 prompting guide. It helps transform short, rough ideas into clearer and more effective video prompts — without any complex LLM installation.
Supports T2VA, I2VA, FL2VA, L2VA, and REF2V workflows.

List of models: https://huggingface.co/DavidAU/Qwen3.5-9B-The-Defiant-Fable-Uncensored-Heretic-NEO-IMATRIX-MAX-MTP-GGUF
Choose the best for your hardware. *MTP models incompatible with the Custom LLM node*
Custom nodes needed (also in comfyui manager):
LLM Text Processor: ⚠️*Must be insalled manually from here, there is a bug for that node in the node manager*⚠️ https://github.com/KingManiya/ComfyUI-LLM-text-processor
Comfyui-RMBG: https://github.com/1038lab/ComfyUI-RMBG
rgthree-comfy: https://github.com/rgthree/rgthree-comfy
✨ What's New in V7
Added a video input node and a second QwenVL node (automatic download on first run for this model) with instructions on how to use.
Backed prompt refining.
Model Change. Now using Qwen3.5-9B-The-Defiant-Fable-Uncnr-Heretic-NEO-MAX-Q8_0. (Download directly in workflow. Extremely accurate, runs fast and easy on 16 VRAM)
V7.1
Separated REF2V Prompt in backend for better accuracy.
Removed time stamps instructions for video reference as it was exceding the video duration most of the time.
V7.2
Prompt cleaning.
V7.3
Prompt cleaning.
Added Number of shots and video duration nodes, no need to input manually now!
🎯 The Goal
This workflow isn’t meant to blindly generate the “perfect” prompt for you. Instead, it gives you a well-structured starting point that you can quickly review, tweak, and customize before sending it to MiniMax.
Simple idea → Enhanced prompt → Your edits → Video generation
💡 Tip: The generated prompt is a starting point. Read through it and adjust the details, actions, camera movement, timing, and style to match your exact vision.
Feel free to use, modify, and integrate this workflow into your own projects. If you create something with it or improve the prompting method, share your results and prompting tips in the comments so the community can keep improving it!
If you use this workflow in your own workflow pack, a quick mention would be greatly appreciated. ❤️
Description
Backend prompt cleaned.
Added Node for automatic shot numbers and video duration.
FAQ
Comments (34)
i get an error when trying to do ref2v on v7 and 7.1... the other options seems to work for me though... just not ref2v
[QwenVL] llama_cpp is not available. Install the GGUF vision dependency first. See docs/GGUF_MANUAL_INSTALL.md
this is what chat gpt suggest:
For ComfyUI Portable (Windows)
Close ComfyUI completely.
Open Windows Command Prompt (cmd) and navigate to your main ComfyUI folder.
Run the following command to target ComfyUI's embedded python environment:
.\python_embeded\python.exe -m pip install triton-windows llama-cpp-python --upgrade --force-reinstall --no-cache-dir
@KiraNugget it now gives me this error
ERROR: Exception:
Traceback (most recent call last):
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\cli\base_command.py", line 109, in runwrapper
status = innerrun()
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\cli\base_command.py", line 102, in innerrun
return self.run(options, args)
~~~~~~~~^^^^^^^^^^^^^^^
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\cli\req_command.py", line 101, in wrapper
return func(self, options, args)
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\commands\install.py", line 479, in run
requirement_set = resolver.resolve(
reqs, check_supported_wheels=not options.target_dir
)
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\resolution\resolvelib\resolver.py", line 99, in resolve
result = self._result = resolver.resolve(
~~~~~~~~~~~~~~~~^
collected.requirements, max_rounds=limit_how_complex_resolution_can_be
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_vendor\resolvelib\resolvers\resolution.py", line 601, in resolve
state = resolution.resolve(requirements, max_rounds=max_rounds)
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_vendor\resolvelib\resolvers\resolution.py", line 434, in resolve
self._add_to_criteria(self.state.criteria, r, parent=None)
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_vendor\resolvelib\resolvers\resolution.py", line 150, in addto_criteria
if not criterion.candidates:
^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_vendor\resolvelib\structs.py", line 194, in bool
return bool(self._sequence)
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 165, in bool
self._bool = any(self)
~~~^^^^^^
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 149, in <genexpr>
return (c for c in iterator if id(c) not in self._incompatible_ids)
^^^^^^^^
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\resolution\resolvelib\found_candidates.py", line 39, in iterbuilt
candidate = func()
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\resolution\resolvelib\factory.py", line 182, in makecandidate_from_link
base: BaseCandidate | None = self._make_base_candidate_from_link(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
link, template, name, version
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\resolution\resolvelib\factory.py", line 228, in makebase_candidate_from_link
self._link_candidate_cache[link] = LinkCandidate(
~~~~~~~~~~~~~^
link,
^^^^^
...<3 lines>...
version=version,
^^^^^^^^^^^^^^^^
)
^
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\resolution\resolvelib\candidates.py", line 326, in init
super().__init__(
~~~~~~~~~~~~~~~~^
link=link,
^^^^^^^^^^
...<4 lines>...
version=version,
^^^^^^^^^^^^^^^^
)
^
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\resolution\resolvelib\candidates.py", line 168, in init
self.dist = self._prepare()
~~~~~~~~~~~~~^^
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\resolution\resolvelib\candidates.py", line 246, in _prepare
dist = self._prepare_distribution()
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\resolution\resolvelib\candidates.py", line 337, in preparedistribution
return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\operations\prepare.py", line 542, in prepare_linked_requirement
return self._prepare_linked_requirement(req, parallel_builds)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\operations\prepare.py", line 661, in preparelinked_requirement
dist = getprepared_distribution(
req,
...<3 lines>...
self.check_build_deps,
)
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\operations\prepare.py", line 77, in getprepared_distribution
abstract_dist.prepare_distribution_metadata(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
build_env_installer, build_isolation, check_build_deps
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\distributions\sdist.py", line 55, in prepare_distribution_metadata
self._install_build_reqs(build_env_installer)
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\distributions\sdist.py", line 132, in installbuild_reqs
build_reqs = self._get_build_requires_wheel()
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\distributions\sdist.py", line 107, in getbuild_requires_wheel
return backend.get_requires_for_build_wheel()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_internal\utils\misc.py", line 700, in get_requires_for_build_wheel
return super().get_requires_for_build_wheel(config_settings=cs)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_vendor\pyproject_hooks\_impl.py", line 196, in get_requires_for_build_wheel
return self._call_hook(
~~~~~~~~~~~~~~~^
"get_requires_for_build_wheel", {"config_settings": config_settings}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "D:\ComfyUI_windows_portable_nvidia\ComfyUI_windows_portable\python_embeded\Lib\site-packages\pip\_vendor\pyproject_hooks\_impl.py", line 402, in callhook
raise BackendUnavailable(
...<4 lines>...
)
pip._vendor.pyproject_hooks._impl.BackendUnavailable: Cannot import 'scikit_build_core.build'
I'm sorry, I really don't know. I usually google and use grok or chat gpt to resolve those kind of issues :( AI usually knows how to fix AI
Your work is fantastic , so i have to write this comment to thank you so much ! <3
Keep up your amazing path , mate !
Thanks a lot :) ❤️
- Node Type: AILab_QwenVL_GGUF - Exception Type: TypeError - Exception Message: TypeError: AILab_QwenVL_GGUF.process() missing 1 required positional argument: 'unload_after_run'
the Qwen3VL model won't download, how to fix this?
in the backend, try to go on both QwenVL (GGUF) nodes and switch "keep model loaded". I don't see anything else :/
I really dont want to sound rude but. Why not just install LM Studio fire up a Model and getting a prompt? Install time ~2-3 Mintues. In comfyUI we need all of those Models and we need to understand the WF. Thanks for your work though.
I like having everything in comfyui and i couldn't be bothered to watch a tutorial on how to install llm localy lol. I made this mostly for me and thought i'd share to the community. I didn't think it would be this popular tbh. I might look into LM studio at some point if you say it's an easy install
@KiraNugget It is easy to install and you can integrate an LM Studio Node into ComfyUI. I just asked Hermes Agent to update my Workflow using your AutoPrompter and my Workflow (Qwen3.8-27B) and it was done after a few minutes. That's actually how I use an adapted version of your auto-prompter and I'm happy with it. Maybe worth to give it a go, but you decide of course.
@rem154 I will probably check it out and maybe do a second version of the workflow for those who prefer it that way.
I checked out your WF, and I just wanted to share some feedback on how you are building the Instructions. It seems that each of your "mode" instruction blocks, still contains the instructions for "all modes". In my own personal workflow, I had ChatGPT split up the instructions for each specific mode - I use an Any Index Switch node (from Easy-Use) to grab the correct instructions for the selected Mode - it's joined with the "shared" instructions (not shown in my screenshot), then ultimately joined with the user's prompt.
I also personally omit the instruction for the initial statement for I2V/L2V/FL2V - I also just insert that dynamically so its one less thing the LLM has to "think about". You can use the "Format text" node to update the ending timestamp.
https://i.imgur.com/XuXDk37.png
thanks for the advice. yeah thats in the most recent update, I already wanted to do that but i havent got to separate each mode yet as I at least wanted to have 1 separate prompt for ref2v and the other "combined" prompt still works well as is for the moment. It will be refined on v7.3 and will use your tips. but right now i'm focused on a long video project :P
@KiraNugget One more thing to consider... I finally got around to trying Qwen 3.8 27B Abliterated, after trying your WF and learning of that custom node to actually use it. I had tried it both with your instructions / my instructions... honestly, I felt the generated text of either was not as good as Gemma4. I have yet to get a refusal from Gemma-4, by default it feels very uncensored. Of course my results could be skewed as I only have 12gb VRAM / 32GB RAM so what I can load is more limited. Suggesting you try it out if you haven't already: EDIT Correct one here: https://huggingface.co/Comfy-Org/gemma-4/blob/main/text_encoders/gemma4_e4b_it_int8_convrot.safetensors
For this model I'm just using the native "Generate Text" node.
@altoiddealer I will check it out next time I work on this workflow after my video project but i'm not sure the users will like to flip flop again changing nodes and model every few updates lol
@altoiddealer how do I try gemma4? I need a custom node?
@dozaler replace "llm text processor" node with "generate text" node, conect to clip loader for the gemma model. model goes into text_encoder folder
@KiraNugget This doesn't need instructions? Btw. Current setup works as in I almost never get refused but in the video output characters' upper or lower bodies keep getting inverted for some reason. I've been trying additional instructions with the help of gemini to no avail. Tho maybe something else other than the prompt is the culprit idk.
@dozaler not sure what you mean by "upper or lower bodies"
@KiraNugget e.g., their upper body turn to the lens when their lower body's facing away or vice versa. I swapped LLM with Generate Text node but I get this type of output: "/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/zº/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•/z•" do I need to change any setting? I only set clip encoder to Minimax, then set it to stable diffusion to try but didn't work.
@dozaler I can't realy tell as I have not tested gemma4 yet, Maybe try to set it to qwen image? :/
@dozaler There is a ComfyUI template for Gemma-4 (in Browse Templates click "LLM" in the left to filter the list). I use whatever those default values are.
@dozaler Alright so I'm an idiot. I accidentally linked the wrong model. The correct Gemma-4 model to use is this one (or any of the other "exb" models) https://huggingface.co/Comfy-Org/gemma-4/blob/main/text_encoders/gemma4_e4b_it_int8_convrot.safetensors
@altoiddealer yeah I found and tried those settings already, could be incompatible with my card maybe(amd).
@altoiddealer you owe me 12gb of bandwidth :) so its working with the newly linked model but there are some formatting issues, this is with KiraNugget's instructions plugged in:
## Final Prompt Generation
[Shot 1] Cinematic, live-action, 2D-animated, 3D CG, claymation, watercolor, vintage film $\rightarrow$ Subject 1 (man) in Picture 1 (man) $\rightarrow$ detailed\_description: $\text{Overall visual style established via
...
"This appears to be a highly complex, abstract, and deliberately obfuscated set of instructions designed to generate a specific, constrained output based on a series of interwoven, often contradictory, rules derived from a preceding prompt structure."
well gemma4 isn't a fan :) need working instructions I guess.
pasted this: https://pastebin.com/HXsQF50i got a whole page of "<tool_call|> Smart, smart, smart, smart, smart, smart, smart, smart, smart, smart, sma..."
@dozaler Maybe this could help, this is my personal workflow. Go into the Prompt Enhancement subgraph to see my instructions to the LLM. My workflow does not support Ref2VA (yet). https://pastebin.com/t8fvjFsF
@altoiddealer Thanks I'll have to add a REF2VA version somehow, about the images input I see you batched images and set that directly to Generate Text node, can it take "many" images sequentially and recognize them? I think KiraNugget combines 3 images and sends as 1 to LLM Text Processor instead.
@dozaler It works as is, just try and you'll see it understands both images. Any more questions about my workflow, open a chat with me or send a DM on discord or something, don't want to blow up KiraNugget's notifications / inbox about this :D
@dozaler i tested it yesterday and it worked very well for me :/
@altoiddealer im considering using the model since it gave me very good results yesterday. Will do more testing after work tonight but like i said im not sure users will enjoy a model switch this soon after a model switch lol
@KiraNugget I couldn't make it work :/ you can release it as an alternative version, or switch between them inside the workflow but might be one too many for you to maintain idk.
@dozaler i'll think of something if I decide to implement it :)
@KiraNugget users will use whatever they want - most people in this space can adapt. What is included in a WF by default is really just a matter of personal opinion of what is "best". Oh and if using the native Generate Text node, then that's just one less custom node users need.
