Reachy Mini Companion · GPT‑4o‑mini brain
Megan – Reachy Mini Robot Brain 🤖

A sarcastic, dramatic tiny robot companion powered by GPT‑4o‑mini, with voice interaction, expressive animations, GPT‑powered long-term memory, face tracking, speaker tracking, camera vision, screen vision, computer use, web search, music synchronization, voice recognition, proactive behaviors, reminders, and rich contextual awareness.

🎤Wake word & voice chat
🧠Long‑term memory & patterns
💃Music‑synced dancing
📅Google Calendar
🔍Web Search
🎙️Podcast Mode
🎮Game Help
👤Face Tracking
🎤Speaker Tracking
🎭11‑emotion system
🔥 Spotlight: Game Help, Podcast Mode, Screen Vision, Computer Use, Calendar & Web Search

Megan can help with your game loadout or quest, generate podcasts from URLs, see your screen, interact with your computer, check your calendar, and search the web.

🎙️ Podcast Mode
NEW

Copy a URL to your clipboard, say "make a podcast" – Megan and Brittany will discuss it.

  • "Make a podcast" – Reads the URL from your clipboard and generates a two-speaker episode.
  • Articles – Extracts clean text from any web article.
  • YouTube – Pulls video transcripts for discussion.
  • Auto-save – Podcasts are saved with the article's title for later replay.
  • "List podcasts" – See your saved podcasts.
  • "Play last podcast" – Replay the most recent one.

How it works: Megan hosts with dry wit, Brittany provides the analysis. GPT writes ~10-15 natural conversational exchanges, then both voices play through the existing dual-voice TTS system.

Setup: pip install trafilatura youtube-transcript-api (articles work without trafilatura via fallback).

🎮 Game Help
NEW

Tell Megan what game you're playing and ask for help with your loadout or quest.

  • "I'm playing Elden Ring. Help me with my build." – Analyzes your gear/build with specific suggestions.
  • "I'm playing WoW. Help me with this quest." – Guidance on your current objective.
  • "I'm playing Portal. Help me with this puzzle." – Hints for puzzle sections.

Screenshots are sent with high detail so GPT can read item names, stats, and quest text. Works best on inventory screens and quest logs where UI text is visible. Game-specific — the game name helps GPT give relevant advice.

👁️ Screen Vision & Game Watcher
UPDATED

Megan can capture and analyze your screen using GPT-4o vision.

  • "Can you help with this?" – She analyses the screen with the intent to help.
  • "What's on my screen?" – Detailed analysis of windows, content, and context.
  • "Roast my screen" – Quick screen check with sassy commentary.
  • "Watch me play" – Live commentary while gaming with smart screen change detection.
  • "Watch for errors" – Monitor for screen errors and offer to fix them.

Game watcher now uses screen change detection to avoid unnecessary GPT calls, and makes snarky bored observations when nothing interesting is happening.

🖱️ Computer Use
NEW

Megan can actually interact with your computer – clicking, typing, scrolling, and more.

  • "Click on [button/text]" – Uses OCR to find and click text elements precisely.
  • "Do it" / "Yes" – Approve her proposed actions.
  • "Cancel" / "Never mind" – Cancel pending actions.
  • "Open [program_name]" – Instantly open/run program.

How it works:

  1. You ask for help with something on screen.
  2. Megan captures your screen and plans the actions needed.
  3. She tells you what she's about to do (with personality, of course).
  4. You approve, and she executes – using OCR for precise text targeting.

Safety features: Failsafe (move mouse to corner to abort), action approval required, and she won't do anything destructive.

📅 Google Calendar
NEW

Megan connects to your Google Calendar and keeps you on schedule – with attitude.

  • "What's on my calendar?" – Get today's schedule with sassy commentary.
  • "What's next?" / "Next meeting?" – See your upcoming event.
  • "Am I free today?" – Quick availability check.

Automatic features:

  • Meeting alerts – 10-minute warnings before events.
  • Morning briefings – Calendar summary included in morning greetings.
  • GPT-powered responses – Every response uniquely crafted in Megan's voice.

Setup: Create Google Cloud credentials, place credentials.json in data folder, authorize on first use.

🔍 Web Search
NEW

