|
1 | 1 | <p align="center"> |
2 | | - <img src="docs/public/mirrormate.png" alt="Mirror Mate" width="500"> |
| 2 | + <img src="docs/public/mirrormate.png" alt="MirrorMate" width="400"> |
3 | 3 | </p> |
4 | 4 |
|
5 | | -<h1 align="center">Mirror Mate</h1> |
| 5 | +<h1 align="center">MirrorMate</h1> |
6 | 6 |
|
7 | 7 | <p align="center"> |
8 | 8 | <strong>Self-hosted personalized AI in a mirror</strong> |
9 | 9 | </p> |
10 | 10 |
|
11 | 11 | <p align="center"> |
12 | | - <a href="https://www.orangekame3.net/mirrormate/">Documentation</a> • |
| 12 | + <em>AI doesn't have to live on a screen.</em> |
| 13 | +</p> |
| 14 | + |
| 15 | +<p align="center"> |
| 16 | + <a href="https://www.orangekame3.net/mirrormate/">Docs</a> • |
13 | 17 | <a href="https://www.orangekame3.net/mirrormate/guide/getting-started">Getting Started</a> • |
14 | 18 | <a href="https://github.com/orangekame3/mirrormate/releases">Releases</a> |
15 | 19 | </p> |
|
24 | 28 |
|
25 | 29 | https://github.com/user-attachments/assets/c9005df4-9bdb-4190-861e-c8f5f9290468 |
26 | 30 |
|
27 | | -## Features |
| 31 | +--- |
| 32 | + |
| 33 | +## Why a mirror? |
28 | 34 |
|
29 | | -- Voice interaction with wake word activation |
30 | | -- Personalized memory (RAG-based context) |
31 | | -- Expressive avatar with lip-sync animation |
32 | | -- Multiple LLM/TTS providers (OpenAI, Ollama, VOICEVOX) |
33 | | -- Built-in weather, calendar, reminders, web search |
34 | | -- Plugin system for custom widgets |
| 35 | +A mirror is something you already live with. |
| 36 | +You glance at it in the morning. You check yourself before heading out. |
| 37 | +In those few seconds, you could ask about the weather, check your schedule, or just chat. |
| 38 | + |
| 39 | +MirrorMate puts AI into that everyday object. |
| 40 | +No phone to pull out. No laptop to open. |
| 41 | +Just talk to the mirror. |
| 42 | + |
| 43 | +## What it is |
| 44 | + |
| 45 | +- A voice-first AI designed to live in a mirror |
| 46 | +- Runs entirely local with Ollama + VOICEVOX (no cloud required) |
| 47 | +- Buildable with Raspberry Pi + half mirror |
| 48 | +- Remembers you through RAG-based memory |
| 49 | + |
| 50 | +## What it is not |
| 51 | + |
| 52 | +- Not a smart display |
| 53 | +- Not a cloud-dependent assistant |
| 54 | +- Not another chat UI in a browser |
| 55 | + |
| 56 | +--- |
| 57 | + |
| 58 | +## Architecture |
| 59 | + |
| 60 | +``` |
| 61 | +┌─────────────────────────────────────────────────────────────────┐ |
| 62 | +│ Raspberry Pi │ |
| 63 | +│ ┌───────────────┐ ┌────────────┐ ┌────────────────────────┐ │ |
| 64 | +│ │ Browser │ │ Next.js │ │ SQLite │ │ |
| 65 | +│ │ (Chrome) │◄─┤ App │◄─┤ (Memory, Sessions) │ │ |
| 66 | +│ │ + Mic/Cam │ │ Port 3000 │ │ │ │ |
| 67 | +│ └───────────────┘ └─────┬──────┘ └────────────────────────┘ │ |
| 68 | +│ ▲ │ │ |
| 69 | +│ │ │ Tailscale VPN │ |
| 70 | +└─────────┼─────────────────┼─────────────────────────────────────┘ |
| 71 | + │ ▼ |
| 72 | + │ ┌─────────────────────────────────────────────────┐ |
| 73 | + │ │ Mac Studio │ |
| 74 | + │ │ ┌────────────┐ ┌──────────────┐ ┌───────────┐ │ |
| 75 | + │ │ │ Ollama │ │ VOICEVOX │ │ Whisper │ │ |
| 76 | + │ │ │ LLM/VLM │ │ TTS │ │ STT │ │ |
| 77 | + │ │ │ Embedding │ │ Port 50021 │ │ Port 8080│ │ |
| 78 | + │ │ └────────────┘ └──────────────┘ └───────────┘ │ |
| 79 | + │ └─────────────────────────────────────────────────┘ |
| 80 | + │ |
| 81 | + └── Half Mirror + Monitor |
| 82 | +``` |
| 83 | + |
| 84 | +**Minimal setup**: Raspberry Pi + OpenAI API only |
| 85 | + |
| 86 | +**Full local setup**: Combine with Mac Studio (or any GPU machine) as shown above |
| 87 | + |
| 88 | +--- |
35 | 89 |
|
36 | 90 | ## Quick Start |
37 | 91 |
|
38 | | -**OpenAI (English):** |
| 92 | +**With OpenAI API (easiest):** |
39 | 93 |
|
40 | 94 | ```bash |
41 | 95 | docker run -p 3000:3000 \ |
42 | 96 | -e OPENAI_API_KEY=sk-xxx \ |
43 | 97 | -e LLM_PROVIDER=openai \ |
44 | 98 | -e TTS_PROVIDER=openai \ |
45 | | - -e LOCALE=en \ |
46 | 99 | ghcr.io/orangekame3/mirrormate:latest |
47 | 100 | ``` |
48 | 101 |
|
49 | | -**Ollama + VOICEVOX (Japanese, local):** |
| 102 | +Open http://localhost:3000 in Chrome. |
| 103 | + |
| 104 | +**Fully local (Ollama + VOICEVOX):** |
50 | 105 |
|
51 | 106 | ```bash |
| 107 | +# 1. Pull a model with Ollama |
52 | 108 | ollama pull qwen2.5:14b |
| 109 | + |
| 110 | +# 2. Start MirrorMate |
53 | 111 | git clone https://github.com/orangekame3/mirrormate.git |
54 | | -cd mirrormate && docker compose up -d |
| 112 | +cd mirrormate |
| 113 | +docker compose up -d |
55 | 114 | ``` |
56 | 115 |
|
57 | | -Open http://localhost:3000 in **Chrome**. |
| 116 | +**Wake word**: Say "OK Mira" to activate. |
58 | 117 |
|
59 | | -> Set `LOCALE=en` for English or `LOCALE=ja` for Japanese (default). |
| 118 | +--- |
| 119 | + |
| 120 | +## Features |
| 121 | + |
| 122 | +### Voice-First Interaction |
| 123 | +Activate with a wake word. Choose from Web Speech API, OpenAI Whisper, or local Whisper for speech recognition. |
| 124 | + |
| 125 | +### Personalized Memory |
| 126 | +Automatically extracts and stores information about you from conversations. Uses RAG to retrieve relevant memories and generate personalized responses. |
| 127 | + |
| 128 | +### Expressive Avatar |
| 129 | +Lip-synced avatar speaks responses. Eight animation states (Idle, Listening, Thinking, Speaking, etc.) show what it's doing at a glance. |
| 130 | + |
| 131 | +### Multi-Provider Support |
| 132 | +| Component | Options | |
| 133 | +| --------- | --------------------------------------------- | |
| 134 | +| LLM | OpenAI, Ollama | |
| 135 | +| TTS | OpenAI, VOICEVOX | |
| 136 | +| STT | Web Speech API, OpenAI Whisper, Local Whisper | |
| 137 | +| Embedding | Ollama, PLaMo-Embedding-1B | |
| 138 | + |
| 139 | +### Built-in Integrations |
| 140 | +- Weather (Open-Meteo) |
| 141 | +- Calendar (Google Calendar) |
| 142 | +- Web search (Tavily) |
| 143 | +- Reminders |
| 144 | +- Discord sharing |
| 145 | + |
| 146 | +### Plugin System |
| 147 | +Add your own widgets or sensor integrations. The Vision Companion plugin detects eye contact and greets you automatically. |
| 148 | + |
| 149 | +--- |
60 | 150 |
|
61 | | -**Say the wake word to start:** |
62 | | -- English: *"OK Mira"* |
63 | | -- Japanese: *"OK ミラ"* |
| 151 | +## Tech Stack |
| 152 | + |
| 153 | +- **Frontend**: Next.js 15 / React 19 / Three.js |
| 154 | +- **Backend**: Node.js / SQLite (Drizzle ORM) |
| 155 | +- **AI**: Ollama / OpenAI / VOICEVOX / faster-whisper |
| 156 | +- **Infra**: Docker / Tailscale |
| 157 | + |
| 158 | +--- |
64 | 159 |
|
65 | 160 | ## Development |
66 | 161 |
|
67 | 162 | ```bash |
68 | | -bun install && bun run dev |
| 163 | +bun install |
| 164 | +bun run dev |
69 | 165 | ``` |
70 | 166 |
|
| 167 | +See [Documentation](https://www.orangekame3.net/mirrormate/) for details. |
| 168 | + |
| 169 | +--- |
| 170 | + |
| 171 | +## Status |
| 172 | + |
| 173 | +Work in progress. Core features work, but rough edges remain. |
| 174 | + |
| 175 | +If you're into local AI, self-hosted systems, or physical interfaces, give it a try. |
| 176 | + |
| 177 | +--- |
| 178 | + |
71 | 179 | ## License |
72 | 180 |
|
73 | 181 | [MIT](LICENSE) |
0 commit comments