π¨ MuAPI Image-to-Image
Instruction Editing Without Downloading 20GB of Kontext
- image
- image
- image_url
- request_id
"Transform into a watercolour painting." That's the default prompt on π¨ MuAPI Image-to-Image, and if you've used Flux Kontext or Qwen-Image-Edit locally it'll feel familiar - you hand over an image, say what to change in plain language, and get the whole frame back with your instruction applied. Instruction editing is the approach everyone reached for in 2026, per the KB's character-consistency.md, and this node is a doorway to about fifty hosted implementations of it: Kontext dev/pro/max, Flux 2 edit variants, GPT-4o and GPT Image 1.5 edit, Seedream 4.5 edit, Nano Banana 2 edit, Qwen-Image-Edit (including the 2511 and Plus revisions), Wan 2.5/2.6 edit, Redux, PuLID, Ideogram reframe, Midjourney style reference. Pick from a dropdown instead of clearing 20GB of disk.
Is that a good trade? For a one-off edit, yes. For anything you'll do a hundred times, the local model pays for itself within a weekend - and you keep the LoRAs, which is the thing this node cannot give you.
The mechanism, including the fragile part
Required inputs are model, image (an IMAGE tensor), and prompt. The image gets squeezed into a JPEG at quality 95 and POSTed to muapi's /upload_file endpoint to get a CDN URL, because the remote model obviously can't see your local tensor. Then a JSON body goes to the endpoint and the pack polls for the result.
Here's the bit worth knowing, because it's where mystery errors come from. Different endpoints want the input image under different field names. The node guesses by substring-matching the endpoint name: if it contains kontext, wan2., vidu, seedream, seedance, pixverse, flux-2, nano-banana, qwen-image-edit, openai-sora or kling-o3, it sends images_list: [url]; otherwise it sends image_url: "...". That list is hand-maintained, and it can't know about an endpoint that shipped last week - or about whatever you typed into custom_endpoint. When the guess is wrong, the API rejects the payload and you get an error that looks like the model misbehaving rather than a field name mismatch.
The fix is π¬ MuAPI Generate (Generic), which lets you write the JSON key yourself with a __file_1__ placeholder where the uploaded image URL should land. That's the escape hatch for a new edit model, and it's the only one, because extra_params_json here is merged after the node builds its payload - you can override a key, but you can't insert an upload URL you don't know yet.
Inputs and outputs
Beyond the three required fields you get api_key, custom_endpoint (used when model is custom), and extra_params_json - raw JSON merged into the request body, your route to per-endpoint options like seeds or guidance. There's no aspect_ratio and no negative prompt on this node; the edit models work off the framing of the image you hand them.
Outputs are image (a real IMAGE tensor, so it continues into your local graph), image_url (the CDN link, handy for the video nodes), and request_id. Watch for the soft failure: if the result can't be downloaded, the pack logs [MuAPI] image download failed and returns a black 64Γ64 tensor rather than throwing. A black output means a network problem, not a bad prompt.
Install
ComfyUI Manager β Install via Git URL β https://github.com/SamurAIGPT/muapi-comfyui, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/SamurAIGPT/muapi-comfyui
pip install -r muapi-comfyui/requirements.txt
Nothing to download into models/ - the requirements are requests, Pillow, numpy, torch and opencv-python, and three of those you already have.
Getting good results, and the honest limits
Every one of these models re-emits the whole frame, so pixels you didn't ask about drift - faces especially. The KB documents that for Qwen-Image-Edit, and it applies here to all of them: chain three edits on one portrait and the person slowly becomes someone else. If identity matters, prefer the endpoints built for it (flux-kontext-max-i2i, flux-pulid, minimax-01-subject-reference, or a GPT-4o edit with the face described explicitly), and remember the KB's standing advice from identity-preservation.md - one strong reference beats three vague ones.
Also: this is metered. Kontext Pro and GPT Image edits are the expensive mid-tier of image generation, so iterate on a cheap endpoint and only switch dropdowns for the keeper.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | flux-kontext-pro-i2i | 55 options: flux-kontext-dev-i2i, flux-kontext-pro-i2i, flux-kontext-max-i2i, flux-kontext-effects, flux-2-dev-edit, flux-2-pro-edit, +49 |
| image | IMAGE | β | |
| prompt | STRING | Transform into a watercolour painting | β |
| api_keyopt | STRING | β | |
| custom_endpointopt | STRING | β | |
| extra_params_jsonopt | STRING | {} | β |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | β |
| image_url | STRING | β |
| request_id | STRING | β |