Show HN: Self-Hosted AI That Sees, Plays Minecraft, and Reacts
Wallie is an open-source AI streamer that watches your screen, hears audio, and now plays Minecraft autonomously. It features long-term memory, natural pacing, a full persona system, and emotion-driven Live2D avatar.
Notifications You must be signed in to change notification settings
Fork 4
Star 18
BranchesTags
Open more actions menu
Folders and files
NameName
Last commit message
Last commit date
Latest commit
History
36 Commits
36 Commits
audio
audio
avatar
avatar
chat
chat
control
control
core
core
dashboard
dashboard
dist/mods
dist/mods
docs
docs
hearing
hearing
llm
llm
profiles
profiles
scripts
scripts
tests
tests
tts
tts
utils
utils
vision
vision
.env.example
.env.example
.gitattributes
.gitattributes
.gitignore
.gitignore
CONTRIBUTING.md
CONTRIBUTING.md
LICENSE
LICENSE
README.md
README.md
SECURITY.md
SECURITY.md
main.py
main.py
config.py
config.py
install.bat
install.bat
install.sh
install.sh
requirements.txt
requirements.txt
secrets_store.py
secrets_store.py
start.bat
start.bat
start.sh
start.sh
wallie.py
wallie.py
Repository files navigation
The open-source AI streamer that sees, hears & reacts — and actually feels alive.
Quick Start · Features · Dashboard · Architecture · Roadmap
⭐ If you think an AI that watches and hears your screen should exist — give it a star. Two seconds, and it genuinely helps a solo dev keep shipping.
Every AI streamer you've seen has the same problem.
It says two sentences. Pauses. Says two more. Pauses. Describes your YouTube homepage like a screen reader. Forgets what it said thirty seconds ago. Ends every thought with "what do you guys think?" into a chat that doesn't exist. It's not a show — it's a tech demo on loop.
Wallie is different. It's an AI that actually streams — develops thoughts across minutes, reacts to your screen like a person who's been using that computer all day, remembers what it covered an hour ago, takes opinions and sticks with them, drifts between topics the way real conversations drift, and shuts up when there's nothing worth saying.
You design the streamer. Wallie runs the show.
persona ──┐ topics ──┤ chat ──┤ vision ──┼──► Wallie ──► Voice (TTS) ──► OBS / virtual cable ──► your stream hearing ──┤ ──► Live2D avatar (VTube Studio) schedule ──┘
Pick the personality. Pick the voice. Pick the LLM. Pick the platform. Everything is swappable, everything is configurable from the browser, and the whole thing runs on your machine with your keys.
🎮 New in v2.0 — Wallie can now PLAY
Wallie doesn't just watch your screen anymore — it picks up the game and plays it. Right now that's Minecraft: it gathers, crafts, builds, fights, and explores entirely on its own, narrating every moment in character. Smooth, human-looking camera. No human at the keyboard, no script — a real playthrough with a personality.
https://www.youtube.com/shorts/NEfsmppOXJk
And here's the part that makes it believable: the commentary is grounded in what Wallie is actually doing — its real inventory, health, and current goal — not guessed from a blurry frame. So it says "heading down to mine diamonds" because it is, and brings up "that one time I dug straight into a lava pit" because that's its run.
It actually plays — a planning brain sets the goal; Baritone handles pathfinding & mining, and a custom Fabric mod handles crafting, combat, item pickup, and a buttery-smooth camera that looks human, not robotic.
Grounded commentary — the streamer core stays in sync with the playing brain, so what it says matches what it does.
One-click setup — the dashboard installs Fabric + every mod for you (and backs up your current ones first).
Any persona, any model — Play is just another mode. Vision, Hearing, and Play each toggle on/off independently.
Flip on Play in the dashboard, pick a goal, and go — or jump straight in:
python scripts/run_wallie_live.py
Why another AI streamer?
Because the existing ones are toys.
They work for a 2-minute demo and fall apart on a real stream. Here's what actually goes wrong after 10 minutes:
The problem What usually happens What Wallie does
Repetition Says "that's interesting" every 30 seconds Dedupe engine + phrase cooldown + rolling summary that tracks everything already said
Short memory Forgets the topic from 5 minutes ago Rolling summarizer compresses old turns into bullet notes, injected into every prompt
Robotic vision "I can see a YouTube homepage with several videos" First-person ownership + SKIP escape hatch — narrates nothing, reacts to what matters
Question loops Every segment ends with "what do you think, chat?" Question detector throttles after one; next prompt forces a statement ending
No personality Generic helpful assistant voice Full persona system: energy, humor style, catchphrases, backstory, opinions, taboo topics
Choppy pacing 2 sentences → long pause → 2 sentences Pipeline overlap + longer thought development eliminates dead air
Broken threads Sets up a story, never delivers it Open-thread tracker forces the next segment to pay off teases and answer its own questions
Topic whiplash Jumps from AI to cooking to space with no bridge Association-based topic drift with configurable style (rigid / natural / freeform)
These aren't edge cases. They're the default behavior of most AI streamer projects. Wallie was built by hitting every one of these problems and refusing to ship until they were fixed.
Features
Bring your own everything
Six LLM providers. Three TTS engines. Three chat platforms. Mix and match per profile.
LLM TTS Chat Avatar
OpenAI Fish Audio Twitch VTube Studio (Live2D)
Anthropic (Claude) ElevenLabs YouTube —
Google (Gemini) Piper (local, free) Kick —
Groq — — —
OpenRouter — — —
Ollama (local, free) — — —
Swap providers without changing code. Run a fully offline stream with Ollama + Piper, or go premium with Claude + ElevenLabs.
Full persona design
Not just a name and a system prompt. You design a character:
Identity — name, handle, pronouns, age range, origin, archetype, backstory
Voice — energy level (chill → unhinged), humor style (pick multiple: ironic, deadpan, absurd, observational, roast...), profanity level, formality
Flavor — catchphrases, running gags, banned words, favorite topics, taboo topics
Opinions — strong opinions toggle, admit uncertainty, break the fourth wall
Extra notes — free text for anything the structured fields miss
Save multiple personas. Switch between them with a dropdown.
Hours-long sessions without decay
The single biggest technical challenge. Most AI chatbots break down after 20 minutes because the context window fills up.
Wallie's approach:
Rolling summarizer — every ~14 segments, a background LLM call compresses older history into tight bullet notes
Session notes — that compressed memory is injected into every system prompt, so the streamer knows what it already said
Cross-session memory — key facts and viewer interactions persist across streams
Dedupe engine — paraphrase-aware similarity check (bigram + trigram Jaccard) catches the model repeating itself in different words
Organic pacing
Real streamers don't talk at a constant rate. They get excited, they pause to think, they go on tangents, they settle into a flow.
Mood engine — arousal, valence, focus, and talkativity drift slowly over the stream. High arousal = faster, warmer output. Low talkativity = silence beats. Mood state feeds into the avatar for reactive animation.
Attention engine — vision events are filtered through a probabilistic decision layer. Not every screen change gets a deep reaction. Some get a glance. Some get ignored. Some trigger a personal tangent.
Silence beats — the streamer holds natural pauses when the mood says to. Dead air handled by design, not by accident.
Pipeline overlap — next segment starts generating while current audio is still playing. No awkward 3-second gaps between thoughts.
Vision that isn't narration
wallie_minecraft.mp4
Screen reactions are the hardest part to get right. Wallie's approach:
First-person ownership — Wallie owns whatever is on screen. Gaming: "I just got bodied by that boss", not "the character is fighting a boss". Browsing: "let me pull this up", not "the user is browsing". Never third-person, never narration.
SKIP escape hatch — if there's nothing specific to name, the model outputs SKIP and stays quiet. No more narrating generic UIs.
Activity adaptation — detects scrolling, typing, app-switching, video playback and adjusts reactions accordingly. Typing → ignore. App switch → react. Rapid browsing → wait until user settles. Each activity type gets context-aware prompting.
Attention engine — not every screen change gets the same treatment. DEEP reactions (22%), quick GLANCEs (28%), personal TANGENTs (5%), deliberate IGNOREs (27%), and SILENCE beats (18%). Streak fatigue prevents reacting the same way twice in a row.
Scene memory — remembers what it last said about the current screen. Dedupe threshold at 0.65 with per-sentence comparison catches paraphrased repetition.
Hearing — it reacts to what it hears, not just what it sees
Wallie captures your system audio (WASAPI loopback) and reacts to it live, fused with vision into a single reaction — sight and sound, one voice. Just like you organize your senses, not two narrators talking over each other.
Speech & lyrics — local speech-to-text (faster-whisper) transcribes videos, voice chat, and song lyrics. Auto-uses your GPU if available, clean CPU fallback if not.
Real music understanding — pure-numpy DSP, no extra ML weight. It reads major/minor key → mood, tempo + beat strength, instrumentation texture (bass-heavy / acoustic / airy / lo-fi), and production quality (crisp / muddy / harsh). A sad song reads as melancholy; a beat drop reads as energy. It'll call a track a banger or roast a muddy mix.
Multimodal fusion — what it hears is fused with what it sees into one coherent reaction, never two competing ones.
No self-echo — content-based guard so Wallie never reacts to its own TTS bleeding back through the loopback.
Pure-hearing mode — run it with vision off and it reacts to audio the way it reacts to a screen: stays quiet, listens, then reacts to what's playing.
Enable it in the dashboard's Hearing section. Needs two extra deps: pip install soundcard faster-whisper.
Wallie plays games — not just watches them
Play mode hands Wallie the controls. First game: Minecraft, survival, live and unscripted.
Reliable autonomy — a planning brain picks high-level goals; a deterministic skill library (crafting, smelting, full tool/armour sets, mining to ore depths, hunting for food & wool, beds, combat with weapon selection, dropped-item pickup) does the actual work — so even a small/free model plays competently instead of flailing.
Human-like camera — a custom Fabric mod eases every turn at full FPS. No snapping, no teleport-cam — it reads like a person playing.
Grounded commentary — reactions come from the agent's real game state (inventory, health, threats, current goal), fused through the same single pipeline as vision and hearing. No screen-guessing, no hallucinated "desert temples".
One-click install — Fabric + all mods straight from the dashboard's Play section. Vision/Hearing/Play toggle independently, on any persona.
Live2D avatar with emotion
Not just a mouth that opens and closes. Six animation layers run simultaneously over a single WebSocket, so the avatar feels like a person — not a puppet.
Viseme lip sync — spectral analysis of PCM audio estimates mouth shape in real-time. Front vowels (A/E/I) spread the mouth wide, back vowels (O/U) round it. Combined with RMS amplitude for jaw openness, attack/release envelope, noise floor gating, and a speaking smile baseline. The result: the avatar's mouth actually forms different shapes per sound, not just open/close.
Blink — periodic natural eye blinks (~3.8s int
[truncated for AI cost control]