π¬ MuAPI Generate (Generic)
Any MuAPI Endpoint, Raw JSON, Four File Slots
- file_1
- file_2
- file_3
- file_4
- output_url
- preview
- request_id
- raw_result_json
Every other node in this pack is a curated cage: a dropdown of endpoints, a handful of widgets, and a payload assembled for you. π¬ MuAPI Generate (Generic) has none of that. You type the endpoint name by hand and hand it a JSON body. It's the "any of the 600+ endpoints" node, and it's the answer when a curated node can't express what you need.
Three situations make it worth the extra typing. Your endpoint wants the input image under a field name the Image-to-Image node doesn't know - the curated nodes guess at image_url vs images_list by substring-matching the endpoint name, and a new endpoint breaks that guess. Your endpoint has no dedicated node at all. Or you want to combine two things in one call and no widget exists for the combination. All three end the same way: write the JSON yourself.
The mechanism
Required: endpoint (STRING, defaulting to seedance-v2.0-t2v) and payload_json, a multiline STRING of literal JSON.
Optional: api_key, file_1 through file_4 (IMAGE inputs), and file_path_1, file_path_2 (STRING paths for local files - video, audio, whatever).
The trick is the placeholders. Write "__file_1__" wherever the uploaded image's URL should land:
{
"image_url": "__file_1__",
"swap_url": "__file_2__",
"target_index": 0
}
That's the node's own default payload, and it's a good illustration of the point: two different image fields, two different purposes, one call. At run time the pack uploads each connected file_N tensor to muapi and substitutes the resulting URL in.
The quotes are load-bearing. The substitution searches for the literal string "__file_1__" - quotes included. Write it bare, without quotes, and nothing matches, no upload happens, and your literal placeholder text gets POSTed to the API as if it were a URL. The console prints [MuAPI Generic] Uploading file_1... when it really is substituting, so that line is your proof it worked.
Same idea for local files: put "__file_path_1__" in the JSON and type a path relative to ComfyUI's input or output folder into file_path_1. Absolute paths and .. are rejected; a path that resolves fine but points at nothing is skipped silently. And if you connect a file slot without a matching placeholder, the upload simply doesn't happen - no warning. One more thing this node shares with the rest of the pack: extra_params_json doesn't exist here because everything is extra_params_json.
Outputs
Four of them, which is why this is the node to reach for when the other node gives up. output_url is the result URL, found by checking the outputs/output array first and then falling back to video_url, image_url, audio_url or url. preview is an IMAGE - a first frame if the URL ends in .mp4/.mov/.webm, otherwise the image itself. If no output URL can be found you get an empty string and a black 64Γ64 preview, which is the signal to look at the last output.
That last output is raw_result_json - the entire response body, pretty-printed. When an endpoint returns something the pack's URL-finder doesn't recognise, this tells you the field name in about four seconds. It's the most useful debugging tool in the whole pack, and it's the reason a generic node usually beats filing an issue.
request_id is the fourth, and it works exactly like everywhere else: wire it to Extend.
Reputation, honestly
This pack is young and its Reddit footprint is small - about twenty threads total mention muapi, and the loudest ones are the author's own "Skill" workflow posts (a Seedance time-freeze effect workflow at 165 upvotes and 25 comments, a colour-analysis workflow at 31). Third-party discussion is close to nil; the one organic user thread, from April 2026, complained about hitting errors that needed support tickets and about the absence of example workflows. That second complaint has since been addressed - the repo now ships a workflows/ directory with ready-made graphs including a generic-node-family chain and skill templates. The reputation read is: a thin wrapper over an aggregator, maintained by one person, with real example workflows now, and no meaningful community consensus about quality either way. Judge it by whether the endpoint returns what you want, not by the pack's standing.
One expectation to set: there are no LoRA or ControlNet sockets anywhere in this pack, including here. Some endpoints expose LoRA at the API level (you can see -lora variants in the curated dropdowns), and whatever parameters those take go through this JSON. If you need ControlNet conditioning, do it locally and send in the result.
Install
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
requests, Pillow, numpy, torch, opencv-python - no model downloads at all. Get a key at muapi.ai and wire π MuAPI API Key into api_key, or run muapi auth configure --api-key YOUR_KEY once and leave every key field in the graph blank.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| endpoint | STRING | seedance-v2.0-t2v | β |
| payload_json | STRING | { "image_url": "__file_1__", "swap_url": "__file_2__", "target_index": 0 } | β |
| api_keyopt | STRING | β | |
| file_1opt | IMAGE | β | |
| file_2opt | IMAGE | β | |
| file_3opt | IMAGE | β | |
| file_4opt | IMAGE | β | |
| file_path_1opt | STRING | β | |
| file_path_2opt | STRING | β |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| output_url | STRING | β |
| preview | IMAGE | β |
| request_id | STRING | β |
| raw_result_json | STRING | β |