Emo is an expressive AI chatbot built with Nuxt on the frontend and Lemonade Server on the backend. It transcribes your speech in real time and dynamically changes its facial expression based on the AI's response.
Features:
- Runs entirely on your local machine via Lemonade Server β no data sent to the cloud
- Real-time speech recognition and transcription
- Dynamic emotion display driven by AI responses
- Thanks to Lemonade Server, you can use a GPU (NVIDIA/AMD) or a Ryzen AI NPU (AI 300 series and later) for better performance
Limitations:
Due to the models currently supported by Lemonade Server, the following constraints apply:
- English only β The TTS model (
kokoro-v1) is trained on English. - Speech recognition latency β Whisper currently runs on CPU only, so it can be hard to achieve both low latency and high accuracy at the same time
Install Emo by downloading the latest release from the Releases page.
Windows users:
SmartScreen on Windows may block the app since it's not signed. If that happens, click "More info" and then "Run anyway". Or it may be better to build the executable yourself by following the instructions in the Development section below π
emo_***_portable.exeis the portable version that doesn't require installation. You can run it directly. But you may need to install the required Visual C++ Redistributable if you don't have it already.emo_***_setup.exeis the installer version.
Linux users:
emo_***_amd64.AppImageis the x64 portable version that doesn't require installation.emo_***_aarch64.AppImageis the arm64 portable version that doesn't require installation.
macOS users:
NOTE: Mac version has not been tested yet. If you have tried it and it works, please let me know π
Only Arm (Apple Silicon) Macs are supported.
Like Windows, macOS may block the app since it's not signed. You can bypass this by right-clicking the app, selecting "Open", and then confirming to open it.
Launch Lemonade Server and load the following models:
| Role | Model |
|---|---|
| LLM with tool-calling | Qwen3.5-9B-GGUF (or any model suited to your environment) |
| Speech Recognition | Whisper-Base |
| TTS | kokoro-v1 |
NOTE: If you load different models in Lemonade Server, make sure to select them in Emo's Settings.
You can uninstall Emo according to the standard procedure for your OS.
However, Emo's configuration file is stored separately and won't be removed automatically. You can delete it manually if you want to remove all settings:
- Windows:
C:\Users\<User>\AppData\Roaming\com.github.ryomo.emo - Linux:
/home/<user>/.config/com.github.ryomo.emo - macOS:
/Users/<user>/Library/Application Support/com.github.ryomo.emo
If you run Lemonade Server on Windows and Emo inside WSL, Emo may not be able to reach the server. To fix this, open WSL Settings and set Networking Mode to Mirrored.
If you disable "Enable Thinking" in settings, but the model still seems to be "thinking" and takes a long time to respond, set --chat-template-kwargs '{"enable_thinking": false}' to "LLAMACPP ARGUMENTS" in Lemonade Server's model configuration.
npm install
# pnpm
pnpm installnpm run dev
# pnpm
pnpm devOpen http://localhost:3000/ in your browser.
NOTE: In this mode, app settings do not persist. Settings changes won't be saved to disk.
First, make sure you have the Tauri prerequisites installed, then run:
npm run tauri dev
# pnpm
pnpm tauri devThis will launch the app in development mode with Tauri.
If everything works fine, you can proceed to build the production executable:
npm run tauri build
# pnpm
pnpm tauri buildThe built executable will be located in src-tauri/target/release/.
Below is the process for releasing a new version of Emo on GitHub.
Just a reminder for myself π
- Go to Actions β release β Run workflow, enter the version number (e.g.
1.2.3), and run it.- This automatically updates
src-tauri/tauri.conf.jsonandsrc-tauri/Cargo.toml, commits the changes, and creates + pushes thev*.*.*tag. - Then, the app is built and a draft release is created for each platform.
- This automatically updates
- Once the workflow completes, go to the GitHub releases page, find the draft release, review the content, and publish it.
- Don't forget
git pullto update your local repository with the new tag.
