You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
After flashing the firmware and starting the gateway, the LCD does not display the avatar until an MCP client explicitly calls set_avatar(face="idle"). Until that call lands, the screen stays on whatever it was showing previously (xiaozhi-esp32 setup UI, or the last frame from the previous session) and the device appears "asleep" even though the WebSocket is connected and tools are reachable.
Calling set_avatar(face="idle") once brought the avatar up and made the device look unmistakably "alive".
A first-time user reading the README would not necessarily know to make this call, so the kit's first-impression boot path is "I'm connected but nothing visible happens" — easy to confuse with a wiring or boot bug.
Proposal
Pick one — (A) is recommended because it preserves the existing set_avatar(face="off") semantics for users who deliberately want the underlying xiaozhi screens (WiFi setup UI, OTA, etc.):
A. Default after first MCP tools/list exchange. Once the gateway finishes initialising the device session, if no set_avatar has been called yet, the firmware renders idle. Subsequent set_avatar(face="off") continues to work as documented and is not overridden by this default.
B. Default on boot. Render idle immediately after the WiFi/WS handshake completes, regardless of MCP state. Simpler to reason about, but removes the "no-MCP-yet, screen still dark" affordance for users who rely on it.
Out of scope
Per-user customisation of the default face (config / NVS) — the question here is "does any face show by default", not "which one".
Changing the existing set_avatar(face="off") semantics. The "off" face must remain reachable so the xiaozhi screens are still accessible.
Background
After flashing the firmware and starting the gateway, the LCD does not display the avatar until an MCP client explicitly calls
set_avatar(face="idle"). Until that call lands, the screen stays on whatever it was showing previously (xiaozhi-esp32 setup UI, or the last frame from the previous session) and the device appears "asleep" even though the WebSocket is connected and tools are reachable.Observation
get_statusreportedconnected:trueand 19 firmware tools.set_avatar(face="idle")once brought the avatar up and made the device look unmistakably "alive".Proposal
Pick one — (A) is recommended because it preserves the existing
set_avatar(face="off")semantics for users who deliberately want the underlying xiaozhi screens (WiFi setup UI, OTA, etc.):tools/listexchange. Once the gateway finishes initialising the device session, if noset_avatarhas been called yet, the firmware rendersidle. Subsequentset_avatar(face="off")continues to work as documented and is not overridden by this default.idleimmediately after the WiFi/WS handshake completes, regardless of MCP state. Simpler to reason about, but removes the "no-MCP-yet, screen still dark" affordance for users who rely on it.Out of scope
set_avatar(face="off")semantics. The "off" face must remain reachable so the xiaozhi screens are still accessible.Refs