OmniHuman v1.5 API: programmatisk generering av avatarvideor
En utvecklarguide till OmniHuman v1.5 API på Arteza. Lär dig om endpointstruktur, autentisering, begäransparametrar, responshantering, webhookintegration och bästa praxis för att bygga automatiserade arbetsflöden för avatarvideor.

Att köra OmniHuman v1.5 via Arteza-gränssnittet är utmärkt för enstaka skapanden. För arbetsflöden med hög volym, till exempel personaliserad säljkontakt, flerspråkiga utrullningar, CMS-driven videogenerering och automatiserade nyhetssammanfattningar, är API:et rätt väg att gå. Den här guiden går igenom autentisering, endpoints, requeststruktur, webhook-hantering och produktionsmönster. Varje generering kostar samma 3-72 krediter ($0,30-$7,20) oavsett om du anropar via gränssnittet eller API:et.
Sammanfattning
- Generera OmniHuman v1.5-videor programmatiskt via Arteza REST API
- Samma $0,30-$7,20 per generering som i gränssnittet, utan API-tillägg
- Asynkron generering med webhook eller polling för att hämta resultat
- Idealiskt för personaliserade säljvideor, automatiserade utbildningsbibliotek och flerspråkiga utrullningar
- Autentisering via API-nyckel från din Arteza-instrumentpanel
Varför använda API:et
API:et möjliggör automatiseringsmönster som gränssnittet inte kan matcha:
- Batchgenerering. Kör 100+ videor i ett enda pipelinekörnig.
- Dynamisk personalisering. Hämta data från ett CRM och generera en video per prospekt.
- Schemalagda arbetsflöden. Dagliga nyhetssammanfattningar, veckovisa summerade videor och triggade uppdateringar.
- Integration med befintliga stackar. Node.js, Python, Go, Ruby, vilket språk som helst med HTTP kan anropa det.
- Reproducerbar produktion. Versionskontrollerade skript istället för manuella klick i gränssnittet.
Om ditt användningsfall involverar fler än 10 videor med liknande struktur är det värt att sätta upp API:et.
Skapa din AI-presentatör nu
Förvandla ett foto och ljud till en livfull talande video. $7.20 per 30-sekunders video på planer från $5 i månaden.
Prova OmniHuman gratis5 gratis generationer · Inget kreditkort krävs
Autentisering
Arteza API-anrop autentiseras via en API-nyckel som skickas i Authorization-headern som en Bearer-token.
Hämta din API-nyckel
- Logga in på arteza.ai
- Navigera till dina kontoinställningar
- Hitta API-sektionen
- Generera en ny API-nyckel
- Förvara den säkert, behandla den som ett lösenord
Commit aldrig din API-nyckel till versionskontrollen. Använd miljövariabler:
export SEEDANCE_API_KEY="your_api_key_here"
Autentiseringsheader
Varje anrop inkluderar:
Authorization: Bearer YOUR_SEEDANCE_API_KEY
Content-Type: application/json
Endpointstruktur
OmniHuman v1.5 API:et följer standardmönster för asynkron generering:
- POST för att skapa ett genereringsjobb
- GET för att pollar efter status och resultat
- Webhook för asynkron leverans (rekommenderas i produktion)
Bas-URL
https://api.arteza.ai/v1
Viktiga endpoints
| Metod | Sökväg | Syfte |
|---|---|---|
POST | /omnihuman/generate | Skicka in ett nytt genereringsjobb |
GET | /jobs/{job_id} | Pollar efter jobbstatus och resultat |
POST | /webhooks | Konfigurera webhook-endpoints |
Konsultera den aktuella Arteza API-dokumentationen för exakta endpoint-sökvägar, eftersom dessa kan förändras.
Skicka in ett genereringsjobb
Requeststruktur
{
"model": "omnihuman-v1.5",
"image_url": "https://example.com/portrait.jpg",
"audio_url": "https://example.com/speech.mp3",
"prompt": "Modern corporate office with soft natural lighting, medium close-up framing head and shoulders, professional broadcast style",
"resolution": "1080p",
"turbo_mode": false,
"webhook_url": "https://yourapp.com/webhooks/seedance"
}
Parameterreferens
| Parameter | Typ | Obligatorisk | Beskrivning |
|---|---|---|---|
model | sträng | Ja | Måste vara "omnihuman-v1.5" |
image_url | sträng | Ja | Offentligt tillgänglig URL till referensporträtt |
audio_url | sträng | Ja | Offentligt tillgänglig URL till ljudfil |
prompt | sträng | Ja | Scenbeskrivning för bakgrund, belysning och inramning |
resolution | sträng | Nej | "720p" eller "1080p" (standard: "720p") |
turbo_mode | boolean | Nej | Aktivera snabbare generering (standard: false) |
webhook_url | sträng | Nej | URL för att ta emot asynkront slutförandemeddelande |
Krav på indatafiler
Bild:
- Format: JPEG, PNG
- Upplösning: minst 512x512, 1024x1024 eller mer rekommenderas
- Tillgänglig via offentlig HTTPS-URL
Ljud:
- Format: MP3, WAV, M4A
- Varaktighet: högst 60 s för 720p, högst 30 s för 1080p
- Tillgänglig via offentlig HTTPS-URL
Om dina filer inte redan är offentligt tillgängliga, ladda upp dem till S3, Cloudflare R2, Google Cloud Storage eller liknande innan du gör API-anropet.
Exempelanrop i Python
import os
import requests
SEEDANCE_API_KEY = os.environ["SEEDANCE_API_KEY"]
BASE_URL = "https://api.arteza.ai/v1"
def create_omnihuman_video(image_url, audio_url, prompt,
resolution="1080p", turbo=False):
headers = {
"Authorization": f"Bearer {SEEDANCE_API_KEY}",
"Content-Type": "application/json",
}
payload = {
"model": "omnihuman-v1.5",
"image_url": image_url,
"audio_url": audio_url,
"prompt": prompt,
"resolution": resolution,
"turbo_mode": turbo,
}
response = requests.post(
f"{BASE_URL}/omnihuman/generate",
json=payload,
headers=headers,
)
response.raise_for_status()
return response.json()
job = create_omnihuman_video(
image_url="https://cdn.example.com/ceo.jpg",
audio_url="https://cdn.example.com/weekly-update.mp3",
prompt="Corporate office with warm lighting, medium close-up, professional style",
)
print(f"Job submitted: {job['job_id']}")
Exempelanrop i Node.js
import fetch from "node-fetch";
const SEEDANCE_API_KEY = process.env.SEEDANCE_API_KEY;
const BASE_URL = "https://api.arteza.ai/v1";
async function createOmnihumanVideo({
imageUrl,
audioUrl,
prompt,
resolution = "1080p",
turbo = false,
}) {
const response = await fetch(`${BASE_URL}/omnihuman/generate`, {
method: "POST",
headers: {
Authorization: `Bearer ${SEEDANCE_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "omnihuman-v1.5",
image_url: imageUrl,
audio_url: audioUrl,
prompt,
resolution,
turbo_mode: turbo,
}),
});
if (!response.ok) {
throw new Error(`Arteza API error: ${response.status}`);
}
return response.json();
}
const job = await createOmnihumanVideo({
imageUrl: "https://cdn.example.com/ceo.jpg",
audioUrl: "https://cdn.example.com/update.mp3",
prompt: "Modern office, soft lighting, medium close-up",
});
console.log(`Job submitted: ${job.job_id}`);
Svarsformat
{
"job_id": "job_abc123xyz",
"status": "queued",
"created_at": "2026-04-10T14:23:00Z",
"estimated_credits": 46
}
job_id är det du använder för polling eller för att korrelera webhook-leveranser.
Polling efter resultat
Om du inte använder webhooks, pollar du jobbstatus-endpointen tills jobbet är klart.
import time
def wait_for_video(job_id, timeout_seconds=600, poll_interval=5):
headers = {"Authorization": f"Bearer {SEEDANCE_API_KEY}"}
deadline = time.time() + timeout_seconds
while time.time() < deadline:
response = requests.get(
f"{BASE_URL}/jobs/{job_id}",
headers=headers,
)
response.raise_for_status()
data = response.json()
status = data["status"]
if status == "completed":
return data["result"]["video_url"]
if status == "failed":
raise Exception(f"Generation failed: {data.get('error')}")
time.sleep(poll_interval)
raise TimeoutError("Job did not complete within timeout")
video_url = wait_for_video(job["job_id"])
print(f"Video ready: {video_url}")
Jobbstatusvärden
| Status | Innebörd |
|---|---|
queued | Väntar på att starta |
processing | Generering pågår |
completed | Video klar, URL tillgänglig |
failed | Generering misslyckades, kontrollera felfältet |
Använda webhooks (rekommenderas i produktion)
Webhooks eliminerar polling och låter dig bygga händelsedrivna pipelines.
Konfigurera en webhook
Skicka med webhook_url i din genereringsanrop. Seedance POSTar till den URL:en när jobbet är klart.
Webhook-payload
{
"event": "job.completed",
"job_id": "job_abc123xyz",
"status": "completed",
"result": {
"video_url": "https://cdn.arteza.ai/outputs/video_abc123.mp4",
"resolution": "1080p",
"duration_seconds": 28.5
},
"credits_used": 46,
"completed_at": "2026-04-10T14:26:45Z"
}
Exempel på webhook-hanterare
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/webhooks/seedance", methods=["POST"])
def seedance_webhook():
payload = request.get_json()
if payload.get("event") == "job.completed":
job_id = payload["job_id"]
video_url = payload["result"]["video_url"]
# Din affärslogik: ladda ned video, meddela användare,
# trigga nedströmliga arbetsflöden osv.
handle_completed_video(job_id, video_url)
return jsonify({"received": True}), 200
Webhook-säkerhet
Verifiera webhook-signaturer om Arteza tillhandahåller en signeringshemlig nyckel. Kontrollera alltid att webhooks kommer från Arteza innan du agerar på dem.
Redo att prova OmniHuman v1.5? Börja skapa gratis →

Vill du ha en presentatör som den här? Prova OmniHuman gratis →
Produktionsmönster
Mönster 1: Pipeline för personaliserade säljvideor
Generera en video per prospekt med dynamiska skriptvariabler.
def generate_sales_video_for_prospect(prospect):
script = render_template("sales_template.txt", {
"first_name": prospect["first_name"],
"company": prospect["company"],
"trigger": prospect["trigger_event"],
})
audio_url = generate_tts(script)
job = create_omnihuman_video(
image_url=YOUR_SDR_PHOTO_URL,
audio_url=audio_url,
prompt=STANDARD_SCENE_PROMPT,
resolution="1080p",
)
return job["job_id"]
prospects = load_prospects_from_crm()
for prospect in prospects:
generate_sales_video_for_prospect(prospect)
Se guide för säljvideor för skriptning och distribution.
Mönster 2: Flerspråkig innehållsutrullning
Generera samma budskap på flera språk med samma foto.
languages = [
("en", "english_audio.mp3"),
("es", "spanish_audio.mp3"),
("pt", "portuguese_audio.mp3"),
("fr", "french_audio.mp3"),
("de", "german_audio.mp3"),
]
jobs = []
for lang_code, audio_file in languages:
audio_url = upload_to_cdn(audio_file)
job = create_omnihuman_video(
image_url=SPOKESPERSON_PHOTO_URL,
audio_url=audio_url,
prompt=STANDARD_PROMPT,
)
jobs.append((lang_code, job["job_id"]))
Se flerspråkig guide för tips om röster och översättning.
Mönster 3: Automatisering av dagliga nyhetssammanfattningar
Schemalagd pipeline som hämtar rubriker, genererar TTS och producerar en daglig video.
from datetime import datetime
def daily_news_digest():
headlines = fetch_top_headlines()
script = format_headlines_as_script(headlines)
audio_url = generate_tts(script, voice="broadcast_news")
job = create_omnihuman_video(
image_url=NEWS_ANCHOR_PHOTO_URL,
audio_url=audio_url,
prompt="Professional news studio, broadcast style, medium close-up",
resolution="720p",
)
return job["job_id"]
# Schemalägg via cron, Airflow eller ditt arbetsflödesverktyg
daily_news_digest()
Mönster 4: CMS-triggad videogenerering
När ett nytt blogginlägg eller en ny produkt publiceras genereras en tillhörande video.
@app.route("/cms/published", methods=["POST"])
def on_content_published():
content = request.get_json()
script = summarize_content(content["body"])
audio_url = generate_tts(script)
job = create_omnihuman_video(
image_url=BRAND_SPOKESPERSON_PHOTO,
audio_url=audio_url,
prompt=BRAND_SCENE_PROMPT,
webhook_url="https://yourapp.com/webhooks/seedance",
)
store_job_mapping(content["id"], job["job_id"])
return {"ok": True}
Bästa praxis för felhantering
Försök igen med exponentiell backoff
Nätverksfel och tillfälliga fel bör trigga nya försök, inte omedelbart avbrytande.
import time
def create_with_retry(params, max_retries=3):
delay = 2
for attempt in range(max_retries):
try:
return create_omnihuman_video(**params)
except requests.RequestException as e:
if attempt == max_retries - 1:
raise
time.sleep(delay)
delay *= 2
Validera indata innan du skickar
Spara krediter genom att validera innan varje API-anrop:
- Bild-URL returnerar 200 och content-type image/*
- Ljud-URL returnerar 200 och content-type audio/*
- Ljudets varaktighet är inom gränsen för vald upplösning
- Prompten är inte tom
Hantera hastighetsgränser
API:et tillämpar hastighetsgränser. Respektera 429-svar och backa av på lämpligt sätt.
Övervaka kreditbalansen
Kontrollera din kreditbalans innan stora batchkörningar. Att få slut på krediter mitt i en batch går att förhindra.
Kostnadshantering
En API-genererad video kostar 2,4 krediter per sekund ljud, det vill säga 72 krediter ($7.20) för 30 sekunder. Samma krediter som driver gränssnittet driver API:et:
| Plan | Pris | Krediter per månad | Effektiv kostnad per 30-sekunders anrop |
|---|---|---|---|
| Starter | $5 | 60 | ~$3.83 |
| Creator | $25 | 300 | ~$3.83 |
| Pro | $50 | 700 | ~$3.29 |
| Studio | $120 | 1 800 | ~$3.07 |
För tunga API-arbetsflöden ger Studio-planen bäst effektiv kostnad per generering. Se prisguide för mer information.
Beräkna projektkostnad
Innan du startar en batchkörning, beräkna den totala kostnaden:
total_cost = number_of_videos * 4.60
En batch med 1 000 videor à 30 sekunder: $7 200 till bashastigheten, och betydligt mindre på en månadsplan. Budgetera därefter.
API-pris = gränssnittspris. Inget tillägg.
Inga per-sätesavgifter och ingen API-nivålåsning. Starta en batch när du behöver det och lägg ner den när du inte gör det.
Hämta din API-nyckelObserverbarhet
För produktionsarbetsflöden, spåra dessa mätvärden:
- Framgångsfrekvens - andelen jobb som slutförs framgångsrikt
- Genomsnittlig genereringstid - för kapacitetsplanering
- Förbrukade krediter - rullande summor för budgetuppföljning
- Webhook-leveransfrekvens - upptäck webhook-leveransfel
- Felkategorisering - gruppera fel efter orsak
Logga jobb-ID:n tillsammans med dina interna korrelations-ID:n för felsökning.
Bästa praxis för säkerhet
- Exponera aldrig din API-nyckel på klientsidan. Anropa alltid API:et från din backend.
- Använd miljövariabler eller en hemlighetshanterare. Commit aldrig nycklar till versionskontrollen.
- Rotera nycklar regelbundet. Behandla dem som alla andra autentiseringsuppgifter.
- Verifiera webhook-signaturer när de finns tillgängliga.
- Använd HTTPS för alla bild- och ljud-URL:er du skickar till API:et.
- Avgränsa webhook-endpoints så att endast legitima Arteza-payloads bearbetas.
Kom igång med API:et
- Registrera dig för Arteza och samla dina 10 gratis krediter
- Prenumerera på minst Starter-planen ($5/månad) för att ha tillräckligt för en testgenerering
- Generera din API-nyckel i instrumentpanelen
- Förbered en testbild och en ljudfil och ladda upp dem till en offentlig URL
- Gör ditt första API-anrop med exemplen ovan
- Pollar eller vänta på webhook för att hämta video-URL:en
- Bygg din produktionspipeline
För relaterad läsning, se komplett guide för OmniHuman v1.5, prisöversikt, guide för säljvideor och flerspråkig guide.
Redo att prova OmniHuman v1.5? Börja skapa gratis →
Prova OmniHuman v1.5 - Just nu
Ladda upp ditt referensfoto på skapa-sidan.
5 gratis generationer · Inget kreditkort krävs