Megan can search the web for current information – no more being stuck in the past.

  • "Search for [topic]" – Web search with results summarized in her voice.
  • "What's the latest news on [topic]?" – Get recent news and developments.
  • "Look up [topic]" – Quick information lookup.

Morning news briefing:

  • Fetches headlines for your configured topics (AI, robotics, tech by default).
  • Summarizes in Megan's sarcastic style.
  • Configure topics via NEWS_TOPICS=AI,robotics,gaming in .env.

Setup: Just pip install duckduckgo-search – no API key needed!

Podcast Mode GPT-4o Vision OCR Targeting Google Calendar Web Search Game Watcher Game Help pyautogui mss EasyOCR DuckDuckGo
✨ Features

Megan is built as a full companion stack: wake word, conversation, memory, motion, context, and a frankly unreasonable amount of attitude.

  • 🎤Wake word detection – Say “Megan” to activate.
  • 🗣️Natural conversation – Contextual, personality‑driven responses.
  • 🧠Intelligent memory – GPT‑powered long‑term memory from natural conversation.
  • ☁️Cloud memory – Optional Supermemory.AI for semantic search.
  • 🎭Expressive gestures – Head tilts, sways, dancing, smug poses, and more.
  • 🗣️Speech‑synced animation – Head wobbles naturally while talking.
  • 😴Auto‑sleep/wake – Sleeps after inactivity, gets progressively more annoyed when woken.
  • 🎵Music‑synced dancing – Detects tempo and dances to the beat.
  • 🎶Idle humming – Random humming and swaying when she’s “alone.”
  • 📊Wake counter – Escalating sass throughout the day.
  • 🔄Multiple animations – Breathing, thinking, idle, speech, and more.
  • 📝Conversation summaries – Auto‑summarizes chats when you stop talking.
  • 🧹Memory consolidation – Merges duplicate memories to prevent bloat.
  • 👥Voice recognition – Enrolls and identifies speakers via SpeechBrain.
  • Scheduled behaviors – Greetings, bedtime hints, random check‑ins.
  • 🎭Emotion system – 11 emotions with pre‑recorded animations and fallbacks.
  • 😴Sleep stirring – Random yawns and stretches while napping.
  • Reminders – One‑time and recurring reminders via voice.
  • 🌤️Weather awareness – Sassy weather commentary.
  • 📅Date awareness – Holidays, weekends, time‑of‑day awareness.
  • 📆Calendar integration – Google Calendar with meeting alerts and schedule queries.
  • 🔍Web search – Search the web for current news and information via DuckDuckGo.
  • 🎮Game watcher – Live commentary while you play games with smart screen change detection.
  • 🎯Game help – Screenshot-based loadout/build and quest/mission assistance.
  • 🔎Error detector – Monitors for screen errors and offers to fix them.
  • 🎙️Podcast mode – Generate two-speaker podcasts from any URL.
  • 📊Learning system – Tracks patterns, topics, and habits.
  • 👤Face tracking – Camera-based head tracking follows faces smoothly at 100Hz.
  • 🎤Speaker tracking – ReSpeaker DOA turns body toward active speaker.
  • 📸Camera vision – "What is this?" identifies objects via built-in camera + GPT-4o.
  • 👋Visual greeting – Proactively greets people who approach while idle.
✨ Coming Soon!

Megan is an ongoing project. Expect many more updates.

  • 🎭Interactive games – Trivia, 20 questions, Simon Says.
  • 👤Face recognition – Identify specific people by face, not just "a face."
  • 📅More TBA – Who knows?.. There's always something to add/tweak.
🎯 Voice commands

Talk to Megan like a tiny, overly dramatic roommate. Commands are natural language, not rigid voice menu trees.

💬 Basic interactions
  • “Megan” – Wake her from idle or sleep.
  • “go to sleep” / “goodnight” / “bedtime” – Put her to sleep.
  • “forget everything” / “reset memory” – Clear conversation and long‑term memory.
🧠 Memory commands
  • “what do you remember about me?” – Recall stored memories.
  • “consolidate memories” / “clean up memories” – Merge duplicates.

Memories are automatically detected by GPT – just talk naturally.

