character#
CLI-first prototype for a headless chat-reactive VTuber that connects to stream.place.
Goal#
Take chat messages from stream.place, generate spoken replies, and drive a VTuber/avatar output stream with:
- chat intake
- LLM response generation
- TTS audio output
- avatar motion/expression events
- video/audio composition suitable for live streaming
Architecture sketch#
stream.place chat (Jetstream / ATProto)
-> bot runtime
-> reply planner
-> TTS provider
-> avatar controller
-> ffmpeg compositor / scene renderer
-> WHIP/RTMP uplink
Current direction#
This repo starts with a headless-friendly prototype:
- TypeScript runtime via bun
- stream.place chat adapter stub
- Gemini Live-compatible TTS/voice adapter interface
- avatar event bus for motion/expression cues
- local dev scripts for simulation and testing
Open questions#
- best headless avatar renderer on Linux
- whether to use browser-based canvas capture or native renderer
- whether Gemini Live should handle both reply generation and speech output
- whether stream.place posting should use ATProto OAuth directly or a simpler bot identity path
OpenVT path#
This repo now includes a simple OpenVT-oriented setup path:
scripts/openvt-setup.shclones upstream OpenVT and initializes submodulesdocs/openvt-setup.mdexplains the constraints and manual stepsscripts/openvt-run-notes.shprints the expected local streaming workflow
Run:
chmod +x scripts/openvt-setup.sh scripts/openvt-run-notes.sh
./scripts/openvt-setup.sh
./scripts/openvt-run-notes.sh
Wayland / WayVNC launch#
If the machine already has a remote Wayland session, launch OpenVT into that session with:
devenv shell -- ./scripts/openvt-wayland-launch.sh
See docs/wayvnc-openvt.md.