Megan can 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.
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).
Screen Vision
NEW
▶
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" / "Watch me game" – Live commentary while gaming.
- "Watch for errors" – Monitor for screen errors and offer to fix them.
Perfect for getting a second opinion on your work, debugging UI issues, live game commentary, or just letting her judge your browser tabs.
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:
- You ask for help with something on screen.
- Megan captures your screen and plans the actions needed.
- She tells you what she's about to do (with personality, of course).
- 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,gamingin .env.
Setup: Just pip install duckduckgo-search – no API key needed!
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.
- 🔎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.
Megan is an ongoing project. Expect many more updates.
- 🎤Camera integration – Face tracking, image recognition.
- 🎭Interactive games – Trivia, 20 questions, Simon Says.
- 📅More TBA – Who knows?.. There's always something to add/tweak.
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.
Copy an article or YouTube URL to your clipboard first. Megan hosts, Brittany provides analysis.
Fun stuff
▶
- “dance” – Choreographed dance routine.
- “dance to the music” / “dance to this song” – Tempo‑synced dance (librosa required).
- “spin” – Spinning animation.
📋 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
-
Create your environment file – copy
.env.exampleto.env -
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 - OpenAI:
-
Place the wake word model
- Put your
megan_wakeword.onnxfile in the app directory. - Find more at the Openwakeword github.
pip install reachy_mini_megan[voice]
- Put your
-
Optional: music sync
pip install reachy_mini_megan[music] -
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
- Megan initializes and announces she's online.
- Say "Hey Megan" to activate.
- She perks up and enters conversation mode.
- Talk naturally – she responds with personality.
- After ~4 seconds of silence, she returns to wake-word listening.
- After ~45 seconds of inactivity, she falls asleep.
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 tiltsmug_pose– confident posedroop– sad/tired drooptiny_flex– tiny flex momentscan_room– look aroundshrug– dismissive shrughead_sway– gentle swaylistening– attentive leanpre_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
- Say: “Megan, dance to the music!”
- She listens ~3 seconds.
- Detects BPM.
- 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.
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.
Common issues
Wake word not detecting
- Lower
WAKE_WORD_SENSITIVITY(more sensitive). - Check microphone input volume.
- Verify
Megan_en_windows_v4_0_0.ppnpath. - 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_miniis installed. - Try manual control to test hardware.
Music sync not working
- Install
librosaandsoundfile. - 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)
🎨 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.jsonto 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 Vaughn –
HeadWobbler&SpeechTapperfor speech‑synced animation. - Rémi Fabre –
DanceSystem&EmotionManagerfor 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.
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.