KIE • Universal Market Task (Advanced)
The escape hatch for models without a node
- images
- video
- audio
- config
- task_id
- state
- result_urls_json
- raw_json
- credits_consumed
- credits_left
Ninety-nine percent of the time you want the polished per-model node: the one with a prompt box, an aspect ratio dropdown and sockets that match the model's actual capabilities. This node is for the other one percent - a KIE model that exists, that you need today, and that hasn't been split into its own node yet.
The pack's philosophy is openly against generic API nodes: it removed its old Any KIE API node from the menu precisely because "one node with a JSON box" isn't a pleasant way to work. Universal Market Task survives under Advanced because sometimes it's the only thing standing between you and a model KIE shipped on Tuesday.
What it does
It submits a raw Market task - outer model ID, inner input object - to /api/v1/jobs/createTask, optionally waits for completion by polling the record endpoint, and returns the task metadata. The clever bit is media injection: rather than making you upload files and paste URLs, you put one of four exact JSON values in the payload and the pack fills it in with a URL it uploaded for you.
$image_url- first image of a connected batch$image_urls- the whole batch, as an array$video_url- a connected video$audio_url- a connected audio clip
They have to be the exact value in the JSON, not embedded in a string, and they only resolve for sockets you actually connected.
Inputs and outputs
model is a dropdown of every Market model the pack has discovered - over 150 entries in the current catalog, from V4 and V6_WILD through bytedance/seedance-2-5 and beyond. input_json is the request body for that model, and it defaults to a {"prompt": ""} skeleton. Get the right shape from KIE's own docs page for the model; this node will happily send a payload the provider rejects.
wait_for_completion (default on) is the switch that decides whether this behaves like a normal generation node or like a submit-and-forget one. Turn it off and you get a task_id back instantly with state set to submitted - pair that with KIE • Task Status for a genuinely asynchronous workflow, which is the only reason to run paid jobs outside the queue's blocking model.
timeout_seconds (30–7200, default 900) is the wait budget when you do wait. custom_model overrides the dropdown with a model ID string, which is how you reach something KIE has added since the last catalog sync. The images, video and audio sockets exist purely to feed those placeholders. callback_url is for servers that want a webhook; config is the legacy connection override, normally unwired.
Outputs are task_id, state, result_urls_json, raw_json, credits_consumed and credits_left - and note the shape: no native media. Unlike the polished nodes, this one hands you URLs and metadata, not an IMAGE or VIDEO object. If you want the file in your graph, feed result_urls_json (or the URL you read out of raw_json) into one of the pack's download nodes - Download Image, Download Video or Download File - and carry on from there.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/felipederosilva/ComfyUI-KIE-Nodes-Next
cd ComfyUI-KIE-Nodes-Next
pip install -r requirements.txt
Restart, then set the API key once in Settings → KIE.ai Nodes Next → Connection. ComfyUI Manager installs the pack too; search "KIE.ai Nodes Next". Dependencies are requests, Pillow, numpy, PyYAML, and there is nothing to download in terms of weights - this is a network client, and every call is metered against your KIE balance.
The honest caveats
You are bypassing the pack's validation. The polished nodes check things like mutually exclusive input modes locally, before spending your credits; this one mostly sends what you typed. That's the tradeoff, and it's why this lives under Advanced rather than in the main menu.
You're also committing to a provider that churns. KIE is a reseller of closed models, and resellers lose models - the community already hit that when an advertised Sora model simply stopped being available. A workflow built on custom_model with a hand-typed ID is the most fragile thing you can build here.
And the usual category note: a node that holds your API key and talks to the internet by design deserves a look before you run it. This pack keeps the full key backend-only and out of workflow JSON, which is the right pattern - check that any KIE pack you try does the same.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | V4 | 156 options: V4, V4_5, V4_5ALL, V4_5PLUS, V5, V5_5, +150 |
| input_json | STRING | { "prompt": "" } | — |
| wait_for_completion | BOOLEAN | true | — |
| timeout_seconds | INT | 90030–7200 | — |
| custom_modelopt | STRING | — | |
| imagesopt | IMAGE | — | |
| videoopt | VIDEO | — | |
| audioopt | AUDIO | — | |
| callback_urlopt | STRING | — | |
| configopt | KIE_CONFIG | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| task_id | STRING | — |
| state | STRING | — |
| result_urls_json | STRING | — |
| raw_json | STRING | — |
| credits_consumed | FLOAT | — |
| credits_left | FLOAT | — |