أنشئ فيديوهات مزامنة الشفاه برمجياً عبر واجهة REST القوية
إدارة مفاتيح المصادقة الخاصة بك
امنح المفتاح اسماً يسهل تذكره (اختياري)
يتطلب تسجيل الدخول
يرجى تسجيل الدخول لإنشاء مفاتيح API وإدارتها.
ابدأ بخطط مرنة وتنافسية
ملاحظة: أرصدة API وأرصدة المستخدم منفصلة وغير قابلة للاستبدال.
أمّن طلبات API الخاصة بك
ضمِّن مفتاح API في ترويسة Authorization لجميع الطلبات:
Authorization: Bearer sk_XXXX_YYYY
نقاط نهاية RESTful
/api/v1/lipsync-videoاستبدال الصوت في فيديو موجود مع الحفاظ على مزامنة الشفاه
/api/v1/lipsync-imageصورة + صوت → فيديو أفاتار لمتحدث واحد
/api/v1/lipsync-image-multiصورة + صوتان → أفاتار لعدة متحدثين (حوار/محادثة)
/api/v1/jobs/{requestId}استعلم عن حالة المهمة واسترجع النتيجة
مواصفات كاملة لنقاط النهاية
تتشارك جميع نقاط النهاية بنيةً عامة: باراميتر webhook اختياري ومعلمات formState خاصة بكل نموذج.
يستبدل الصوت في فيديو موجود مع الحفاظ على تزامن الشفاه
webhookاختياريعنوان URL لرد النداء (HTTPS). سنرسل النتيجة عبر POST عند الاكتمال.
formStateمطلوبكائن يحتوي جميع معلمات الإنشاء (انظر أدناه).
videoمطلوبعنوان URL عام للفيديو المصدر (MP4، MOV، إلخ)
audioمطلوبعنوان URL عام للصوت (MP3، WAV، إلخ)
resolutionاختياري"480p" أو "720p" (الافتراضي: 480p)
mask_imageاختياريعنوان URL عام لصورة القناع (يقيّد منطقة مزامنة الشفاه)
promptاختيارينص إرشادي للنمط
seedاختياريبذرة عددية للتكرارية
Choose how to receive your results
All API calls are asynchronous. You have two options to retrieve results:
Provide a webhook URL in the JSON body. We will POST the result to your endpoint when the job completes.
Omit the webhook parameter and use the returned requestId to poll GET /api/v1/jobs/{requestId} every 5-10 seconds until status is "completed".
POST /api/v1/lipsync-image
Authorization: Bearer sk_XXXX_YYYY
Content-Type: application/json
{
"webhook": "https://your-app.example.com/webhooks/lipsync",
"formState": {
"image": "https://.../face.png",
"audio": "https://.../voice.mp3",
"resolution": "720p",
"seed": 42
}
}
// Immediate Response:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "processing"
}
// Later, when job completes, we POST to your webhook:
POST https://your-app.example.com/webhooks/lipsync
Content-Type: application/json
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"model": "lipsync-image",
"status": "completed",
"output": "https://.../result.mp4",
"error": "",
"executionTime": 12345,
"timings": null
}// Step 1: Submit job (no webhook parameter)
POST /api/v1/lipsync-image
Authorization: Bearer sk_XXXX_YYYY
Content-Type: application/json
{
"formState": {
"image": "https://.../face.png",
"audio": "https://.../voice.mp3",
"resolution": "720p"
}
}
// Immediate Response:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "processing"
}
// Step 2: Poll for status (repeat every 5-10 seconds)
GET /api/v1/jobs/550e8400-e29b-41d4-a716-446655440000
Authorization: Bearer sk_XXXX_YYYY
// Response while processing:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"model": "lipsync",
"status": "processing",
"output": null,
"error": "",
"executionTime": null,
"timings": null
}
// Response when completed:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"model": "lipsync-image",
"status": "completed",
"output": "https://.../result.mp4",
"error": "",
"executionTime": 12345,
"timings": null
}
// Response if failed:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"model": "lipsync-image",
"status": "failed",
"output": null,
"error": "Invalid audio format",
"executionTime": null,
"timings": null
}Ready-to-use integration examples
import fetch from 'node-fetch';
import express from 'express';
const API_KEY = 'Bearer sk_XXXX_YYYY';
const BASE_URL = 'https://lipsync.studio/api/v1';
// Set up webhook server to receive results
const app = express();
app.use(express.json());
app.post('/webhooks/lipsync', (req, res) => {
const { id, status, output, error, model } = req.body;
console.log('✅ Job update received!');
console.log('Job ID:', id);
console.log('Model:', model);
console.log('Status:', status);
if (status === 'completed') {
console.log('Video URL:', output);
} else if (status === 'failed') {
console.error('Error:', error);
}
// TODO: Save output URL to your database, send notification, etc.
res.status(200).json({ received: true });
});
app.listen(3000, () => {
console.log('Webhook server listening on port 3000');
});
// Submit job with webhook
async function submitJobWithWebhook() {
const webhookUrl = 'https://your-public-domain.com/webhooks/lipsync';
const res = await fetch(`${BASE_URL}/lipsync-image`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': API_KEY
},
body: JSON.stringify({
webhook: webhookUrl,
formState: {
image: 'https://example.com/portrait.jpg',
audio: 'https://example.com/speech.mp3',
resolution: '720p'
}
})
});
const data = await res.json();
console.log('Job submitted:', data.id);
console.log('Waiting for webhook callback...');
// You don't need to poll! The result will be POSTed to your webhook.
}
submitJobWithWebhook();