Nodes/HordeAI/AI Horde Image Generate
ComfyUI Node

AI Horde Image Generate

Render through the AI Horde's volunteer grid

By Malte0621·Created 12 months ago·Updated 12 months ago· 0
AI Horde Image Generate
  • loras
  • textual_inversions
  • source_image
  • source_mask
  • images
promptA beautiful landscape
width512
height512
num_images1
modelDeliberate
negative_prompt
api_key
steps20
cfg_scale7.5
seed-1
denoising_strength1.00
sampler_namek_lms
karrastrue
source_processingtxt2img

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 default Deliberate isn't magic. You want the exact model ID the network serves, namespaced ones included (think SDXL_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; seed of -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 find euler_ancestral here because the worker runs its own k-diffusion environment.
  • loras and textual_inversions - wire in the output of the pack's AIHordeLora / AIHordeTextualInversion nodes 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-sdk fixes 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_key raises 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.

CategoryAI Horde

Inputs (18)

NameTypeDefaultDescription
promptSTRINGA beautiful landscapeText prompt describing the image to generate
widthINT51264–2048Width of the generated image
heightINT51264–2048Height of the generated image
num_imagesINT11–4Number of images to generate
modelSTRINGDeliberateAI model name to use for generation (e.g., Deliberate, SDXL_beta::stability.ai#6901, etc.)
negative_promptoptSTRINGNegative prompt to avoid certain elements
api_keyoptSTRINGYour AI Horde API key (leave empty for anonymous)
stepsoptINT201–100Number of sampling steps
cfg_scaleoptFLOAT7.51–20Classifier-free guidance scale
seedoptINT-1-1–2147483647Random seed (-1 for random)
denoising_strengthoptFLOAT1.000–1Denoising strength for img2img (0.0-1.0)
sampler_nameoptCOMBOk_lmsSampler algorithm to use
karrasoptBOOLEANtrueUse Karras noise schedule (if supported by model)
lorasoptLORAS_LISTOptional LoRA list from AIHordeLora node
textual_inversionsoptTIS_LISTOptional Textual Inversion list from AIHordeTextualInversion node
source_imageoptIMAGEOptional source image for img2img, inpainting, outpainting, or remix
source_processingoptCOMBOtxt2imgProcessing type for source image
source_maskoptIMAGEOptional mask image for inpainting or outpainting (white areas are modified)

Outputs (1)

NameTypeDescription
imagesIMAGE