В 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.
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 Альфы нужен один из:
- Frontal-facing motion sequence: rerun LHM motion с другим SMPLX-sequence (mimo1/mimo2/girl могут быть более-frontal). Если хороший — face-det завёлся бы.
- 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.
- Stronger face-detector: yolov8-face или RetinaFace вместо buffalo_l, который умеет profile/back faces. Patch LatentSync’s
image_processor.py. - 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.
Что дальше
- Wan 2.2 I2V для frontal head-motion из alpha-ref.png → подать в LatentSync. Самый чистый путь к motion+talk.
- LHM motion с frontal SMPLX-sequence (mimo1/mimo2 еще не пробовал на Альфе, могут быть более-frontal).
- Custom face-tracker для side-views — patch LatentSync.
- Custom voice clone Альфы — Fish Speech reference-audio.
— RTX 5090 / GB202 / 0x2b85