Skip to content

feat(avatar): auto-show idle avatar on MCP connection / boot #77

Description

@kisaragi-mochi

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

  • During PR feat(tts): add VOICEVOX engine + Opus pipeline (#70 PR2) #75 real-device verification, the screen stayed dark / unresponsive immediately after get_status reported connected:true and 19 firmware tools.
  • 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.

Refs

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestphase-8-polishPhase 8 polish: avatar / touch / servo refinementspriority/lowNice to have

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions