§ 01

The Pipeline

four hops, under 800ms
end-to-end runtime · single utterance
01 · STTDeepgram
02 · LLMDeepSeek V3.2
03 · TTSQwen 3 TTS
04 · AvatarLive2D + LiveKit
Transport
LiveKit (WebRTC)
sub-300ms RTT
Speech-to-Text
Deepgram
multilingual stream
Reasoning
DeepSeek V3.2
via OpenRouter
Text-to-Speech
Qwen 3 TTS
expressive, low-latency
Avatar
Live2D Cubism
emotion-driven rig
Backend
Python · FastAPI
single-binary deploy
Emotion classifier
prompt-based · per-turn
5 discrete states
§ 02

Demo

v0.1.1 · live voice loop
v0.1.1 demoopen on YouTube
§ 03

The Emotion System

five poses, blended over Live2D parameters
§ 04

Avatar Rendering

browser-native, zero external software
rendering stack · bottom → top
TransportLiveKit + Web Audio
WebRTC data channel + AnalyserNode
Model RuntimeCubism 4 Core
WASM · parametric model engine
Live2D Bridgepixi-live2d-display
v0.4 · Cubism 4 subpackage
Browser LayerPIXI Application
WebGL canvas · full-viewport

The avatar runs entirely in the browser — no VTube Studio, no external process. The animation loop is monkey-patched into coreModel.update() so every frame gets injected parameters right before GPU commit.

01 · blink fsm

Organic Blink

A finite state machine fires random timers to trigger eye blinks. Probability and cooldown vary so the blink pattern never repeats identically.

ParamEyeLOpen / ParamEyeROpen
02 · saccades

Eye Saccades

Micro-randomization is added to gaze direction every frame via Math.random(). The eyes drift like real eyes — never perfectly still.

ParamEyeBallX / ParamEyeBallY
03 · lip sync

RMS Lip Sync

AnalyserNode computes Root Mean Square amplitude from the LiveKit audio track in a requestAnimationFrame loop and maps it directly to mouth open.

ParamMouthOpenY
§ 05

AI Memory & RAG

reads documents, recalls on demand
ingestion pipeline

Teaching AURA

Upload any document. AURA ingests, chunks, and embeds it — the knowledge becomes instantly searchable during live conversation.

01
UploadPOST /api/v1/memory · PDF, TXT, MD
02
Chunking500-char overlapping chunks via PDF parser
03
EmbeddingSentence-Transformers → dense vector
04
StorageSupabase pgvector · vector + metadata
retrieval · per turn

AURA Remembers

Every utterance triggers a semantic search. Matching chunks are silently injected into the LLM context — AURA appears to just know.

01
User speaksDeepgram transcription → query text
02
Semantic searchVector similarity vs. memories table
03
Top chunksBest-match text retrieved from pgvector
04
Context injectChunks injected into LLM system prompt
supabase schema · 4 tables
conversationsMetadata — id, title, user_id
messagesChat history — content, role, emotion, timestamp
memoriesKnowledge base — content, embedding vector, metadata
personality_settingsSystem prompts, voice, emotional baselines
§ 06

The Interface

not just an avatar — a full control surface
§ 07

What I built · what's next

What's in v0.1.1

  • End-to-end voice loop under 800ms from speech end to TTS start.
  • Multilingual input/output — Deepgram + Qwen 3 handle EN ↔ ID switching mid-sentence.
  • Five-state emotion system with prompt-based classification per turn.
  • Live2D rig driven by emotion vectors, lip-sync from TTS phonemes.
  • Hot-reload model swap — change LLM provider/model live from the control center.
  • Per-context memory — every chat keeps its own personality, history, and creativity dial.

What's next

  • Tool use — function-calling for calendar, search, code execution.
  • Long-term memory with vector recall across contexts.
  • Vision input — webcam frame analysis so AURA can see what you're working on.
  • Avatar marketplace — pluggable Live2D rigs with rig-aware emotion mapping.
  • Mobile client for the conversation loop.
  • v1.0 when emotion classification moves on-device.
§ 08 · talk to me about AURA

Building real-time AI? Let's compare notes.

I'm always happy to swap notes on Live2D rigging, sub-second voice pipelines, or emotion classification prompts. Or if you want AURA's roadmap to head somewhere specific — let me know.

currently in South Tangerang, Indonesia — async-friendly across timezones