π TODO
- If you find PersonaLive useful or interesting, please give us a Starπ! Your support drives us to keep improving.π»
- Fix bugs (If you encounter any issues, please feel free to open an issue or contact me! π)
- Enhance WebUI (Support reference image replacement).
- [2025.12.17] π₯ ComfyUI-PersonaLive is now supported! (Thanks to @okdalto)
- [2025.12.15] π₯ Release
paper! - [2025.12.12] π₯ Release
inference code,config, andpretrained weights!
βοΈ Framework
We present PersonaLive, a real-time and streamable diffusion framework capable of generating infinite-length portrait animations on a single 12GB GPU.
π Getting Started
π Installation
β¦
π TODO
- If you find PersonaLive useful or interesting, please give us a Starπ! Your support drives us to keep improving.π»
- Fix bugs (If you encounter any issues, please feel free to open an issue or contact me! π)
- Enhance WebUI (Support reference image replacement).
- [2025.12.17] π₯ ComfyUI-PersonaLive is now supported! (Thanks to @okdalto)
- [2025.12.15] π₯ Release
paper! - [2025.12.12] π₯ Release
inference code,config, andpretrained weights!
βοΈ Framework
We present PersonaLive, a real-time and streamable diffusion framework capable of generating infinite-length portrait animations on a single 12GB GPU.
π Getting Started
π Installation
# clone this repo
git clone https://github.com/GVCLab/PersonaLive
cd PersonaLive
# Create conda environment
conda create -n personalive python=3.10
conda activate personalive
# Install packages with pip
pip install -r requirements_base.txt
β¬ Download weights
Option 1: Download pre-trained weights of base models and other components (sd-image-variations-diffusers and sd-vae-ft-mse). You can run the following command to download weights automatically:
python tools/download_weights.py
Option 2: Download pre-trained weights into the ./pretrained_weights folder from one of the below URLs:
Finally, these weights should be organized as follows:
pretrained_weights
βββ onnx
β βββ unet_opt
β β βββ unet_opt.onnx
β β βββ unet_opt.onnx.data
β βββ unet
βββ personalive
β βββ denoising_unet.pth
β βββ motion_encoder.pth
β βββ motion_extractor.pth
β βββ pose_guider.pth
β βββ reference_unet.pth
β βββ temporal_module.pth
βββ sd-vae-ft-mse
β βββ diffusion_pytorch_model.bin
β βββ config.json
βββ sd-image-variations-diffusers
β βββ image_encoder
β β βββ pytorch_model.bin
β β βββ config.json
β βββ unet
β β βββ diffusion_pytorch_model.bin
β β βββ config.json
β βββ model_index.json
βββ tensorrt
βββ unet_work.engine
ποΈ Offline Inference
python inference_offline.py
β οΈ Note for RTX 50-Series (Blackwell) Users: xformers is not yet fully compatible with the new architecture. To avoid crashes, please disable it by running:
python inference_offline.py --use_xformers False
πΈ Online Inference
π¦ Setup Web UI
# install Node.js 18+
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
nvm install 18
cd webcam
source start.sh
ποΈ Acceleration (Optional)
Converting the model to TensorRT can significantly speed up inference (~ 2x β‘οΈ). Building the engine may take about 20 minutes depending on your device. Note that TensorRT optimizations may lead to slight variations or a small drop in output quality.
pip install -r requirement_trt.txt
python torch2trt.py
The provided TensorRT model is from an H100. We recommend ALL users (including H100 users) re-run python torch2trt.py locally to ensure best compatibility.
βΆοΈ Start Streaming
python inference_online.py --acceleration none (for RTX 50-Series) or xformers or tensorrt
Then open http://0.0.0.0:7860 in your browser. (*If http://0.0.0.0:7860 does not work well, try http://localhost:7860)
How to use: Upload Image β‘οΈ Fuse Reference β‘οΈ Start Animation β‘οΈ Enjoy! π
Regarding Latency: Latency varies depending on your deviceβs computing power. You can try the following methods to optimize it:
- Lower the "Driving FPS" setting in the WebUI to reduce the computational workload.
- You can increase the multiplier (e.g., set to
num_frames_needed * 4or higher) to better match your deviceβs inference speed.
| read_size = min(queue.qsize(), num_frames_needed * 3) |
π Community Contribution
Special thanks to the community for providing helpful setups! π₯
Windows + RTX 50-Series Guide: Thanks to @dknos for providing a detailed guide on running this project on Windows with Blackwell GPUs.
TensorRT on Windows: If you are trying to convert TensorRT models on Windows, this discussion might be helpful. Special thanks to @MaraScott and @Jeremy8776 for their insights.
ComfyUI: Thanks to @okdalto for helping implement the ComfyUI-PersonaLive support.
π¬ More Results
π Visualization results
| demo_1.mp4 | demo_2.mp4 |
| demo_3.mp4 | demo_4.mp4 | demo_5.mp4 | demo_6.mp4 |
| demo_7.mp4 | demo_8.mp4 | demo_9.mp4 | demo_0.mp4 |
π€Ί Comparisons
| same_id.mp4 |
| cross_id_1.mp4 |
| cross_id_2.mp4 |
β Citation
If you find PersonaLive useful for your research, welcome to cite our work using the following BibTeX:
@article{li2025personalive,
title={PersonaLive! Expressive Portrait Image Animation for Live Streaming},
author={Li, Zhiyuan and Pun, Chi-Man and Fang, Chen and Wang, Jue and Cun, Xiaodong},
journal={arXiv preprint arXiv:2512.11253},
year={2025}
}
β€οΈ Acknowledgement
This code is mainly built upon Moore-AnimateAnyone, X-NeMo, StreamDiffusion, RAIN and LivePortrait, thanks to their invaluable contributions.