An open API service indexing awesome lists of open source software.

https://github.com/rishiskhare/parrot

A free, offline, private AI text-to-speech desktop app built on Rust 🦜
https://github.com/rishiskhare/parrot

accessibility cross-platform kokoro-tts rust tauri-v2 text-to-speech

Last synced: 4 months ago
JSON representation

A free, offline, private AI text-to-speech desktop app built on Rust 🦜

Awesome Lists containing this project

README

          

Parrot

# Parrot: AI Text-to-Speech

**A free, offline, private AI text-to-speech for your desktop**

Highlight text in any app, press a shortcut

Hear it read aloud *instantly, privately, on your device*

Supports **9 languages:**

English (US & UK) · Spanish · French · Hindi · Italian · Japanese · Portuguese (Brazilian) · Chinese (Mandarin)

![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Windows%20%7C%20Linux-lightgrey)
![License](https://img.shields.io/badge/license-MIT-red)
![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/rishiskhare/parrot/total)
![Version](https://img.shields.io/badge/version-26.2.4-blue)

---

## What is Parrot? 🦜

Parrot reads your selected text aloud using a small text-to-speech model that runs entirely on your device. Your text never leaves your machine: no cloud, no accounts, no internet required after the initial model download.

The backend is written in Rust, keeping the app fast, lightweight, and resource-efficient. The model itself is only ~115 MB and runs on any modern CPU with no GPU required.

### How It Works

1. **Select text** in any application
2. **Press the shortcut** (default: `Option+Space` on macOS, `Ctrl+Space` on Windows/Linux)
3. A small overlay appears while Parrot synthesizes and plays the audio
4. Press `Option+P` to pause/resume (all shortcuts are customizable)

### 🔊 Here's how it sounds (make sure to unmute):
https://github.com/user-attachments/assets/baee7c2c-ac25-4418-9d55-713caeb23cee

## Installation

Download the latest stable version for macOS, Windows, and Linux from the [Parrot website](https://tryparrot.vercel.app/).

On first launch, Parrot prompts you to download the TTS model (~115 MB). Once downloaded, the app works completely offline.

## Features

- **Private by design:** your text is processed locally and never sent anywhere
- **Lightweight:** ~115 MB model, minimal memory footprint, Rust-powered backend
- **Works in any app:** reads selected text from browsers, editors, PDFs, terminals, anywhere
- **Streaming playback:** audio starts playing before the full text has been synthesized
- **Free forever:** no subscription, no API key, no account required
- **Pause & resume:** pause and resume playback mid-sentence with a keyboard shortcut
- **Floating overlay:** a lightweight indicator shows speaking status with pause controls

## Models

Parrot ships with **Kokoro-82M**, a compact neural TTS model that delivers natural-sounding speech at ~115 MB, small enough to download once and forget, efficient enough to run on any modern CPU without a GPU.

Kokoro supports **54 voices** across 9 languages. The voice is selected automatically based on your language setting, or choose one manually in **Settings → General**.

### Voices
| Language | Female Voices | Male Voices |
|----------|---------------|-------------|
| English (US) | Alloy, Aoede, Bella, Heart, Jessica, Kore, Nicole, Nova, River, Sarah, Sky | Adam, Echo, Eric, Fenrir, Liam, Michael, Onyx, Puck, Santa |
| English (UK) | Alice, Emma, Isabella, Lily | Daniel, Fable, George, Lewis |
| Spanish | Dora | Alex, Santa |
| French | Siwis | - |
| Hindi | Alpha, Beta | Omega, Psi |
| Italian | Sara | Nicola |
| Japanese | Alpha, Gongitsune, Nezumi, Tebukuro | Kumo |
| Portuguese (Brazilian) | Dora | Alex, Santa |
| Chinese (Mandarin) | Xiaobei, Xiaoni, Xiaoxiao, Xiaoyi | Yunjian, Yunxi, Yunxia, Yunyang |

## Keyboard Shortcuts

All shortcuts are fully customizable in **Settings → General**.

| Action | macOS | Windows / Linux |
|--------|-------|-----------------|
| Speak selected text | `Option+Space` | `Ctrl+Space` |
| Pause / resume playback | `Option+P` | `Alt+P` |
| Open settings | `Cmd+,` | `Ctrl+,` |
| Open debug panel | `Cmd+Shift+D` | `Ctrl+Shift+D` |

The pause/resume shortcut is only active while Parrot is playing. It can be customized or disabled in **Settings → General**.

## Settings Overview

| Category | Options |
|----------|---------|
| **General** | Shortcuts, TTS language, voice, output device, audio feedback |
| **Models** | Download, switch, and delete TTS models |
| **Advanced → App** | Start hidden, autostart, tray icon, overlay position, model unload timeout |
| **Advanced → Speech** | Worker threads, playback speed, fast first response |
| **Advanced → History** | Entry limit, auto-delete period |
| **History** | Browse, replay, copy, and delete past utterances |
| **Debug** | Log level, keyboard implementation, diagnostics |

## Command-Line Interface

Parrot supports CLI flags for scripting and window manager integration. Remote control flags are delivered to the already-running instance; you do not need to keep a second instance running.

```
parrot [FLAGS]
```

| Flag | Description |
|------|-------------|
| `--toggle-transcription` | Toggle TTS on/off in the running instance |
| `--start-hidden` | Launch without showing the main window |
| `--no-tray` | Launch without a tray icon (closing the window quits) |
| `--debug` | Enable verbose trace logging |

**Example: bind to a window manager shortcut:**
```sh
parrot --toggle-transcription
```

> **macOS:** When using the app bundle, invoke the binary directly:
> ```sh
> /Applications/Parrot.app/Contents/MacOS/Parrot --toggle-transcription
> ```

## Linux Notes

### Text Input Tools

For reliable text pasting on Linux, install the appropriate tool for your display server:

| Display Server | Recommended | Install |
|----------------|-------------|---------|
| X11 | `xdotool` | `sudo apt install xdotool` |
| Wayland | `wtype` | `sudo apt install wtype` |
| Both | `dotool` | `sudo apt install dotool` |

`dotool` requires adding your user to the `input` group: `sudo usermod -aG input $USER` (log out and back in after).

### Global Shortcuts on Wayland

Parrot's built-in global shortcut capture has limited support on Wayland. The recommended approach is to configure your desktop environment or window manager to invoke the CLI flag instead.

**GNOME:**
1. Open **Settings > Keyboard > Keyboard Shortcuts > Custom Shortcuts**
2. Add a new shortcut with the command `parrot --toggle-transcription`

**KDE Plasma:**
1. Open **System Settings > Shortcuts > Custom Shortcuts**
2. Create a new **Command/URL** shortcut with `parrot --toggle-transcription`

**Sway / i3:**
```ini
bindsym $mod+o exec parrot --toggle-transcription
```

**Hyprland:**
```ini
bind = $mainMod, O, exec, parrot --toggle-transcription
```

### Unix Signal Control

You can also send signals directly to the Parrot process, useful for hotkey daemons that manage their own keybindings:

| Signal | Action |
|--------|--------|
| `SIGUSR1` | Toggle TTS |
| `SIGUSR2` | Toggle TTS |

```sh
pkill -USR2 -n parrot # toggle TTS
```

### Other Linux Notes

- The speaking overlay is disabled by default on Linux (`Overlay Position: None`) because some compositors treat it as the active window and steal focus.
- If the app fails to start, try setting `WEBKIT_DISABLE_DMABUF_RENDERER=1`.
- If you see `error while loading shared libraries: libgtk-layer-shell.so.0`, install the runtime package:

| Distro | Package | Command |
|--------|---------|---------|
| Ubuntu/Debian | `libgtk-layer-shell0` | `sudo apt install libgtk-layer-shell0` |
| Fedora/RHEL | `gtk-layer-shell` | `sudo dnf install gtk-layer-shell` |
| Arch | `gtk-layer-shell` | `sudo pacman -S gtk-layer-shell` |

## Building from Source

**Prerequisites:** [Rust](https://rustup.rs/) (latest stable), [Bun](https://bun.sh/)

```sh
# Clone the repository
git clone https://github.com/rishiskhare/parrot
cd parrot

# Install frontend dependencies
bun install

# Run in development mode
bun run tauri dev

# Build a release binary
bun run tauri build
```

> On macOS, if you hit a CMake error:
> ```sh
> CMAKE_POLICY_VERSION_MINIMUM=3.5 bun run tauri dev
> ```

## Architecture

Parrot is built with [Tauri 2](https://tauri.app/), a Rust backend with a React/TypeScript frontend. The entire synthesis and audio pipeline runs in Rust, which keeps CPU and memory usage low even during continuous playback.

```
src-tauri/src/
├── managers/
│ ├── tts.rs # Streaming TTS synthesis and audio playback
│ ├── model.rs # Model download, extraction, and lifecycle
│ └── history.rs # Utterance storage and retention
├── audio_toolkit/ # Audio device enumeration and resampling
├── commands/ # Tauri IPC handlers (frontend ↔ backend)
├── settings.rs # Persistent settings with serde
├── shortcut/ # Global hotkey capture (Tauri + HandyKeys backends)
└── overlay.rs # Floating speaking indicator window

src/
├── components/settings/ # Settings UI (35+ components)
├── overlay/ # Speaking overlay window
└── stores/settingsStore.ts # Zustand state management
```

**Key dependencies:** `tts-rs` (Kokoro TTS), `rodio` (audio playback), `cpal` (audio devices), `tauri-specta` (type-safe IPC)

## Acknowledgments

Parrot is a fork of [Handy](https://github.com/cjpais/Handy) by [CJ Pais](https://github.com/cjpais), released under the MIT License. The original project provided the Tauri architecture, audio pipeline, and UI foundation that made Parrot possible.

TTS synthesis is powered by [Kokoro-82M](https://huggingface.co/hexgrad/Kokoro-82M) via [tts-rs](https://github.com/rishiskhare/tts-rs).

## License

MIT. See [LICENSE](LICENSE) for full text.

Parrot is a derivative work of [Handy](https://github.com/cjpais/Handy) (© 2025 CJ Pais). Both are distributed under the MIT License.