نص إلى فيديو
ابدأ بتعليمات نصية عندما لا تحتاج إلى وسائط مصدر. اختر seedance-2.0 أو seedance-2.5 وتحقق من إعدادات الإخراج الخاصة بالنموذج.
واجهات الفيديو
قارن واجهات فيديو Seedance لمسارات النص إلى فيديو والمسارات المعتمدة على المراجع. راجع المدخلات المدعومة والأسعار واستطلاع المهام واسترجاع الفيديو المكتمل.
تتم فوترة نماذج Seedance الحالية برموز الإكمال. تؤثر المدة في الاستخدام المقدر وليست وحدة التسوية. احتفظ بمعرّف المهمة لاسترجاع النتيجة أو الإبلاغ عن فشل.
مصمم لمهمة محددة
ابدأ بتعليمات نصية عندما لا تحتاج إلى وسائط مصدر. اختر seedance-2.0 أو seedance-2.5 وتحقق من إعدادات الإخراج الخاصة بالنموذج.
حرّك صورة بداية بتعليمات للحركة. استخدم دليل الصورة إلى فيديو للنموذج المختار بدلا من خلط حقول أنماط إدخال أخرى.
قدم إطارا أول وإطارا أخيرا عند الحاجة لتوجيه طرفي اللقطة. تحقق من أدوار الإطارات ومتطلبات الوسائط في دليل النموذج.
اجمع المراجع وفقا لأدوار الصور والفيديو والصوت الموثقة. يلزم مرجع صورة أو فيديو واحد على الأقل؛ ولا يكفي مرجع صوتي وحده.
وحدة الفوترة
بعملة USD لكل مليون رمز إكمال. يعتمد السعر المطبق على النموذج ودقة الإخراج وشروط مرجع الفيديو.
الحدود التشغيلية
أدلة التكامل
تغطية الدليل الحالية
قارن معرّفات API والعمليات والمزوّدين والأسعار. تحقق من تاريخ الدليل ووحدة فوترة كل عملية قبل تقدير تكاليف الاستخدام.
ولّد الفيديو باستخدام Seedance 2.0.
POST /v1/video/seedance مرجع إرسال مهمة فيديو GET /v1/jobs/{id} مرجع استطلاع المهام 480p · مع مرجع فيديو
السعر الرسمي
سعر API Hop التوفير 5%
480p · دون مرجع فيديو
السعر الرسمي
سعر API Hop التوفير 5%
720p · مع مرجع فيديو
السعر الرسمي
سعر API Hop التوفير 5%
720p · دون مرجع فيديو
السعر الرسمي
سعر API Hop التوفير 5%
1080p · مع مرجع فيديو
السعر الرسمي
سعر API Hop التوفير 5%
1080p · دون مرجع فيديو
السعر الرسمي
سعر API Hop التوفير 5%
4k · مع مرجع فيديو
السعر الرسمي
سعر API Hop التوفير 5%
4k · دون مرجع فيديو
السعر الرسمي
سعر API Hop التوفير 5%
لم يتم التحقق من السعر المرجعي بشكل مستقل. راجع أسعار الناشر الحالية ووحدات الفوترة والشروط المطبقة قبل مقارنة التكاليف.
ولّد الفيديو باستخدام Seedance 2.5.
POST /v1/video/seedance مرجع إرسال مهمة فيديو GET /v1/jobs/{id} مرجع استطلاع المهام 480p · مع مرجع فيديو
السعر الرسمي
سعر API Hop التوفير 2%
480p · دون مرجع فيديو
السعر الرسمي
سعر API Hop التوفير 2%
720p · مع مرجع فيديو
السعر الرسمي
سعر API Hop التوفير 2%
720p · دون مرجع فيديو
السعر الرسمي
سعر API Hop التوفير 2%
1080p · مع مرجع فيديو
السعر الرسمي
سعر API Hop التوفير 2%
1080p · دون مرجع فيديو
السعر الرسمي
سعر API Hop التوفير 2%
لم يتم التحقق من السعر المرجعي بشكل مستقل. راجع أسعار الناشر الحالية ووحدات الفوترة والشروط المطبقة قبل مقارنة التكاليف.
مثال طلب
ترسل أمثلة طلبات توليد الفيديو هذه مهمة Seedance 2.5 واحدة من نص إلى فيديو، وتحتفظ بـ jobId وتستطلع GET /v1/jobs/{jobId} ضمن مهلة محددة. استرجع outputResult بعد COMPLETED فقط؛ وعالج FAILED وCANCELLED بشكل منفصل. إنها أمثلة تكامل وليست عروض فيديو مولّدة.
# Requires bash, curl and jq. A polling timeout does not cancel the job.
set -euo pipefail
BASE_URL="https://api.apihop.ai"
API_KEY='YOUR_API_KEY'
created=$(curl --fail-with-body --silent --show-error --max-time 30 \
"$BASE_URL/v1/video/seedance" \
-H "Authorization: Bearer $API_KEY" -H 'Content-Type: application/json' \
--data '{"model":"seedance-2.5","prompt":"A calm city street at dawn","duration":5,"resolution":"720p"}')
job_id=$(printf '%s' "$created" | jq -er '.data.jobId | select(. != null) | tostring')
deadline=$((SECONDS + 600))
while (( SECONDS < deadline )); do
job=$(curl --fail-with-body --silent --show-error --max-time 30 \
"$BASE_URL/v1/jobs/$job_id" -H "Authorization: Bearer $API_KEY")
status=$(printf '%s' "$job" | jq -er '.data.status')
case "$status" in
COMPLETED) printf '%s' "$job" | jq -e '.data.outputResult'; exit 0 ;;
FAILED|CANCELLED) printf 'Job %s: %s\n' "$job_id" "$status" >&2; exit 1 ;;
esac
sleep 5
done
printf 'Polling timed out; retain jobId for a later status check: %s\n' "$job_id" >&2
exit 1const baseUrl = "https://api.apihop.ai";
const headers = { Authorization: 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' };
async function request(path, options = {}) {
const response = await fetch(baseUrl + path, { ...options, headers, signal: AbortSignal.timeout(30000) });
if (!response.ok) throw new Error('HTTP ' + response.status);
const result = await response.json();
if (result.success === false) throw new Error(JSON.stringify(result.error));
return result.data;
}
const created = await request('/v1/video/seedance', { method: 'POST', body: JSON.stringify({"model":"seedance-2.5","prompt":"A calm city street at dawn","duration":5,"resolution":"720p"}) });
if (!created?.jobId) throw new Error('Missing data.jobId');
const deadline = Date.now() + 10 * 60 * 1000;
let completed = false;
while (Date.now() < deadline) {
const job = await request('/v1/jobs/' + encodeURIComponent(created.jobId));
if (job.status === 'COMPLETED') {
if (job.outputResult == null) throw new Error('Completed job has no outputResult');
console.log(job.outputResult);
completed = true;
break;
}
if (['FAILED', 'CANCELLED'].includes(job.status)) throw new Error('Job ' + job.status);
await new Promise(resolve => setTimeout(resolve, 5000));
}
if (!completed) throw new Error('Polling timed out; retain jobId for a later status check: ' + created.jobId);import json
import time
import urllib.request
base_url = "https://api.apihop.ai"
headers = {'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json'}
def request(path, body=None):
data = json.dumps(body).encode() if body is not None else None
req = urllib.request.Request(base_url + path, data=data, headers=headers)
with urllib.request.urlopen(req, timeout=30) as response:
result = json.load(response)
if result.get('success') is False:
raise RuntimeError(result.get('error'))
return result['data']
created = request('/v1/video/seedance', json.loads("{\"model\":\"seedance-2.5\",\"prompt\":\"A calm city street at dawn\",\"duration\":5,\"resolution\":\"720p\"}"))
job_id = str(created['jobId'])
deadline = time.monotonic() + 600
while time.monotonic() < deadline:
job = request('/v1/jobs/' + job_id)
if job['status'] == 'COMPLETED':
if job.get('outputResult') is None:
raise RuntimeError('Completed job has no outputResult')
print(job['outputResult'])
break
if job['status'] in ('FAILED', 'CANCELLED'):
raise RuntimeError('Job ' + job['status'])
time.sleep(5)
else:
raise TimeoutError('Polling timed out; retain jobId for a later status check: ' + job_id) استخدم عنوان API الأساسي الوارد في وثائق حسابك واستبدل العناصر النائبة في المثال. أرسل مفتاح API في ترويسة Authorization؛ ولا تضعه مطلقا في URL أو ملف مضاف إلى المستودع.