Wan 2.7 · Edit
Thinks first, then hands you four images
- image_urls
- images
- task id
Wan 2.7 was not a popular release. The biggest thread about it in the corpus is 67 points of dunking - "Its shit tbh, compared to other closed source models" - and the one substantive comparison anyone ran (against HappyHorse, Veo 3.1 and Seedance on eight prompts) landed on "mixed": cleanest small-detail textures of the four on close-ups, but pose discontinuity when characters move hard.
Now read that finding again, because it explains this node. The place Wan 2.7 actually holds up is still images and slow, detailed work. Which is exactly what an edit node does. At 4.5 credits ($0.045) an image, with up to four outputs per prompt and a JSON colour palette for art direction, this is the most defensible use of the 2.7 family I can see.
It's also, like everything above Wan 2.2, closed-weight and API-only. No download, no local checkpoint, no "Wan 2.7 open source" guide that isn't lying to you.
How it works
The node is built from the model's own schema, so its widgets are the endpoint's real fields. image_urls is an autogrow socket - connect one source image, then another appears. Each image is uploaded when you queue. The run is quoted before credits are held, submitted with an idempotency key, polled with live progress on the node, and the results come back as a batched IMAGE (all four at once if you ask for four).
The summary says the model "thinks through the composition" before drawing. Whether that's literally a reasoning pass or marketing for a better-conditioned sampler, the observable behaviour is what matters: it tends to respect the instruction as a whole sentence rather than keyword-matching it, which is why the prompt wants to describe the image you want back, not just the delta.
The inputs that matter
prompt - describe the result: subject, composition, style, lighting. "Change the jacket to red" is a weaker instruction than "the same person, same pose, red wool jacket, same window light".
image_urls - your sources. Autogrow, so multi-reference edits are a matter of clicking another socket on. Order matters, because the prompt refers to them positionally.
Then the two fields nobody touches and everybody should:
bounding_boxes- a JSON string of rectangles in pixels from the top-left of each reference image, up to two per image. This is masked editing without a mask node: mark the region and the model treats it as the area to work on.color_palette- JSON, 3 to 10 colours with optional percentage shares. It's the closest thing to art direction this pack offers, and for product or brand work it's genuinely useful.
resolution gives 1k or 2k; aspect_ratio defaults to model default, which follows the proportions of the last source image. num_outputs goes 1 to 4, billed per image returned - so four outputs is four images of cost, not one.
Outputs: images (a batch) and task id.
Installing it
Manager → search PopNow → Install → restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/popnow-ai/popnow-comfyui
Add a key from popnow.ai/api/console/keys in Settings > PopNow, or export POPNOW_API_KEY, then restart so the catalog loads. No checkpoints, no ControlNets, no Python deps beyond ComfyUI's own. If you still have custom_nodes/popnow_api.py from the single-file era, remove it.
Where people get burned
The bounding_boxes and color_palette widgets are string fields expecting JSON arrays. They fail loudly if you paste malformed JSON, and if you're generating those values programmatically you'll want to build the string in a small node rather than by hand.
Batching surprises people: num_outputs 4 returns a four-image batch on one socket, which then flows into a Save Image and writes four files. That's usually what you want. It's four times the credits too.
Error-wise: 40201 = credits, 40004 = unsupported combination, 400 names a rejected field. Failed or refused runs are refunded. And interrupting a queue doesn't cancel the server-side task - it still completes and settles.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the image to produce from the source: subject, composition, style, and lighting. | |
| image_urls | COMFY_AUTOGROW_V3 | Source images that you are authorised to process. | |
| bounding_boxes | STRING | Rectangles marking the areas to edit, in pixels from the top-left corner of the reference image each one belongs to. Up to 2 per image. JSON. A list of objects with "image_index", "x1", "x2", "y1", "y2". | |
| aspect_ratio | COMBO | model default | Aspect ratio of the generated image. Omit it to follow the proportions of the last source image. |
| num_outputs | INT | 11–4 | How many images to generate in one run. |
| resolution | COMBO | 1k | Output resolution tier. With aspect_ratio omitted, the output follows the last source image's proportions at this tier. |
| color_palette | STRING | Custom colour theme: 3 to 10 colours, each with an optional share of the image in percent. Leave the shares empty to split them evenly. JSON. A list of objects with "hex", "ratio"?. | |
| seed | INT | 00–2147483647 | Same seed and settings, same result. Set 'control after generate' to randomize to get a new result on every run; every run is billed. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| task id | STRING | The PopNow task id, for the API console logs or support. |