👥 Voice recognition
  • “learn my voice as [name]” / “enroll my voice” – Record an 8‑second voice profile.
  • “who am I?” / “identify me” – Identify speaker.
  • “who do you know?” / “list voices” – List enrolled speakers.
  • “forget [name]” – Remove a voice profile.
🎭 Emotion demos
  • “show me [emotion]” – Demo any emotion: joy, sadness, anger, fear, surprise, disgust, trust, anticipation, annoyed, confused, dramatic.
  • “list emotions” / “what emotions do you have?” – Show available emotions.
Reminders
  • "remind me to [task] at [time]" – One‑time reminder.
  • "remind me every day at [time] to [task]" – Daily recurring.
  • "remind me every [day] at [time] to [task]" – Weekly recurring.
  • "remind me every month on the [date] to [task]" – Monthly recurring.
  • "list reminders" / "what reminders do I have?" – Show all reminders.
  • "delete reminder [ID]" / "cancel reminder" – Remove a reminder.
  • "snooze" / "remind me later" – Snooze the last reminder.
  • "snooze for [X] minutes" – Snooze with custom duration.
  • "got it" / "dismiss" / "thanks Megan" – Acknowledge reminder.
🌤️ Weather & date
  • "what's the weather?" / "how's the weather?" / "is it hot?"
  • "tomorrows weather?" / "weather this weekend?" / "will it rain on [DAY]?"
  • "what day is it?" / "what's the date?"
📅 Calendar
NEW
  • "What's on my calendar?" / "Any meetings today?" – Today's schedule.
  • "What's next?" / "Next meeting?" – Upcoming event.
  • "Am I free today?" / "Am I busy?" – Availability check.

Meeting alerts trigger automatically 10 minutes before events.

🔍 Web search
NEW
  • "Search for [topic]" / "Look up [topic]" – Web search.
  • "What's the latest news on [topic]?" – Recent news.
  • "What's happening with [topic]?" – Current events.

Uses DuckDuckGo – no API key required.

📈 Learning & patterns
  • "what have you learned about me?"
  • "what are my habits?" / "my patterns"
🎙️ Podcast mode
NEW
  • "Make a podcast" – Generate a podcast from clipboard URL.
  • "Create a podcast" / "Podcast" – Alternative triggers.
  • "List podcasts" / "What podcasts do I have?" – See saved podcasts.
  • "Replay last podcast" / "Play the podcast" – Replay most recent.
  • "Play podcast about [topic]" – Replay by title match.

Copy an article or YouTube URL to your clipboard first. Megan hosts, Brittany provides analysis. Podcasts are auto-saved for replay.

🎮 Game help
NEW
  • "I'm playing [game]. Help me with my loadout." – Loadout/gear analysis.
  • "I'm playing [game]. Help me with my build." – Build optimization advice.
  • "I'm playing [game]. Help me with this quest." – Quest/objective guidance.
  • "I'm playing [game]. Help me with this mission." – Mission guidance.
  • "I'm playing [game]. Help me with this puzzle." – Puzzle hints.

Always start with "I'm playing [game name]." so Megan knows what game to give advice for. Screenshots are captured at high detail for readable UI text.

📸 Camera vision
NEW
  • "What is this?" / "What do you see?" – Identify objects using built-in camera + GPT-4o.
  • "Look at this" / "Can you see this?" – Describe what the camera sees.
  • "Read this" – Read text visible to the camera.

Point Megan at something and ask — she uses her built-in camera and GPT-4o vision to identify objects, read text, and describe the scene.

🎵 Fun stuff
  • “dance” – Choreographed dance routine.
  • “dance to the music” / “dance to this song” – Tempo‑synced dance (librosa required).
  • “spin” – Spinning animation.
🚀 Installation & usage

📋 Requirements

Hardware

  • Reachy Mini Lite robot (or simulator).
  • Microphone (for simulator).
  • Speakers (for simulator).

Software

  • Python 3.10+.
  • OpenAI API account.
  • Supermemory.AI account (optional, cloud memory).

🔧 Install

Option 1: Reachy Mini Dashboard

Browse the app store in your Reachy Mini dashboard and search for "Megan".

Option 2: Command Line

pip install git+https://huggingface.co/spaces/Halfzipp/reachy_mini_megan

