OmniAvatar¶
Provider-agnostic AI avatars for Go — one interface, two surfaces, three providers.
OmniAvatar gives PlexusOne applications a unified way to work with AI avatar vendors:
live— real-time streaming avatar sessions (LiveKit rooms, PCM audio streaming for lip-sync) for conversational agents such as OmniMeetrender— asynchronous batch avatar video generation (narration audio in, talking-head MP4 out) for offline pipelines such as videoascode presentation videos
Supported Providers¶
| Provider | Live | Render | Render Audio Upload |
|---|---|---|---|
| HeyGen | LiveAvatar LITE mode | Video Generation v2 | Yes (MP3) |
| Tavus | Conversational Video (CVI) | Video Generation (replicas) | No — URL only |
| bitHuman | Real-time Avatars | Video Generation | Yes |
Installation¶
For interfaces only (no provider dependencies):
Quick Example¶
import (
"github.com/plexusone/omniavatar"
"github.com/plexusone/omniavatar-core/render"
_ "github.com/plexusone/omniavatar/providers/all"
)
provider, err := omniavatar.GetRenderProvider("heygen",
omniavatar.WithAPIKey(os.Getenv("HEYGEN_API_KEY")))
job, err := provider.Generate(ctx, render.GenerateRequest{
AvatarID: avatarID,
AudioURL: narrationURL, // lip-sync driven by your own audio
})
status, err := render.Wait(ctx, provider, job.ID, 5*time.Second)
err = provider.Download(ctx, job.ID, outFile)
Module Layout¶
OmniAvatar follows the same pattern as OmniVoice:
| Module | Contents |
|---|---|
omniavatar-core |
Interfaces only (live, render, registry) — no provider dependencies |
omniavatar |
Provider implementations with auto-registration |
See the Architecture guide for how the split works and when to import which.
Next Steps¶
- Live Quick Start — real-time avatar in a LiveKit room
- Render Quick Start — narration audio to talking-head MP4
- Render PRD / TRD — design background