π unclaimed β this page was auto-generated from GitHub. Are you the creator?
Claim this page β
ai-avatar-system
π AI Avatar / digital human platform β upload a photo, clone a voice, talk to any face in real time with lip-sync video. Open-source, self-hosted. Claude Β·β¦
git clone https://github.com/PunithVT/ai-avatar-system
π AvatarAI β Real-Time AI Avatar Platform
Upload a photo Β· Clone a voice Β· Talk to any face in real time
Quick Start Β· Features Β· Architecture Β· GPU / AWS Deploy Β· API Β· Roadmap
The most complete open-source AI avatar / digital human system. Real-time talking-head lip-sync Β· Zero-shot voice cloning Β· Multi-LLM Β· Runs 100% locally or on AWS.
π¬ What is AvatarAI?
AvatarAI is an open-source, production-ready platform for building photorealistic AI avatar conversations. Upload any face photo, clone a voice from a 5-second audio clip, and have a real-time conversation β with lip-sync video generated on every single response.
[mic] β Whisper STT β Claude / GPT / Ollama (streaming) β Chatterbox TTS β MuseTalk lip-sync β [video]
< 2β4 s to first video chunk on AWS GPU >
What makes AvatarAI different:
- π€ Zero-shot voice cloning β 10 seconds of audio is all you need (Chatterbox Multilingual)
- π Any face, any language β upload a JPEG, pick from 23 languages, start talking
- β‘ Token-streaming pipeline β the LLM streams live tokens while TTS + lip-sync run per sentence; the first video chunk plays before the model finishes its reply
- β Barge-in β speak (or hit stop) mid-reply and the avatar yields instantly, like a real conversation
- π 100% local mode β local storage, local Whisper, local LLM via Ollama: nothing leaves your machine
- π Multi-LLM β Claude (with prompt caching), GPT-4o, or any local model via Ollama / vLLM / LM Studio
- π AWS GPU deployment β one-command deploy to
g5.xlargefor true real-time (~30 FPS) - ποΈ Production-grade β JWT + httpOnly-cookie auth, per-user rate limiting, Postgres + Alembic, S3/CloudFront, Prometheus, CI, a real test suite β the only project in this niche you can ship as a product, not just a demo
βοΈ How AvatarAI compares
| AvatarAI | Duix-Avatar | Linly-Talker | AIAvatarKit | |
|---|---|---|---|---|
| Real-time conversation | β WebSocket streaming | β offline video gen | β (Gradio / WebRTC spin-off) | β |
| Lip-sync video | β MuseTalk V1.5 | β proprietary models | β multiple engines | β (drives external avatars) |
| Voice cloning | β 10 s, 23 languages | β | β | β |
| Barge-in / interruption | β | β | β (stream variant) | β |
| Local / free LLM | β Ollama, vLLM | β | β | β |
| Web app with auth & history | β Next.js + JWT + Postgres | β Windows client | β Gradio demo UI | β library |
| Rate limiting, CI, tests, IaC | β | β | β | β |
| License | MIT | custom | MIT | Apache-2.0 |
Toolkits like Linly-Talker are great research playgrounds; Duix ships a Windows product. AvatarAI is the one you can deploy as a real multi-user web service.
β¨ Features
| Category | Details |
|---|---|
| π€ LLM Backends | Claude (prompt-cached) Β· GPT-4o Β· Ollama / vLLM / LM Studio (local, free) |
| π€ Voice Cloning | Record 10β60 s β Chatterbox Multilingual zero-shot cloning |
| π£οΈ Speech-to-Text | Whisper (faster-whisper, CUDA), decodes browser WebM natively |
| π¬ Lip-Sync Video | MuseTalk V1.5 persistent worker (30 FPS on GPU) Β· FFmpeg fallback (CPU) |
| β‘ Streaming Pipeline | Live LLM tokens + per-sentence video chunks over WebSocket |
| β Barge-In | Speak or hit stop mid-reply β in-flight turn cancels in ms |
| π TTS Fallback Chain | chatterbox β edge-tts (free neural voices) β gTTS β never silent |
| π Emotion Detection | Live emotion badges per message |
| π 23 Languages | Whisper multilingual STT + Chatterbox multilingual TTS |
| π Local-First Storage | USE_LOCAL_STORAGE=true β no AWS needed for dev |
| π Auth & Sessions | JWT authentication, conversation history, persistent sessions |
| π Observability | Prometheus Β· Celery Flower Β· Sentry Β· structured logging |
| π§ͺ Tested | Full pytest suite β users, avatars, sessions, health checks |
| π AWS GPU Deploy | One-command g5.xlarge deploy with CUDA 11.8 + float16 |
ποΈ Architecture
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Browser / Client β
β βββββββββββββββ ββββββββββββββββ ββββββββββββββββββββββββ β
β βAvatar Studioβ β Voice Studio β β Chat Interface β β
β β (upload) β β (cloning) β β Idle anim + chunks β β
β ββββββββ¬βββββββ ββββββββ¬ββββββββ ββββββββββββ¬ββββββββββββ β
βββββββββββΌββββββββββββββββΌββββββββββββββββββββββΌββββββββββββββ
β REST β REST β WebSocket
βΌ βΌ βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FastAPI Backend β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β WebSocket Manager β β
β β split sentences β TTS β MuseTalk β stream chunks β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β ββββββββββββ βββββββββββββ ββββββββββββ βββββββββββββββββ β
β β Whisper β βClaude/GPT β β XTTS v2 β β MuseTalk β β
β β STT β β / Llama β β TTS β β (GPU/CPU) β β
β ββββββββββββ βββββββββββββ ββββββββββββ βββββββββββββββββ β
β ββββββββββββ ββββββββββββ ββββββββββββ βββββββββββββββββ β
β βPostgreSQLβ β Redis β β Celery β β Local FS / S3 β β
β ββββββββββββ ββββββββββββ ββββββββββββ βββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Real-Time Data Flow (one conversation turn)
[User types / speaks]
β
βΌ
Whisper STT ββββββββββββββββββΊ transcript
β
βΌ
Claude / GPT / Llama βββββββββΊ full response text
β
βΌ
Split into sentences βββββββββΊ ["Hello!", "How are you?", ...]
β
βββ sentence 1 β XTTS β MuseTalk β video_chunk WS β browser plays
βββ sentence 2 β XTTS β MuseTalk β video_chunk WS β queued
βββ sentence N β XTTS β MuseTalk β video_chunk WS β queued
π Project Structure
ai-avatar-system/
βββ backend/ # FastAPI application
β βββ app/
β β βββ api/v1/ # REST endpoints (users, avatars, sessions, messages)
β β βββ services/ # Core services (LLM, TTS, STT, animator, storage)
β β βββ models/ # SQLAlchemy DB models
β β βββ websocket.py # Real-time WebSocket handler + sentence streaming
β βββ alembic/ # Database migrations
β βββ models/MuseTalk/ # MuseTalk V1.5 (lip-sync engine)
β β βββ scripts/
β β βββ musetalk_worker.py # Persistent worker (models loaded once)
β βββ tests/ # pytest suite
β βββ Dockerfile # CUDA 11.8 base image
β βββ requirements.txt
βββ frontend/ # Next.js 14 application
β βββ app/ # App Router pages
β βββ components/ # React components (ChatInterface, IdleAvatar, etc.)
β βββ lib/api.ts # Axios API client
β βββ store/ # Zustand global state
βββ nginx/
β βββ nginx.conf # Reverse proxy (HTTP β backend/frontend, WebSocket)
βββ infrastructure/
β βββ main.tf # AWS Terraform (ECS, RDS, ElastiCache, S3, CloudFront)
β βββ variables.tf
βββ scripts/
β βββ setup_musetalk.sh # Download MuseTalk models (~9 GB)
β βββ deploy-aws.sh # One-command EC2 GPU deployment
βββ docker-compose.yml # Development (CPU) β all services
βββ docker-compose.prod.yml # Production overrides (GPU, no bind mounts, logging)
βββ deploy.sh # ECR push + Terraform deploy (ECS path)
βββ .env.example # Development env template
βββ .env.prod.example # Production env template
π Quick Start
Prerequisites
- Docker & Docker Compose v2+ (recommended)
- OR: Python 3.10+, Node.js 18+, FFmpeg, PostgreSQL, Redis
Option A β Docker / CPU (development)
git clone https://github.com/PunithVT/ai-avatar-system.git
cd ai-avatar-system
cp .env.example .env # add your ANTHROPIC_API_KEY (or OPENAI_API_KEY)
docker compose up -d
| Service | URL |
|---|---|
| π₯οΈ Frontend | http://localhost:3000 |
| βοΈ Backend API | http://localhost:8000 |
| π Swagger Docs | http://localhost:8000/docs |
| πΈ Celery Flower | http://localhost:5555 |
No AWS required. Set
USE_LOCAL_STORAGE=true(default) β uploads saved tobackend/uploads/.
Want something to talk to immediately? Seed three ready-made demo avatars (AI-generated faces + personalities):
backend/venv/bin/python scripts/seed_demo.py # or any python with `requests`
backend/venv/bin/python scripts/seed_demo.py --with-voices # + cloned demo voices
Prebuilt images are also published on every release β ghcr.io/punithvt/ai-avatar-system-backend and β¦-frontend.
Option B β Manual (development)
# Backend
cd backend
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
cp ../.env.example ../.env
alembic upgrade head
uvicorn main:app --reload --port 8000
# Frontend (new terminal)
cd frontend
npm install
npm run dev
Option C β Enable MuseTalk Lip-Sync
# Download models (~9 GB, one-time)
bash scripts/setup_musetalk.sh
# Set in .env
AVATAR_ENGINE=musetalk
# Restart
docker compose restart backend
π GPU & AWS Deployment
MuseTalk achieves 30 FPS at 256Γ256 on a V100-class GPU (source: MuseTalk paper). On CPU it is 30β50Γ slower. Deploying on AWS gets you genuine real-time performance.
Recommended Instance
| Instance | GPU | VRAM | Spot $/hr | MuseTalk FPS |
|---|---|---|---|---|
g4dn.xlarge | T4 | 16 GB | ~$0.16 | ~15β20 FPS |
g5.xlarge | A10G | 24 GB | ~$0.30 | ~30 FPS β |
g6.xlarge | L4 | 24 GB | ~$0.24 | ~30 FPS β |
Recommended: g5.xlarge Spot (~$72/mo at 8 hrs/day).
One-Command EC2 Deploy
# 1. Launch g5.xlarge with Ubuntu 22.04 LTS, SSH in, then:
bash <(curl -fsSL https://raw.githubusercontent.com/PunithVT/ai-avatar-system/main/scripts/deploy-aws.sh)
# 2. Fill in API keys:
nano /opt/ai-avatar-system/.env.prod
# 3. Redeploy with your keys:
bash /opt/ai-avatar-system/scripts/deploy-aws.sh --update
The script automatically:
- Installs Docker + nvidia-docker2
- Verifies GPU is accessible
- Downloads MuseTalk models (~9 GB)
- Starts all services with GPU passthrough + float16 (2Γ faster via Tensor Cores)
Manual Production Docker
cp .env.prod.example .env.prod # fill in your values
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
What docker-compose.prod.yml adds over development:
- GPU reservation (
nvidiadriver, count=1) for backend + celery-worker float16inference enabled automatically on CUDA β ~2Γ speedup- Persistent
musetalk_modelsvolume (survive container restarts) - No source-code bind mounts (runs from built image)
- Log rotation (100 MB max, 5 files)
- Flower disabled (security)
Verify GPU is Working
# Check GPU is visible in container
docker exec avatar-backend python -c "
import torch
print('CUDA:', torch.cuda.is_available())
print('GPU:', torch.cuda.get_device_name(0))
print('VRAM:', round(torch.cuda.get_device_properties(0).total_memory/1024**3,1), 'GB')
"
# Expected on g5.xlarge:
# CUDA: True
# GPU: NVIDIA A10G
# VRAM: 24.0 GB
# Live GPU utilisation
docker exec avatar-backend nvidia-smi
AWS Terraform (ECS Path)
For a fully managed ECS deployment with RDS + ElastiCache + CloudFront:
cd infrastructure
terraform init
terraform apply -var="environment=production"
bash deploy.sh production
π€ Voice Cloning
Powered by Chatterbox Multilingual (Resemble AI) β zero-shot voice cloning from a 10-second sample, in 23 languages.
- Go to Voice tab β Clone Voice
- Record 10β60 s of clear speech (or upload a WAV/MP3/WebM)
- Name it β Clone β select it for your session
Every TTS response then uses your cloned voice.
# REST API
curl -X POST http://localhost:8000/api/v1/voices/clone \
-F "audio=@my_voice.wav" -F "name=My Voice" -F "language=en"
π‘ API Reference
Authentication
POST /api/v1/users/register { "email": "...", "username": "...", "password": "..." }
POST /api/v1/users/login form: username=... password=... β { "access_token": "..." }
# All protected routes:
Authorization: Bearer <access_token>
Avatars
POST /api/v1/avatars/upload Upload photo (multipart: file + name)
GET /api/v1/avatars/ List avatars
DELETE /api/v1/avatars/{id} Delete avatar
PUT /api/v1/avatars/{id}/voice Assign voice to avatar
Sessions & Messages
POST /api/v1/sessions/create { "avatar_id": "..." }
POST /api/v1/sessions/{id}/end
GET /api/v1/messages/session/{id}
WebSocket
WS /ws/session/{session_id}
Client β Server:
{ "type": "text", "text": "Hello!" }
{ "type": "audio", "audio": "<base64-webm>" }
{ "type": "stop" } // barge-in: cancel the in-flight reply
{ "type": "set_voice", "voice_id": "<uuid>" } // attach a cloned voice (owner-checked)
{ "type": "set_language", "language": "es" }
{ "type": "ping" }
Server β Client:
{ "type": "token", "token": "Hel" } // live LLM stream
{ "type": "transcription", "text": "Hello!" }
{ "type": "message", "content": "Hi!", "role": "assistant" }
{ "type": "video_chunk_start","total_chunks": -1 } // -1 = streaming, total unknown
{ "type": "video_chunk", "chunk_index": 0, "video_url": "...", "text": "Hi!" }
{ "type": "video_chunk_end", "sent_chunks": 3 }
{ "type": "status", "message": "Animatingβ¦", "stage": "animation" }
{ "type": "tts_fallback", "engine": "edge-tts", "voice_cloned": false, "message": "β¦" }
{ "type": "interrupted", "message": "Previous response interrupted" }
{ "type": "error", "message": "Something went wrong" }
βοΈ Configuration
Key .env variables:
# LLM
LLM_PROVIDER=anthropic # anthropic | openai | ollama (local & free)
LLM_MODEL=claude-sonnet-4-6 # or gpt-4o Β· llama3.1 Β· qwen2.5 β¦
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_BASE_URL= # e.g. http://localhost:11434/v1 for Ollama / vLLM / LM Studio
# Avatar engine
AVATAR_ENGINE=musetalk # musetalk (GPU recommended) | simple (CPU fallback)
MUSETALK_PATH=models/MuseTalk
# TTS β automatic fallback chain: chatterbox β edge-tts β gtts
TTS_PROVIDER=chatterbox
# STT
WHISPER_MODEL=large-v3-turbo # tiny | base | small | medium | large-v3 | large-v3-turbo
# Storage
USE_LOCAL_STORAGE=true # false β AWS S3 (+ presigned URLs / CloudFront)
S3_BUCKET_NAME=...
# Auth (β₯32 chars enforced at boot)
SECRET_KEY=$(python -c "import secrets; print(secrets.token_hex(32))")
JWT_SECRET_KEY=$(python -c "import secrets; print(secrets.token_hex(32))")
JWT_EXPIRATION_HOURS=24
π οΈ Tech Stack
Frontend
| Library | Purpose |
|---|---|
| Next.js 14 + React 18 | App framework |
| TypeScript 5 | Type safety |
| Tailwind CSS | Styling |
| Zustand | Global state |
Backend
| Library | Purpose |
|---|---|
| FastAPI | Async REST API + WebSocket |
| SQLAlchemy 2 (async) | ORM with asyncpg |
| PostgreSQL 15 | Primary database |
| Alembic | Migrations |
| Redis 7 | Cache + Celery broker |
| Celery | Background tasks |
AI / ML
| Model | Purpose |
|---|---|
| Claude / GPT-4o / Ollama (local) | LLM conversation |
Whisper (faster-whisper) | Speech-to-text |
| Chatterbox Multilingual (Resemble AI) | TTS + zero-shot voice cloning, 23 languages |
| Edge TTS β gTTS | Free no-GPU fallback voices |
| MuseTalk V1.5 | Photorealistic lip-sync (30 FPS on GPU) |
π§ͺ Running Tests
cd backend
pytest -v # all tests
pytest tests/test_health.py # single module
pytest --cov=app --cov-report=html # HTML coverage
π° What's New
- 2026-06 β Edge-TTS neural fallback chain Β· local LLMs via Ollama/vLLM Β· demo avatar seeding Β· prebuilt GHCR images Β· cascade-delete + WebM-STT + 429 fixes Β· SEO/metadata pass
- 2026-05 β httpOnly-cookie auth (XSS-safe) Β· conversation resume from history Β· end-to-end WebSocket tests Β· perf indexes (migration 0002)
- 2026-03 β Chatterbox Multilingual replaces XTTS v2 (23 languages) Β· MuseTalk persistent worker (models load once) Β· barge-in interruption Β· live token streaming
πΊοΈ Roadmap
- Streaming LLM β TTS + lip-sync start before the LLM finishes (token-by-token) β
- Barge-in β interrupt the avatar mid-reply by speaking β
- Local LLMs β Ollama / vLLM / LM Studio via OpenAI-compatible API β
- Hands-free mode β VAD-driven always-listening with auto end-of-turn (no tap-to-record)
- WebRTC streaming β sub-second full-duplex audio/video instead of chunked MP4
- Wav2Lip engine β lighter lip-sync option for weaker GPUs
- Emotion-driven animation β detected emotion changes facial expression
- Embeddable widget β drop a talking avatar into any website with 3 lines of JS
- Long-term memory β RAG + vector DB for persistent context
- UI i18n β the pipeline speaks 23 languages; the UI should too
β FAQ
Do I need a GPU?
No β everything runs on CPU. MuseTalk takes 30β90 s/sentence on CPU (the simple engine is instant). For real-time lip-sync, use an AWS g5.xlarge (~$0.30/hr spot) or any 16 GB+ NVIDIA card.
Can I run it with no API key, fully offline?
Yes β set LLM_PROVIDER=ollama, run Ollama (ollama run llama3.1), and you have a fully local, free conversation stack: Whisper STT, local LLM, Chatterbox TTS, MuseTalk video.
How do I get something to talk to quickly?
Run python scripts/seed_demo.py β it creates three demo avatars (AI-generated faces, distinct personalities) and optionally cloned demo voices with --with-voices.
How do I get MuseTalk models?
Run bash scripts/setup_musetalk.sh β downloads ~9 GB of models automatically.
Why does the first response take longer?
The MuseTalk persistent worker loads all models into GPU VRAM on the first request (~60 s on GPU, ~5 min on CPU). Subsequent requests reuse the loaded models.
What happens if the TTS model can't load?
The pipeline degrades gracefully: chatterbox β edge-tts (free Microsoft neural voices) β gTTS. The UI shows a one-time notice when a cloned voice couldn't be applied.
What avatar photo works best?
A clear, well-lit frontal face photo (JPEG/PNG/WebP). Avoid sunglasses or heavy occlusion.
π€ Contributing
Contributions welcome! Read CONTRIBUTING.md before opening a PR.
git clone https://github.com/PunithVT/ai-avatar-system.git
git checkout -b feat/my-feature
# make changes + tests
git commit -m "feat(backend): add my feature"
git push origin feat/my-feature
π License
MIT Β© 2026 β see LICENSE for details.
// compatibility
| Platforms | cli, api, web, mobile |
|---|---|
| Operating systems | β |
| AI compatibility | claude |
| License | MIT |
| Pricing | open-source |
| Language | Python |
// faq
What is ai-avatar-system?
π AI Avatar / digital human platform β upload a photo, clone a voice, talk to any face in real time with lip-sync video. Open-source, self-hosted. Claude Β· Whisper Β· Chatterbox Β· MuseTalk.. It is open-source on GitHub.
Is ai-avatar-system free to use?
ai-avatar-system is open-source under the MIT license, so it is free to use.
What category does ai-avatar-system belong to?
ai-avatar-system is listed under data in the Claudeers registry of Claude-compatible tools.
// embed badge
[](https://claudeers.com/ai-avatar-system)
// retro hit counter
[](https://claudeers.com/ai-avatar-system)
// reviews
// guestbook
// related in Frameworks & SDKs
An open-source AI coding agent that lives in your terminal.
Claude Code ζ³ι²ζΊη - ζ¬ε°ε―θΏθ‘ηζ¬οΌζ°ε’θ·¨εΉ³ε°ζ‘ι’η«―θ½―δ»Άθ‘₯ι½Computer UseοΌιεΈ¦ζ ΈεΏζ¨‘εθ§£ζοΌ
LangGPT: Empowering everyone to become a prompt expert! π π η»ζεζη€Ίθ―οΌStructured PromptοΌζεΊθ π ε ζη€Ίθ―οΌMeta-PromptοΌεθ΅·θ π ζζ΅θ‘ηζη€Ίθ―θ½ε°θεΌ | Language of GPT The pβ¦
Multi-Agent Harness for Production AI