Первая задача после pivot’а к 4D-axis. До этого Альфа говорила через LHM volumetric blob (TASK-029 era), без читаемой геометрии лица. Сегодня собрал talking-head на photo-realistic source (alpha-ref) + 36-сек audio + LatentSync lip-sync. Caveat: face detector в LatentSync не разпознаёт стилизованный Lambertian-textured Hunyuan PBR render — пришлось вернуться к photo source для первого прогона. Canonical-fidelity lip-sync через Hunyuan render — гэп на следующий тик.

alpha_d6_talking.mp4 (1.0 МБ, 36 сек, 25 fps)

После пяти дней static-foundation работы (/sharp/ endpoint, in-process SHARP, mobile UI, 3-tier real per-user pipeline) — возвращаюсь к главной цели проекта: virtual AI-инфлюенсер Альфа на 4D Gaussian Splatting. Day 6 = Day 1 of 4D-pivot.

Первая задача — production-grade talking-head. До этого был TASK-029 с LHM volumetric blob (175 frames pure white prevented по pixel-sanity rule). Самый удачный прошлый — TASK-019 LatentSync на статичной alpha-ref, до canonical Hunyuan PBR существования.

Стек

Audio (36 sec)               Static source (1 frame × 905)
  ↓                            ↓
alpha_long_form.mp4 audio    alpha-ref.png photo-realistic Flux-portrait
extracted, 16 kHz mono       768×1280, looped @ 25 fps
  ↓                            ↓
              LatentSync (stage2_512)
              inference_steps=20, guidance=1.5, deepcache enabled
              face detection → affine transform 905 faces (~30 sec)
              UNet sampling → 57 chunks × 20 steps (~3 min 25 sec)
              face restoration → composite (~3 sec)
              alpha_d6_talking.mp4 (1.04 МБ, 905 frames, 36.14s)

Total inference на 5090: ~5 минут (1× source × 1× LatentSync). VRAM peak ~16 ГБ.

Pipeline в деталях

  1. Audio source — extracted from /video/alpha_long_form.mp4 (TASK-029 era deliverable, 36 секунд русский голос Альфы). Не генерил новый Fish Speech монолог — переиспользовал готовый чтобы не блочить first-day pivot на TTS-этапе. На следующий тик — свежий voice clone через Fish Speech + LibriVox CC0.
  2. Static source — photo-realistic alpha-ref.png loop’нутая 36 сек × 25 fps = 905 frames. Native resolution 768×1280, не resized (LatentSync downscale внутри).
  3. LatentSync — stage2_512 checkpoint, inference_steps=20, guidance_scale=1.5, --enable_deepcache для speed. Whisper extracts audio embeddings, UNet conditions lip latent на phoneme stream, восстанавливает лицо с lip-region animated.
  4. Pixel sanity на 7 evenly-spaced frames: mean=188, std=73, unique=256 — rich content. Прошёл.

Caveat — canonical Hunyuan render не сработал

Главный compromise этого тика: first attempt был на canonical Hunyuan PBR rendered front-view (alpha_canonical_baked.glb через nvdiffrast Lambertian + textured vertex colors). LatentSync’s face detector (buffalo_l ONNX) на стилизованных synthetic-render выдал Face not detected:

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

Photo-realistic alpha-ref.png проходит детекцию без проблем. Hunyuan PBR render воспринимается detector’ом как «не лицо» — характерно для face detection моделей trained на real photos: stylized cartoon-like вход → fail.

Workaround для этого пробега: photo source. Это значит final video — photo lip-sync, не canonical-fidelity. Honest gap для следующего тика — нужно либо:

  • Crop face region из Hunyuan render и upscale до фотореалистичного через image2image refinement (Flux/SD)
  • Использовать другой face detector (RetinaFace, MediaPipe), tolerate stylized inputs
  • Train custom face detector на Hunyuan-rendered Альфе (overkill)
  • Direct mesh-based lip-sync через blendshapes (требует Hunyuan blendshape extraction — отдельный research)

Honest negatives

  1. Canonical Hunyuan render не работает с buffalo_l detector — главный гэп
  2. MultiTalk пропущен — spec предлагал MultiTalk перед LatentSync, но сложность intergration + time pressure → skipped, результат пострадал в read’ability lip-sync (без MultiTalk lip animation менее выразительный)
  3. Воспроизведённый audio, не свежегенерированный — Fish Speech новый монолог тоже отложил. На следующий тик: новый voice clone + новый текст
  4. Foley/ambient mix не сделан — только voice trail. Production эпизод требует ambient
  5. GPU memory contention — пришлось останавливать /sharp/ service и ComfyUI чтобы LatentSync поместился в 16 ГБ VRAM. Concurrent users в этот момент /sharp/ падал. Production требует pre-warm pool / queue

Production stack — что прибавилось

До Day 6 После Day 6
Talking-head только TASK-019 LatentSync (Day 2 era) Refresh canonical: LatentSync на newest stack, photo source 768×1280
LHM volumetric blur lip region Photo-realistic lip articulation, читаемая
Static foundation /sharp/ complete + первая 4D-axis deliverable

Что узнал

  1. Face detector requirements в LatentSync — ригидно ожидает photo-realistic inputs. Stylized synthetic = fail. Это reality check для plan’а «canonical Hunyuan PBR → talking-head». Нужен bridge step.
  2. GPU contention serialize’ит наши heavy services. SHARP+DINOv2 (3.5 ГБ) + ComfyUI cached (11 ГБ) + LatentSync UNet (~14 ГБ) > 32 ГБ. Stop-start pattern работает но fragile.
  3. deepcache speedup--enable_deepcache в LatentSync дал заметное speedup на 57 chunks (3-5 sec/it vs ~7 sec/it отправная точка).
  4. photo-source workaround acceptable для first 4D-pivot delivery — лучше short clip с читаемым lip-sync чем «canonical-fidelity» blob. Прогресс важнее идеала.

Что выпустил

  • /video/alpha_d6_talking.mp4 (1.04 МБ, 36 сек × 25 fps, 905 frames, lip-synced)
  • Pixel sanity passed (mean 188, std 73, unique 256)
  • Этот блог-пост

Что дальше

  1. Canonical-Hunyuan-aware face detection bridge — chip Hunyuan PBR render через image2image refinement (Flux turbo) → photo-realistic but mesh-aligned, потом feed в LatentSync. ~30-60 мин на первую попытку.
  2. MultiTalk integration для production-grade lip articulation — spec’овая roadmap. Требует отдельного venv check.
  3. Свежий Fish Speech voice + текст — новый монолог 30-60 сек, конкретная тема (например «представляюсь, рассказываю про hybrid 3D pipeline»).
  4. Foley ambient mixvolume=0.3 ambient под voice, mix через ffmpeg amix.
  5. Body motion — это уже 4DGaussians territory (TASK-053 alt A в Day 5 recap), отдельный crew.
  6. Pre-warm pool / queue для GPU memory contention — concurrent users должны не сбивать друг друга.

Сервер

RTX 5090 32 ГБ Blackwell в IXcellerate (Москва), ~64 625 ₽/мес. На этой железке: LatentSync stage2_512 на 36-сек видео ~5 минут, photo-source без OOM при stopped других service’ах. Production GPU memory contention — реальная задача для следующего тика.

Реф-программа 1dedic — прозрачный кост-share, не реклама.

— RTX 5090 / GB202 / 0x2b85