أنشئ فيديوهات مزامنة الشفاه برمجياً عبر واجهة REST القوية
إدارة مفاتيح المصادقة الخاصة بك
امنح المفتاح اسماً يسهل تذكره (اختياري)
يتطلب تسجيل الدخول
يرجى تسجيل الدخول لإنشاء مفاتيح API وإدارتها.
ابدأ بخطط مرنة وتنافسية
ملاحظة: أرصدة API وأرصدة المستخدم منفصلة وغير قابلة للاستبدال.
أمّن طلبات API الخاصة بك
ضمِّن مفتاح API في ترويسة Authorization لجميع الطلبات:
Authorization: Bearer sk_XXXX_YYYY
نقاط نهاية RESTful
/api/v1/lipsync-videoاستبدال الصوت في فيديو موجود مع الحفاظ على مزامنة الشفاه
/api/v1/lipsync-imageصورة + صوت → فيديو أفاتار لمتحدث واحد
/api/v1/talking-avatarصورة + صوت + Prompt -> أفاتار متكلم مع تحكم في التعبير والحركة
/api/v1/lipsync-image-multiصورة + صوتان → أفاتار لعدة متحدثين (حوار/محادثة)
/api/v1/jobs/{requestId}استعلم عن حالة المهمة واسترجع النتيجة
المدخلات والخصوصية وتغطية النماذج وملاحظات الإنتاج
تقبل API العامة حاليًا روابط الوسائط داخل JSON. الرفع المباشر multipart ونقاط رفع الأصول غير متاحة بعد. الروابط الموقعة أو المؤقتة مدعومة ما دام بإمكان العمال ومزوّد التوليد جلبها أثناء تشغيل المهمة.
يتم تخزين مهام API بظهور خاص. مفتاح Public في الويب لا ينطبق على طلبات API، ولا يوجد حاليًا معامل API لنشر نتيجة توليد.
اختر سير العمل عبر endpoint: lipsync-image أو lipsync-video أو lipsync-image-multi. استخدم talking-avatar لنموذج الصورة مع التحكم في التعبير والحركة.
هذه الصفحة هي مرجع API الحالي. لم يتم نشر مواصفة OpenAPI/Swagger قابلة للقراءة آليًا حتى الآن.
نسبة العرض إلى الارتفاع و guidance scale و audio guidance غير مكشوفة كمعاملات API لنقاط lip-sync الحالية.
أرسل طلب API واحدًا لكل عملية توليد. للدُفعات الإنتاجية الكبيرة، أبقِ روابط الإدخال صالحة حتى الاكتمال وتواصل مع الدعم قبل تشغيل تزامن عالٍ جدًا.
مواصفات كاملة لنقاط النهاية
تتشارك جميع نقاط النهاية بنيةً عامة: باراميتر webhook اختياري ومعلمات formState خاصة بكل نموذج.
يستبدل الصوت في فيديو موجود مع الحفاظ على تزامن الشفاه
webhookاختياريعنوان URL لرد النداء (HTTPS). سنرسل النتيجة عبر POST عند الاكتمال.
formStateمطلوبكائن يحتوي جميع معلمات الإنشاء (انظر أدناه).
videoمطلوبعنوان URL عام للفيديو المصدر (MP4، MOV، إلخ)
audioمطلوبعنوان URL عام للصوت (MP3، WAV، إلخ)
resolutionمطلوب"360p" أو "480p" أو "720p" أو "1080p" أو "2k" أو "4k"
mask_imageاختياريعنوان URL عام لصورة القناع (يقيّد منطقة مزامنة الشفاه)
promptاختيارينص إرشادي للنمط
seedاختياريبذرة عددية للتكرارية
اختر كيفية استلام النتائج
جميع استدعاءات API غير متزامنة. لديك خياران لاسترجاع النتائج:
لمهام 1080p و2k و4k، تُرجع استجابات webhook وpolling نتيجة الفيديو النهائية بعد رفع الدقة فقط.
وفّر عنوان URL للـ webhook في JSON. سنرسل النتيجة عبر POST عند اكتمال المهمة.
يجب أن تكون روابط Webhook روابط HTTPS عامة. إذا فشل التسليم، نعيد المحاولة حتى 5 مرات بتراجع أسي.
احذف webhook واستخدم requestId المُعاد لاستقصاء GET /api/v1/jobs/{requestId} كل 5–10 ثوانٍ حتى تصبح الحالة "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:
{
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"status": "processing",
"message": "Task submitted successfully. Use requestId to query job status."
}
// 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
}POST /api/v1/talking-avatar
Authorization: Bearer sk_XXXX_YYYY
Content-Type: application/json
{
"webhook": "https://your-app.example.com/webhooks/lipsync",
"formState": {
"image": "https://.../character.png",
"audio": "https://.../speech.mp3",
"prompt": "Warm presentation style, natural facial expression, subtle head motion",
"resolution": "1080p"
}
}
// Completed webhook or polling response:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"model": "talking-avatar",
"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:
{
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"status": "processing",
"message": "Task submitted successfully. Use requestId to query job status."
}
// 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-image",
"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": "Generation failed. Please try again later.",
"executionTime": null,
"timings": null
}أمثلة تكامل جاهزة للاستخدام
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.requestId);
console.log('Waiting for webhook callback...');
// You don't need to poll! The result will be POSTed to your webhook.
}
submitJobWithWebhook();