Skip to content

Генерация видео

Ниже приведён перевод и адаптация официального руководства OpenAI Sora с сохранением структуры и примеров, адаптированных под AITUNNEL.

Обзор

Sora — новейшая видеомодель OpenAI, создающая детальные динамичные клипы с аудио по тексту или изображениям. Видео‑API (preview) открывает эти возможности: позволяет программно создавать, расширять и ремиксировать видео. Доступно три ключевых действия:

  • Создать видео (POST /v1/videos)
  • Получить статус (GET /v1/videos/{video_id})
  • Скачать видео (GET /v1/videos/{video_id}/content)

Модели

Sora 2

sora-2 — для скорости и гибкости. Подходит для быстрых итераций, концептов и соцсетей.

Sora 2 Pro

sora-2-pro — более стабильное и качественное выводимое видео. Подходит для продакшн‑задач и маркетинговых материалов.

Генерация видео

Генерация — асинхронный процесс:

  1. POST /v1/videos возвращает объект задания с id и начальным status
  2. Либо опрашивайте GET /v1/videos/{video_id}, либо используйте вебхуки
  3. После completed скачайте MP4 GET /v1/videos/{video_id}/content

Начать рендер (curl)

bash
curl -X POST "https://api.aitunnel.ru/v1/videos" \
  -H "Authorization: Bearer $AITUNNEL_API_KEY" \
  -H "Content-Type: multipart/form-data" \
  -F prompt="Wide tracking shot of a teal coupe driving through a desert highway, heat ripples visible, hard sun overhead." \
  -F model="sora-2-pro" \
  -F size="1280x720" \
  -F seconds="8"

Ответ (пример):

json
{
  "id": "video_68d7512d07848190b3e45da0ecbebcde004da08e1e0678d5",
  "object": "video",
  "created_at": 1758941485,
  "status": "queued",
  "model": "sora-2-pro",
  "progress": 0,
  "seconds": "8",
  "size": "1280x720"
}

Мониторинг прогресса

javascript
import OpenAI from 'openai';

const openai = new OpenAI({
  baseURL: 'https://api.aitunnel.ru/v1',
  apiKey: process.env.AITUNNEL_API_KEY
});

async function main() {
  const video = await openai.videos.createAndPoll({
    model: 'sora-2',
    prompt: "A video of the words 'Thank you' in sparkling letters",
  });

  if (video.status === 'completed') {
    console.log('Video successfully completed: ', video);
  } else {
    console.log('Video creation failed. Status: ', video.status);
  }
}

main();
python
import asyncio
import os
from openai import AsyncOpenAI

client = AsyncOpenAI(
    base_url="https://api.aitunnel.ru/v1",
    api_key=os.getenv("AITUNNEL_API_KEY")
)

async def main() -> None:
    video = await client.videos.create_and_poll(
        model="sora-2",
        prompt="A video of a cat on a motorcycle",
    )

    if video.status == "completed":
        print("Video successfully completed:", video)
    else:
        print("Video creation failed. Status:", video.status)

asyncio.run(main())

Примечание о вебхуках: на проде используйте вебхуки (video.completed, video.failed) вместо частого опроса.

Получение результатов

Скачать MP4 (curl)

bash
curl -L "https://api.aitunnel.ru/v1/videos/video_abc123/content" \
  -H "Authorization: Bearer $AITUNNEL_API_KEY" \
  --output video.mp4

Дополнительные ассеты (thumbnail, spritesheet)

bash
# thumbnail
curl -L "https://api.aitunnel.ru/v1/videos/video_abc123/content?variant=thumbnail" \
  -H "Authorization: Bearer $AITUNNEL_API_KEY" \
  --output thumbnail.webp

# spritesheet
curl -L "https://api.aitunnel.ru/v1/videos/video_abc123/content?variant=spritesheet" \
  -H "Authorization: Bearer $AITUNNEL_API_KEY" \
  --output spritesheet.jpg

Использование изображений как референсов

Прикрепите изображение в input_reference (разрешение должно совпадать с size). Поддержка: image/jpeg|png|webp.

javascript
import fs from 'node:fs';
import OpenAI from 'openai';

const openai = new OpenAI({
  baseURL: 'https://api.aitunnel.ru/v1',
  apiKey: process.env.AITUNNEL_API_KEY
});

const fileStream = fs.createReadStream('image.png');

const video = await openai.videos.create({
  model: 'sora-2-pro',
  prompt: 'She turns around and smiles, then slowly walks out of the frame.',
  size: '1280x720',
  seconds: '8',
  // пример передачи изображения как первого кадра
  input_reference: await OpenAI.toFile(fileStream, '832x480.png', { contentType: 'image/png' })
});

console.log(video.id, video.status);
python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.aitunnel.ru/v1",
    api_key=os.getenv("AITUNNEL_API_KEY")
)

with open("image.png", "rb") as img:
    video = client.videos.create(
        model="sora-2-pro",
        prompt="She turns around and smiles, then slowly walks out of the frame.",
        size="1280x720",
        seconds="8",
        input_reference=img,
    )

print(video.id, video.status)
bash
curl -X POST "https://api.aitunnel.ru/v1/videos" \
  -H "Authorization: Bearer $AITUNNEL_API_KEY" \
  -H "Content-Type: multipart/form-data" \
  -F prompt="She turns around and smiles, then slowly walks out of the frame." \
  -F model="sora-2-pro" \
  -F size="1280x720" \
  -F seconds="8" \
  -F input_reference="@sample_720p.jpeg;type=image/jpeg"

Ремикс готовых видео

Сделайте точечные правки без полного пересоздания. Передайте prompt c описанием изменения.

bash
curl -X POST "https://api.aitunnel.ru/v1/videos/video_abc123/remix" \
  -H "Authorization: Bearer $AITUNNEL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Shift the color palette to teal, sand, and rust, with a warm backlight."
  }'

Формат ответа (сводка)

json
{
  "id": "video_abc123",
  "object": "video",
  "status": "in_progress",
  "model": "sora-2",
  "progress": 33,
  "seconds": "8",
  "size": "1280x720"
}

Лучшие практики

  • Описывайте тип кадра, сюжет, действие, окружение и освещение
  • Используйте вебхуки вместо частого опроса
  • Соблюдайте guardrails: 18-, нет защищённых персонажей/музыки, без реальных лиц в input изображениях

API Reference (кратко)

  • POST /v1/videos — создать видео
    • Тело: prompt (string, required), model (string, default sora-2), seconds (string, default 4), size (string, default 720x1280)
    • Multipart (optional): input_reference (file, image/jpeg|png|webp)
  • GET /v1/videos/{video_id} — статус/метаданные
  • GET /v1/videos/{video_id}/content — скачать контент (variant: video|thumbnail|spritesheet)
  • POST /v1/videos/{video_id}/remix — ремикс готового видео (тело: prompt)

AITUNNEL