omp packages

@wenjinnn/pi-mimo-voice1.1.1

Voice input and output for pi powered by Xiaomi MiMo V2.5 TTS

wenjinnn Published 4 months ago MIT ~138 downloads/mo

Untested on omp

This is a pi package. No one has reported whether it works on omp yet. If you try it, add your result below.

Did it work for you?

Result

One report per person. A new report replaces your old one.

Reports 0

No reports yet.

Readme

pi-mimo-voice

πŸ‡¨πŸ‡³ δΈ­ζ–‡ζ–‡ζ‘£

Voice input (STT) and output (TTS) for pi powered by Xiaomi MiMo V2.5 API.

npm version GitHub

pi-mimo-voice screenshot

πŸ”Š Please turn on sound for the demo below

https://github.com/user-attachments/assets/9a9f9984-9476-4c4e-bbeb-ae088a7d875c

Features

  • 🎀 Speech-to-Text (STT) β€” Record audio from microphone and transcribe
  • πŸ”Š Text-to-Speech (TTS) β€” Speak text aloud through speakers
  • πŸ—£οΈ Auto-speak β€” Automatically read all assistant replies
  • πŸŽ™οΈ Live mode β€” Continuous voice conversation loop
  • πŸŽ›οΈ Interactive config β€” Voice, model, engine, and region settings

Installation

# Install from npm
pi install npm:@wenjinnn/pi-mimo-voice

# Or install from GitHub
pi install git:github.com/wenjinnn/pi-mimo-voice

# Or clone manually
cd ~/.pi/agent/extensions
git clone https://github.com/wenjinnn/pi-mimo-voice.git

Quick Start

# 1. Set API key (via environment variable or pi /login)
export XIAOMI_TOKEN_PLAN_CN_API_KEY="your-key"  # China region
# Or: export XIAOMI_API_KEY="your-key"          # Global

# 2. Restart pi or /reload

# 3. Try it
/speak Hello from MiMo!
/listen
/listen stop

Commands

Text-to-Speech

Command Description
/speak <text> Speak text aloud using MiMo TTS

Speech-to-Text

Command Description
/listen Start recording (manual stop with /listen stop)
/listen stop Stop recording and transcribe
/listen auto-stop N Record for N seconds then transcribe
/listen N Record for N seconds (max 60) then transcribe

Auto-speak & Live Mode

Command Description
/auto-speak Toggle auto-speak (read all assistant replies). Use /auto-speak on|off for explicit control
/live Start/stop live voice mode (auto-speak ON, begins recording)
/live reply Stop recording, transcribe, and send to LLM

Live mode flow:

  1. /live β†’ recording starts
  2. Speak when ready
  3. /live reply β†’ transcribes and sends
  4. AI responds β†’ auto-speak reads it β†’ next recording starts
  5. Repeat from step 2
  6. /live to stop

Configuration

Command Description
/voice-config Interactive settings: voice, TTS model, STT engine, API region

LLM Tools

When installed, the LLM can call these tools directly:

mimo_tts

Convert text to speech. Parameters:

  • text (required) β€” Text to speak
  • style (optional) β€” Style instruction (e.g., "excited", "calm", "δΈœεŒ—θ―")

mimo_stt

Record and transcribe speech. Parameters:

  • duration (optional) β€” Recording duration in seconds (default: 10, max: 60)
  • auto_stop (optional) β€” Auto-stop when silence detected (default: false)

Voices

Preset Voices

Voice ID Language Gender
Default mimo_default auto auto
ε†°η³– ε†°η³– zh female
θŒ‰θŽ‰ θŒ‰θŽ‰ zh female
苏打 苏打 zh male
白摦 白摦 zh male
Mia Mia en female
Chloe Chloe en female
Milo Milo en male
Dean Dean en male

TTS Models

Model Description
mimo-v2.5-tts Preset voices (default)
mimo-v2.5-tts-voicedesign Custom voice via text description
mimo-v2.5-tts-voiceclone Clone voice from audio sample

API Configuration

The extension auto-detects the API region from your pi auth.json provider:

Provider auth.json Key Environment Variable Region
Xiaomi MiMo xiaomi XIAOMI_API_KEY Global
Token Plan CN xiaomi-token-plan-cn XIAOMI_TOKEN_PLAN_CN_API_KEY China
Token Plan AMS xiaomi-token-plan-ams XIAOMI_TOKEN_PLAN_AMS_API_KEY Amsterdam
Token Plan SGP xiaomi-token-plan-sgp XIAOMI_TOKEN_PLAN_SGP_API_KEY Singapore

Setup Options

Option 1: Environment Variable

export XIAOMI_TOKEN_PLAN_CN_API_KEY="your-key"

Option 2: pi /login

/login  β†’ Select provider β†’ Enter API key

Option 3: auth.json

{
  "xiaomi-token-plan-cn": { "type": "api_key", "key": "your-key" }
}

See pi providers docs for more details.

Requirements

  • Node.js β‰₯ 18
  • MiMo API key β€” configured via pi /login or environment variable (see API Configuration)
  • ffmpeg β€” for audio recording and playback (cross-platform)

Platform-Specific Audio Tools

Platform Recording Playback (priority order)
Linux parecord (PulseAudio) β†’ ffmpeg paplay β†’ aplay β†’ ffplay β†’ mpv
macOS ffmpeg + avfoundation afplay (built-in) β†’ ffplay β†’ mpv
Windows ffmpeg + dshow ffplay β†’ mpv

Linux: PulseAudio is recommended (parecord/paplay). ALSA (aplay) also works for playback.

macOS: No extra tools needed β€” afplay is built-in, ffmpeg handles recording via avfoundation.

Windows: Install ffmpeg and ensure it's in PATH. Default recording device is audio=ιΊ¦ε…‹ι£Ž, override with MIC_DEVICE env var.

⚠️ Cross-platform note: macOS and Windows support is based on ffmpeg's platform-specific audio backends (avfoundation/dshow) but has not been fully tested on real hardware. Linux is the primary tested platform. If you encounter issues on macOS or Windows, please open an issue β€” feedback and contributions are very welcome!

Environment Variables

Variable Description
MIC_DEVICE Override audio recording device (all platforms)
WHISPER_MODEL Path to whisper.cpp model file

npm Dependencies

The following dependencies are provided by pi automatically:

  • @earendil-works/pi-coding-agent β€” pi extension API
  • @earendil-works/pi-tui β€” pi TUI components
  • typebox β€” type validation

Optional

  • whisper.cpp β€” for local STT (faster, no API calls)
    • Set path: /voice-config β†’ Whisper.cpp Path
    • Download model: whisper-cpp-download-ggml-model base

How It Works

TTS Flow

Text β†’ MiMo TTS API β†’ WAV audio β†’ paplay/aplay/ffplay/mpv

STT Flow

Microphone β†’ parecord/ffmpeg β†’ WAV file β†’ whisper.cpp or MiMo API β†’ Text

Live Mode Flow

/live β†’ Start recording
User speaks
/live reply β†’ Stop recording β†’ Transcribe β†’ Send to LLM
LLM responds β†’ Auto-speak reads response
Auto-start next recording

Feedback & Contributing

This project is actively maintained. If you have questions, bug reports, or feature requests:

Contributions of any kind are welcome!

License

MIT