API видео
Видео в kosareva.cloud создаётся через POST /v1/videos, в форме видео-API OpenAI: задача, статус, готовый mp4. Ролик строится по описанию или по вашей картинке, цена известна до запуска.
Задача, статус, файл
Запрос ставит задачу, статус спрашивайте раз в 10–15 секунд, готовый ролик скачивается отдельным запросом.
# 1. Поставить задачу, в ответе id и status
curl https://api.kosareva.cloud/v1/videos \
-H "Authorization: Bearer ВАШ_API_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{"model":"seedance-2-mini","prompt":"Бариста рисует узор на латте, камера медленно наезжает","seconds":5,"resolution":"480p","aspect_ratio":"16:9"}'
# Ролик из картинки: input_reference станет первым кадром, last_frame последним
curl https://api.kosareva.cloud/v1/videos \
-H "Authorization: Bearer ВАШ_API_КЛЮЧ" \
-H "Content-Type: application/json" \
-d '{"model":"seedance-2-mini","prompt":"Камера облетает чашку","seconds":5,"resolution":"480p","input_reference":"https://example.com/first.jpg","last_frame":"https://example.com/last.jpg"}'
# 2. Спрашивать раз в 10–15 секунд, пока status не станет completed
curl https://api.kosareva.cloud/v1/videos/ID_ЗАДАЧИ \
-H "Authorization: Bearer ВАШ_API_КЛЮЧ"
# 3. Скачать ролик
curl https://api.kosareva.cloud/v1/videos/ID_ЗАДАЧИ/content \
-H "Authorization: Bearer ВАШ_API_КЛЮЧ" -o video.mp4
from openai import OpenAI
client = OpenAI(api_key="ВАШ_API_КЛЮЧ", base_url="https://api.kosareva.cloud/v1")
# Картинка файлом: так OpenAI SDK передаёт input_reference. SDK сам дождётся ролика.
video = client.videos.create_and_poll(
model="seedance-2-mini",
prompt="Бариста рисует узор на латте, камера медленно наезжает",
seconds="5",
input_reference=open("frame.jpg", "rb"),
)
if video.status == "failed":
raise SystemExit(video.error.message) # деньги за такой ролик возвращаются
client.videos.download_content(video.id).write_to_file("video.mp4")
Поля запроса
| Поле | Что это | Ограничения |
|---|---|---|
model | Видеомодель из каталога: Veo, Kling, Seedance, Hailuo, Grok Imagine, Wan, PixVerse | обязательно |
prompt | Описание сцены: кто в кадре, что происходит, как движется камера | обязательно. Предел свой у семейства: Veo, Grok Imagine и PixVerse до 5000 символов, Kling до 2500, Hailuo до 1500, Seedance и Wan до 20 000. Длиннее получит 400 до списания |
seconds, resolution, aspect_ratio | Длительность, качество, формат кадра; вместо двух последних можно передать size, как у OpenAI | свои у каждой модели, смотрите её карточку; значение не из списка заменяется ближайшим допустимым |
input_reference | Картинка первого кадра: файл в multipart/form-data, ссылка https:// или строка data:image/…;base64 | JPEG, PNG или WebP до 10 МБ; у Veo и Kling JPEG и PNG |
last_frame | Картинка последнего кадра | только вместе с input_reference; нет у Kling 2.6, Kling 3.0 Turbo и Grok Imagine Video |
reference_images | Список картинок-референсов: модель возьмёт из них внешность героя или предмета, но не сам кадр | Veo 3.1 Fast и Lite до 3 (ролик всегда 8 секунд), Grok Imagine Video до 7 (в 1080p одна), Seedance 2.x и Wan 3.0 до 9; с кадрами в одном запросе не сочетается |
Что важно знать
- Цена ролика известна до запуска и списывается при постановке задачи. Если модель не справилась, деньги возвращаются.
- Картинка на вход цену ролика не меняет. Если формат кадра не задан, он берётся по картинке. В ответе поле
input_imagesпоказывает, какие картинки дошли до генерации. - Картинку, которую модель не принимает, или файл не того формата сервер отклоняет с кодом 400 до списания, в тексте ошибки сказано, какие модели это умеют.
- Статус задачи:
queued,in_progress,completedилиfailed, у готовой естьcontent_url.GET /v1/videosотдаёт последние 20 задач, параметрlimitдо 100, следующая страница черезafter. При нехватке денег ответ 402 с ценой ролика и остатком. - То же без кода во вкладке «Видео» личного кабинета. Картинку там пока не загрузить, ролик строится по тексту.