Image To Image
Send a local image to a remote GPU and get a variation back
- input_image
- image
- metadata
Image To Image is the img2img member of the ComfyBros RunPod family. You hand it an image that lives in your local graph, it encodes that image to base64, ships it to your RunPod serverless endpoint with a prompt and sampling settings, and the endpoint runs an image-to-image workflow and sends back a variation. Your local GPU is a spectator the whole time.
The use case mirrors the text-to-image node but with the twist that you supply the starting image. That makes it the natural remote equivalent of the classic local img2img loop: take something you generated, feed it back with a changed prompt and a lower denoise, refine it. The denoise slider (default 0.7) is the dial that controls how far the output drifts from the input - high denoise, near-total reimagining; low denoise, subtle retouch. If your endpoint is built to host this workflow, this is how you run img2img on a GPU you don't own.
Inputs that matter
instance_name- the RunPod endpoint, selected from your configured instances (same settings-file mechanism as the rest of the cluster; empty means "No instances configured" and a hard error at run time).input_image(required) - your localIMAGE. The node takes the first frame, converts to a base64 PNG, and sends it.positive_prompt/negative_prompt- multiline; default positive is "a creative variation of the original image."checkpoint- a string naming a model on the endpoint (defaultcheckpoint_name.safetensors- note it's a placeholder, unlike the text-to-image node's real model name, so you'll want to change it).steps(default 20),cfg(default 7),seed(default -1 = random),sampler_name(defaulteuler),scheduler(defaultnormal),denoise(default 0.7).
There's one optional input worth knowing: input_image_string, a multiline field where you can paste a base64 image string as an alternative to wiring an IMAGE. It's a fallback escape hatch for when the image arrives as text rather than a tensor.
Outputs
image- theIMAGEtensor of the variation, ready to preview or pipe onward.metadata-STRINGJSON with the echoed parameters and execution timing.
Installing it
ComfyBros installs like any custom node pack. ComfyUI Manager - search "ComfyBros" - or:
cd ComfyUI/custom_nodes
git clone https://github.com/turnbros/ComfyBros
Then restart ComfyUI. The README references a requirements.txt that doesn't exist; the declared deps are in pyproject.toml. The node lives under ComfyBros/Image Generation.
Gotchas
The checkpoint default is literally checkpoint_name.safetensors - a placeholder, and running with it as-is will likely fail server-side. Set it to something real on your endpoint (or check what's there with Module Management). And as with all the RunPod nodes: configure an instance first, and budget minutes for cold starts. If your upload is large, expect slower round trips - the image is base64'd and sent over the wire before generation even starts.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| instance_name | COMBO | No instances configured | 1 options: No instances configured |
| input_image | IMAGE | — | |
| positive_prompt | STRING | a creative variation of the original image | — |
| negative_prompt | STRING | — | |
| checkpoint | STRING | checkpoint_name.safetensors | — |
| steps | INT | 201–150 | — |
| cfg | FLOAT | 7.00.1–30 | — |
| seed | INT | -1-1–2147483647 | — |
| sampler_name | COMBO | euler | 22 options: euler, euler_ancestral, heun, heunpp2, dpm_2, dpm_2_ancestral, +16 |
| scheduler | COMBO | normal | 7 options: normal, karras, exponential, sgm_uniform, simple, ddim_uniform, +1 |
| denoise | FLOAT | 0.700–1 | — |
| input_image_stringopt | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| metadata | STRING | — |