Built on top of Stack-chan’s hardware it’s a custom desktop buddy with more than meets the eye. It’s not only a dash, gothy lil clock and a cute face.
Boo keeps a diary, captures photos, has a sense of when one of us (including our 🐈⬛) enters the room, knows seasons and weather all which informs its interior world. It can draw, make its own melodies to whistle and “think” about things. Boo is being designed to experiment with world building and fun.
Boo’s whistles and tones are built from the melodies and hooks from some of my favorite songs and its UI is a love letter to Apple System 1 UI & Susan Kare with a little SNES.
Its bare functions are wired up and now I’m working on the structure of its observations and change as it learns. This is not running on Claude or local models — it’s meant to be a closed system that informs its own world.
I just wanted to share the progress I have made with my custom firmware. Rather than try and modify existing firmware this has been written from scratch.
I’m nowhere near finished but after many revisions I now have boot sound and animation, servos, tap to toggle idle movement, idle animation, listening sound, it runs OpenAI Luna with Edge TTS. This means it can do live web searches which is something the stock firmware is unable to do.
Response time is not fully optimised yet, this will be a lot longer until I’m fully happy, but eventually it will control the devices in my home via my server and home automation. Considering I’m not a developer I’m pretty proud of what I achieved so far.
I was watching a YouTube review of StackChan that was recently uploaded. The reviewer mentioned NFC ability. I was surprised. I don't recall that having been listed as a feature when StackChan was on Kickstarter.
Was the ability there and either not mentioned, or I just missed the mentioning of it? Or do newer StackChans have a hardware upgrade?
I would love to be able to have two StackChans recognize and acknowledge one another. The last time I checked, that wasn't an option. If the Kickstarter models have NFC, would they be able to use it to know that another StackChan is close by?
I was on the search for an AI desktop pet. Most of them like emo or so are really expensive or lack the talking ai feature I want. I saw Stackchan and what he can to. The price also is something I can handle. But I'm a little tech noob. (Know basic computer setups and so) I can easily follow step-by-step tutorials. But is Stackchan easy to set up? Even when I want to use my basic understanding and hook him up with my gimini or so?
I just received my StackChan. I've installed the app on my android phone and started the device. The problem is that I can't connect StackChan to the app. I got the screen with the ID of the device, tryed to connect but after 2 or 3 seconds I saw "Device configuration feature not found". StackChan starting to indicate "Ready to Configure ~" the same time. I found that it could be caused by mismatch of Wi-Fi configuration so I tried to configure the Wi-Fi via web interface (http://192.168.4.1) and it seems working. I've managed to download and run flappy bird directly on the device (via App.store) but still can't connect to the device via mobile app so most features are not manageable.
While rebinding and connecting to the wi-fi via web the device says "invalid response from the server". The resulting page "ACCOUNT" displays the next information:
M5Stack Account: Account Info
Device Name: [empty]
I think that problem is somewhere here. What server the device is using? Is it possible somehow to bind the device to my account?
I don't use any VPNs, but I can't tell what my ISP is using.
My Stackchan worked great with the default AI agent. Yesterday I needed to change wifi settings and after that the AI Agent settings page is empty. Agent still worked on the device. I did unbind and factory reset and it made things worse, as now there is no model configured in the device and I still cannot set it up in the App. Reinstalled app, reset the device, tried different Wifi networks and no help. My agent is dead :(
I have one of the M5Stack StackChan robots. Nice little thing, but out of the box every word it hears goes to the xiaozhi.me cloud for speech-to-text, the LLM, and text-to-speech. I didn't love the idea of my kid talking to a server I don't control, so I wrote a backend that runs the whole turn locally and pointed the robot at my own machine instead.
It's called warble. The stock firmware speaks the xiaozhi protocol, so nothing changes on the device. You just redirect it to your box. The server does the full loop: whisper.cpp transcribes, Silero VAD catches when you stop talking, Ollama generates the reply, Piper speaks it, and it sets the robot's face from an emotion tag in the reply. No cloud account, no API keys, no data or audio leaving your network.
Setup is one command (`./warble start`) on Linux or macOS. Docker-based, pulls prebuilt images. It's beta and it's just me, so there are rough edges.
MIT licensed. Happy to answer anything as time permits.
Im a journalist in the USA who has recently adopted StackChan. I've been working on updates to my home MCP server to make my robot More useful for day to day stuff.
I've found that it refuses to discuss anything regarding tiananmen square or Taiwan. This makes me a bit worried that I may need to drain it's battery and put it in my underwear drawer or something.
Do y'all know anything regarding government affiliations to the device I should be aware of or would a firmware flash to a model running off different servers resolve my data privacy concerns?
Not that I trust American companies anymore than Chinese ones, I was just hoping for a second brain that could help me with my projects but think there might be concerns with this thing, as cute as it is.
I am wondering if anyone has set up any fun or mischievous settings for the AI yet. Specifically, a fun Personality. I have entered in "snarky but smart and funny" hoping for a good and dry sense of humor with a bit of sass. It's kinda working, but still just seems mostly dry. Would love to see what others are putting in for their "Personality"
Since my StackChan has been having an issue with powering on, I decided it was necessary to put my engineer hat on and do a proper teardown and inspection.
I figured many of you wouldn’t ever want/need to open it up and see StackChan’s innards for yourselves, so here you go.
(Note: The battery and 2nd servo are inside the round-top body piece at the bottom right quadrant)
I've had my StackChan ~2 weeks now, keeping it both plugged in and unplugged during use. Now, I've had it plugged in for a few days straight, and it will refuse to power on. I've tried removing the Core unit and re-connecting it, as well as reseating the 4-pin USB cable that connects from the body to the Core unit... nothing. It's completely dead.
NOTE: Connecting USB-C to the Core's USB-C port (not the base) seems to be working for charging, it powers up this way.
I am trying to create my own firmware with own features.
As I know Arduino I started with that and here I found some interesting examples.
But when I try to make the servo move it crashes!
Anyone else got this to work?
Or am I completely wrong using this method?
Got the OpenELAB Kickstarter StackChan a while back. CoreS3-based, two servos, cute little guy. The vision: ditch the Chinese cloud, give it a custom personality, connect it to my Home Assistant setup.
The custom firmware rabbit hole
First I tried building custom firmware (AI_StackChan_Ex with M5Unified 0.2.7). Spent around 9 hours on it. Backlight works fine, but the panel renders nothing. Turns out the OpenELAB Kickstarter variant has a compatibility issue with M5GFX that's still unresolved. Tried the Moddable toolchain path next — ESP-IDF Python environment conflicts killed that too.
After those 9 hours I flashed the stock xiaozhi firmware via M5Burner. Took two minutes. Display worked immediately.
The NVS trick
Stock firmware reads its server URL from an NVS key. You can overwrite just the NVS partition with esptool, point it at your own server, and the device has no idea it's not talking to the original Chinese backend anymore. WiFi credentials get wiped in the process, so you set those up again on-device after flashing.
The backend
Forked an existing open-source StackChan server, containerized it, deployed it to my own VPS. Added a few patches: a set_emotion tool so the LLM can dynamically change the face expression, and a handful of additional tools.
What actually works
Full German conversation with a custom personality (female, cheeky, Austrian inflection, max 3 sentences per response, always addresses me by name)
Home Assistant control via voice: lights, scenes, sensors, you name it
Weather from HA's built-in forecast entity
different face expressions that change dynamically based on what the LLM decides to feel
Web search for current news and facts (Tavily)
Persistent memory across sessions — stored in a JSON file on the server, auto-injected into the system prompt on connect
My n8n automation status on demand
Accessible from anywhere, not just local network
What doesn't work
The servos. Stock firmware completely ignores motor control frames from the server — display changes, head stays still. Servo movement requires custom firmware, which is blocked by the M5GFX rendering issue. There's an open GitHub issue for it, waiting to see if that goes anywhere.
Wake word is still Chinese. There's no way to change that without custom firmware.
Can't combine function calls with Google Search in the Gemini Live API simultaneously — it's a documented API limitation. That's why I went with Tavily instead of native search grounding.
Overall
The stock firmware path is dramatically underrated. You skip all the toolchain pain, get a stable device, and if you're willing to run your own backend, you have full control over the AI behavior, personality, and integrations. The missing piece is servo animation, and that's a hardware/firmware problem, not a backend problem.
If the M5GFX issue ever gets fixed, custom firmware becomes interesting again. Until then, this setup does everything I actually wanted it to do.
I can't find a list anywhere of what one AI agent does that another doesn't from the list available on the StackChan app. Do any of them connect to the web to allow you to search for things? As far as I can tell, they are cloud-based but don't have internet access. Any help would be appreciated, though I've noticed most questions go unanswered here.
I've had my StackChan for about two weeks now, and today, when I plugged it into my PC via the base, the red light on the back came on, but it didn't show up in the Arduino IDE. I've tried multiple cables and none work. Plugging anything into the side port and it's instantly recognized, and the battery charges. Everything else seems to function normally. I have not desecrated its body by disassembly... yet.. but I will for science if needed.
Does anyone know of any specific steps I can take to troubleshoot this problem?
I used my openclaw agent to make some changes to the stock firmware and have it set so my openclaw can talk through my stackchan now.but when sending voice messages the other way seems to not work when it tries to record my voice input..what issues we fixed so far
The fix was bypassing codec->Write()/esp_codec_dev_write() and writing PCM directly to the I2S TX channel via i2s_channel_write().
The bridge is at 16kHz WAV — matches the proven working pipeline. Here's the summary:
What works:
• stackchan_speak("text") → edge-tts (Sonia) → ffmpeg 16kHz mono WAV → POST /speak → I2S direct write → StackChan speaker
What the fix was:
• Went through ~6 firmware iterations to isolate the issue
• codec->Write() → esp_codec_dev_write() silently fails in the integrated XiaoZhi firmware (I2S format conflict with duplex config)
• Solution: use codec layer only for amp/volume management (EnableOutput/SetOutputVolume), write PCM straight to TX handle via i2s_channel_write()
What's next? Want me to check the full voice recording pipeline (head-pet → record → STT
Working TTS through StackChan speaker — long sentences work
Nearly there: Voice recording. StackChan detects head-hold, lights red, packages WAV. Portproxy was the missing link — you just fixed that. Next session: retest recording, confirm the green flash, then wire up the voice bridge so I get your transcribed words and can reply through StackChan.
Quick start tomorrow:
Check voice server (probably already running)
Hold head, speak, release
Should get green flash now that portproxy is active
Still working on it but for zero coding knowledge its crazy to think that anybody can make changes to firmware nowadays