- setup
No sparkle, no canvas magic. OpenH3-IR Setup is where the machine lives: which language model writes your brief, which five MiniMax H3 files to load, and where the compiler runs. Every H3 graph in this pack needs one of these, because Main doesn't make any of those decisions for you - it loads exactly what you pick here. Get this node right once and you can forget it.
The pitch is that H3 needs a structured Context-IR brief, and writing that brief is a language-model job. Setup holds the endpoint for that writer, plus the actual model files H3 renders with. Everything else in the pack assumes this node is configured.
How it works
Setup is honest in a way you don't expect from ComfyUI file pickers. The five file selectors list the files your install actually has - no hidden "auto" choice, no background guess based on which filename looks closest. The file you can read on the node is the file that loads, and Main's report names every file and the loader that handled it. If a filename clearly identifies the wrong H3 checkpoint family for the current job, you get a warning rather than a silent swap.
The other thing it decides is where compilation runs. server empty means the open-h3-ir package installed in ComfyUI's own Python does the work - nothing to start, no port. Put an address like http://127.0.0.1:8420 in there and the same graph compiles on a remote OpenH3-IR service instead. Most people leave it empty.
The fields that matter
- The five file selectors -
reference_modelandframes_model(H3's checkpoints for reference/text jobs and first/last-frame jobs),text_encoder(the Qwen3-VL encoder H3 was trained against),video_vaeandaudio_vae(a different file from the video VAE - needed even for a silent piece, because H3 writes picture and sound together). They live in ComfyUI's usual model folders. If ComfyUI-GGUF is installed,.safetensorsand.ggufbuilds appear in the same lists and you just pick one - the selected file decides the loader. - llm_url - your OpenAI-compatible endpoint in full, ending in
/v1, e.g.http://192.168.1.20:8000/v1. vLLM, llama.cpp server, LM Studio, Ollama or a hosted API all work. If the job has visual references, the model needs vision - the test button sends it a picture and checks rather than trusting the model name. - llm_model - which model on that endpoint, by the id it serves. Leave it empty on a single-model endpoint; the test button fills it for you. On an endpoint serving several, this won't guess.
- weight_dtype - the same setting a UNET loader has. Leave alone unless you're short of VRAM; it doesn't apply to a GGUF checkpoint, which carries its own quantisation.
Pressing test is the moment of truth: the node reaches the endpoint, reads the models it serves, fills the model field if there's only one, sends the selected model a picture, and reports whether vision actually works. A freshly added Setup node makes no network calls until you press it.
Install
Search OpenH3-IR in ComfyUI Manager and install, or:
git clone https://github.com/ruashots/ComfyUI-OpenH3-IR.git ComfyUI/custom_nodes/ComfyUI-OpenH3-IR
/path/to/ComfyUI/python -m pip install -r ComfyUI/custom_nodes/ComfyUI-OpenH3-IR/requirements.txt
The only Python dependency the pack itself adds is open-h3-ir (which brings fastapi, uvicorn, pydantic and tiktoken with it). What you actually need to download is the model: MiniMax H3's weights run about 42.5 GB on HuggingFace, plus the Qwen3-VL text encoder and the two VAEs. And before you go further - check whether you're licensed to run H3 at all. The MiniMax H3 Community License excludes the US, EU, UK and South Korea from its applicable territory, which is a real, legal gate, not a terms-of-service quirk. The nodes still render if you ignore it; that's not the same as being allowed to.
Where people get burned
The endpoint has to be reachable from the machine ComfyUI runs on - not merely from your browser. That trips up people who can reach LM Studio from the browser but not from the node. The API key isn't saved inside the workflow; it lives in ComfyUI's own user folder, because workflows travel and get embedded in rendered files. If you export H3IR_LLM_URL and H3IR_LLM_MODEL before starting ComfyUI, empty fields inherit them - and the report says so, because a setting you can't see on the canvas has to be said out loud. A broken OpenH3-IR installation costs you the compile, not the node: the pack's imports are lazy, so the nodes stay on the menu and the failure shows up when a graph actually tries to compile. Read the toast or the report - it points at the Setup field to fill in, with an example.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| server | STRING | Leave empty to compile in ComfyUI itself, which needs nothing started. To compile on another machine, put the address an OpenH3-IR service is listening on there instead, for example http://127.0.0.1:8420. That service uses its own language model, so the two fields below are then not used. | |
| reference_model | COMBO | H3's checkpoint for reference and text jobs. Both formats are in this list: pick a .gguf and it loads through Unet Loader (GGUF), pick a .safetensors and it loads like Load Diffusion Model does. | |
| frames_model | COMBO | H3's checkpoint for first and last frame jobs. The compile node uses this one or the ref2va model depending on which slots you filled, and says which in its report. Both formats are in this list. | |
| text_encoder | COMBO | The Qwen3-VL encoder H3 was trained against, the same file a Load CLIP node takes. Both formats are in this list, chosen independently of the checkpoint: a GGUF clip works with safetensors weights and the other way round. | |
| video_vae | COMBO | H3's video VAE, used for the decode as well. | |
| audio_vae | COMBO | H3's audio VAE, a different file from the video VAE. Needed even for a silent piece, because H3 writes picture and sound together. | |
| weight_dtype | COMBO | default | The same setting a UNET loader has. Leave alone unless you are short of VRAM. It does not apply to a GGUF checkpoint, which carries its own quantisation, and the report says when it was ignored. |
| timeout_s | INT | 60010–3600 | Writing a brief is one call to your language model, so this is as slow as that model is. |
| llm_urlopt | STRING | The OpenAI-compatible endpoint the brief is written with, in full and ending in /v1, for example http://192.168.1.20:8000/v1. vLLM, llama.cpp's server, LM Studio, Ollama or a hosted API all work. It has to be able to read pictures: every reference in the tray is described through it. | |
| llm_modelopt | STRING | Which model on that endpoint, by the id it serves. Leave empty on an endpoint that serves one model. On one that serves several this will not guess, because no model list says which model can see. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| setup | H3IR_SETUP | — |