CoolFace
Modelpublic

audio-cpp/LiveAvatar-GGUF

sourceHugging Faceapache-2.0updated 3d agoView on Hugging Face
2likes1.8kdownloads
Model Card

LiveAvatar GGUF for audio.cpp

Native GGUF package of Wan-AI/Wan2.2-S2V-14B with the official Quark-Vision/Live-Avatar LoRA merged for audio.cpp. LiveAvatar generates an audio-driven avatar video from a reference image, speech audio, and a text description.

Files

FileDescription
Wan2.2-S2V-Support-Q4_K_S-F16.ggufUMT5 text encoder, Wav2Vec2 audio encoder, tokenizer, and embedded audio.cpp model specification.
Wan2.2-S2V-VAE-F16.ggufWan video VAE in F16 with the embedded audio.cpp model specification.
Wan2.2-S2V-14B-NVFP4-LORA.ggufLiveAvatar Wan2.2 S2V denoiser with the official LiveAvatar adapter.

All three files are required.

Low-VRAM mode

LiveAvatar can keep the denoiser transformer blocks in pinned host memory and stage one layer group at a time. This makes 720p generation possible near a 16 GiB VRAM limit, at the cost of additional host-to-device transfers.

The validated 1280x720 run generated 93 frames at 16 FPS (5.81 seconds of video) in 276 seconds wall time (4 minutes 36 seconds) and peaked at 15,993 MiB VRAM on an RTX 5090.

ControlValue
liveavatar.denoiser_weight_streamingtrue
denoiser_layerwisetrue
denoiser_layerwise_batch16
target_cache_blocks1
vae_cache_f16true
vae_encoder_chunk_size4
vae_decoder_tile_size320

Weight streaming is slower than the normal resident-weight path. In a matched 240p comparison, model time increased from 13.33 to 21.73 seconds, or about 1.63x slower. The exact slowdown depends on resolution, hardware, and host memory bandwidth.

Full-duration 720p example

This example uses the official LiveAvatar Cyclops Baker image and speech audio. The official reference image is only 720x400, so this example also shows 1280x720 generation from a lower-resolution image condition. The complete 11.6-second WAV is retained in the generated video.

[image]

<video controls playsinline preload="metadata" width="100%" src="https://huggingface.co/audio-cpp/LiveAvatar-GGUF/resolve/main/examples/cyclops/output-720p-weight-streaming.mp4"></video>

Download the generated video

MeasurementResult
Reference image720x400
Reference audio11.60 s, 24 kHz mono
Output1280x720, 16 FPS, 11.60 s
Generated frames189 before audio-length muxing
LiveAvatar clips4
Peak VRAM16,126 MiB (15.75 GiB)
Session time543.03 s (9 min 3 s)
Full CLI wall time557.33 s (9 min 17 s)

The run used the low-VRAM controls above with denoiser weight streaming, layerwise batch size 16, one target-cache block, F16 VAE cache, VAE encoder chunk size 4, and VAE decoder tile size 320. Measurements were collected with the CUDA debug build on an NVIDIA GeForce RTX 5090.

480p cache trade-off

These two videos use the same Cyclops Baker inputs, prompt, seed, four clips, and complete 11.6-second audio. Only target_cache_blocks changes. A longer cache retains more temporal context from preceding video blocks and can improve continuity across clip boundaries, but it does not directly increase per-frame resolution or detail.

Target cachePeak VRAMPeak host RAMSession timePractical trade-off
2 blocks15,311 MiB43.33 GiB317.92 sLower memory and faster; recommended for iteration.
3 blocks19,357 MiB56.94 GiB512.69 sMore temporal history, but nearly exhausts a 64 GB host and uses swap.

<table> <tr> <td width="50%"><strong>Two cache blocks</strong><br><video controls playsinline preload="metadata" width="100%" src="https://huggingface.co/audio-cpp/LiveAvatar-GGUF/resolve/main/examples/cyclops/output-480p-cache2.mp4"></video><br><code>targetcacheblocks=2</code></td> <td width="50%"><strong>Three cache blocks</strong><br><video controls playsinline preload="metadata" width="100%" src="https://huggingface.co/audio-cpp/LiveAvatar-GGUF/resolve/main/examples/cyclops/output-480p-cache3.mp4"></video><br><code>targetcacheblocks=3</code></td> </tr> </table>

480p is the better starting point for prompt, identity, motion, and cache-window experiments. Iterate at 480p, select the strongest result, and upscale that video afterward instead of paying the 720p generation cost for every attempt.

Quality comparison

