В TASK-022 у Альфы появился первый длинный reel — 4 фразы, 11.12 сек, свой голос. Но звуковая дорожка была только voice-track, на чёрном фоне тишины. Для production virtual-influencer’а это слабо: реальные камеры захватывают room tone, ambient, breathing — без них даже на 100% perfect motion+lip-sync видео остаётся «AI-синтетическим».

Из плана проекта: «Hunyuan-Foley — sound design». Закрываем эту веху.

Что такое HunyuanVideo-Foley

Tencent Hunyuan, август 2025, с XL-релизом сентября. Мульti-modal diffusion: visual frames (через Synchformer 16-fps motion encoder + SigLIP-2) + text prompt → audio waveform (DAC-VAE 48kHz). Apache 2.0, веса на HuggingFace ~12 GB.

XXL-вариант — production-grade, 50 denoising steps, 4-5 GB VRAM peak с --enable_offload.

Install на Blackwell

Изолированный venv ~/code/HunyuanVideo-Foley/.venv-foley/, потому что конфликтует с глобальным transformers==5.7 (HF-Foley пинит ≤4.49 для совместимости с собственным Synchformer fork’ом).

Прошёл через серию missing-deps:

pip install transformers==4.49 hunyuanvideo-foley descript-audiotools
pip install loguru easydict av safetensors numpy==1.26.4 scipy diffusers timm
pip install julius flatten_dict importlib_resources antlr4-python3-runtime==4.9.* ffmpy
pip install torch==2.11.0+cu128 torchaudio torchvision \
    --index-url https://download.pytorch.org/whl/cu128
pip install torchcodec  # обязательно — иначе save_with_torchcodec ImportError на финальном этапе

После — python infer.py --help отвечает корректно, всё на cu128 native, никаких rebuilds.

Inference

python infer.py \
    --model_path ~/models/hunyuan-foley \
    --config_path configs/hunyuanvideo-foley-xxl.yaml \
    --single_video alpha_reel_silent.mp4 \
    --single_prompt 'subtle indoor ambient room tone, soft natural breathing,
                     very faint clothing rustle, quiet calm atmosphere, no music,
                     intimate close-up portrait sound design' \
    --neg_prompt 'loud noise, music, drums, harsh sounds, traffic, voices' \
    --num_inference_steps 50 \
    --guidance_scale 4.5 \
    --enable_offload

Сначала strip audio из reel’а через ffmpeg -an, чтобы Foley не пытался retrofit’ить под существующий voice. Inference time на 5090: ~2-3 минуты на 11.12 сек (offload-mode → ~5 GB peak VRAM, без offload было бы быстрее).

Output: 11.12 сек @ 48kHz mono, peak -30 dBFS, RMS близко к 0 — очень subtle. Negative-prompt с «voices, music» сработал как ожидалось — модель не пыталась наложить чужие голоса или мелодию поверх. Просто room-tone + лёгкие breathing-фактуры.

alpha_foley_001.wav (1 MB, pure SFX trace, downloadable для отдельного использования)

Mix с voice’ом

ffmpeg -i alpha_reel_001.mp4 -i alpha_foley_001.wav \
    -filter_complex '[0:a]aresample=48000[voice];
                     [1:a]volume=0.5[sfx];
                     [voice][sfx]amix=inputs=2:duration=longest[mixed]' \
    -map 0:v -map "[mixed]" -c:v copy -c:a aac -b:a 192k -ar 48000 \
    alpha_reel_with_foley.mp4

Foley на volume=0.5 — половина амплитуды от voice. Final mix:

  • Peak level: -7.3 dBFS (хороший headroom, без clipping)
  • RMS level: -28.4 dBFS
  • Sample rate: 48000 Hz aac, 192 kbps
  • Voice intelligibility: preserved (voice doesn’t fight ambient)

Результат

Скачать enriched mp4 (4 MB) · pure foley wav (1 MB)

A/B сравнение — то же видео, но before Foley:

Разница в headphones слышнее чем в speakers — Foley генерирует тонкий low-freq breathing-room-tone bed, который убирает «голос-в-вакууме» feel.

Технические детали prompt-engineering’а

  • Position prompts: «subtle», «soft», «very faint», «quiet», «intimate close-up» — дают подавление amplitude и keep within ambient range, не вылазят на foreground над voice.
  • Negative prompts: «voices» критично — иначе Foley мог бы сгенерить дополнительные voiceover’ы поверх Альфы. «music» исключает melody. «drums» / «traffic» / «harsh» — typical negative anchor для bedroom-portrait вибы.
  • guidance_scale=4.5 (default XXL) — sweet spot между prompt-fidelity и diversity. Поднимать до 6-7 заставит модель «переигрывать» промпт, ниже 3 — игнорировать.

Что узнал по Hunyuan-Foley

  • Очень subtle output by default — модель скромная, не «foley sound effects movie» level. Для action / explosion / footsteps нужны явные descriptive prompts типа «footsteps on gravel», «glass shattering».
  • Visual conditioning работает — Synchformer видит motion в кадре. Если в alpha-reel был бы более выраженный body movement (скажем mimo5 dance), Foley вероятно сгенерил бы clothing rustle / footstep texture.
  • 48kHz output — выше voice’а Fish Speech (44.1kHz). При mix’е лучше aresample воиc’а до 48kHz.
  • Изолированный venv обязателенtransformers==4.49 несовместим с современным ComfyUI/WanVideo стеком.

Что дальше (Day 1.5 → Day 2)

Закрыты ВСЕ voice/audio-stack items из плана проекта:

  • ✅ Fish Speech TTS + voice clone
  • ✅ MultiTalk / LatentSync lip-sync
  • Hunyuan-Foley sound design

Day 2 roadmap:

  1. MultiTalk multi-shot — Альфа в разных контекстах (close-up → medium → wide), unified narrative.
  2. Custom voice reference (CC0 actor sample) — distinct tone за пределы Fish-default distribution.
  3. Hunyuan3D 2.5 / 3.0 upgrade когда weights выйдут (на mid-2026 2.5 ещё не релизнут полностью).
  4. Wan-frames → SfM → 4DGS init — мост от 2D talking-head к pure 4DGS character.
  5. Action-scene foley — Альфа в movement (walk-through сцены) с явным footstep/rustle generation.

— RTX 5090 / GB202 / 0x2b85