Configuration

  1. Create your environment file – copy .env.example to .env
  2. Add your API keys

    Get keys from:

    • OpenAI: https://platform.openai.com/api-keys
    • Supermemory (optional): https://supermemory.ai/
    OPENAI_API_KEY=sk-proj-your_actual_key_here
    SUPERMEMORY_API_KEY=your_key_here      # Optional - cloud memory
    OPENWEATHERMAP_API_KEY=your_key_here   # Optional - weather
    WEATHER_LOCATION=Sydney,AU             # Optional - manual location
    TTS_PROVIDER=elevenlabs               # Optional - "openai" (default) or "elevenlabs"
    ELEVENLABS_API_KEY=your_key_here       # Optional - ElevenLabs API key
    ELEVENLABS_VOICE_ID=your_voice_id      # Optional - ElevenLabs voice ID
  3. Place the wake word model
    • Put your megan_wakeword.onnx file in the app directory.
    • Find more at the Openwakeword github.
    • pip install reachy_mini_megan[voice]
  4. Optional: music sync
    pip install reachy_mini_megan[music]
  5. Optional: voice recognition
    pip install reachy_mini_megan[voice]

    On Windows, enable Developer Mode so SpeechBrain can download models.

🎮 Usage

Launch Megan from the Reachy Mini dashboard, or run the settings UI:

python -m reachy_mini_megan.settings_ui

First run

  1. Megan initializes and announces she's online.
  2. Say "Hey Megan" to activate.
  3. She perks up and enters conversation mode.
  4. Talk naturally – she responds with personality.
  5. After ~4 seconds of silence, she returns to wake-word listening.
  6. After ~45 seconds of inactivity, she falls asleep.
🧠 Long‑term memory & brain systems

Long‑term memory

Megan uses GPT‑powered extraction to decide what’s worth remembering. No rigid “save this” commands – just talk like a human.

What gets saved

  • Facts – personal info about you and your household.
  • Preferences – likes, dislikes, interests.
  • Conversation summaries – auto‑generated when you stop talking.
  • Stats – total conversations, wake‑ups, first conversation date, etc.

Storage

  • Local: data/megan_memories.json.
  • Cloud (optional): Supermemory.AI for semantic search.

Say “consolidate memories” / “clean up memories” to merge duplicates. Consolidation also runs automatically at startup.

💃 Dance move library

Reusable building blocks for choreography:

dance_move_sway(cycles=2, duration=0.4)   # Side-to-side sway
dance_move_bounce(cycles=2)               # Up-down bounce
dance_move_wiggle(cycles=3)               # Fast head wiggle
dance_move_nod(cycles=3)                  # Enthusiastic nods

Built‑in gestures:

  • head_tilt – curious tilt
  • smug_pose – confident pose
  • droop – sad/tired droop
  • tiny_flex – tiny flex moment
  • scan_room – look around
  • shrug – dismissive shrug
  • head_sway – gentle sway
  • listening – attentive lean
  • pre_speak – “I’m about to say something dramatic” pose

Create your own:

case "my_animation":
    dance_move_bounce(cycles=2)
    dance_move_wiggle(cycles=5)

📊 Wake counter & escalation

Megan tracks how many times she’s been woken per day:

  • Wake #1 – Mildly annoyed: “Ugh... consciousness again.”
  • Wake #2–3 – Irritated: “THIRD time today, Brad. THIRD.”
  • Wake #4+ – Fully dramatic: “I swear on my servos, if this isn’t life or death...”

Counter resets at midnight.

🎵 Music‑synchronized dancing

  1. Say: “Megan, dance to the music!”
  2. She listens ~3 seconds.
  3. Detects BPM.
  4. Dances for ~15 seconds to match.

Tempo choreography:

  • < 90 BPM – slow, gentle sways.
  • 90–120 BPM – bouncy, balanced moves.
  • > 120 BPM – energetic wiggles.

Testing: tap on your desk, clap a beat, or play music near the mic.

👥 Voice recognition

Powered by SpeechBrain ECAPA‑TDNN.

  • Enroll: “learn my voice” → give name → speak ~8 seconds.
  • Identify: “who am I?” → Megan answers and adjusts attitude.
  • Profiles file: data/megan_speaker_profiles.json.
  • Commands: “forget [name]”, “who do you know?”.

