ROADMAP: OmniAvatar Render¶
Status: Living document Date: 2026-07-16 Related: PRD.md, TRD.md, PLAN.md
v0.2.0 (current — see PLAN.md)¶
- Rename
omniavatar-core/avatar→omniavatar-core/live. - New
omniavatar-core/renderinterfaces (Generate/Status/Download,AudioUploadercapability,Waithelper). - Render providers: HeyGen, Tavus, bitHuman.
- Audio upload: bitHuman (file API) and HeyGen (new
heygen-go/assetpackage wrappingupload.heygen.com/v1/asset) implementAudioUploader; Tavus remains URL-only (no upload API). - Symmetric registry API:
*LiveProvider*/*RenderProvider*.
v0.3.x — Audio delivery completeness¶
- Evaluate a generic S3/GCS-presigned-URL uploader helper for providers without hosting (Tavus), likely as a separate utility package so
omniavatar-corestays dependency-free. - Evaluate WAV support for HeyGen uploads (only MP3/
audio/mpegis documented as an audio asset type today); fall back to transcoding guidance in videoascode if HeyGen keeps the restriction.
videoascode integration (UC1) — landed with v0.2.0 (videoascode v0.7.0)¶
Work lands in grokify/videoascode (consumer), tracked here for coordination:
- [x] Concatenate per-slide narration (including pause gaps) into one normalized MP3 before generation (
pkg/avatar.ConcatManifestAudio). - [x]
vac avatar generate→presenter.mp4, cached by hash of (audio content + avatar config), matching the existing TTS-cache philosophy. - [x]
vac avatar compose— FFmpeg circular mask + corner overlay with optional border ring; narration audio remains the authoritative track (never the avatar video's audio). - [x] Orchestrator integration:
--avatar-*flags onvac slides videorun the overlay as an integrated final stage (orchestrator.AvatarConfig). Upload-capable providers only (heygen, bithuman); Tavus stays on the decoupled--audio-urlflow. - [ ] Slide-level overrides (
visible: false) driven by the timing manifest (fade avatar in/out).
v0.5.x — Additional providers¶
- D-ID (
Create a talkAPI: photo + audio/text) — validates the interface against a photo-first provider; likely requires ad-id-goSDK repo first. - Local/self-hosted renderer (e.g., open-source lip-sync models) for private deployments — exercises the interface without any network provider.
Later / investigating¶
- HeyGen lipsync-precision path (Path B): neutral presenter source video + replacement audio for frame-accurate sync and full visual control (framing, wardrobe, camera). Requires wrapping the lipsync endpoint in heygen-go and adding a
SourceVideoURLfield or extension toGenerateRequest. - Webhook/callback completion: all three providers support callbacks (HeyGen
callback_id, Tavuscallback_url, bitHuman webhooks). Add an optional capability interface so long jobs don't require polling. - Avatar normalization helpers: standardize provider output (square crop, fixed FPS/codec/duration alignment) — possibly in videoascode rather than here, to keep omniavatar free of FFmpeg dependencies.
- Transparent output: Tavus supports
transparent_background(WebM, fast mode); evaluate alpha-channel passthrough inGenerateRequest.Backgroundonce a second provider supports it. - Multi-language batches: one render job per language from per-language narration, reusing videoascode's JSON transcript support.
Non-goals (revisit only with new evidence)¶
- Real-time use of render providers (LiveAvatar/CVI already cover this via the
livesurface). - Provider-side full-presentation rendering (slides stay a local, deterministic FFmpeg composition).