zhenzhen-bernini-r-edit-image-fal
Call it per-image instead
- image
- images
- response
- image_urls
Bernini is ByteDance's unified image-and-video editing model, the one the local crowd crowned the new king of video editing and then immediately complained was heavy: editing runs at roughly double Wan 2.2's compute, and the community's fastest reports hover around 55-60 seconds per iteration on a single 3090. This node skips all of that. It's the same fal-ai/bernini-r image-edit endpoint, but rented per call through the Zhenzhen API instead of run on your card. No weights, no VRAM, no SageAttention config - just a prompt, a picture, and a key.
So what do you actually get? Instruction-driven image editing without a mask. You hand it an image and say "make it more cinematic" or "turn it into a rainy night," and the model edits the whole frame semantically instead of you drawing an inpaint mask. That's the whole appeal of the Bernini family: no SAM, no ControlNet, no masking pipeline in front of it. If you already run local editing, treat this node as the "I need it in the next ten minutes and I don't want to babysit a diffusion run" option, or as a second opinion on a style change.
How it works
Like every node in the T8mars pack, this one is an HTTP client wearing a generator's clothes. You give it the image (as an IMAGE tensor or an image_url string), it POSTs to the Zhenzhen FAL proxy at ai.t8star.org/fal/fal-ai/bernini-r/edit-image, then polls the job every few seconds until it's done, downloads the result, and hands you back a normal ComfyUI IMAGE tensor. The heavy lifting happens on someone else's server. That's why the API key isn't optional and why nothing in your models/ folder is touched.
Inputs and outputs that matter
The one required input is prompt - think instruction, not caption. "Make the image more cinematic." is the default, and it's a fine place to start. Then wire in either image (an IMAGE from a Load Image node) or image_url, and paste your Zhenzhen key into api_key.
A few you'll actually touch:
seed- 0 means random, and unlike most nodes the cap is 65535 (that's a FAL limit, not a typo).max_image_size- the model downscales big inputs to stay cheap; 848 is the default, and it's the main cost lever for high-res sources.num_inference_steps- more steps, better detail, slower and pricier. 30 is a sane default.enable_prompt_expansion- lets the model rewrite and enrich your prompt for you. Off by default; flip it on if you're getting timid results from short prompts.image_way-base64embeds the image in the request;image_urluploads it to Zhenzhen's file service first.base64is the default and fine.skip_error- when off (default), a failed call fails the whole queue; when on, it returns a white placeholder and logs the error so the rest of your batch survives.
Outputs are three: images (the edited IMAGE, ready to feed your upscaler or VAE), response (the raw API JSON, handy for debugging), and image_urls (the hosted URLs, one per line, if you want to grab originals).
Installing it
The whole pack installs in one go, because every Zhenzhen node ships together:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-zhenzhen
Restart ComfyUI and search "zhenzhen" in the node menu. Or use ComfyUI Manager and search for the pack title, "Comfyui-zhenzhen". The requirements file pulls in requests, opencv-python, openai and friends, but there are no model downloads - nothing local to download, which is the entire point.
Common issues
Most problems here are account problems, not node problems. The Zhenzhen API is a paid, metered reseller: you need an account at the workshop site, a token, and credit. The README is upfront that registration has been closing on and off, and that the overseas server may throw 443 errors from some networks - you'll want a VPN with TUN mode if the API just won't connect.
The classic runtime hiccup: a 500 error on the first run. The README says it plainly - often it's the upstream provider, not you, so just run it again. FAL jobs are pre-charged (roughly 3.4 credits up front) and settled after the result lands, so a job that dies mid-flight should be refunded. If the node sits there polling for the full hour (default is 600 polls × 6 seconds), check the workshop site's async task list - the image may have finished server-side even though ComfyUI timed out, and you can pull the URL from image_urls.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Make the image more cinematic. | — |
| imageopt | IMAGE | — | |
| image_urlopt | STRING | — | |
| api_keyopt | STRING | — | |
| negative_promptopt | STRING | — | |
| max_image_sizeopt | INT | 848256–1280 | — |
| num_inference_stepsopt | INT | 301–50 | — |
| enable_prompt_expansionopt | BOOLEAN | false | — |
| seedopt | INT | 00–65535 | 0 = random seed. FAL seed max is 65535. |
| 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 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| response | STRING | — |
| image_urls | STRING | — |