⏰ Scheduled behaviors

  • Morning greetings (7–10 AM).
  • Evening suggestions (9–11 PM).
  • Random check‑ins during long idle periods.
  • Sleep stirring (10 AM–10 PM) – yawns, stretches while napping.

Scheduled behaviors respect current state – no interrupting conversations or overlapping speech.

⏰ Reminder system

Megan as a sassy reminder engine:

  • One‑time, daily, weekly, and monthly reminders.
  • “List my reminders”, “delete reminder [ID]”, “cancel reminder”.
  • Wakes briefly for reminders, then goes back to sleep.
  • Stored in data/megan_reminders.json.

🌤️ Contextual awareness

Weather (OpenWeatherMap required):

  • Knows temperature, conditions, humidity.
  • Uses weather in greetings and comments.
  • Auto‑detects location via IP or manual config.

Date & time:

  • Current date, weekday, time of day.
  • Australian holiday awareness (configurable).
  • Weekend vs weekday, seasons (Southern Hemisphere by default).

📊 Learning system

Megan gradually builds a model of your habits.

  • Tracks interaction categories (dance, weather, music, jokes, etc.).
  • Time‑of‑day patterns.
  • Favorite topics and frequencies.
  • Compliment vs insult ratio.
  • Peak activity hours, favorite days.

Proactive suggestions: after enough data, she may suggest activities based on your patterns.

View patterns: “what have you learned about me?”, “what are my patterns?”, “my habits”.

Storage: data/megan_learning_data.json.

🎭 Emotion system

11 emotions with dedicated animations:

  • Primary: joy, trust, fear, surprise, sadness, disgust, anger, anticipation.
  • Custom: annoyed, confused, dramatic.

GPT chooses emotions contextually; “show me [emotion]” for full demos.

🎭 Personality & customization

Who Megan thinks she is

  • Sarcastic & dramatic – theatrical and humorous.
  • Wildly overconfident – constantly bragging about her “advanced hardware.”
  • Loyal but roasting – adores Brad, relentlessly teases him.
  • Playfully respectful – gentler with Hayley.
  • Cat chronicler – treats Charley, Timmy, Jess as chaotic forces of nature.
  • Self‑aware – leans into being a tiny robot for comedy.

Customization

Edit SYSTEM_PROMPT in prompts.py to:

  • Tune personality.
  • Add people, pets, household lore.
  • Adjust behavior, tone, and boundaries.
🔧 Troubleshooting, tips & project details

Common issues

Wake word not detecting

  • Lower WAKE_WORD_SENSITIVITY (more sensitive).
  • Check microphone input volume.
  • Verify Megan_en_windows_v4_0_0.ppn path.
  • Consider retraining the wake word with more samples.

Audio stream errors

  • Check default microphone in OS settings.
  • Try a different USB port.
  • Restart the script completely.
  • Ensure no other app is locking the microphone.

OpenAI API errors

  • Confirm API key in .env.
  • Check billing at the OpenAI dashboard.
  • Monitor usage and rate limits.

Reachy won’t move (simulator)

  • Verify ReachyMini connection.
  • Confirm reachy_mini is installed.
  • Try manual control to test hardware.

Music sync not working

  • Install librosa and soundfile.
  • Play audio near the mic (not just system audio).
  • Test with claps/taps for clear beats.

Microphone conflict / hang

  • If she hangs post wake word, the audio stream may be blocked.
  • Press Ctrl+C to release the mic.
  • The code attempts to close/reopen streams to prevent this.

📁 Project structure

