Nodes/ComfyUI-Veida/Veida Edit Image
ComfyUI Node

Veida Edit Image

Describe the edit in a sentence, keep the pixels you care about

By hanshs474·Created 3 days ago·Updated 3 days ago· 0
Veida Edit Image
  • image
  • image
  • url
◄instructionput the product on a white marble surface; keep the label unchanged►
◄api_key►
◄model►
◄seed0►

Inpainting a mask is precise and slow. Sometimes you want the other thing: take the product shot your model just made, put it on white marble, don't touch the label. You can't mask your way through that without drawing a floor. You can type it.

That's the gap this node fills. It takes any IMAGE off your graph, sends it and a one-sentence instruction to veida.ai, and gives back a new IMAGE that has the same object in a different world. It's the edit half of a two-node pack, and the more interesting half - text-to-image you can replace with a local checkpoint, but instruction editing that holds an identity is where closed models still win.

What's happening between the wires

Three network calls, and knowing them explains most of the failure modes.

First, your tensor is encoded to PNG and uploaded to Veida's CDN - the edit model needs a URL it can fetch, so the image leaves as a file before it leaves as a prompt. Second, the node submits an image-to-image task whose prompt is your instruction, with "provider": "kie" and the uploaded URL in image_input. Third, it polls every five seconds, downloads the result, and converts it to a normal ComfyUI IMAGE: float32, RGB, single frame, with the permanent CDN url as a string alongside.

The instruction isn't a knob on a diffusion pipeline - it's the whole prompt for a hosted editing model, which is why wording matters more here than steps and CFG.

No key? It runs free on veida-image-v1 - about seven edits a day per machine, 1K output, a small mark. Treat that as a proof of concept.

The inputs that matter

image is required: any IMAGE in your graph - a render, a scan, a photo. instruction is required too, defaulting to put the product on a white marble surface; keep the label unchanged - a good template: one change plus one explicit thing that must not change.

The rest are optional. api_key empty means the free tier; VEIDA_API_KEY in the environment does the same job more safely. model only counts when a key is present, and it's free text (the tooltip suggests gpt-image-2-5 or nano-banana-2), so nothing catches a typo. seed deserves a warning: it isn't a seed. The value is accepted and never sent anywhere; changing it just makes ComfyUI's cache re-run the node. It's a "do it again" button, not reproducibility.

Notice what isn't there: no aspect ratio, no strength, no mask. The edit call sends only the image, so output framing follows your input, and the instruction is the only lever you have.

Outputs are image and url. Wire image into Preview Image, Save Image, an upscaler, or back into another edit.

Getting it to hold

The README's best advice: state what must not change as clearly as what should. "Turn the jacket red, keep the same face, pose and lighting" beats "make the jacket red" - the second gives the model permission to re-imagine the face too. Product work needs the lock-in clause - keep the label unchanged - or you'll get beautiful marble and a garbled bottle.

Install

Manager: search Veida, install, restart. Or:

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

Restart ComfyUI. No pip install and no model files: pyproject.toml lists zero dependencies and the HTTP layer is standard-library urllib. You do need outbound HTTPS from the ComfyUI host to veida.ai.

Where it bites

It edits the first frame, not the batch. The PNG encoder takes image[0] and returns a single-frame tensor. Feed it four images from a batch loader and you get one edit back.

Don't make it the last step of a 4K chain. Input goes up as a PNG and comes back around 1K on the free tier, so a 4096px render loses the detail you just paid for. Edit first, upscale after.

Neither node is an output node. With nothing downstream, ComfyUI won't execute the branch and you'll assume the node is broken. Put a Preview Image under it.

Paste-a-key is a sharing hazard. The api_key widget is saved into the workflow JSON, and ComfyUI embeds that JSON in saved PNGs. Use the env var, leave the field blank.

Errors you'll actually see. upload failed: … means the image never reached their CDN - network or a rejected file, not your prompt. Running out of free allowance reports a clear "paste an API key" message; the wall arrives as a normal-looking response and the client spots a wall flag inside it.

One framing note: this pack is new and unvetted, and a node that holds your credential and phones home by design is worth two looks. It's 235 lines - go read them.

CategoryVeida

Inputs (5)

NameTypeDefaultDescription
imageIMAGE—
instructionSTRINGput the product on a white marble surface; keep the label unchanged—
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-5, nano-banana-2
seedoptINT00–4294967295Change to force a new run

Outputs (2)

NameTypeDescription
imageIMAGE—
urlSTRING—