This repository has no description
Headless VTuber architecture notes#
Recommended first build#
Use a split architecture:
- Chat/runtime process on the headless machine
- Avatar renderer as either:
- a headless browser scene with sprite layers and viseme/expression animation, or
- a Linux-native VTuber renderer if one exposes remote control hooks
- ffmpeg composition and push to stream.place via WHIP or RTMP
Why not start with a full Live2D rig?#
Live2D-on-Linux headless is possible but likely slows iteration. First prove:
- incoming chat
- generated reply
- synthesized audio
- deterministic motion/expression events
- continuous video stream
Then swap the renderer.
Recommended prototype phases#
Phase 1#
- simulate stream.place chat locally
- generate reply text
- synthesize or stub audio
- emit avatar actions like
talk:start,emotion:happy,head:nod - render a simple animated scene to a test stream or file
Phase 2#
- connect real stream.place chat feed
- post replies back to chat
- map reply prosody/emotion to avatar events
Phase 3#
- replace simple avatar scene with a real VTuber rig
- add interrupt handling, queueing, moderation, and pacing
Candidate render paths#
Path A: Browser/canvas renderer#
Pros:
- easiest to automate from CLI
- easy websocket control
- easy capture with Chromium or ffmpeg from a virtual display
- good enough for a first expressive avatar
Cons:
- not a full Live2D rig
Path B: OpenVT or custom Godot scene#
Pros:
- closer to real VTuber motion
- Linux-native
Cons:
- more integration work
- remote-control API may need custom glue
Path C: OBS scene graph on another machine#
Pros:
- simplest if final stream production happens elsewhere
Cons:
- not fully headless/self-contained