MiniMax H3 Text-to-Image
MiniMax H3 Text-to-Image as a node
- client
- loras
- image
MiniMax H3's reputation is video - a 33B omni-modal model that generates picture and stereo audio in one pass, the first open-weight answer to the audio gap Veo held closed. This node is not that. It's H3's still-image endpoint on WaveSpeed AI's servers, wrapped so it behaves like any other generator node in your graph: text goes in, an IMAGE tensor comes out, no VRAM changes hands.
That framing matters because it tells you when to reach for it. If you have a working local setup, this is not replacing your checkpoint - a WaveSpeed call is metered every time, while your own card is free after the electricity. Reach for it when your machine can't run what you want to try, when you're on a laptop and just need look-dev frames, or when you're already paying for the pack's video and edit nodes and want a still in the same graph.
The price check first, since H3 isn't the cheap option in this pack: $0.02 at 1k (~1MP), $0.06 at 2k (~4MP). Most of the Qwen and Seedream image nodes in the same collection bill $0.02–$0.027 and let you set width and height directly. So H3 is what you pick for a reason, not as the default.
How it works
The node builds a request to /api/v3/wavespeed-ai/minimax-h3/text-to-image, polls every 2 seconds, and gives up after 300 seconds. When the endpoint returns a URL, the node downloads it and decodes it into a batch tensor, and also paints a small inline preview onto the node body. The client is async on purpose - ComfyUI's executor can interleave several API nodes at once, so queueing four of these doesn't serialise into four straight minutes.
Attach a MiniMax H3 LoRA Stack to the loras input and the request switches to the endpoint's -lora twin instead, for +$0.015 an image.
The inputs that matter
prompt is the only required field. aspect_ratio (defaulting to 1:1) is where most of your composition lives - there are fifteen, from 1:1 and 4:3 through 9:16 and 16:9 out to the ultrawides 21:9 and 9:21. resolution is the two-tier 1k/2k. output_format gives you jpeg, png or webp - pick png if the result is going to be fed into more ComfyUI work, otherwise you're asking the pipeline to be lossy twice.
seed is sent to the API, so -1 means a brand-new generation on every queue (and, because the node is marked non-idempotent, a fresh bill). Like the framing? Pin the seed and ComfyUI can serve the cached output.
There is no client requirement - leave it unconnected as long as you've configured a WaveSpeed key in Settings. One output: image, which goes to Save Image, Preview Image, or an upscaler.
Note what isn't here: no width and height. You choose a ratio and a tier, and the endpoint picks the pixels. If you need an exact 1920×1080, generate at the closest ratio and crop or resize locally - that's the same "generate at native resolution, then scale" habit the local side lives by, just with someone else's model doing the generating.
Installing
Manager → Install Custom Nodes → search erpk → ERPK Custom Nodes → Install → restart. Manual route:
cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/eRepublik-Labs/comfyui-nodes-erpk.git erpk
cd erpk && pip install -r requirements.txt
The pack is a monorepo, so the root requirements file drags in the Claude, Gemini, OpenAI and xAI SDKs whether you use them or not; the WaveSpeed nodes themselves need requests, pydantic and Pillow. Then set a key - right-click the canvas → ERPK Settings, or Settings → ERPK → API Keys. Keys are stored per user and never written into the workflow, which is the reason to use Settings instead of pasting into a node. The nodes land under ERPK → WaveSpeedAI.
Where people get burned
Unauthorized: Invalid API key is what you get with no key anywhere - Settings, the client widget, or wavespeed/config.ini. It's the most common first error by a mile.
Prompt is required fires before any network call. Empty string, no request, no charge.
The 300-second ceiling. A still image should come back long before that, but a queue stuck behind a busy endpoint dies at five minutes with a timeout error rather than retrying forever. That's a deliberate trade in the node, not a bug to work around.
Randomize is the default on seed. Ten test queues with -1 is ten paid calls. Switch the widget to fixed once you're iterating on a prompt, and only flip it back when you actually want a new roll.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Text description of the image to generate | |
| clientopt | WAVESPEED_AI_API_CLIENT | WaveSpeed API client (optional if API key is configured in Settings) | |
| aspect_ratioopt | COMBO | 1:1 | Output aspect ratio |
| resolutionopt | COMBO | 1k | Output resolution. 1k (~1MP) is about $0.02/image, 2k (~4MP) about $0.06. |
| output_formatopt | COMBO | jpeg | Output image format |
| seedopt | INT | -1-1–2147483647 | Generation seed, sent to the API. A fixed seed reproduces the same result and lets ComfyUI reuse the cached output; -1 generates a new one each queue. |
| lorasopt | MINIMAX_H3_LORAS | LoRA stack from the MiniMax H3 LoRA Stack node. When connected, the call goes to the endpoint's -lora twin (+$0.015 per image). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |