zhenzhen-MAI Image 2.6 / Flash(生成/编辑·平价小屋)
The Node That Actually Hands You the Pixels
- image1
- image2
- image3
- image4
- image5
- api_config
- image
- image_url
- task_id
- response
Half the reason API nodes get a bad reputation in this community is the pricing model, and the other half is that people misunderstand what they're for. This one isn't here to replace your local checkpoint. It's here for the model you can't download.
MAI Image 2.6 comes in two variants in this node: mai-image-2-6 and mai-image-2-6-flash. Flash is the one for iterating - you're running a dozen prompt variants and only the last two matter. The full model is the final pass. Same prompt controls, same reference slots, different bill.
What happens when you press queue
You press queue, and the node takes the slow road: it uploads any connected reference images, posts the job to the relay at api.seedance.nz, polls until the result is ready, downloads the media, decodes it, and hands back an IMAGE tensor your graph treats exactly like a locally-sampled image. Progress is reported along the way. That blocking behavior is the point - for one image, or five, this is simpler than the submit/collect dance, and it always ends in pixels rather than a ticket.
Three other outputs come with it. image_url is the signed result link, task_id is the provider-side job ID (the thing to quote when a run half-fails - you can look it up on the provider's site and download the result manually), and response is the raw JSON payload, which is where you look when an error message is vague.
The inputs that matter
prompt takes a generation or an edit instruction, and the upstream ceiling is roughly 32,000 tokens. Practically: stop optimizing for brevity, start specifying.
model, resolution (1k or 2k) and size cover the frame. size is a long enum - auto, the usual ratios, plus custom_ratio (which unlocks the free-text custom_ratio field, integer W:H between 1:4 and 4:1) and custom_pixels (which unlocks width/height, 768–3072 in steps of 32). Two rules bite here. Sides are floored to multiples of 32, so 1000 becomes 992. And total area is capped at 2,359,296 pixels - about 2.36 MP - so 3072×3072 is rejected outright even though both dimensions are individually in range. If you just want "whatever fits this reference", turn on auto_aspect_ratio and walk away.
image1 through image5 are the reference slots - one image each, up to five. Connect any of them and the entire sizing block goes silent. The payload gets built around the images and resolution/size/custom_ratio never leave your machine. That's documented behavior, not a bug, but it causes a lot of "why is my 2k setting ignored" threads.
web_grounding is the sleeper feature: it lets the model pull current information from Bing before generating. Worth switching on for prompts about things that changed recently, pointless for anything stylized.
Finally, seed is ComfyUI cache control only - the tooltip says so explicitly, and it's never sent to the API. Keep it fixed while you tweak one prompt word at a time and you'll get the cached result instead of a fresh charge. skip_error decides whether a failed request raises or returns a placeholder so the rest of the graph can keep going.
Install and auth
Manager → search zhenzhen, or:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-zhenzhen
# restart ComfyUI
No weights, no VRAM. First launch installs a chunk of Python (aiohttp, transformers, GitPython, opencv-python, matrix-client, more in requirements.txt), and the pack starts a helper web app on port 8080 for its front-end assets - if that port's busy you'll see console noise, not a failure.
Auth is one node: drop zhenzhen-seedance2-low-price-api-settings into the graph, paste the key you got from the provider, wire it into api_config. Or set SEEDANCE_API_KEY in the environment. Skip both and this node fails before it does anything, with Seedance API key is required.
Where people get burned
Cost is per call, so five images is five charges - nothing local here is amortizing anything. Upstream 429 and 500 responses are load limits at the vendor, usually unbilled, and the README's own advice is refreshingly honest: run it again. If you're queuing dozens of variants, you're using the wrong node in this pack - the concurrent submit twin fires 30 at once into a shared pool instead of making you sit through them.
And the usual caution for anything in this category: this is a third-party relay node holding your API key and sending your prompts and reference images off your machine. Prefer the official ComfyUI API nodes when the exact same model is available there; use a pack like this when the price or the region is the reason you're here.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | mai-image-2-6 | 2 options: mai-image-2-6, mai-image-2-6-flash |
| prompt | STRING | Generation or editing instruction; about 32000 tokens upstream. | |
| resolution | COMBO | 1k | 2 options: 1k, 2k |
| size | COMBO | 1:1 | 20 options: auto, 1:1, 16:9, 9:16, 21:9, 9:21, +14 |
| custom_ratio | STRING | 16:9 | Positive integer W:H, between 1:4 and 4:1. |
| width | INT | 1536768–3072 | — |
| height | INT | 1024768–3072 | — |
| auto_aspect_ratio | BOOLEAN | false | — |
| web_grounding | BOOLEAN | false | Use Bing to retrieve current information. |
| image1opt | IMAGE | Reference 1/5; exactly one image per slot. | |
| image2opt | IMAGE | Reference 2/5; exactly one image per slot. | |
| image3opt | IMAGE | Reference 3/5; exactly one image per slot. | |
| image4opt | IMAGE | Reference 4/5; exactly one image per slot. | |
| image5opt | IMAGE | Reference 5/5; exactly one image per slot. | |
| api_configopt | ZHENZHEN_SEEDANCE2_CONFIG | — | |
| skip_erroropt | BOOLEAN | false | — |
| seedopt | INT | 00–18446744073709550000 | Execution seed for ComfyUI cache control. Fixed reuses the cached result; randomize/increment/decrement requests a new run. This compatibility seed is not sent to APIs that do not expose a native seed parameter. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| image_url | STRING | — |
| task_id | STRING | — |
| response | STRING | — |