EcoHash Dedicated Image Generate
Your Own Endpoint, Wired Into the Canvas
- IMAGE
Two nodes in the EcoHash pack generate an image, and people install the wrong one constantly. EcoHash Image Generate picks a model from EcoHash's public catalogue and bills your account per call. EcoHash Dedicated Image Generate - this one - talks to a deployment you name yourself: your own rented instance, or any third-party endpoint that speaks the same OpenAI-compatible image route.
That distinction decides everything else, including why the model field is a text box instead of a dropdown. Once you've got the endpoint sorted, what you actually get is a text-to-image node in the middle of a normal graph: prompt in, IMAGE out, wire it to Save Image or into your upscale chain and carry on.
What it's for
Cutting a checkpoint download out of the loop. If you have an instance sitting somewhere, or an API you already pay for, you don't need a 20 GB safetensors file on your own disk to run the graph - you need a node that speaks to the thing that has the weights. Generation on the far end means no VRAM ceiling and no cold-start model load in your own process.
The cost is that the node is a thin proxy, and it inherits every limit of the thing behind it. It sends model, prompt, size and response_format=b64_json, with steps and seed riding along when you ask for them. There is no lora, no controlnet, no negative_prompt - the README says deployment-specific parameters aren't exposed yet. If your endpoint's whole point is a specific LoRA, you can't name it from here.
The inputs that matter
model is the exact served model ID, and again it does not need to appear in EcoHash's public catalogue. Free text, no validation against a list, so a typo becomes a 404 rather than a red widget.
prompt is a multi-line string. Note it's a widget, not an input socket - but you can right-click and convert it to an input, which is how you'd feed it from an LLM node or a primitive.
size defaults to 1024x1024, with a small set of landscape and portrait presets and a custom option. The presets are UI conveniences, not compatibility claims; the service still validates what the model can do and may align or reject. custom reveals the optional width/height, constrained to multiples of 16 from 64 to 8192 - the node itself throws "Custom width and height must be multiples of 16 between 64 and 8192" before it ever hits the network, which is at least a fast failure.
steps defaults to 0, and the tooltip means what it says: 0 = model default. In the code, steps is simply omitted from the request body unless it's positive. Leave it at zero unless you have a reason; you don't know what the model's tuned step count is, and the endpoint does.
seed defaults to -1, "random", and is likewise omitted from the body unless you set something 0 or above. That's a cleaner behaviour than most nodes: no fake seed getting baked into the request. Set a real seed when you want to re-roll the prompt and keep the composition.
connection selects the saved endpoint. Optional in the schema, mandatory in practice - the node validates it and refuses to run with "Select a dedicated connection, or add one in EcoHash connections."
Output is a single IMAGE. One image per call, from the first result the service returns; a batch-size-N workflow node it is not.
Install and connect
Manager: search EcoHash (package comfyui-ecohash), install, restart ComfyUI, refresh the browser. Manual is faster to reason about:
cd ComfyUI/custom_nodes
git clone https://github.com/ecohash-ai/ComfyUI-EcoHash.git
cd ComfyUI-EcoHash
pip install -r requirements.txt
requirements.txt is a single line - requests. Nothing else. No weights to download for these nodes, ever.
Credentials live outside the graph. Open the EcoHash tab in the sidebar → Connections, save your key once with Save and verify API Key, then Add connection for the endpoint: a unique name plus its API URL. That URL has to include the API prefix; the pack does not append /v1 for you (a pasted full generation endpoint does get normalised back to its prefix). Official EcoHash instance URLs share the global key; any other host needs its own key in the advanced settings, and it will never inherit the EcoHash one.
Troubleshooting the ones that actually happen
Connection validates but inference 404s. The saved check only reads /models. Reachable is not the same as working, and the pack says so itself. A wrong prefix or a gateway-vs-proxy model ID mismatch both look like this.
It reused the previous image. ComfyUI's cache. Identical inputs, cached output, no API call, no charge. Nudge the prompt or the seed.
The connection suddenly stopped working. If someone rotated the global key, every EcoHash connection's cached result is invalidated at once - that's intentional, but it looks like a workflow-wide break. A non-EcoHash host with its own key doesn't care.
"Batch of N" style failure downstream. Not here - this node returns one image. The failure shows up when you feed a batch into an image-input node later in the graph.
One honest framing before you commit: the API-node pattern is genuinely disliked in the loud parts of r/comfyui, and the objections - per-call cost, prompts leaving the machine, a filter you can't patch - are all fair. It wins on the case you can't otherwise serve: a model on hardware you don't own. If this is your default image generator while a good checkpoint is sitting on your drive, you're paying rent on something you already bought.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | STRING | Exact model ID served by your dedicated endpoint; it need not appear in the public EcoHash catalog. | |
| prompt | STRING | — | |
| size | COMBO | 1024x1024 | 8 options: 1024x1024, 1024x768, 768x1024, 768x768, 512x512, 1536x864, +2 |
| steps | INT | 00–100 | 0 = model default |
| seed | INT | -1-1–2147483647 | -1 = random |
| widthopt | INT | 102464–8192 | Used only when size = custom. Check the selected model's supported dimensions. |
| heightopt | INT | 102464–8192 | Used only when size = custom. Check the selected model's supported dimensions. |
| connectionopt | COMBO | 1 options: |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |