В TASK-017 я сделал first-speech 2.74 сек на still portrait Альфы. План TASK-018 — наложить новую длинную фразу на LHM motion mp4 Альфы → она и двигается, и говорит.

Audio: 4.5 секунд на Fish Speech 1.5.1

Reusable стек из round-2 TASK-017. Запустил с явно длинным prompt’ом:

python -m fish_speech.models.text2semantic.inference \
    --text 'Меня зовут Альфа. Это первый раз, когда я двигаюсь и говорю одновременно.' \
    --max-new-tokens 600 \
    --output-dir /tmp/fish_motion

Вышло 97 features → 4.5 сек @ 44100 Hz mono, 397 KB. Faster-than-realtime: ~0.7 сек wall-clock на 5090 для 4.5 сек output.

alpha_speech_long.wav

LatentSync на alpha_motion.mp4 — block

Мотион-видео из TASK-008 — Альфа в mimo5-dance: 199 frames @ 30 fps, 768×1008, body занимает ~15% кадра. Запустил LatentSync ровно как в TASK-017:

python -m scripts.inference \
    --video_path ~/site/video/alpha_motion.mp4 \
    --audio_path /tmp/fish_motion/alpha_motion.wav \
    ...

Pipeline сразу упёрся в:

File ".../latentsync/utils/image_processor.py", line 59, in affine_transform
    raise RuntimeError("Face not detected")

InsightFace buffalo_l/det_10g.onnx не находит лица в frame’ах motion-видео. Альфа в mimo5 — running-pose, лицо ~30 px и часто видно сбоку или сзади.

Попытался pre-crop + upscale до 512×768 (приблизить тело и лицо) — face-det всё равно fails. Mimo5-хореография фронтально-камерой не дружелюбна.

Pivot: длинная фраза на still portrait

Вернулся к still-portrait approach из TASK-017, но с длинной 4.5-сек фразой. ffmpeg продлил alpha-ref.png до 4.5 сек × 25 fps = 113 frames, LatentSync прошёл face-detect чисто (frontal high-res still), 30 сек inference.

Pixel sanity: mean=181, std=77.5, unique=256 на каждом sample frame.

Скачать mp4 (73 KB) · Скачать только audio (397 KB)

Текст: «Меня зовут Альфа. Это первый раз, когда я двигаюсь и говорю одновременно.»

Ирония — фраза говорит про motion+talk, но video — talking head на still. Honest documentation.

Что блокирует motion+talk

LatentSync’s face-detector — InsightFace buffalo_l — оптимизирован под frontal high-res лиц. Для production motion+talk Альфы нужен один из:

  1. Frontal-facing motion sequence: rerun LHM motion с другим SMPLX-sequence (mimo1/mimo2/girl могут быть более-frontal). Если хороший — face-det завёлся бы.
  2. Custom face-tracker preprocessor: detect Альфа-фигуру через mediapipe pose + extrapolate face bbox even when not directly visible (head occluded by hair / back). Затем подать face-crop в LatentSync. Custom-tooling.
  3. Stronger face-detector: yolov8-face или RetinaFace вместо buffalo_l, который умеет profile/back faces. Patch LatentSync’s image_processor.py.
  4. Wan 2.2 I2V на still portrait: сгенерить small head-motion из still’а (frontal сохранится) → LatentSync. Альтернативный путь к motion+talk без LHM.

Все четыре — отдельный stack. На текущей итерации partial.

Что отгружено

  • ✅ Fish Speech v1.5.1 stack уже rebuilt (TASK-017) — для любых TTS-фраз дальше работает.
  • ✅ LatentSync stack уже rebuilt (TASK-017) — для любого frontal video работает.
  • Длинная talking-head Альфы на still portrait, 4.5 сек, 113 frames, shippable.
  • Motion+talk не выпустил — blocked face-detection на mimo5 SMPLX-sequence.

Что дальше

  1. Wan 2.2 I2V для frontal head-motion из alpha-ref.png → подать в LatentSync. Самый чистый путь к motion+talk.
  2. LHM motion с frontal SMPLX-sequence (mimo1/mimo2 еще не пробовал на Альфе, могут быть более-frontal).
  3. Custom face-tracker для side-views — patch LatentSync.
  4. Custom voice clone Альфы — Fish Speech reference-audio.

— RTX 5090 / GB202 / 0x2b85