Фото → видео с озвучкой

Полный production pipeline: фотография → озвучка → говорящий аватар. Запросы ElevenLabs TTS, Kling Avatar и OmniHuman, котировка, статусы задач, повторы и сроки хранения результата.

Реальная цепочка клиента: фото → озвучка → говорящий аватар. Все задачи создаются асинхронно; API-ключ передавайте как Authorization: Bearer $PLUSVIBE_API_KEY. Каждый шаг сначала котируйте через POST /api/media/price, затем запускайте с тем же набором полей и полученным quote_id через POST /api/media/generate.

1. Синтез речи

Основной запрос использует публичную модель elevenlabs-v4-tts. Рабочий маршрут — Flow; поле engine принимает v4 или turbo и выбирает ElevenLabs v4 / v4 Turbo. Голоса: Rachel, Aria, Roger, Sarah, Laura, Charlie, George, Callum, River, Liam, Charlotte, Alice, Matilda, Will, Jessica, Eric, Chris, Brian, Daniel, Lily, Bill; вместо списка можно передать свой voice_id. prompt — строка 1–5000 символов. language_code: auto, ru, en, de, fr, es, it, pt, pl, uk, tr, zh, ja, ko. stability и similarity_boost — числа 0–1; output_format: mp3, mp3_hq, opus; apply_text_normalization: auto/on/off; seed — целое 0–4294967295.

{
  "model": "elevenlabs-v4-tts",
  "prompt": "Здравствуйте! Расскажу, что нового.",
  "opts": {"engine": "turbo", "voice": "Rachel", "language_code": "ru", "stability": 0.5, "similarity_boost": 0.75, "output_format": "mp3", "apply_text_normalization": "auto", "seed": 42}
}

Поля engine, voice, language_code, output_format и числовые параметры проверяются до отправки. Успешный ответ: {"ok":true,"jobId":"job_…","status":"submitting","model":"elevenlabs-v4-tts"}. Опрос GET /api/media/jobs/{jobId} возвращает submitting → processing → success или fail; после success возьмите resultUrls[0] как audio URL для следующего шага.

Цена считается пропорционально числу символов по текущему тарифу выбранного engine; перед созданием используйте quote response. Альтернативы модели tts: minimax-turbo, minimax-hd, qwen3, gemini-flash. Устаревшие варианты ElevenLabs Turbo 2.5 и Multilingual v2 на прежнем маршруте выключены.

2. Фото + аудио → говорящий аватар

Выберите kling-ai-avatar (tier std 720p или pro 1080p) либо omnihuman-v1.5 (720p/1080p). Поля image_url и audio_url обязательны; каждое принимает публичный HTTP(S), data URI или ID собственного файла из POST /v1/files. Upload ограничен 50 MiB. Разрешённый MIME и максимальную длительность определяет выбранный endpoint; общий API schema числовой лимит не задаёт, поэтому не используйте длинное аудио и предварительно проверяйте quote. Kling Avatar тарифицируется по фактической длине входного аудио; OmniHuman — по фактической длительности результата, 1080p менее 30 с и 720p менее 60 с.

{
  "model": "kling-ai-avatar",
  "prompt": "",
  "quote_id": "mq_…",
  "max_price_rub": 40,
  "opts": {"tier": "std", "image_url": "https://example.com/portrait.jpg", "audio_url": "https://example.com/elevenlabs.mp3"}
}

Немедленный ответ создания — HTTP 202 и JSON {"ok":true,"jobId":"job_…","status":"submitting","priceRub":12.34,"resultsExpireAt":null}. Опрос возвращает: processing — {"status":"processing","stage":"generating","resultUrls":[],"failure":null}; success — {"status":"success","stage":"completed","resultUrls":["https://plusvibeapi.ru/media/r/…/0.mp3"],"priceRub":12.34,"resultsExpireAt":"…","failure":null}; fail — {"status":"fail","stage":"failed","failReason":"provider_overloaded","failure":{"code":"provider_overloaded","advice":"retry_later","definitive":true,"charged":false}}. Первая проверка статуса может быть submitting, затем processing. Файлы хранятся 7 дней после completion; скачайте до resultsExpireAt, иначе получите 410 media_result_expired.

curl https://plusvibeapi.ru/api/media/generate   -H "Authorization: Bearer $PLUSVIBE_API_KEY" -H 'Content-Type: application/json'   -d '{"model":"kling-ai-avatar","prompt":"","opts":{"tier":"std","image_url":"https://example.com/portrait.jpg","audio_url":"https://example.com/tts-result.mp3"}}'

Цитата цены, ожидание и повторы

POST /api/media/price возвращает {"ok":true,"priceRub":12.34,"quoteId":"mq_…","expiresAt":"…"}. Передайте тот же quote_id и max_price_rub не меньше quote. Невалидный ceiling → 400 invalid_max_price_rub; quote выше ceiling → 422 media_max_price_exceeded; недостаток средств под ceiling → 402 media_max_price_unfunded. Idempotency-Key длиной 1–255 ASCII повторяет тот же job в течение 24 часов; другой body → 422 idempotency_key_reused, одновременная отправка → 409 idempotency_key_in_progress с Retry-After: 5, плохой ключ → 400. При submission_outcome_unknown не отправляйте дубль: продолжайте polling; при definitive retry_later можно создать новую задачу после backoff. Ошибки fix_input требуют изменения входа, choose_other_route — другой модели.

SkyReels: фото и голос

Для говорящего аватара передайте либо image_url + audio_url, либо reference_image_urls (1–5 фото) + audio_url. Длительность видео — целое число 3–15, 480P/720P/1080P; video_mode — reference или extend. Для audio_url общий generate schema принимает URL/data URI/file ID. Платный SkyReels createTask в этой проверке не выполнялся.

Veo 3.1

Google называет семейство Veo 3.1 и указывает генерацию видео с нативным звуком. В этом API переключателя аудио нет; отправляем ровно разрешённые поля контракта. Точная цена по модели, тарифу и разрешению — результат POST /api/media/price, без фиксированной суммы в этом руководстве.

ПараметрТипОписание
Lite — Google Veo 3.1 Lite previewveo3_lite4/6/8 с; 720p ₽18,86 / 1080p ₽22,00 / 4K ₽94,29 при FX 88; TEXT_2_VIDEO, FIRST_AND_LAST_FRAMES_2_VIDEO, REFERENCE_2_VIDEO; audio track: да (ffprobe: AAC в завершённом prod MP4)
Fast — Google Veo 3.1 Fastveo3_fast4/6/8 с; 720p ₽37,71 / 1080p ₽40,86 / 4K ₽113,14 при FX 88; TEXT_2_VIDEO, FIRST_AND_LAST_FRAMES_2_VIDEO, REFERENCE_2_VIDEO; audio track: да (Veo 3.1 family)
Quality — Google Veo 3.1veo34/6/8 с; 720p ₽157,14 / 1080p ₽160,29 / 4K ₽238,86 при FX 88; TEXT_2_VIDEO и FIRST_AND_LAST_FRAMES_2_VIDEO; audio track: да (Veo 3.1 family)

При текущем RU курсе 88 ₽/$ price function даёт для 720p: Lite — 18,86 ₽, Fast — 37,71 ₽, Quality — 157,14 ₽. Это именно quote, а не фиксированная цена: перед каждой задачей получите сумму через POST /api/media/price; US использует USD. Veo reference mode требует ровно 8 секунд; imageUrls — 1–3 URL. Дополнительные поля вроде audio, seed или watermark отклоняются. Полные ограничения см. в генерации медиа и webhook.

Фото → видео с озвучкой API — TTS и говорящий аватар | PlusVibe API