zhenzhen-mai-image-2.5-edit-fal
Four reference images in, one edited image out — Xiaomi's Mai Image 2.5
- image1
- image2
- image3
- image4
- images
- response
- image_urls
Xiaomi's Mai Image 2.5 is one of those closed image models you can't download, and the editing flavor of it is what this node gives you: you feed it up to four reference images plus a text instruction, and it rewrites the image to match. Comfly_mai_image_2_5_edit_fal (displayed as "zhenzhen-mai-image-2.5-edit-fal") is the image-editing side of the pair - its sibling Comfly_mai_image_2_5_fal does plain text-to-image with the same model.
It's part of the T8mars/Comfyui-zhenzhen pack, the big "Comfly" collection of API-wrapper nodes that all talk to the author's paid reseller service (贞贞的AI工坊 at ai.t8star.org, with a cheaper China-facing site at api.seedance.nz). Mechanically this is a FAL-class node: your prompt and images go to the author's /fal proxy, the job is submitted and polled, and the finished image comes back as a real ComfyUI IMAGE. FAL billing here is pre-deduct - the site holds credits up front and settles after the run.
The inputs that actually matter
prompt- required, and this is the whole game. The model is genuinely good at following instructions like "put the subject in a red dress" or "make it night, keep the composition." Be specific.image1throughimage4- your reference images, dropped in from the canvas. There's alsoimage_urls(one URL per line) and animage_wayswitch betweenbase64andimage_urlfor how they're sent.num_images- 1 to 4 outputs per run. Remember the price scales with the count.aspect_ratio-autoor the usual set (1:1, 4:3, 3:4, 16:9, 9:16, 3:2, 2:3).output_format- png/jpeg/webp.seed- here it's mostly a ComfyUI cache-control value, not a true model seed; fixed means "reuse cached result," random means "new run."
There's also sync_mode (a boolean that toggles sync vs async submission) and the usual poll_interval / max_poll_attempts pair (default 6s × 600 = 1 hour timeout), plus skip_error for forgiving batch runs. The api_key field takes your Zhenzhen key directly.
Outputs
images- the edited result(s) asIMAGE. Wire this to a preview or a save node and you're done.image_urls- hosted URLs as a string, in case you want the file on the server.response- the raw API response for debugging.
Installing and first run
Install the whole pack, not the node - no model files, nothing runs on your GPU.
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-zhenzhen
# restart ComfyUI
ComfyUI Manager search "Comfyui-zhenzhen" works too. Then you need an API key from the author's site; paste it into api_key. Sign-up has been opened and closed over time, so if registration's shut when you try, that's the state of the service.
Honest caveats
Two things to keep in mind, both shared across this pack. First, "FAL" here means the author's proxy of FAL's queue - credits are held up front and refunded after, and a 500 from the upstream provider is usually not your fault (rerun it). Second, this is a third-party API wrapper: your reference images and prompt leave your machine and go through a reseller's server. For a closed model you can't run locally anyway, that's the trade you're buying into. For edit jobs where you're iterating on a character or a product shot, the per-call cost adds up fast - batch carefully and you'll get a lot of mileage out of one credit balance.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| image1opt | IMAGE | — | |
| image2opt | IMAGE | — | |
| image3opt | IMAGE | — | |
| image4opt | IMAGE | — | |
| image_urlsopt | STRING | Optional external image URLs, one per line. | |
| api_keyopt | STRING | — | |
| num_imagesopt | INT | 11–4 | — |
| aspect_ratioopt | COMBO | auto | 8 options: auto, 1:1, 4:3, 3:4, 16:9, 9:16, +2 |
| output_formatopt | COMBO | png | 3 options: png, jpeg, webp |
| sync_modeopt | BOOLEAN | false | — |
| image_wayopt | COMBO | base64 | 2 options: base64, image_url |
| poll_intervalopt | INT | 61–60 | — |
| max_poll_attemptsopt | INT | 60010–3600 | Default 600*6s = 3600s timeout. |
| 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 (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| response | STRING | — |
| image_urls | STRING | — |