Замена объекта
Создаёт задачу замены объекта и возвращает task_id, по которому
затем нужно опрашивать /v1/videos/fetch.
Параметры проверяются уже после создания задачи: при невалидном входе
задача получит статус rejected с ошибкой BadRequest.
curl --request POST \
--url https://api.nixai.ru/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "genjutsu-object-swap",
"prompt": "Replace the coffee cup in her hand with the red sneaker",
"videos": [
"https://example.com/input.mp4"
],
"images": [
"https://example.com/sneaker.jpg"
],
"size": "720p"
}
'import requests
url = "https://api.nixai.ru/v1/videos/generations"
payload = {
"model": "genjutsu-object-swap",
"prompt": "Replace the coffee cup in her hand with the red sneaker",
"videos": ["https://example.com/input.mp4"],
"images": ["https://example.com/sneaker.jpg"],
"size": "720p"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'genjutsu-object-swap',
prompt: 'Replace the coffee cup in her hand with the red sneaker',
videos: ['https://example.com/input.mp4'],
images: ['https://example.com/sneaker.jpg'],
size: '720p'
})
};
fetch('https://api.nixai.ru/v1/videos/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const url = 'https://api.nixai.ru/v1/videos/generations';
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'genjutsu-object-swap',
prompt: 'Replace the coffee cup in her hand with the red sneaker',
videos: ['https://example.com/input.mp4'],
images: ['https://example.com/sneaker.jpg'],
size: '720p'
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.nixai.ru/v1/videos/generations",
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([
'model' => 'genjutsu-object-swap',
'prompt' => 'Replace the coffee cup in her hand with the red sneaker',
'videos' => [
'https://example.com/input.mp4'
],
'images' => [
'https://example.com/sneaker.jpg'
],
'size' => '720p'
]),
CURLOPT_HTTPHEADER => [
"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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.nixai.ru/v1/videos/generations"
payload := strings.NewReader("{\n \"model\": \"genjutsu-object-swap\",\n \"prompt\": \"Replace the coffee cup in her hand with the red sneaker\",\n \"videos\": [\n \"https://example.com/input.mp4\"\n ],\n \"images\": [\n \"https://example.com/sneaker.jpg\"\n ],\n \"size\": \"720p\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.nixai.ru/v1/videos/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"genjutsu-object-swap\",\n \"prompt\": \"Replace the coffee cup in her hand with the red sneaker\",\n \"videos\": [\n \"https://example.com/input.mp4\"\n ],\n \"images\": [\n \"https://example.com/sneaker.jpg\"\n ],\n \"size\": \"720p\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nixai.ru/v1/videos/generations")
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 \"model\": \"genjutsu-object-swap\",\n \"prompt\": \"Replace the coffee cup in her hand with the red sneaker\",\n \"videos\": [\n \"https://example.com/input.mp4\"\n ],\n \"images\": [\n \"https://example.com/sneaker.jpg\"\n ],\n \"size\": \"720p\"\n}"
response = http.request(request)
puts response.read_body$headers=@{}
$headers.Add("Authorization", "Bearer <token>")
$headers.Add("Content-Type", "application/json")
$response = Invoke-WebRequest -Uri 'https://api.nixai.ru/v1/videos/generations' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"model": "genjutsu-object-swap",
"prompt": "Replace the coffee cup in her hand with the red sneaker",
"videos": [
"https://example.com/input.mp4"
],
"images": [
"https://example.com/sneaker.jpg"
],
"size": "720p"
}'import Foundation
let parameters = [
"model": "genjutsu-object-swap",
"prompt": "Replace the coffee cup in her hand with the red sneaker",
"videos": ["https://example.com/input.mp4"],
"images": ["https://example.com/sneaker.jpg"],
"size": "720p"
] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://api.nixai.ru/v1/videos/generations")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = [
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
]
request.httpBody = postData
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))using RestSharp;
var options = new RestClientOptions("https://api.nixai.ru/v1/videos/generations");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"model\": \"genjutsu-object-swap\",\n \"prompt\": \"Replace the coffee cup in her hand with the red sneaker\",\n \"videos\": [\n \"https://example.com/input.mp4\"\n ],\n \"images\": [\n \"https://example.com/sneaker.jpg\"\n ],\n \"size\": \"720p\"\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
using RestSharp;
var options = new RestClientOptions("https://api.nixai.ru/v1/videos/generations");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"model\": \"genjutsu-object-swap\",\n \"prompt\": \"Replace the coffee cup in her hand with the red sneaker\",\n \"videos\": [\n \"https://example.com/input.mp4\"\n ],\n \"images\": [\n \"https://example.com/sneaker.jpg\"\n ],\n \"size\": \"720p\"\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'genjutsu-object-swap',
prompt: 'Replace the coffee cup in her hand with the red sneaker',
videos: ['https://example.com/input.mp4'],
images: ['https://example.com/sneaker.jpg'],
size: '720p'
})
};
fetch('https://api.nixai.ru/v1/videos/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.nixai.ru/v1/videos/generations");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "{\n \"model\": \"genjutsu-object-swap\",\n \"prompt\": \"Replace the coffee cup in her hand with the red sneaker\",\n \"videos\": [\n \"https://example.com/input.mp4\"\n ],\n \"images\": [\n \"https://example.com/sneaker.jpg\"\n ],\n \"size\": \"720p\"\n}");
CURLcode ret = curl_easy_perform(hnd);CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.nixai.ru/v1/videos/generations");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "{\n \"model\": \"genjutsu-object-swap\",\n \"prompt\": \"Replace the coffee cup in her hand with the red sneaker\",\n \"videos\": [\n \"https://example.com/input.mp4\"\n ],\n \"images\": [\n \"https://example.com/sneaker.jpg\"\n ],\n \"size\": \"720p\"\n}");
CURLcode ret = curl_easy_perform(hnd);val client = OkHttpClient()
val mediaType = MediaType.parse("application/json")
val body = RequestBody.create(mediaType, "{\n \"model\": \"genjutsu-object-swap\",\n \"prompt\": \"Replace the coffee cup in her hand with the red sneaker\",\n \"videos\": [\n \"https://example.com/input.mp4\"\n ],\n \"images\": [\n \"https://example.com/sneaker.jpg\"\n ],\n \"size\": \"720p\"\n}")
val request = Request.Builder()
.url("https://api.nixai.ru/v1/videos/generations")
.post(body)
.addHeader("Authorization", "Bearer <token>")
.addHeader("Content-Type", "application/json")
.build()
val response = client.newCall(request).execute()falsefalse{
"task_id": "b22c9ae2-0b55-4398-88df-0191aae664f0"
}Authorizations
Заголовок авторизации вида Bearer <token>, где <token> — ваш API-ключ.
Body
genjutsu-object-swap "genjutsu-object-swap"
Ровно одна ссылка на исходное видео, в котором нужно заменить объект. Длительность — от 4 до 30 секунд. Длительность результата совпадает с длительностью исходного видео.
1 element["https://example.com/input.mp4"]
От 1 до 8 ссылок на референсные изображения объекта, который нужно подставить в видео.
1 - 8 elements["https://example.com/sneaker.jpg"]
Необязательное текстовое описание, например какой объект заменить.
10000"Replace the coffee cup in her hand with the red sneaker"
Разрешение итогового видео.
480p, 720p, 1080p "720p"
Response
Задача создана
Идентификатор задачи для последующего опроса через fetch.
"b22c9ae2-0b55-4398-88df-0191aae664f0"
Was this page helpful?
curl --request POST \
--url https://api.nixai.ru/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "genjutsu-object-swap",
"prompt": "Replace the coffee cup in her hand with the red sneaker",
"videos": [
"https://example.com/input.mp4"
],
"images": [
"https://example.com/sneaker.jpg"
],
"size": "720p"
}
'import requests
url = "https://api.nixai.ru/v1/videos/generations"
payload = {
"model": "genjutsu-object-swap",
"prompt": "Replace the coffee cup in her hand with the red sneaker",
"videos": ["https://example.com/input.mp4"],
"images": ["https://example.com/sneaker.jpg"],
"size": "720p"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'genjutsu-object-swap',
prompt: 'Replace the coffee cup in her hand with the red sneaker',
videos: ['https://example.com/input.mp4'],
images: ['https://example.com/sneaker.jpg'],
size: '720p'
})
};
fetch('https://api.nixai.ru/v1/videos/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const url = 'https://api.nixai.ru/v1/videos/generations';
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'genjutsu-object-swap',
prompt: 'Replace the coffee cup in her hand with the red sneaker',
videos: ['https://example.com/input.mp4'],
images: ['https://example.com/sneaker.jpg'],
size: '720p'
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.nixai.ru/v1/videos/generations",
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([
'model' => 'genjutsu-object-swap',
'prompt' => 'Replace the coffee cup in her hand with the red sneaker',
'videos' => [
'https://example.com/input.mp4'
],
'images' => [
'https://example.com/sneaker.jpg'
],
'size' => '720p'
]),
CURLOPT_HTTPHEADER => [
"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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.nixai.ru/v1/videos/generations"
payload := strings.NewReader("{\n \"model\": \"genjutsu-object-swap\",\n \"prompt\": \"Replace the coffee cup in her hand with the red sneaker\",\n \"videos\": [\n \"https://example.com/input.mp4\"\n ],\n \"images\": [\n \"https://example.com/sneaker.jpg\"\n ],\n \"size\": \"720p\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.nixai.ru/v1/videos/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"genjutsu-object-swap\",\n \"prompt\": \"Replace the coffee cup in her hand with the red sneaker\",\n \"videos\": [\n \"https://example.com/input.mp4\"\n ],\n \"images\": [\n \"https://example.com/sneaker.jpg\"\n ],\n \"size\": \"720p\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nixai.ru/v1/videos/generations")
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 \"model\": \"genjutsu-object-swap\",\n \"prompt\": \"Replace the coffee cup in her hand with the red sneaker\",\n \"videos\": [\n \"https://example.com/input.mp4\"\n ],\n \"images\": [\n \"https://example.com/sneaker.jpg\"\n ],\n \"size\": \"720p\"\n}"
response = http.request(request)
puts response.read_body$headers=@{}
$headers.Add("Authorization", "Bearer <token>")
$headers.Add("Content-Type", "application/json")
$response = Invoke-WebRequest -Uri 'https://api.nixai.ru/v1/videos/generations' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"model": "genjutsu-object-swap",
"prompt": "Replace the coffee cup in her hand with the red sneaker",
"videos": [
"https://example.com/input.mp4"
],
"images": [
"https://example.com/sneaker.jpg"
],
"size": "720p"
}'import Foundation
let parameters = [
"model": "genjutsu-object-swap",
"prompt": "Replace the coffee cup in her hand with the red sneaker",
"videos": ["https://example.com/input.mp4"],
"images": ["https://example.com/sneaker.jpg"],
"size": "720p"
] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://api.nixai.ru/v1/videos/generations")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = [
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
]
request.httpBody = postData
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))using RestSharp;
var options = new RestClientOptions("https://api.nixai.ru/v1/videos/generations");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"model\": \"genjutsu-object-swap\",\n \"prompt\": \"Replace the coffee cup in her hand with the red sneaker\",\n \"videos\": [\n \"https://example.com/input.mp4\"\n ],\n \"images\": [\n \"https://example.com/sneaker.jpg\"\n ],\n \"size\": \"720p\"\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
using RestSharp;
var options = new RestClientOptions("https://api.nixai.ru/v1/videos/generations");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"model\": \"genjutsu-object-swap\",\n \"prompt\": \"Replace the coffee cup in her hand with the red sneaker\",\n \"videos\": [\n \"https://example.com/input.mp4\"\n ],\n \"images\": [\n \"https://example.com/sneaker.jpg\"\n ],\n \"size\": \"720p\"\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'genjutsu-object-swap',
prompt: 'Replace the coffee cup in her hand with the red sneaker',
videos: ['https://example.com/input.mp4'],
images: ['https://example.com/sneaker.jpg'],
size: '720p'
})
};
fetch('https://api.nixai.ru/v1/videos/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.nixai.ru/v1/videos/generations");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "{\n \"model\": \"genjutsu-object-swap\",\n \"prompt\": \"Replace the coffee cup in her hand with the red sneaker\",\n \"videos\": [\n \"https://example.com/input.mp4\"\n ],\n \"images\": [\n \"https://example.com/sneaker.jpg\"\n ],\n \"size\": \"720p\"\n}");
CURLcode ret = curl_easy_perform(hnd);CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.nixai.ru/v1/videos/generations");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "{\n \"model\": \"genjutsu-object-swap\",\n \"prompt\": \"Replace the coffee cup in her hand with the red sneaker\",\n \"videos\": [\n \"https://example.com/input.mp4\"\n ],\n \"images\": [\n \"https://example.com/sneaker.jpg\"\n ],\n \"size\": \"720p\"\n}");
CURLcode ret = curl_easy_perform(hnd);val client = OkHttpClient()
val mediaType = MediaType.parse("application/json")
val body = RequestBody.create(mediaType, "{\n \"model\": \"genjutsu-object-swap\",\n \"prompt\": \"Replace the coffee cup in her hand with the red sneaker\",\n \"videos\": [\n \"https://example.com/input.mp4\"\n ],\n \"images\": [\n \"https://example.com/sneaker.jpg\"\n ],\n \"size\": \"720p\"\n}")
val request = Request.Builder()
.url("https://api.nixai.ru/v1/videos/generations")
.post(body)
.addHeader("Authorization", "Bearer <token>")
.addHeader("Content-Type", "application/json")
.build()
val response = client.newCall(request).execute()falsefalse{
"task_id": "b22c9ae2-0b55-4398-88df-0191aae664f0"
}