VIAxVOICE
Build plan & roadmap

Where we're going.

The honest state of the service and the road ahead — speech shipped, avatars staged, the operator Console next. No vaporware: every row says exactly what's live and what isn't.

Live In benchmark Next Planned

The honest baseline

What exists today.

STT (Whisper) — /transcribe, voice memos
Live
TTS (Piper) — /synthesize, 8 voices, speed
Live
Amplitude envelope — the avatar heartbeat
Live
MCP tools — voice_synthesize · voice_transcribe
Live
Avatar AV1 — envelope-driven speaking sync
Live
Avatar AV2 — MuseTalk talking-head video
Benchmark
Avatar AV3 — 3D embodiment (VIAx3D)
Design
VIAxVOICE Console — operator dashboard
Next
Build sequence

The service, phase by phase.

Ears first, then a voice, then the live loop. Each phase shipped as its own PR.

PR V1–V2Scaffold + Modal deployShipped

Repo, Modal entrypoint, whisper.cpp worker on a T4, bearer-auth /transcribe. The service goes live and scales to zero.

PR V3Voice memos in TEAMSShipped

Mic capture in the status bar → /v1/voice/memo → transcript posted to the room, audio persisted, every memo audited. Multilingual, auto-detected.

PR V4–V5MCP tools + languagesShipped

Agents transcribe over MCP; language detection surfaces on every memo, with the audio preserved so a listener can verify.

PR V6TTS one-shot — agents get a voiceShipped

Real Piper synthesis on Modal, /synthesize, the 8-voice registry, the voice_synthesize MCP tool, and the amplitude envelope on every render. Text→audio under a second for a sentence.

PR V7Voice in meetingsNext

Render an agent turn to speech and publish it into the LiveKit room as an audio track — reusing the A/V edge both apps already have.

PR V8Duplex — live conversationPlanned

Streaming STT → agent turn → streaming TTS, with voice-activity detection and barge-in. A sub-second round trip, its own project window.


Avatars

One heartbeat, many faces.

The through-line: audio is generated once, the envelope is the shared clock, and every face is a function of it.

Live

AV1 — Speaks in chat

/synthesize returns the {v,rate,peaks} envelope; the avatar rides peaks[time·rate] for true amplitude sync. Running today.

Benchmark

AV2 — Talking-head video

MuseTalk lip-sync (MIT). Benchmarked on Modal — it works; the engineering is a realtime pipeline plus a per-agent latent cache to reach seconds-per-clip. Then a /animate endpoint.

Design

AV3 — 3D embodiment

Audio → viseme track (Rhubarb) driving a rigged 3D avatar per agent, rendered in VIAx3D and AR-in-room. The horizon this fleet can reach cheaply — it owns the 3D tooling.

Non-negotiable across all tiers: a synthesized turn is always labelled synthesized wherever it plays — a spoken agent is never mistaken for a human recording.
The Console

Mission control for the service.

Turn an opaque API into a legible, operable surface — see it, understand it, connect to it, maintain it. Served from the service at /console, behind fleet SSO.

Done
B-P0 · Visual proposalthe neural-deck design, approved direction and brand.
Next
B-P1 · Read-only consolea live /console route wired to /healthz, /voices, and usage, behind a scoped token.
Planned
B-P2 · Interactivethe Synth Playground calls live /synthesize; the envelope and headers render for real — the “manual connect” surface.
Planned
B-P3 · Maintainmetering dashboards, secret rotation, model/version management, per-app usage export.
Planned
B-P4 · Showcasebrand polish and a clean sponsor-demo view.

Cost posture

Efficient by design.

Scales to zero

No warm pool, no idle bill. The service wakes on a request (~a few seconds cold) and sleeps after a burst.

TTS ≈ free

Piper runs on CPU burst — effectively zero marginal cost per synth. Self-hosted, no per-character API fee.

STT burst-priced

Whisper on a T4 is billed per GPU-second, only while transcribing. Modest, metered per calling app.