Liquid Image (paid API)
You're not picking a model, you're bidding for one
- images
- job_id
- receipt
Liquid Image doesn't run a model. It sends your prompt to Liquid Inference, an exchange where sellers post offers for image models; the router hands your request to the cheapest acceptable offer under your price cap, and your account pays for what comes back. Think fal or Replicate, except there's no menu with a price next to it - there's an auction, and you write the ceiling.
The rest of the API-node category works the other way round: with a fal wrapper or the Partner Nodes you know the per-image price before you queue. Here cap_usd is your bid, and receipt tells you afterwards what the winner charged.
What the node actually does
The graph-facing part is boring on purpose: prompt in, IMAGE batch out, wire it into Save Image like any sampler. Underneath it POSTs {model, prompt, n, size?} to https://router.inference.ai.exchange/v1/images/generations with your cap as a header, then decodes the returned bytes into a float32 batch. No Python dependencies: pyproject.toml declares dependencies = [] and the client is standard-library urllib, so installing it can't reshuffle a package ComfyUI has pinned. Rarer than it should be.
The model dropdown comes from the exchange's /models endpoint and caches to image_models.json in the ComfyUI user dir, refreshing in a background thread every minute rather than during ComfyUI's /object_info call - a node that blocks on the network while the UI asks what its inputs are makes the canvas feel broken.
The inputs that matter
prompt is a multiline string. No negative prompt - these sellers don't reliably take one.
model is the auction's subject. The enum listed 54 entries when I looked, and it's a real spread: blackforestlabs/flux-pro-1.1, flux-pro-1.1-ultra, stabilityai/stable-diffusion-3.5-large, bytedance/seedream-5.0-lite-preview, Alibaba's qwen-image and wan2.7-image-pro. Whatever sellers quote that minute - weather, not a fixed roster.
size defaults to auto, and you should mostly leave it there. auto omits the field entirely, so every seller uses its own default and more offers qualify. Pick an explicit 1024x768 and you've narrowed the auction to sellers that declared that exact size - fewer bidders, sometimes none, and an unsupported_parameter refusal.
n buys 1–4 images as one batch. Mixed dimensions come back LANCZOS-resized to match the first image, and you find that out by looking.
cap_usd defaults to 0.05 and applies per node run, not per workflow: three Liquid nodes at 0.05 is 0.15 a queue.
Outputs are images, job_id, and receipt - JSON with the served model, provider slug, charge_usd, your cap, image count and node version. Pipe receipt into a text preview and you have an audit trail; quote job_id to support for billing questions.
Install and key
Manager → Custom Nodes Manager → search Liquid Inference → Install → restart. By hand:
cd ComfyUI/custom_nodes
git clone https://github.com/architect-xyz/comfyui-liquid-inference
# restart ComfyUI
No model downloads. You need a funded account and a key with the spend scope. Put it in Settings → Liquid Inference, which stores it server-side in user/__liquid_inference/api_key at 0600, or export LIQUID_API_KEY before launching - the env var wins.
The key is deliberately not a node input, and that's the smartest decision in the pack. ComfyUI writes input values into the workflow and into every saved PNG's metadata, so a key in a widget would ride along inside each image you post. It's six readable files in the repo - go look before pasting a credential, because a pack that phones home with your key is exactly the shape of the one that burned people in 2024.
Where people get burned
It never retries, on purpose - a retry could buy the images twice. If the connection dies mid-request you get an "outcome is unknown" error with an Idempotency-Key: the job may have run and you may have paid. Check receipts before re-queueing. The timeout is 300 seconds, so a slow seller is one way to land there.
Re-queueing doesn't rebuy. ComfyUI caches node execution, so an unchanged workflow returns the same images at no charge. Change the prompt or any widget and it buys again. Someone will file this as a bug.
Refusals worth recognising: cap_exceeds_buyer_cap means raise the cap - flux-pro-1.1-ultra and 0.02 don't overlap. 402 is an empty balance, 401 a dead key. model_not_found or model_unavailable means the market moved since your page loaded, so reload the canvas. A refusal before the auction costs nothing.
Don't run ComfyUI with --listen on a network you don't trust. Anyone who can reach your server can queue paid runs on your key.
Should you reach for it
For a specific closed model, the Partner Nodes or a fixed-price fal/Replicate wrapper give you a predictable number, and for repeat work that beats a market. Liquid's pitch is the cap: "spend at most three cents and get me whatever the market will do for three cents" keeps a batch job from becoming a surprise. Plainly, though: this pack shipped 2026-10-14 at v0.1.1 and I found no community thread about it or the exchange. You'd be an early user. Clean, dependency-free code is more than most day-one packs manage, but "nobody has complained yet" isn't "nobody will."
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| model | COMBO | An image model that a seller quotes now. The list comes from the exchange and refreshes each minute. | |
| size | COMBO | auto | auto lets each seller use its default size. An explicit size matches only the sellers that declared it. |
| n | INT | 11–4 | Images to buy. |
| cap_usd | FLOAT | 0.0500.001–100 | The most, in USD, that this node can spend each time it runs. The cap applies to each request, not to the whole workflow. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | The images, in the order that the seller returned them. |
| job_id | STRING | The exchange's ID for this job. Give it to support with each question about a charge. |
| receipt | STRING | JSON with the model, the seller, the charge and the cap for this job. |