AI Presenter Video

Проверенное видео с ИИ-ведущим из сценария и одного изображения.

Метаданные навыка

ИсточникОпциональный — устанавливается командой hermes skills install official/creative/ai-presenter-video
Путьoptional-skills/creative/ai-presenter-video
Версия1.0.0
Авторcclank (https://github.com/cclank/lanshu-create-ai-presenter-video), портировано Hermes Agent
ЛицензияMIT
Платформыlinux, macos
Тегиvideo, presenter, avatar, lipsync, tts, captions, creative
Связанные навыкиhyperframes, kanban-video-orchestrator, comfyui

Справочник: полный SKILL.md

инфо

Ниже — полное определение навыка, которое Hermes загружает при его срабатывании. Именно это агент видит как инструкции, когда навык активен.

AI Presenter Video

Превращает тему (или готовый сценарий) плюс ОДНО авторизованное изображение взрослого ведущего в законченное, готовое к публикации видео с ведущим: зафиксированная озвучка, генерация аватара с контролем липсинка, субтитры, детерминированный монтаж, мастер-версия и версия для соцсетей с нормализацией громкости, а также машинные и визуальные отчёты о приёмке.

Используйте навык и для новых видео с ведущим, И для продолжения, правки, добавления субтитров, починки липсинка или переэкспорта уже существующей задачи. Рабочий процесс не привязан к провайдеру: возможности генерации берутся из того, что реально доступно в сессии (видео- и image-модели FAL через image_generate и плагин генерации видео, TTS через text_to_speech, ASR через инструментарий whisper/STT, ffmpeg — для всего детерминированного).

Портировано из cclank/lanshu-create-ai-presenter-video (MIT). Тело апстрима сохранено по существу дословно в references/; адаптации для Hermes живут в этом хаб-файле. Скрипты детерминированы (без сети, без учётных данных).

Адаптации для Hermes (читать первыми)

  • Определение каталога навыка — апстрим жёстко прописывал путь к навыкам собственного агента. В Hermes загрузчик раскрывает ${HERMES_SKILL_DIR} в каталог, куда установлен этот навык, поэтому каждая команда ниже использует этот токен напрямую:

    SKILL_DIR="${HERMES_SKILL_DIR}"

    Переменные оболочки между вызовами инструментов не сохраняются — повторяйте присваивание (или уже раскрытый путь) в каждом терминальном вызове, где оно нужно.

  • Соответствие возможностей — там, где справочники говорят «возможность генерации голоса», используйте text_to_speech (OpenAI/Edge/ElevenLabs по конфигу пользователя); «генерация ведущего/аватара» → семейства image-to-video на FAL (Kling, Wan, MiniMax H3 и т. д.) через настроенный видеоинструментарий либо эндпоинт аватара/липсинка, к которому у пользователя есть доступ; «ASR с таймстампами слов» → whisper через STT-инструментарий или faster-whisper в venv; «детерминированный композитор» → фильтр-графы ffmpeg или навык hyperframes, если он установлен (в справочнике по монтажу есть раздел о HyperFrames, который ложится на него напрямую).

  • Визуальный контроль — шаги «визуальный просмотр на нормальной скорости» выполняйте через vision_analyze на сгенерированном контактном листе плюс выборочных кадрах (идентичность, тайминг рта, руки, моргание, непрерывность). Числовые проверки берутся из вывода ffprobe в скриптах.

  • Согласие на платную генерацию — удалённая генерация аватара/TTS платная. Следуйте правилам работы из апстрима: перед первым платным вызовом назовите загружаемые ресурсы, запрошенные секунды, известную стоимость, размер пилота и потолок повторов — и получите явное согласие пользователя. Никогда не загружайте изображение ведущего удалённому провайдеру, пока remote_upload_approved в job.json не равен true.

  • Флаги согласия живут под input — rights_confirmed, adult_presenter_confirmed, remote_upload_approved и voice_clone_approved лежат внутри объекта input в job.json (флаги init выставляют их; при ручной правке целиться нужно в input.*, а не в корень задачи). manual_input_review.* лежит в корне. preflight.py различает errors (блокируют всё) и remote_blockers (блокируют только удалённую генерацию) — локальная работа со скриптами и аудио может продолжаться, пока удалённая заблокирована.

Рабочий процесс

  1. Начните или возобновите задачу. Новая задача:

    python3 "$SKILL_DIR/scripts/init_job.py" \
      --job-dir ~/Videos/my-presenter-video \
      --presenter-image /path/to/presenter.png \
      --topic "explain context engineering in one minute" \
      --duration 60 --aspect 9:16 \
      --rights-confirmed --adult-presenter-confirmed

    Для готового файла сценария используйте --script; другие флаги: --voice-sample, --supporting-media, --width, --height, --fps, --watermark, --cta. Для существующей задачи прочитайте job.json и отчёты QA и возобновите работу с самого раннего незавершённого состояния — никогда не перегенерируйте принятую работу.

  2. Ручная проверка входных данных. Действительно посмотрите на изображение ведущего (vision_analyze) и послушайте образец голоса, если он есть; результаты зафиксируйте, выставив булевы поля manual_input_review в job.json, например:

    python3 - <<'PY'
    import json
    p = "~/Videos/my-presenter-video/job.json"  # раскройте ~ или используйте абсолютный путь
    import os; p = os.path.expanduser(p)
    j = json.load(open(p))
    j["manual_input_review"].update(image_viewed=True, single_clear_face=True,
                                    image_has_no_unwanted_text=True)
    json.dump(j, open(p, "w"), indent=2)
    PY

    Затем проверка-гейт:

    python3 "$SKILL_DIR/scripts/preflight.py" ~/Videos/my-presenter-video/job.json

    Продолжайте только при ok: true; удалённую генерацию запускайте только при remote_ready: true. Примечание: preflight также обновляет job.json на месте (записывает путь к отчёту) — после запуска перечитайте файл, а не правьте устаревшую копию.

  3. Зафиксируйте контент и аудио — прочитайте references/generation.md. Сценарий → полная озвучка через text_to_speech → сверка озвучки со сценарием через ASR → запись реальных длительностей. Зафиксированное аудио — главные часы для всего, что идёт дальше.

  4. Спланируйте и сгенерируйте ведущего — прочитайте references/generation.md. Сначала короткий дешёвый пилот; полный прогон только после того, как пилот прошёл проверку идентичности и тайминга рта.

  5. Смонтируйте — прочитайте references/editing.md. Детерминированная таймлиния, ведомая зафиксированным аудио; субтитры и выноски с ключевыми словами — только после того, как аудио и медиа финализированы.

  6. Проверьте и отдайте результат — прочитайте references/qa-recovery.md, отрендерьте, затем:

    bash "$SKILL_DIR/scripts/finalize_delivery.sh" \
      ~/Videos/my-presenter-video/renders/rendered.mp4 \
      ~/Videos/my-presenter-video/outputs my-video

    Финализатор сохраняет соотношение сторон, выполняет двухпроходную нормализацию громкости (программа ≈ −16 LUFS), создаёт мастер-версию и версию для соцсетей, проверяет декодирование обеих, пишет JSON-отчёт о доставке и выдаёт контактный лист из девяти кадров. Перед тем как объявить работу завершённой, осмотрите контактный лист через vision_analyze.

Правила работы (не обсуждаются)

  • Подтверждайте права на изображение, совершеннолетие, согласие на удалённую загрузку и разрешение на клонирование голоса до соответствующего удалённого действия.
  • Никогда не выводите и не клонируйте голос реального человека по изображению; используйте авторизованный образец или стоковый голос TTS.
  • Фиксируйте полную озвучку до генерации ведущего, тайминга субтитров и окончательных границ сцен.
  • В финальной композиции видеоисточники без звука; аудио несут только одобренная озвучка и намеренные дорожки микса.
  • Сохраняйте тела запросов к провайдеру и ID задач (без учётных данных и истекающих URL). Прежде чем отправлять заново, опросите прерванную работу — избегайте двойного списания.
  • Остановитесь после трёх отклонённых платных кандидатов и опишите характер сбоя.
  • Не объявляйте работу завершённой, пока финальные файлы не декодируются полностью и не просмотрен контактный лист или полное воспроизведение.

Значения по умолчанию при минимальном вводе

9:16, 1080×1920, 30fps; видео по теме целятся в 45–75 с; стоковый голос, если нет авторизованного образца; раскладка с ведущим в кадре: хук → 2–4 бита → концовка; без музыки и CTA, если не просили; язык выводится из запроса.

Маршрутизация по справочникам

  • references/generation.md — приём входных данных, контент, голос, выбор возможностей, промпты для ведущего, платная генерация, смена провайдера.
  • references/editing.md — контракт таймлинии, вступления/концовки, субтитры, пресеты выносок с ключевыми словами, композиция в HyperFrames, экспорт.
  • references/qa-recovery.md — техническая приёмка, визуальная приёмка и восстановление после дефектов липсинка/идентичности/рук/экспозиции/ зависаний/субтитров/аудио.

Подводные камни

  • preflight.py требует ffprobe; на голой машине сначала установите ffmpeg.
  • Булевы поля согласия, выставленные флагами init, ложатся под input.*; правка их в корне job-json молча ничего не делает (preflight продолжает блокировать).
  • finalize_delivery.sh нуждается в bash + jq + awk и в полностью декодируемом входе — обрезанный рендер не проходит проверку декодирования намеренно, а не случайно.
  • Длинные клипы с аватаром «уплывают»: предпочитайте один непрерывный источник с ведущим, нарезанный по аудио-таймлинии, множеству перегенерированных клипов по главам (дрейф идентичности между перегенерациями — провал номер один при визуальном контроле).
  • Эндпоинты i2v на FAL ограничивают длительность (обычно 5–15 с); планируйте сегменты с ведущим на уровне глав соответственно и переиспользуйте seed и параметры пилота ради согласованности там, где эндпоинт это поддерживает.

Проверка

Проверено вручную (август 2026): init_job.py → job.json с корректной машиной состояний; preflight.py правильно блокировал непроверенные входные данные, переключился на ok: true после булевых полей проверки и держал remote_ready: false до input.remote_upload_approved; finalize_delivery.sh на синтетическом рендере 5 с 1080×1920 выдал мастер-версию с проверенным декодированием (631 кбит/с) и версию для соцсетей, JSON-отчёт о доставке и контактный лист из 9 кадров, код выхода 0.

перевод и редактура:

обновлено

⌕ ESC