AI Horde Image Generate
Render through the AI Horde's volunteer grid
- loras
- textual_inversions
- source_image
- source_mask
- images
This node is the ComfyUI front door to the AI Horde - a free, crowdsourced grid where volunteers run Stable Diffusion workers and strangers' GPUs render your prompt. You don't need a GPU. You don't download a single model. You don't even need an API key. If your laptop can run ComfyUI but chokes on SDXL, this is the difference between generating and not generating.
That's the whole pitch, and it's worth being honest about the trade: you queue up and wait for a volunteer worker to pick up your job. It's "wait in line 'til it's your turn" free generation, not a free RTX 4090. On a quiet day it's fast; on a busy one your job can sit for a while. It's the same network that crossed 100 million free images back in early 2024, so it's not going anywhere - it just runs at community pace.
How it works
Everything here rides on the official horde-sdk (the same library the Horde's own tools use), so the mechanics are real rather than reverse-engineered. The node packs your prompt, model name, size, steps and CFG into an async job request, fires it at the Horde API, waits for a worker to claim and render it, then downloads the results and converts them from PIL to ComfyUI tensors. If you leave api_key empty it silently substitutes the anonymous key - that's the "no account needed" path, at the cost of lower queue priority.
Two implementation details worth knowing because they explain weirdness you'll see. First, your positive and negative prompts get joined into one string with ### as the separator - that's the Horde's convention, the node builds it for you, and it means whatever you type in negative_prompt is not passed as a separate field. Second, image-to-image input is base64-encoded WebP, so any image you feed in gets recompressed on the way out - fine for img2img, don't expect lossless round-trips.
The inputs that matter
You'll actually touch maybe six of these:
prompt,width,height,num_images- the basics. Size steps by 64, and note the code hard-caps total pixels at 1024×1024 even though the UI lets you dial to 2048. Exceeding it errors out, so 1024×1024 is your ceiling for most models.model- a plain text box, and the defaultDeliberateisn't magic. You want the exact model ID the network serves, namespaced ones included (thinkSDXL_beta::stability.ai#6901). Get the real list from the sibling AI Horde Model List node and paste from there, or you'll burn a queue slot on a job that errors.steps,cfg_scale,seed- behave like you'd expect;seedof -1 means random, and it's simply not sent to the API when negative.sampler_name- this is a list of the Horde's sampler names (k_lms,k_euler_a,k_dpmpp_2m,lcms,DDIM...), not ComfyUI's sampler names. You won't findeuler_ancestralhere because the worker runs its own k-diffusion environment.lorasandtextual_inversions- wire in the output of the pack'sAIHordeLora/AIHordeTextualInversionnodes if you want adapters.
Output is a single images IMAGE tensor - exactly what Save Image or a preview node expects, so the node slots into any workflow where a local sampler would go. It's a straight swap: replace your KSampler with this, keep the save node, done.
Installing it
ComfyUI Manager, search "HordeAI", install, restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Malte0621/hordeai-comfy.git
cd hordeai-comfy
pip install -r requirements.txt
Dependencies are the notable part: horde-sdk, aiohttp, Pillow, numpy, torch, loguru. No model files, ever. That's the entire point of the pack.
Common issues
- "horde-sdk is not installed" - the node checks for it at import. If you installed without the requirements step (or used a ComfyUI with a different Python env),
pip install horde-sdkfixes it. - Slow or stalled generations - it's the queue, not you. Anonymous jobs sit behind kudos-paying users. Grabbing the free key at aihorde.net and pasting it into
api_keyraises your priority. - "Input payload validation failed" - almost always a model name that doesn't exist on the network, or dimensions over the pixel cap. The node prints debug info to the console with your exact model string - check it against the Model List node.
- The node looks frozen - it's a synchronous call, so ComfyUI's queue genuinely blocks until the job finishes. It's not hung; it's waiting on the network. Go make coffee.
One more honest take: the pack is young and small (version 0.0.2, one author), so it won't have the polish of a battle-tested loader. But it's a thin wrapper over the official SDK, which is the part that has to be right - and it is.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | A beautiful landscape | Text prompt describing the image to generate |
| width | INT | 51264–2048 | Width of the generated image |
| height | INT | 51264–2048 | Height of the generated image |
| num_images | INT | 11–4 | Number of images to generate |
| model | STRING | Deliberate | AI model name to use for generation (e.g., Deliberate, SDXL_beta::stability.ai#6901, etc.) |
| negative_promptopt | STRING | Negative prompt to avoid certain elements | |
| api_keyopt | STRING | Your AI Horde API key (leave empty for anonymous) | |
| stepsopt | INT | 201–100 | Number of sampling steps |
| cfg_scaleopt | FLOAT | 7.51–20 | Classifier-free guidance scale |
| seedopt | INT | -1-1–2147483647 | Random seed (-1 for random) |
| denoising_strengthopt | FLOAT | 1.000–1 | Denoising strength for img2img (0.0-1.0) |
| sampler_nameopt | COMBO | k_lms | Sampler algorithm to use |
| karrasopt | BOOLEAN | true | Use Karras noise schedule (if supported by model) |
| lorasopt | LORAS_LIST | Optional LoRA list from AIHordeLora node | |
| textual_inversionsopt | TIS_LIST | Optional Textual Inversion list from AIHordeTextualInversion node | |
| source_imageopt | IMAGE | Optional source image for img2img, inpainting, outpainting, or remix | |
| source_processingopt | COMBO | txt2img | Processing type for source image |
| source_maskopt | IMAGE | Optional mask image for inpainting or outpainting (white areas are modified) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |