A body swap can look convincing at feed size while failing exactly where the source identity meets the target pose. The thumbnail hides a soft jaw edge, a collar shadow pointing the wrong way, or a head whose scale belongs to another lens.
This tutorial turns that visual hunch into a repeatable seam audit. It uses the current AI Body Swap workspace on Voor, an exact HTTP 200 route with visible image input, Prompt, a Swap Mode preset, Aspect Ratio, settings, Public/Private visibility, Reset, and Generate. The route currently pins bytedance/seedream-4.5. No credits were spent for this article.
1. Establish permission and purpose
Body swapping is an identity-sensitive edit. Use only your own or explicitly consented source and target images. Do not use a public figure, impersonate someone, create sexualized deception, or present an edit as documentary evidence.
Record the intended use before touching the prompt:
{
"consent": true,
"purpose": "private fashion preview",
"disclosure_required": true,
"source_identity": "authorized portrait",
"target_reference": "authorized outfit and pose"
}
If consent is false or ambiguous, stop. A seam checklist cannot make an unethical edit acceptable.
2. Match the inputs before asking the model to match them
Choose a source face and target body reference with compatible:
- camera height and head angle;
- lens perspective and crop;
- light direction and color temperature;
- visible neck, collar, or lapel area;
- body scale and pose.
The current Seedream 4.5 schema exposes a required Prompt plus an optional Image Input array. The model contract allows one to fourteen references, while the current Voor form accepts up to ten image files at 10 MB each. For this tutorial, use two authorized references and name their roles in the prompt rather than relying on upload order alone.
3. Capture the current settings and cost
The live route currently offers:
| Control | Current choices | Default |
|---|---|---|
| Size | 2K, 4K | 2K |
| Max Images | 1–15 | 1 |
| Aspect Ratio | Match Input Image; 1:1, 4:3, 3:4, 16:9, 9:16, 3:2, 2:3, 21:9 | Match Input Image |
| Sequential Image Generation | Disabled, Auto | Disabled |
With max_images: 1 and sequential generation disabled, the live calculator currently shows 14 credits at both 2K and 4K. Setting sequential generation to Auto and requesting two outputs currently raises the estimate to 28 credits. Always trust the estimate beside Generate at the moment of submission; model pricing can change.
For free or welcome-credit generation, Voor keeps visibility Public and displays watermarked; selecting Private opens the paid upgrade path. Paid customers default to Private and may opt into Public. Do not put a consented but private portrait into a public run merely to test a seam.
4. Use a constraint-first prompt
The page offers Outfit / pose preview and Fashion reference presets. They fill a visible prompt, which you should edit into an explicit contract:
Use only the two consented references.
Image 1 owns facial identity, hairline, skin tone, and age.
Image 2 owns outfit, torso pose, camera angle, and crop.
Match neck angle, head-to-torso scale, light direction, and collar shadow.
Preserve hands and straight background lines.
No identity blending, no extra jewelry, no beauty retouching, no deception.
The phrase “swap the body” is not enough. It says what to change but not what must remain locked.
5. Audit the seam at full size
Create a review record that forces a decision for every failure zone:
const seamAudit = {
jawNeckTransition: null,
collarShadowDirection: null,
headToTorsoScale: null,
skinToneContinuity: null,
backgroundLineDrift: null,
handsAndAnatomy: null,
identityMatch: null
};
export function approveSwap(audit) {
const unresolved = Object.entries(audit)
.filter(([, value]) => value !== "pass")
.map(([name]) => name);
return {
approved: unresolved.length === 0,
unresolved
};
}
Inspect at 200% zoom, then at final delivery size, then as a thumbnail. The order matters: full size reveals seams; delivery size reveals whether the repair survives export; thumbnail size tests overall plausibility but cannot approve detail.
Jaw and neck
Look for a blurred jaw edge, double chin contour, abrupt skin-tone shift, or a neck width that does not follow the head angle.
Collar and shadow
Trace the lapel, neckline, and cast shadow. A convincing face pasted onto the wrong collar geometry still fails.
Scale and perspective
Compare head width with shoulder width. Check whether facial perspective agrees with the torso and whether the eyes sit at a believable height for the target pose.
Background and hands
Straight wall lines should remain straight. Fingers, sleeves, earrings, and hair near the seam often reveal unwanted edits outside the requested region.
The visuals above use the exact public before/result pair exposed on the current route. They are not an empty form, a generated text card, or a claimed new run.
6. Repair one failure at a time
Do not rerun with “make it more realistic.” Convert the failed audit row into one correction:
function repairPrompt(failures) {
const fixes = {
jawNeckTransition: "match the jaw edge and neck width without smoothing",
collarShadowDirection: "align the collar shadow with light from camera-left",
headToTorsoScale: "reduce head scale slightly to match shoulder perspective",
backgroundLineDrift: "restore every straight wall line outside the subject"
};
return failures.map(name => fixes[name]).filter(Boolean).join("; ");
}
Keep the original prompt and settings with every revision so reviewers can distinguish a deliberate repair from a lucky rerun.
7. Publish with context, or keep it private
If the result could be mistaken for a real event, disclose that it is AI-edited. Keep the consent record, source permissions, prompt, settings, displayed credit estimate, result, and completed audit together. Delete source uploads according to your retention policy.
Open the exact AI Body Swap generator only after you have permission, compatible references, and a seam checklist ready. The thumbnail is a preview; the audit is the decision.


Top comments (0)