Puppet
Jump to the demo

Self-hosted live AI VTuber

Run your own living, talking co-host.

Puppet is the engine behind AI VTubers, minus the weeks of plumbing. Bring a model and a voice, attach a Godot avatar, and it handles the live loop, chat, moderation, and memory - on hardware you already own.

2D AVATAR IN GODOT · YOUR OWN LLM + VOICE · NO CLOUD LOCK-IN

OFFLINE
0 watching
live chat0 msgs

The loop

Chat goes in. Personality comes out.

Four steps, all self-hosted, all yours. Every AI VTuber runs this same loop - Puppet just makes it a weekend job instead of a quarter.

  1. 01

    Ingest

    Pull chat from Twitch, YouTube, or any socket. Spam filtering, a ban-word list, and per-user cooldowns keep the feed sane before a single brain sees it.

  2. 02

    Reason

    Your LLM, local or hosted, with a persona prompt and rolling memory. If you self-host the model, nothing leaves your box.

  3. 03

    Speak

    A text-to-speech of your choice turns the reply into spoken lines. The engine tracks speech timing so the avatar stays in sync.

  4. 04

    Puppet

    A Godot avatar lipsyncs and emotes from audio and message signals, rendered live in the stream. This is the layer most people skip.

The wedge

Your edge is a real avatar, not the same rig.

Every AI VTuber is starting to look identical: the same stock Live2D model, the same canned emotes. The one genuinely hard, opinionated layer in the whole stack is the avatar itself - and it's exactly the part you can build better.

  • A character rendered in real time in Godot: physics for hair and cloth, a real animation tree for expressions, no per-frame export fees and no per-seat rig costs.
  • Live2D tools price by rig and export. Godot is a free engine, so your avatar is an asset you own outright, not a license you rent.
  • A puppet you control in code: mood, energy, lip-sync and blink all driven by the same signals that make the brain talk.
avatar.gdgodot
# avatar.gd - drive expression from the pipeline
@onready var mouth := $Mouth

func on_speak(state: Dictionary) -> void:
    mouth.target = state["envelope"]      # 0.0 - 1.0 from TTS
    $Blink.pace = 4.0 * state["energy"]
    play("talk" if state["speaking"] else "idle")

func on_chat(ev: ChatEvent) -> void:
    bubble.push(ev.author, ev.text)
    mood.set(ev.sentiment)

Your model, voice, persona and avatar are your assets. The engine is the loop that makes them talk in public without you holding every string.

Who pays, and why

A small stream crew is enough to start.

Not a platform play, not a billion-user bet. One narrow customer, one clear job.

  • A

    The buyer

    Solo VTubers and small stream teams who want an autonomous co-host for off-peak hours, hosting, and IRL chat without assembling a pipeline from scratch.

  • B

    Why they pay

    Building this plumbing across LLM + TTS + a chat bot + an avatar + moderation is weeks of work and a tangle of monthly services. Puppet bundles it self-hosted, on hardware they already own.

  • C

    Revenue path

    Free open-source Godot avatar to pull in the community. A paid tier for the managed pipeline - hosted routing, voice, bot, analytics - at a flat monthly. A custom-avatar studio later.

  • Next proof point

    One live stream decides it. Run a demo Puppet VTuber on a small channel for a set number of hours and measure two numbers: engaged minutes per viewer, and moderation incidents under load. That data tells you whether this is a product worth shipping - and it's the first milestone for a single developer.

    See the loop in two minutes.

    The demo above is a working prototype of the live side. Send a message, watch the puppet talk back, and picture your own avatar in the frame.

    Back to the stage