Agnes Image to Image (agnes-image-2.1-flash)
Cloud editing without a single model file
- image
- image
Instruction editing, no weights. You feed it an image and a sentence, the pack base64s the image, ships it to Agnes Image 2.1 Flash, and hands you back a finished IMAGE. Nothing gets downloaded, nothing gets loaded, and the whole thing works on a machine that has never seen a diffusion model. Think of it as the API-shaped version of the Qwen-Image-Edit workflow everyone's been running locally since 2025 - same "describe the change, model re-emits the frame" shape, except the compute is someone else's.
That's the reason to reach for it: a low-VRAM box, a laptop, or a quick sanity check on an edit idea before you commit GPU hours to a proper inpaint. It's not a replacement for img2img with a ControlNet when you need precise structural control - there's no denoise slider here, no mask, no step count, just instructions.
The inputs that matter
- image - the thing you're editing. Internally it's encoded to a PNG base64 data URI, un-resized, so a 4K source goes out as a 4K payload.
- prompt - the instruction. "Change the jacket to a red leather one", not a pile of booru tags. This is a model that reads sentences.
- ratio - default
auto, andautois the right answer almost always: the pack measures your input tensor and snaps it to the nearest standard bucket (1:1,3:4,4:3,16:9,9:16,2:3,3:2,21:9) so the output keeps your framing. Pick a ratio manually only when you want the canvas to change. - size -
1K/2K/3K/4K, default2K. - seed - the fake knob. The author's tooltip is blunt: the API doesn't support seeds, so this value never leaves your machine. It exists only to bust ComfyUI's cache so the node actually re-runs. Two identical queues, two different images.
One output, image (IMAGE), which drops straight into a Preview or the rest of your graph.
How it works, and the parts you can actually feel
The request goes to Agnes' OpenAI-compatible image endpoint with the encoded image under extra_body.image and your prompt on top. The pack asks for a URL back, downloads it, converts to a tensor. During that you get progress text in the node; the queue is blocked while it waits, because ComfyUI is synchronously parked inside the node.
Two behaviours worth knowing before you're confused by an output:
Alpha is gone. The encoder converts to RGB and drops the alpha channel. Transparent PNGs arrive at the API as flattened images, so don't expect this node to preserve a cutout.
The batch collapses. Only the first image of an IMAGE batch gets encoded - the tooltip says "input image," and the code means it. Feed it a batch of five and you'll edit one.
There's also no "strength"-style control. You can't ask for a subtle 20% nudge; you ask in words ("slightly warmer lighting, keep everything else identical") and hope the model interprets "slightly" the way you meant. That's the honest limitation of every instruction editor, local or hosted.
Install
Same pack, same one-liner - and if you're here for an API node rather than the pack's node-category manager, this is genuinely the whole cost:
cd ComfyUI/custom_nodes
git clone https://github.com/uiiiaiii/UIIIAIII_Toolkit.git
# restart ComfyUI
ComfyUI Manager can do it too: search UIIIAIII Toolkit. The pack needs requests>=2.28.0 and nothing else; torch, PIL and numpy come from ComfyUI itself.
Key setup: grab one from platform.agnes-ai.com, then Settings → UIIIAIII Toolkit → ① Node API. That writes the key into config.json in the pack folder, and for these nodes the config file is consulted before the AGNES_API_KEY environment variable. Plaintext key, on disk - worth saying out loud, because a node whose job is to send your images and a credential to a server is exactly the shape that got this ecosystem into trouble once already.
Common snags
"Input image encoding failed." Usually an odd tensor shape - a MASK accidentally wired into the image socket, or a batch of five-channel data. Feed it a real IMAGE.
Nothing changed between runs. You expected the seed to vary things or you expected re-running to be cached. Both are wrong in opposite directions: the seed varies nothing at the API, and it exists purely to stop ComfyUI serving you a cached result. If the output looks identical, it's because you changed nothing in the prompt.
Output ratio isn't what you wanted. With ratio: auto the pack rounds your aspect to the nearest preset, so a 1900×1000 source lands on 16:9. If your framing matters, set the ratio explicitly and accept that the model re-frames.
Slow on big inputs. Uncompressed PNG base64 of a large image makes for a chunky request body. The pack keeps a 180-second HTTP timeout for exactly this reason; if you're hitting it, downscale upstream and upscale after.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Text instruction for image editing | |
| image | IMAGE | Input image (converted to a Base64 Data URI for the API) | |
| seed | INT | 00–18446744073709550000 | Random seed used to break the ComfyUI execution cache (the Agnes Image API does not support seed, so this value is not sent to the API) |
| size | COMBO | 2K | Output size preset |
| ratio | COMBO | auto | Aspect ratio. 'auto' detects the input image ratio and keeps it consistent |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |