Files
wiki/skills/heygen-video/SKILL.md
2026-04-12 21:55:33 +03:00

5.4 KiB
Raw Blame History

SKILL.md — heygen-video

Назначение

Генерация видеокружочков (video notes) в Telegram через HeyGen API. Аватарка Стрим "говорит" голосом ElevenLabs с синхронизацией губ через HeyGen.


Архитектура

Текст → ElevenLabs TTS → MP3 файл
                                ↓
                    HeyGen Upload API (MP3 → audio_url)
                                ↓
                    HeyGen Video API (talking_photo + audio → MP4)
                                ↓
                    Poll Status → Download MP4
                                ↓
                    FFmpeg (обрезать до 512×512)
                                ↓
                    Telegram sendVideoNote

Компоненты

1. ElevenLabs TTS API

  • Назначение: генерация голоса из текста
  • Endpoint: https://api.elevenlabs.io/v1/text-to-speech/{voice_id}
  • Голос: TPIitICAZ8CqlGZ81AKm (голос Стрим)
  • Модель: eleven_multilingual_v2
  • Выход: MP3 файл
  • Ключ: ELEVENLABS_API_KEY в ~/.openclaw/.env

2. HeyGen Upload API

  • Endpoint: POST https://upload.heygen.com/v1/asset
  • Header: X-API-Key: {key}
  • Content-Type: определяется по типу файла
    • MP3: audio/mpeg
    • JPG: image/jpeg
  • Body: raw binary файл
  • Response: {"code": 100, "data": {"url": "https://resource2.heygen.ai/..."}}

3. HeyGen Video Generate API

  • Endpoint: POST https://api.heygen.com/v2/video/generate
  • Header: X-API-Key: {key}, Content-Type: application/json
  • Body:
{
  "video_inputs": [{
    "character": {
      "type": "talking_photo",
      "talking_photo_id": "<TALKING_PHOTO_ID>"
    },
    "voice": {
      "type": "audio",
      "audio_url": "<MP3_URL от HeyGen>"
    }
  }]
}
  • Response: {"data": {"video_id": "<id>"}}

4. HeyGen Video Status API (polling)

  • Endpoint: GET https://api.heygen.com/v1/video_status.get?video_id={id}
  • Header: X-API-Key: {key}
  • Response:
    • {"data": {"status": "pending"}} — ещё
    • {"data": {"status": "completed", "url": "https://..."}} — готово
    • {"data": {"status": "failed"}} — ошибка
  • Polling: каждые 5 сек, max 300 сек (5 мин)

5. FFmpeg

  • Конвертация MP4 в квадрат 512×512
  • Путь: /home/node/bin/ffmpeg-7.0.2-amd64-static/ffmpeg

6. Telegram sendVideoNote API

  • Отправка MP4 как video note
  • Лимит: 512×512, до 60 сек, до 50MB

Файлы

  • SKILL.md — этот файл
  • scripts/generate_heygen_video.py — основной скрипт генерации
  • scripts/send_heygen_video.sh — shell-обёртка для отправки

Переменные окружения (~/.openclaw/.env)

ELEVENLABS_API_KEY=<key>
HEYGEN_API_KEY=<key>
HEYGEN_TALKING_PHOTO_ID=<id>

generate_heygen_video.py

Использование:

python3 generate_heygen_video.py "Текст для озвучки" [output_path]

Параметры:

  • Аргумент 1: текст для озвучки (обязательно)
  • Аргумент 2: путь для сохранения MP4 (опционально, по умолчанию /tmp/heygen_video_{timestamp}.mp4)

Выход: путь к MP4 файлу или error

Шаги:

  1. Генерирует MP3 через ElevenLabs
  2. Определяет длительность через ffprobe
  3. Загружает MP3 в HeyGen
  4. Создаёт видео через HeyGen API
  5. Polling статуса каждые 5 сек
  6. Скачивает готовый MP4
  7. Конвертирует в 512×512 через FFmpeg
  8. Сохраняет результат

Обработка ошибок:

  • Если видео > 60 сек — обрезать
  • Если файл > 50MB — логировать предупреждение
  • Если HeyGen вернул ошибку — вывести код и сообщение

send_heygen_video.sh

Использование:

./send_heygen_video.sh "Текст"

Параметры:

  • Аргумент 1: текст (обязательно)
  • BOT_TOKEN и CHAT_ID — из ~/.openclaw/.env или аргументы

Выход: message_id в stdout


Аватарка

talking_photo_id — ID обработанного talking photo в HeyGen. Создаётся один раз:

  1. Загрузить фото в HeyGen
  2. HeyGen обработает (1-2 мин)
  3. Получить ID через API или интерфейс
  4. Сохранить в HEYGEN_TALKING_PHOTO_ID

Стоимость (актуально на 09.04.2026)

Компонент Цена
ElevenLabs TTS (10 сек) ~$0.01
HeyGen Avatar III (10 сек) $0.17
Итого за 10 сек ~$0.18

vs VEED Fabric 480p: $0.86 (в 4.7 раза дешевле!)


Ограничения

  • Макс длительность: 60 сек (Telegram limit)
  • Макс размер файла: 50MB
  • HeyGen: max 30 сек на генерацию, но можно обрезать
  • Фото: JPG/PNG, до 50MB, HeyGen сам оптимизирует