Face Swap Pro · Image Editing
$0.16 a shot when the cheap swap isn't good enough
- image_url
- reference_image_url
- images
- task id
What you're paying the extra twelve cents for
SpicyAPI ships three image face swaps, and they are not versions of each other so much as three bets. Face Swap v1 is $0.013 and does the job. Face Swap Plus is $0.16 and fixes skin tone. Face Swap Pro is $0.16 and is the precision one: it moves the facial features off your reference photo onto the target person with no retouching pass, so the target's own skin texture, pores and grain survive the swap.
That "no retouching" line is the whole pitch. The failure mode of most face pipelines - local ReActor included - is a plastic face pasted onto a real one: the identity lands but the skin tells you it's fake. If your target image has nice texture and you want to keep it, this is the node that cares.
How it works
Two images, no prompt. The node uploads both, calls spicyapi/face-swap-pro-v1/edit, and returns a PNG plus a task id. That's the entire interface - for $0.16 per image.
Worth knowing what you're avoiding: locally this class of job means InsightFace plus an ArcFace embedding pipeline, plus whatever swapper model, and the InsightFace install was for years the single worst dependency in local generation until the 1.0 release in May 2026 dropped the C++ build requirement. Here it's a node with two sockets.
Inputs and outputs
image_url (IMAGE) - the target. The face of the person in this image is the one that gets replaced. Get this direction right; it's the most common beginner mix-up, and there's no undo except another $0.16.
reference_image_url (IMAGE) - the reference face. The facial features from this image are transferred onto the target.
face_enhance (BOOLEAN, default off) - an extra face-enhancement pass on the swapped face for a sharper, more detailed result. Off by default, and that default is coherent: enhance is a second generative pass, so it can smooth away exactly the texture this node exists to preserve. Turn it on for soft or low-light targets, leave it off for clean studio shots.
Outputs: images (IMAGE) and task id (STRING).
There is no seed and no style selector on this node. Pro is the "one good answer" variant - if you want to tune, that's Face Swap v1 with its style selector, or Face Swap Plus with its prompt.
Install
Manager → search SpicyAPI, or:
cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi
Restart - there's nothing to install. The pack declares zero dependencies and no model files; everything runs on SpicyAPI's servers, so no GPU is needed. Python 3.10+ and a ComfyUI with the V3 node API. Set your key in Settings > SpicyAPI (or SPICY_API_KEY), restart once so the model list loads from your account, and set Max cost per run - at $0.16 a pop, batch experiments get expensive fast.
Traps and honest notes
- Order of the two sockets. Swap them and you'll get a weird result rather than an error. Target first, reference second.
- Reference quality sets the ceiling. One clear, roughly frontal, well-lit face beats five moody angles. Squinting, sunglasses and hard profiles all degrade the identity transfer - no settings will rescue a bad reference.
- No seed means no repeats. Two runs of the same pair can differ; there's nothing to pin. Fine for a finished edit, mildly annoying when you're comparing.
- Batch it carefully. Face Swap v1 carries a
face_mappingfield for multi-person images; this node doesn't. One face per run. - Your photos go to a server. Structural, not a bug - but for a client's unpublished portraits, that's a decision, not a detail.
- Nudity and minors. No hosted swap endpoint in this ecosystem has a reliable guard, and the legal exposure sits with whoever ran it. Face Swap Pro is a tool; you're the policy.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image_url | IMAGE | Target image. The face of the person in this image is the one that gets replaced. | |
| reference_image_url | IMAGE | Reference face image. The facial features from this image are transferred onto the target. | |
| face_enhance | BOOLEAN | false | Run a face-enhancement pass on the swapped face for a sharper, more detailed result. |
| seed | INT | 00–2147483647 | This model takes no seed, so the number is never sent. Changing it makes ComfyUI run the node again: set 'control after generate' to randomize for a new result on every run; every run is billed. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| task id | STRING | The SpicyAPI task id, for the console logs or support. |