رفتن به محتوا
سارویتوسعه‌دهندگان
مستندات/تصویر، ویدیو و صدا

تولید و دریافت ویدیو

ثبت کار ویدیویی، بررسی وضعیت همان کار و دریافت نتیجه.

ویدیو یک کار پس‌زمینه است

POST /v1/studio/video پس از پذیرش کار HTTP 202 می‌دهد. id مربوط به درخواست ساروی و providerJobId مربوط به کار ارائه‌دهنده را نگه دارید. پاسخ پذیرفته‌شدن، فایل ویدیوی آماده نیست.

Python
import json, os, urllib.request, urllib.error

payload = {
    "model": "bytedance/seedance-2.5",
    "prompt": "نمای نزدیک گل‌های بهاری، حرکت آرام دوربین و نور صبح",
    "duration": 4,
    "resolution": "480p",
    "aspectRatio": "16:9",
    "generateAudio": False
}

request = urllib.request.Request(
    "https://api.sarovi.ir/v1/studio/video",
    data=json.dumps(payload, ensure_ascii=False).encode("utf-8"),
    headers={
        "Authorization": "Bearer " + os.environ["SAROVI_API_KEY"],
        "Content-Type": "application/json"
    },
    method="POST"
)
try:
    with urllib.request.urlopen(request, timeout=300) as response:
        result = json.load(response)
        print(result)
except urllib.error.HTTPError as error:
    detail = json.load(error)
    raise RuntimeError(f"{error.code}: {detail['error'].get('code', detail['error'].get('type', 'HTTP_ERROR'))}") from error

کلید را در متغیر محیطی SAROVI_API_KEY قرار بده. بدون نصب کتابخانه؛ با Python استاندارد.

بررسی وضعیت

به POST /v1/studio/video/status بدنهٔ شامل id و providerJobId بدهید. تنها همان پروژه می‌تواند کار ثبت‌شدهٔ خود را پیگیری کند. برای polling فاصلهٔ چندثانیه‌ای بگذارید و با طولانی شدن کار فاصله را بیشتر کنید. برای بررسی وضعیت، درخواست تولید دوباره نفرستید.

Python
import json, os, urllib.request, urllib.error

payload = {
    "id": "SAROVI_JOB_ID",
    "providerJobId": "PROVIDER_JOB_ID"
}

request = urllib.request.Request(
    "https://api.sarovi.ir/v1/studio/video/status",
    data=json.dumps(payload, ensure_ascii=False).encode("utf-8"),
    headers={
        "Authorization": "Bearer " + os.environ["SAROVI_API_KEY"],
        "Content-Type": "application/json"
    },
    method="POST"
)
try:
    with urllib.request.urlopen(request, timeout=300) as response:
        result = json.load(response)
        print(result)
except urllib.error.HTTPError as error:
    detail = json.load(error)
    raise RuntimeError(f"{error.code}: {detail['error'].get('code', detail['error'].get('type', 'HTTP_ERROR'))}") from error

کلید را در متغیر محیطی SAROVI_API_KEY قرار بده. بدون نصب کتابخانه؛ با Python استاندارد.

دریافت ویدیو

بعد از completed، همین بدنه را به POST /v1/studio/video/content بفرستید. خروجی باینری رسانه است؛ آن را با روش دریافت فایل ذخیره کنید. Content-Type پاسخ را برای تشخیص نوع فایل بخوانید. در وضعیت failed پیام خطا را بررسی کنید و درخواست تولید تازه را فقط در صورت تصمیم آگاهانه بسازید.

مدت، وضوح و مرجع

قرارداد عمومی مدت ۱ تا ۳۰ ثانیه و وضوح 480p/720p/1080p دارد، ولی هر مدل ترکیب مجاز خودش را دارد. referenceMode برای guide یا frames و references برای تصاویر مرجع استفاده می‌شود. تنظیم نامعتبر پیش از رزرو و ساخت بررسی می‌شود.

قیمت

رزرو ویدیو از مدل، مدت، وضوح و تنظیمات محاسبه می‌شود. هزینهٔ نهایی می‌تواند پس از بررسی وضعیت تسویه شود. برای Seedance 2.5 همان سیاست قیمت‌گذاری فعلی Studio اعمال می‌شود. اعتبار و پرداخت تفاوت رزرو و تسویه را توضیح می‌دهد.

قرارداد API 1.6.0 · تاریخچهٔ تغییرات