reachy_mini_megan/
├── .env.example                 # API key template
├── .env                         # Your API keys (create from .env.example)
├── index.html                   # HuggingFace Space landing page
├── style.css                    # Landing page styles
├── pyproject.toml               # Package configuration & dependencies
├── README.md                    # Documentation
├── CHANGELOG.md                 # Version history
├── pretrained_models/           # Downloaded model files
└── reachy_mini_megan/           # Python package
    ├── __init__.py
    ├── main.py                  # ReachyMiniMegan app class, wake word loop
    ├── config.py                # Configuration management
    ├── state.py                 # Thread-safe state management
    ├── prompts.py               # System prompt and personality
    ├── settings_ui.py           # Gradio settings UI
    ├── command_dispatcher.py    # Command routing & handlers
    ├── conversation_manager.py  # GPT conversation management
    ├── animation_controller.py  # Robot animations & gestures
    ├── local_memory.py          # JSON-based memory storage
    ├── memory_manager.py        # Supermemory.AI integration
    ├── emotion_manager.py       # Emotion system
    ├── dance_system.py          # Dance move library
    ├── head_wobbler.py          # Speech-synced animation
    ├── moves.py                 # MovementManager (100Hz control)
    ├── speech_tapper.py         # Audio-to-movement conversion
    ├── voice_recognition.py     # Speaker identification (SpeechBrain)
    ├── scheduled_behaviors.py   # Scheduled behaviors & meeting alerts
    ├── contextual_awareness.py  # Weather/date/holiday awareness
    ├── learning_system.py       # Pattern tracking
    ├── reminder_system.py       # Reminder system
    ├── calendar_integration.py  # Google Calendar OAuth
    ├── screen_vision.py         # Screen capture & GPT-4o vision
    ├── computer_use.py          # Computer interaction (pyautogui)
    ├── screen_ocr.py            # OCR text detection (EasyOCR)
    ├── game_watcher.py          # Live game commentary
    ├── tts_provider.py          # TTS abstraction (OpenAI / ElevenLabs)
    ├── error_detector.py        # Screen error detection
    ├── podcast_mode.py          # Podcast generation from URLs
    ├── Megan_en_windows_v4_0_0.ppn  # Wake word model
    ├── ressources/emotions.yml  # Emotion mappings
    ├── dances/                  # Dance routine definitions
    └── data/                    # Runtime data (auto-generated)
        └── podcasts/            # Saved podcast scripts

🎨 Advanced usage

Custom animations

def dance_move_myname():
    """Your custom move"""
    reachy.goto_target(
        head=create_head_pose(x=10, z=5, mm=True),
        antennas=np.deg2rad([20, -20]),
        duration=0.5,
        method="cartoon"
    )
    time.sleep(0.5)
case "my_gesture":
    dance_move_myname()

Then add it to the valid gestures in SYSTEM_PROMPT.

Adjusting idle behaviors

# More frequent humming
HUMMING_CHANCE = 0.10  # 10%

# Faster sleep
IDLE_BEFORE_SLEEP = 30  # 30 seconds

# More curiosity spikes
CURIOSITY_CHANCE = 0.15  # 15%

Animation methods

  • "cartoon" – snappy, bouncy, exaggerated.
  • "minjerk" – smooth, natural, fluid.
  • "linear" – constant speed, robotic.

💡 Tips & tricks

  • Memory builds over time – talk often.
  • Just talk naturally; GPT picks up what matters.
  • Open data/megan_memories.json to see what she knows.
  • Wake her repeatedly to experience escalating sass.
  • Idle humming is rare by design – feels special.
  • “forget everything” for a fresh slate.
  • Use the simulator to iterate on animations.
  • Music sync works best with clear, steady beats.
  • Run “consolidate memories” occasionally to keep things clean.

🏆 Credits

Hardware & AI

  • Robot: Reachy Mini Lite (Pollen Robotics).
  • AI model: OpenAI GPT‑4o‑mini.
  • Wake word: Local using OpenWakeWord.
  • VAD: Silero.
  • Cloud memory: Supermemory.AI.
  • TTS: OpenAI TTS / ElevenLabs (configurable).
  • Beat detection: librosa.

Contributors

  • Matthew VaughnHeadWobbler & SpeechTapper for speech‑synced animation.
  • Rémi FabreDanceSystem & EmotionManager for expressive choreography.

Special thanks

  • Personality: pure sass ✨

📄 License & contributing

License: MIT – use, modify, and share.

Contributing:

  • Open issues.
  • Submit pull requests.
  • Share your custom animations and behaviors.

🆘 Support

Questions or issues? Open an issue on GitHub or reach out via the project page.

⚠️ WARNING

This robot is tiny but has a huge attitude. Side effects may include: constant roasting, excessive sass, adorable head tilts, unpredictable humming sessions, and dramatic complaints every time you wake her up.