ComfyUI Extension: va1
Run ComfyUI workflows without the setup
No installs, no CUDA version roulette, no GPU sitting idle on your bill. Bring a workflow and run it in the browser.
ComfyUI custom nodes: (1) Pad Image by Aspect for Outpaint — expand, pad, and mask images to fixed or randomized aspect ratios with precise spatial and scale control for outpainting and canvas expansion. (2) Image Mask Comparer — compare masked regions of two images with similarity scoring and automatic retry/re-queue on mismatch.
Looking for a different extension?
Custom Nodes (2)
README
va1 — Custom ComfyUI Nodes
A collection of custom ComfyUI nodes for image manipulation, comparison, and creative workflows.
Nodes
1. Pad Image by Aspect for Outpaint
A versatile node designed to expand, pad, and mask images to fixed or randomized aspect ratios with precise spatial and scale control — engineered for outpainting, compositional layout, and creative canvas expansion.
Key Features
- Aspect Ratio with Random Option: Choose from fixed presets (
16:9,9:16,3:2,2:3,4:5,5:4,1:1) or selectrandomto pick a new ratio on each run. - Scale Percentage: Shrink the input image after canvas sizing. Presets range from
50%to100%, plusrandomfor varying scales each execution. When using1:1, 100% is disabled to ensure visible shrinkage. - Placement Control: Full spatial options:
- Directional:
left,right,up,down - 3x3 Grid:
top-left,top-mid,top-right,mid-left,center,mid-right,bottom-left,bottom-mid,bottom-right - Random: Uniform placement anywhere on the canvas.
- Smart Fallbacks: Directional choices auto-revert to
centerif incompatible with the aspect ratio's orientation.
- Directional:
- Rotation: Rotate the input image before padding. Options from
0to330degrees in 30-degree steps, orrandom. - Background Color: Choose from
white,black, orgreyfor padded areas. - Feathered Mask: Generates a soft-edged mask for the new padded areas to facilitate seamless inpainting/outpainting.
Inputs
| Name | Type | Description |
| -------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| image | IMAGE | The input image tensor (B x H x W x C). |
| aspect_ratio | "random", "16:9", "9:16", "3:2", "2:3", "4:5", "5:4", "1:1" | Target aspect ratio for the canvas. Select random for a fresh ratio each run. |
| placement | "center", "random", directional, or 3x3 grid positions | Spatial placement of the image inside the new canvas. |
| scale_pct | "random", "50" – "100" | Percentage to shrink the original image after canvas sizing. 100 disabled for 1:1. |
| rotation | "random", "0" – "330" (30-degree steps) | Rotation angle applied to the input image before padding. |
| bg_color | "white", "black", "grey" | Background color for padded areas. |
| seed | INT (default 0) | Slider to force node re-execution. |
| feathering | INT (0–1024) | Softness of the mask's edge — higher values produce smoother transitions at the padded border. |
Outputs
| Name | Type | Description |
| -------- | -------- | ----------------------------------------------------------------------------------------------- |
| Image | IMAGE | The padded (and optionally shrunk/rotated) image tensor. |
| Mask | MASK | Feathered mask where 0 = original content, >0 = padded regions with smooth blending values. |
| Params | STRING | Summary of the parameters used (aspect ratio, placement, scale, rotation). |
2. Image Mask Comparer
Compares the masked regions of two images and returns a boolean indicating whether they match above a configurable similarity threshold. Useful for verifying that a specific region (e.g. a logo or label) has been preserved after an AI generation or inpainting step.
Key Features
- Masked Region Comparison: Compares only the pixels within a mask, ignoring everything outside.
- Dual Similarity Metric: Uses a weighted combination of Mean Absolute Error (MAE) similarity and Normalized Cross-Correlation (NCC) for robust matching.
- Automatic Retry: When
max_retries> 0 and the comparison fails, the node will:- Randomise the seed of every KSampler/noise node it finds in the prompt.
- Re-queue the modified prompt via direct queue access (with HTTP POST as fallback).
- Interrupt the current execution so downstream nodes never see the bad result.
- Broad Sampler Support: Recognises seeds from
KSampler,KSamplerAdvanced,SamplerCustom,RandomNoise, Impact Pack samplers, and any node with aseedornoise_seedinput.
Inputs
| Name | Type | Description |
| ------------- | ------- | ----------------------------------------------------------------------------------------------- |
| image_a | IMAGE | The reference image (original). |
| image_b | IMAGE | The generated/modified image to compare against. |
| mask | MASK | The mask defining which region to compare. White (1) = region of interest. |
| threshold | FLOAT | Similarity threshold (0.0–1.0, default 0.90). Values at or above this are considered a match. |
| max_retries | INT | Maximum number of retry attempts (0–50, default 4). Set to 0 to disable automatic retries. |
Outputs
| Name | Type | Description |
| ------------ | --------- | --------------------------------------------------------------------- |
| is_match | BOOLEAN | True if the masked regions match above the threshold. |
| similarity | FLOAT | The computed similarity score (0.0–1.0). |
| image_out | IMAGE | Pass-through of image_b for downstream use. |
Primary Use Cases
- Outpainting & Canvas Expansion: Prepare larger canvases around existing images with precise control.
- Quality Verification: Automatically check that inpainting preserved critical regions (logos, text, faces).
- Automated Retry Loops: Re-generate until a specific region matches the original, without manual intervention.
- Batch Processing: Randomised parameters enable varied compositions across batch jobs.
Installation
Option 1: ComfyUI Manager
-
Open ComfyUI Manager
-
Click "Install from URL"
-
Paste:
https://github.com/vaishnav-vn/va1
Option 2: Manual
cd ComfyUI/custom_nodes
git clone https://github.com/vaishnav-vn/va1.git
Restart ComfyUI.
Node Metadata
| Node | Display Name | Category |
| --------------------------- | ------------------------------- | --------------- |
| RandomAspectRatioMask | Pad Image by Aspect for Outpaint | va1 |
| ImageMaskComparer | Image Mask Comparer | image/compare |
Run ComfyUI workflows without the setup
No installs, no CUDA version roulette, no GPU sitting idle on your bill. Bring a workflow and run it in the browser.