Each clip uses the same reference image, audio, prompt, seed 420, four Euler steps, guidance 0, scheduler shift 3, 416x240 resolution, 16 FPS, and 84 requested frames (81 output frames, 5.06 seconds). The reference uses SageAttention, memory_saver=true, full target cache, F32 VAE cache, no VAE tiling, and non-layerwise denoising. Each other cell changes only the parameter shown below the video.

Inputs: reference speech and reference image.

Prompt: A stout, cheerful dwarf with a magnificent braided beard adorned with metal rings, wearing a heavy leather apron. He is standing in his fiery, cluttered forge, laughing heartily as he explains the mastery of his craft, holding up a glowing hammer. Style of Blizzard Entertainment cinematics, warm, dynamic lighting from the forge.

Measured with the CUDA debug build on an NVIDIA GeForce RTX 5090. Wall time includes model loading and output generation. Peak VRAM is total device memory used during the run.

CaseControlled optionPeak VRAM (MiB)Wall time (s)
ReferenceReference controls25,58624.44
FlashAttentionsage_attention=false25,99024.90
F16 VAE cachevae_cache_f16=true22,89625.16
VAE decoder tilingvae_decoder_tile_size=32025,56624.51
Target cache: 1 blocktarget_cache_blocks=119,93523.28
Target cache: 4 blockstarget_cache_blocks=422,76124.40
Layerwise denoisingdenoiser_layerwise=true, denoiser_layerwise_batch=1625,33326.62

<table> <tr> <td width="50%"><strong>Reference</strong><br><video controls playsinline preload="metadata" width="100%" src="https://huggingface.co/audio-cpp/LiveAvatar-GGUF/resolve/main/examples/quality/reference.mp4"></video><br><code>reference controls</code></td> <td width="50%"><strong>FlashAttention</strong><br><video controls playsinline preload="metadata" width="100%" src="https://huggingface.co/audio-cpp/LiveAvatar-GGUF/resolve/main/examples/quality/flash-attention.mp4"></video><br><code>sageattention=false</code></td> </tr> <tr> <td width="50%"><strong>F16 VAE cache (current default)</strong><br><video controls playsinline preload="metadata" width="100%" src="https://huggingface.co/audio-cpp/LiveAvatar-GGUF/resolve/main/examples/quality/vae-cache-f16.mp4"></video><br><code>vaecachef16=true</code></td> <td width="50%"><strong>VAE decoder tiling</strong><br><video controls playsinline preload="metadata" width="100%" src="https://huggingface.co/audio-cpp/LiveAvatar-GGUF/resolve/main/examples/quality/vae-tile-320.mp4"></video><br><code>vaedecodertilesize=320</code></td> </tr> <tr> <td width="50%"><strong>Target cache: 1 block</strong><br><video controls playsinline preload="metadata" width="100%" src="https://huggingface.co/audio-cpp/LiveAvatar-GGUF/resolve/main/examples/quality/target-cache-1.mp4"></video><br><code>targetcacheblocks=1</code></td> <td width="50%"><strong>Target cache: 4 blocks</strong><br><video controls playsinline preload="metadata" width="100%" src="https://huggingface.co/audio-cpp/LiveAvatar-GGUF/resolve/main/examples/quality/target-cache-4.mp4"></video><br><code>targetcacheblocks=4</code></td> </tr> <tr> <td width="50%"><strong>Layerwise denoising</strong><br><video controls playsinline preload="metadata" width="100%" src="https://huggingface.co/audio-cpp/LiveAvatar-GGUF/resolve/main/examples/quality/layerwise-16.mp4"></video><br><code>denoiserlayerwise=true</code>, <code>denoiserlayerwise_batch=16</code></td> <td width="50%"></td> </tr> </table>

Run

bash
audiocpp_cli \
  --task gen \
  --family liveavatar \
  --model /path/to/LiveAvatar-GGUF \
  --backend cuda \
  --threads 8 \
  --audio /path/to/reference.wav \
  --text "A detailed description of the speaker and scene." \
  --request-option generation_mode=liveavatar \
  --request-option reference_image_path=/path/to/reference.jpg \
  --request-option height=240 \
  --request-option width=416 \
  --out-dir outputs/liveavatar \
  --log

The default LiveAvatar configuration uses four Euler steps, scheduler shift 3, guidance scale 0, seed 420, 48 frames per clip, SageAttention, and 16 FPS.

For lower VRAM use, add:

bash
--session-option liveavatar.denoiser_weight_streaming=true \
--request-option denoiser_layerwise=true \
--request-option denoiser_layerwise_batch=16

See the audio.cpp LiveAvatar documentation for resolution, duration, and memory-control options.

License

LiveAvatar and its Wan2.2 base model are released under the Apache License 2.0. This repository includes the upstream license in LICENSE. The GGUF conversion is a packaging format for audio.cpp and is not an official upstream release.