Nodes/ComfyUI-Veida/Veida Generate Image
ComfyUI Node

Veida Generate Image

Text-to-image with no checkpoint on your disk

By hanshs474·Created 3 days ago·Updated 3 days ago· 0
Veida Generate Image
    • image
    • url
    ◄promptmatte black ceramic mug on pale oak, soft window light►
    ◄aspect_ratio1:1►
    ◄api_key►
    ◄model►
    ◄seed0►

    This node has no model behind it. No checkpoint to download, no VAE, no 12GB of VRAM, no sampler. It takes your prompt, POSTs it to veida.ai, waits, and hands back an IMAGE tensor that behaves like any locally generated one. Whether that's a joke or the most useful node in your graph depends on why you opened ComfyUI today.

    Two reasons it earns a slot. You're on a laptop that can't run Flux and still want a graph that produces pictures. Or you want to test the look of a model you are literally not allowed to run locally - GPT Image, Nano Banana 2, Seedream - before committing a workflow to that aesthetic. A cloud call for a thing you cannot have locally isn't a compromise; it's the only door.

    How it actually works

    Under the hood it's about 90 lines of Python. It submits a task to Veida's /api/ai/generate endpoint with "provider": "kie", "scene": "text-to-image", your prompt and aspect ratio, then polls every five seconds until an image URL comes back - or until six minutes pass. It downloads that URL, converts it to a float32 RGB tensor with batch size one, and outputs it next to the permanent CDN url.

    That provider: kie detail matters. Veida isn't running its own diffusion stack; it's fronting a reseller layer over hosted third-party models, which is why model IDs like gpt-image-2-5 are what you type into the model field. Same proxy ecosystem the KB documents around Nano Banana, with the billing bundled one level up.

    With api_key empty you get the anonymous path: an x-anon-id header, the house model veida-image-v1, roughly 1K output, a small watermark, about seven free images a day per machine. There's no counter in the code - the node mints a fresh random ID every run, so the counting is server-side. Reloading the node resets nothing.

    The inputs you'll actually touch

    Two required fields. prompt is the obvious one. aspect_ratio is a five-option dropdown - 1:1, 16:9, 9:16, 4:3, 3:4 - so if you want 2:1, you're cropping downstream.

    Then the optional trio. api_key: leave empty for the free tier; VEIDA_API_KEY in the environment does the same job more safely. model: plain text, only consulted when a key is present, examples being gpt-image-2, gpt-image-2-5, nano-banana-2, seedream-5-lite - type from memory and you get a server complaint, not a dropdown that saves you. And seed, which is the trap: the tooltip says "change to force a new run" and that is literally all it does. The value is never sent to the API; the function accepts it and never reads it. It exists so ComfyUI's cache sees a changed input and re-executes. Treat it as a re-roll button, not a seed - you can't reproduce yesterday's free-tier image from the number.

    Outputs are image (a normal IMAGE: Preview, Save, a detailer, an upscaler) and url, a string that's genuinely handy for logging a run.

    Install

    Manager, search Veida, install, restart. Or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/hanshs474/ComfyUI-Veida
    

    Then restart ComfyUI. There's nothing else - pyproject.toml declares an empty dependency list and the HTTP client is built out of urllib from the standard library, on top of the torch, numpy and Pillow ComfyUI already ships. The one hard requirement is outbound HTTPS to veida.ai; a container with no egress fails at the first call.

    Where people get burned

    Nothing renders. Neither node in this pack is an output node. Drop Generate Image on the canvas with nothing connected to image and ComfyUI considers it dead weight and never runs it.

    The key ends up in your workflow. Whatever you paste into api_key is saved in the workflow JSON - and ComfyUI embeds that JSON in saved PNGs, which is the whole "workflow included" sharing culture. Paste a key, share a picture, share a key. Use the env var and leave the field blank.

    Refusals are the model's, not the node's. A failed status raises "reword it rather than retrying the same text," and that's literal: retrying identical text against the same closed model earns an identical refusal.

    A hung run eats the queue. Six minutes of polling, no cancel.

    And the honest caution: this is an unvetted third-party pack whose entire job is to hold a credential and phone home - the profile the KB's security section warns about, in the category that already shipped malware once. The mitigating fact is size: two files, 235 lines, standard-library HTTP, no postinstall. Read it before you paste a key into it; there's no community track record for the pack or the service yet.

    CategoryVeida

    Inputs (5)

    NameTypeDefaultDescription
    promptSTRINGmatte black ceramic mug on pale oak, soft window light—
    aspect_ratioCOMBO1:15 options: 1:1, 16:9, 9:16, 4:3, 3:4
    api_keyoptSTRINGOptional. Leave empty to use the free tier (no account, watermarked, a few images a day). Paste a key from veida.ai/settings/apikeys to run on your account with any image model your plan includes. VEIDA_API_KEY in the environment works too.
    modeloptSTRINGOnly used with an API key, e.g. gpt-image-2, gpt-image-2-5, nano-banana-2, seedream-5-lite
    seedoptINT00–4294967295Change to force a new run

    Outputs (2)

    NameTypeDescription
    imageIMAGE—
    urlSTRING—