from magic_hour import Client
from os import getenv
client = Client(token=getenv("API_TOKEN"))
res = client.v1.body_swap.generate(
assets={
"person_file_path": "/path/to/person.png",
"scene_file_path": "/path/to/scene.png",
},
resolution="1k",
name="My Body Swap image",
wait_for_completion=True,
download_outputs=True,
download_directory=".",
)import { Client } from "magic-hour";
const client = new Client({ token: process.env["API_TOKEN"]!! });
const res = await client.v1.bodySwap.generate(
{
assets: {
personFilePath: "/path/to/person.png",
sceneFilePath: "/path/to/scene.png",
},
name: "My Body Swap image",
resolution: "1k",
},
{
waitForCompletion: true,
downloadOutputs: true,
downloadDirectory: ".",
},
);package main
import (
os "os"
sdk "github.com/magichourhq/magic-hour-go/client"
nullable "github.com/magichourhq/magic-hour-go/nullable"
body_swap "github.com/magichourhq/magic-hour-go/resources/v1/body_swap"
types "github.com/magichourhq/magic-hour-go/types"
)
func main() {
client := sdk.NewClient(
sdk.WithBearerAuth(os.Getenv("API_TOKEN")),
)
res, err := client.V1.BodySwap.Create(body_swap.CreateRequest{
Assets: types.V1BodySwapCreateBodyAssets{
PersonFilePath: "api-assets/id/1234.png",
SceneFilePath: "api-assets/id/5678.png",
},
Name: nullable.NewValue("My Body Swap image"),
Resolution: types.V1BodySwapCreateBodyResolutionEnum1k,
})
}let client = magic_hour::Client::default()
.with_bearer_auth(&std::env::var("API_TOKEN").unwrap());
let res = client
.v1()
.body_swap()
.create(magic_hour::resources::v1::body_swap::CreateRequest {
assets: magic_hour::models::V1BodySwapCreateBodyAssets {
person_file_path: "api-assets/id/1234.png".to_string(),
scene_file_path: "api-assets/id/5678.png".to_string(),
},
name: Some("My Body Swap image".to_string()),
resolution: magic_hour::models::V1BodySwapCreateBodyResolutionEnum::Enum1k,
})
.await;curl --request POST \
--url https://api.magichour.ai/v1/body-swap \
--header 'accept: application/json' \
--header 'authorization: Bearer <token>' \
--header 'content-type: application/json' \
--data '
{
"name": "My Body Swap image",
"resolution": "1k",
"assets": {
"person_file_path": "api-assets/id/1234.png",
"scene_file_path": "api-assets/id/5678.png"
}
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.magichour.ai/v1/body-swap",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'My Body Swap image',
'resolution' => '1k',
'assets' => [
'person_file_path' => 'api-assets/id/1234.png',
'scene_file_path' => 'api-assets/id/5678.png'
]
]),
CURLOPT_HTTPHEADER => [
"accept: application/json",
"authorization: Bearer <token>",
"content-type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.post("https://api.magichour.ai/v1/body-swap")
.header("accept", "application/json")
.header("content-type", "application/json")
.header("authorization", "Bearer <token>")
.body("{\"name\":\"My Body Swap image\",\"resolution\":\"1k\",\"assets\":{\"person_file_path\":\"api-assets/id/1234.png\",\"scene_file_path\":\"api-assets/id/5678.png\"}}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.magichour.ai/v1/body-swap")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"resolution\": \"1k\",\n \"assets\": {\n \"person_file_path\": \"api-assets/id/1234.png\",\n \"scene_file_path\": \"api-assets/id/5678.png\"\n },\n \"name\": \"My Body Swap image\"\n}"
response = http.request(request)
puts response.read_body{
"id": "cuid-example",
"credits_charged": 50
}{
"message": "Missing request body"
}{
"message": "Unauthorized"
}{
"message": "Payment required"
}{
"message": "Not Found"
}{
"message": "Unable to create image"
}Body Swap
Swap a person into a scene image using Nano Banana 2. Credits depend on resolution (from 50 credits at 640px upward).
from magic_hour import Client
from os import getenv
client = Client(token=getenv("API_TOKEN"))
res = client.v1.body_swap.generate(
assets={
"person_file_path": "/path/to/person.png",
"scene_file_path": "/path/to/scene.png",
},
resolution="1k",
name="My Body Swap image",
wait_for_completion=True,
download_outputs=True,
download_directory=".",
)import { Client } from "magic-hour";
const client = new Client({ token: process.env["API_TOKEN"]!! });
const res = await client.v1.bodySwap.generate(
{
assets: {
personFilePath: "/path/to/person.png",
sceneFilePath: "/path/to/scene.png",
},
name: "My Body Swap image",
resolution: "1k",
},
{
waitForCompletion: true,
downloadOutputs: true,
downloadDirectory: ".",
},
);package main
import (
os "os"
sdk "github.com/magichourhq/magic-hour-go/client"
nullable "github.com/magichourhq/magic-hour-go/nullable"
body_swap "github.com/magichourhq/magic-hour-go/resources/v1/body_swap"
types "github.com/magichourhq/magic-hour-go/types"
)
func main() {
client := sdk.NewClient(
sdk.WithBearerAuth(os.Getenv("API_TOKEN")),
)
res, err := client.V1.BodySwap.Create(body_swap.CreateRequest{
Assets: types.V1BodySwapCreateBodyAssets{
PersonFilePath: "api-assets/id/1234.png",
SceneFilePath: "api-assets/id/5678.png",
},
Name: nullable.NewValue("My Body Swap image"),
Resolution: types.V1BodySwapCreateBodyResolutionEnum1k,
})
}let client = magic_hour::Client::default()
.with_bearer_auth(&std::env::var("API_TOKEN").unwrap());
let res = client
.v1()
.body_swap()
.create(magic_hour::resources::v1::body_swap::CreateRequest {
assets: magic_hour::models::V1BodySwapCreateBodyAssets {
person_file_path: "api-assets/id/1234.png".to_string(),
scene_file_path: "api-assets/id/5678.png".to_string(),
},
name: Some("My Body Swap image".to_string()),
resolution: magic_hour::models::V1BodySwapCreateBodyResolutionEnum::Enum1k,
})
.await;curl --request POST \
--url https://api.magichour.ai/v1/body-swap \
--header 'accept: application/json' \
--header 'authorization: Bearer <token>' \
--header 'content-type: application/json' \
--data '
{
"name": "My Body Swap image",
"resolution": "1k",
"assets": {
"person_file_path": "api-assets/id/1234.png",
"scene_file_path": "api-assets/id/5678.png"
}
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.magichour.ai/v1/body-swap",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'My Body Swap image',
'resolution' => '1k',
'assets' => [
'person_file_path' => 'api-assets/id/1234.png',
'scene_file_path' => 'api-assets/id/5678.png'
]
]),
CURLOPT_HTTPHEADER => [
"accept: application/json",
"authorization: Bearer <token>",
"content-type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.post("https://api.magichour.ai/v1/body-swap")
.header("accept", "application/json")
.header("content-type", "application/json")
.header("authorization", "Bearer <token>")
.body("{\"name\":\"My Body Swap image\",\"resolution\":\"1k\",\"assets\":{\"person_file_path\":\"api-assets/id/1234.png\",\"scene_file_path\":\"api-assets/id/5678.png\"}}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.magichour.ai/v1/body-swap")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"resolution\": \"1k\",\n \"assets\": {\n \"person_file_path\": \"api-assets/id/1234.png\",\n \"scene_file_path\": \"api-assets/id/5678.png\"\n },\n \"name\": \"My Body Swap image\"\n}"
response = http.request(request)
puts response.read_body{
"id": "cuid-example",
"credits_charged": 50
}{
"message": "Missing request body"
}{
"message": "Unauthorized"
}{
"message": "Payment required"
}{
"message": "Not Found"
}{
"message": "Unable to create image"
}Authorizations
Bearer authentication header of the form Bearer <api_key>, where <api_key> is your API key. To get your API key, go to Developer Hub and click "Create new API Key".
Body
Body
Output resolution. Determines credits charged for the run.
640px, 1k, 2k, 4k "1k"
Person image and scene image for body swap
Show child attributes
Show child attributes
Give your image a custom name for easy identification.
"My Body Swap image"
Response
Success
Success
Unique ID of the image. Use it with the Get image Project API to fetch status and downloads.
"cuid-example"
The amount of credits deducted from your account to generate the image. We charge credits right when the request is made.
If an error occurred while generating the image(s), credits will be refunded and this field will be updated to include the refund.
50
Was this page helpful?