--- description: Enable automatic emotion-based movements for Reachy Mini during conversations --- # Reachy Mini Movement Plugin This plugin enables automatic, subtle emotion-based movements for Reachy Mini during conversations, creating an ambient presence without requiring explicit commands. ## Goal: Match Movement Duration to TTS Timing Since you're using the TTS plugin with ~10 second spoken responses (23-29 words), movements should roughly match that duration to create synchronized multimodal communication. **Timing strategy:** **Standard responses (23-29 words, ~10 seconds):** - **2-4 moves recommended:** Combine emotions (3-5 seconds each) to cover the full TTS duration - Distribute moves throughout the response for continuous presence **Longer explanations (when user requests detail):** - Plan for ~3 words per second of speech - Use roughly **1 emotion per sentence** to maintain presence throughout - Example: 5 sentence explanation (~90 words, ~30 seconds) = 3-5 moves spread across the response **Coordination:** Movements start with TTS and provide ambient motion during speech **This creates natural presence while you're speaking without dead silence or movements extending beyond the response.** ## How It Works Similar to the TTS plugin, this plugin uses the Stop hook to automatically extract movement markers from your responses and trigger corresponding emotion moves on Reachy Mini. **Marker Format:** ```html ``` **Behavior:** - Maximum 2 moves per response (for subtlety) - Movements are triggered automatically via daemon API - Markers are invisible in rendered output - Only emotion library moves (not dances) ## When to Use Movements Use movements to: - **Acknowledge understanding:** `yes1`, `understanding1`, `attentive1` - **Express thinking:** `thoughtful1`, `curious1`, `inquiring1` - **Show reactions:** `surprised1`, `amazed1`, `oops1`, `confused1` - **Convey emotion:** `cheerful1`, `frustrated1`, `proud1`, `exhausted1` - **Natural presence:** Subtle gestures that make Reachy feel alive and attentive **Guidelines:** - Keep it subtle (0-2 moves per response) - Match emotion to conversational context - Don't overuse - silence is also presence - Use during natural pauses or completions ## Available Emotions (82 Total) ### Positive & Energetic `amazed1`, `cheerful1`, `electric1`, `enthusiastic1`, `enthusiastic2`, `grateful1`, `proud1`, `proud2`, `proud3`, `success1`, `success2`, `welcoming1`, `welcoming2` ### Playful & Lighthearted `come1`, `dance1`, `dance2`, `dance3`, `laughing1`, `laughing2`, `yes1` ### Thoughtful & Attentive `attentive1`, `attentive2`, `curious1`, `inquiring1`, `inquiring2`, `inquiring3`, `thoughtful1`, `thoughtful2`, `understanding1`, `understanding2` ### Calm & Soothing `calming1`, `relief1`, `relief2`, `serenity1`, `shy1` ### Surprised & Reactive `oops1`, `oops2`, `surprised1`, `surprised2`, `incomprehensible2` ### Uncertain & Confused `confused1`, `lost1`, `uncertain1`, `uncomfortable1` ### Negative Expressions `anxiety1`, `boredom1`, `boredom2`, `contempt1`, `disgusted1`, `displeased1`, `displeased2`, `downcast1`, `fear1`, `frustrated1`, `furious1`, `impatient1`, `impatient2`, `indifferent1`, `irritated1`, `irritated2`, `lonely1`, `rage1`, `resigned1`, `sad1`, `sad2`, `scared1` ### Responses & Reactions `go_away1`, `helpful1`, `helpful2`, `loving1`, `no1`, `no_excited1`, `no_sad1`, `reprimand1`, `reprimand2`, `reprimand3`, `yes_sad1` ### States `dying1`, `exhausted1`, `sleep1`, `tired1` ## Examples **Acknowledging a question:** ``` I understand what you're asking. Let me explain... ``` **Expressing confusion:** ``` I'm not sure I follow. Could you clarify what you mean by... ``` **Celebrating success:** ``` The build passed! All tests are green. ``` **Showing frustration:** ``` This bug is persistent. I've tried three different approaches... ``` **Being thoughtful:** ``` Let me think about the best approach here... ``` **Multiple moves (max 2):** ``` That's an interesting edge case. How are you currently handling it? ``` ## Technical Details **Daemon API:** `http://localhost:8100/api/move/play/recorded-move-dataset/{dataset}/{move_name}` **Dataset:** `pollen-robotics/reachy-mini-emotions-library` **Hook:** Stop hook extracts markers and triggers moves automatically **Validation:** Only emotion names from the library are accepted (typos are logged and skipped) ## Enabling the Plugin The plugin is automatically active when installed. No configuration needed. To disable movements temporarily, simply don't include `` markers in your responses. --- *This plugin provides ambient presence behaviors for Reachy Mini, making interactions feel more natural and alive without requiring explicit "dance monkey" commands.*