volcano outpainting
Mask-based canvas extension via ByteDance's Volcano API
- image
- mask
- result_image
VolcanoOutpaintingNode does one specific job: you give it an image plus a mask marking the empty area around it, and it calls ByteDance's Volcano Engine to fill that area in - extending the picture beyond its original borders. No local model, no VRAM, no sampler settings. It's the cloud-API sibling of VolcanoImageEditNode from the same pack, using a different Volcano endpoint tuned specifically for outpainting rather than general instruction edits.
Worth knowing going in: this is the old-school masked outpainting approach, not the "pad the canvas red and ask an instruction model to remove the padding" trick that's taken over a lot of outpainting workflows lately (Flux Klein and friends). There's no prompt input on this node at all - you're not describing what should appear in the new area, you're just telling it where the new area is and letting the model infer contextually consistent content. That's actually the classic strength of masked outpainting: it keeps working even when you have nothing specific to say about what belongs there, and it's what dedicated outpainting-trained models (a lineage running back to the original RunwayML SD 1.5 inpainting model) are built to do well.
How it works
You place your source image onto a larger canvas - however you normally do that in ComfyUI, padding it on one or more sides - and build a mask that marks the new blank region. Both go to Volcano's i2i_outpainting endpoint along with your credentials, and the API returns the filled-in image. It's the same conceptual move as local masked outpainting (unmasked region = fixed context, masked region = generate), just executed server-side by ByteDance's model instead of your own GPU.
The inputs and outputs that matter
image- the source image, already placed on its extended canvas (with blank space where you want the extension).mask- marks which part of that canvas is new and should be generated. Get the mask boundaries right; a mask that doesn't line up with the actual blank region gives you seams or content painted where you didn't want it, same as with any masked workflow.access_key/secret_key- your Volcano Engine credentials, same pair as every other Volcano node in this pack. Get them free from console.volcengine.com → "访问控制" (Access Control) → key management → create key.seed- note the range here is smaller than VolcanoImageEditNode's (0 to 999,999 rather than a near-64-bit max) - default 42 works fine for a first test.version(optional, defaulti2i_outpainting) - the pack's own tooltip says it plainly: "this value is the reqKey of the volcano api." It's an internal endpoint identifier, not a style or quality setting - leave it alone unless Volcano changes their API contract and the README tells you to update it.
Output: result_image (IMAGE) - the extended image, canvas and fill combined, ready for Preview/Save or a further pass.
How to install it
Through ComfyUI Manager: search "ComfyUI-utils-nodes", install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/zhangp365/ComfyUI-utils-nodes
then restart. Like its ImageEdit sibling, this node is just an HTTP call to Volcano - no model weights to download, no extra GPU dependency. The pack's heavier optional dependencies (TensorFlow for face-detection nodes) aren't installed by default and have nothing to do with this node.
Common issues & troubleshooting
Nothing happens, or an auth error. Same story as every Volcano node in this pack: it needs both access_key and secret_key, and they come from Volcano Engine's IAM console specifically - not a generic "API key" field you'd copy from a simpler service. Signing up is a full Chinese cloud-console registration, expect real-name/account verification, not a two-click AI-tool signup.
The extension looks obviously pasted-on, with a visible seam. This is the classic outpainting failure mode regardless of which engine does the generation - it usually comes from the mask cutting too tight against the original content, with no overlap for the model to blend against. Give the mask some breathing room into the original image's edge rather than drawing it flush against the border.
You expected a prompt field and there isn't one. That's correct, not a bug - this node has no prompt input. If you need to steer what appears in the extended area with words, you want VolcanoImageEditNode (or a local instruction-editing model) instead; this node is pure mask-driven fill.
Mask and image size mismatch. As with any masked-image workflow, the mask needs to correspond to the same canvas you're sending as image - if you padded the image to a new size but generated the mask against the old dimensions, expect broken or ignored results.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| mask | MASK | — | |
| access_key | STRING | — | |
| secret_key | STRING | — | |
| seed | INT | 420–999999 | — |
| versionopt | STRING | i2i_outpainting | this value is the reqKey of the volcano api. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| result_image | IMAGE | — |