{"id":45524198,"url":"https://github.com/rishiskhare/parrot","last_synced_at":"2026-02-28T07:03:52.500Z","repository":{"id":340025186,"uuid":"1163829534","full_name":"rishiskhare/parrot","owner":"rishiskhare","description":"A free, offline, private AI text-to-speech desktop app built on Rust 🦜","archived":false,"fork":false,"pushed_at":"2026-02-25T18:08:08.000Z","size":3222,"stargazers_count":25,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-26T07:55:39.166Z","etag":null,"topics":["accessibility","cross-platform","kokoro-tts","rust","tauri-v2","text-to-speech"],"latest_commit_sha":null,"homepage":"https://tryparrot.vercel.app/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rishiskhare.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["rishiskhare"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2026-02-22T08:00:06.000Z","updated_at":"2026-02-26T04:36:05.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rishiskhare/parrot","commit_stats":null,"previous_names":["rishiskhare/parrot"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/rishiskhare/parrot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rishiskhare%2Fparrot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rishiskhare%2Fparrot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rishiskhare%2Fparrot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rishiskhare%2Fparrot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rishiskhare","download_url":"https://codeload.github.com/rishiskhare/parrot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rishiskhare%2Fparrot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29927194,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T19:37:42.220Z","status":"online","status_checked_at":"2026-02-28T02:00:07.010Z","response_time":90,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["accessibility","cross-platform","kokoro-tts","rust","tauri-v2","text-to-speech"],"created_at":"2026-02-22T23:35:31.654Z","updated_at":"2026-02-28T07:03:52.482Z","avatar_url":"https://github.com/rishiskhare.png","language":"Rust","funding_links":["https://github.com/sponsors/rishiskhare"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n  \u003cimg src=\"parrot.webp\" alt=\"Parrot\" width=\"120\" /\u003e\n\n  # Parrot: AI Text-to-Speech\n\n  **A free, offline, private AI text-to-speech for your desktop**\n\n  Highlight text in any app, press a shortcut\u003cbr/\u003e\n  Hear it read aloud *instantly, privately, on your device*\n\n  Supports **9 languages:**\u003cbr/\u003e\n  English (US \u0026 UK) · Spanish · French · Hindi · Italian · Japanese · Portuguese (Brazilian) · Chinese (Mandarin)\n\n  ![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Windows%20%7C%20Linux-lightgrey)\n  ![License](https://img.shields.io/badge/license-MIT-red)\n  ![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/rishiskhare/parrot/total)\n  ![Version](https://img.shields.io/badge/version-26.2.4-blue)\n\u003c/div\u003e\n\n---\n\n## What is Parrot? 🦜\n\nParrot 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.\n\nThe 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.\n\n### How It Works\n\n1. **Select text** in any application\n2. **Press the shortcut** (default: `Option+Space` on macOS, `Ctrl+Space` on Windows/Linux)\n3. A small overlay appears while Parrot synthesizes and plays the audio\n4. Press `Option+P` to pause/resume (all shortcuts are customizable)\n\n### 🔊 Here's how it sounds (make sure to unmute): \nhttps://github.com/user-attachments/assets/baee7c2c-ac25-4418-9d55-713caeb23cee\n\n## Installation\n\nDownload the latest stable version for macOS, Windows, and Linux from the [Parrot website](https://tryparrot.vercel.app/).\n\nOn first launch, Parrot prompts you to download the TTS model (~115 MB). Once downloaded, the app works completely offline.\n\n## Features\n\n- **Private by design:** your text is processed locally and never sent anywhere\n- **Lightweight:** ~115 MB model, minimal memory footprint, Rust-powered backend\n- **Works in any app:** reads selected text from browsers, editors, PDFs, terminals, anywhere\n- **Streaming playback:** audio starts playing before the full text has been synthesized\n- **Free forever:** no subscription, no API key, no account required\n- **Pause \u0026 resume:** pause and resume playback mid-sentence with a keyboard shortcut\n- **Floating overlay:** a lightweight indicator shows speaking status with pause controls\n\n## Models\n\nParrot 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.\n\nKokoro supports **54 voices** across 9 languages. The voice is selected automatically based on your language setting, or choose one manually in **Settings → General**.\n\n### Voices\n| Language | Female Voices | Male Voices |\n|----------|---------------|-------------|\n| English (US) | Alloy, Aoede, Bella, Heart, Jessica, Kore, Nicole, Nova, River, Sarah, Sky | Adam, Echo, Eric, Fenrir, Liam, Michael, Onyx, Puck, Santa |\n| English (UK) | Alice, Emma, Isabella, Lily | Daniel, Fable, George, Lewis |\n| Spanish | Dora | Alex, Santa |\n| French | Siwis | - |\n| Hindi | Alpha, Beta | Omega, Psi |\n| Italian | Sara | Nicola |\n| Japanese | Alpha, Gongitsune, Nezumi, Tebukuro | Kumo |\n| Portuguese (Brazilian) | Dora | Alex, Santa |\n| Chinese (Mandarin) | Xiaobei, Xiaoni, Xiaoxiao, Xiaoyi | Yunjian, Yunxi, Yunxia, Yunyang |\n\n## Keyboard Shortcuts\n\nAll shortcuts are fully customizable in **Settings → General**.\n\n| Action | macOS | Windows / Linux |\n|--------|-------|-----------------|\n| Speak selected text | `Option+Space` | `Ctrl+Space` |\n| Pause / resume playback | `Option+P` | `Alt+P` |\n| Open settings | `Cmd+,` | `Ctrl+,` |\n| Open debug panel | `Cmd+Shift+D` | `Ctrl+Shift+D` |\n\nThe pause/resume shortcut is only active while Parrot is playing. It can be customized or disabled in **Settings → General**.\n\n## Settings Overview\n\n| Category | Options |\n|----------|---------|\n| **General** | Shortcuts, TTS language, voice, output device, audio feedback |\n| **Models** | Download, switch, and delete TTS models |\n| **Advanced → App** | Start hidden, autostart, tray icon, overlay position, model unload timeout |\n| **Advanced → Speech** | Worker threads, playback speed, fast first response |\n| **Advanced → History** | Entry limit, auto-delete period |\n| **History** | Browse, replay, copy, and delete past utterances |\n| **Debug** | Log level, keyboard implementation, diagnostics |\n\n## Command-Line Interface\n\nParrot 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.\n\n```\nparrot [FLAGS]\n```\n\n| Flag | Description |\n|------|-------------|\n| `--toggle-transcription` | Toggle TTS on/off in the running instance |\n| `--start-hidden` | Launch without showing the main window |\n| `--no-tray` | Launch without a tray icon (closing the window quits) |\n| `--debug` | Enable verbose trace logging |\n\n**Example: bind to a window manager shortcut:**\n```sh\nparrot --toggle-transcription\n```\n\n\u003e **macOS:** When using the app bundle, invoke the binary directly:\n\u003e ```sh\n\u003e /Applications/Parrot.app/Contents/MacOS/Parrot --toggle-transcription\n\u003e ```\n\n## Linux Notes\n\n### Text Input Tools\n\nFor reliable text pasting on Linux, install the appropriate tool for your display server:\n\n| Display Server | Recommended | Install |\n|----------------|-------------|---------|\n| X11 | `xdotool` | `sudo apt install xdotool` |\n| Wayland | `wtype` | `sudo apt install wtype` |\n| Both | `dotool` | `sudo apt install dotool` |\n\n`dotool` requires adding your user to the `input` group: `sudo usermod -aG input $USER` (log out and back in after).\n\n### Global Shortcuts on Wayland\n\nParrot'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.\n\n**GNOME:**\n1. Open **Settings \u003e Keyboard \u003e Keyboard Shortcuts \u003e Custom Shortcuts**\n2. Add a new shortcut with the command `parrot --toggle-transcription`\n\n**KDE Plasma:**\n1. Open **System Settings \u003e Shortcuts \u003e Custom Shortcuts**\n2. Create a new **Command/URL** shortcut with `parrot --toggle-transcription`\n\n**Sway / i3:**\n```ini\nbindsym $mod+o exec parrot --toggle-transcription\n```\n\n**Hyprland:**\n```ini\nbind = $mainMod, O, exec, parrot --toggle-transcription\n```\n\n### Unix Signal Control\n\nYou can also send signals directly to the Parrot process, useful for hotkey daemons that manage their own keybindings:\n\n| Signal | Action |\n|--------|--------|\n| `SIGUSR1` | Toggle TTS |\n| `SIGUSR2` | Toggle TTS |\n\n```sh\npkill -USR2 -n parrot   # toggle TTS\n```\n\n### Other Linux Notes\n\n- The speaking overlay is disabled by default on Linux (`Overlay Position: None`) because some compositors treat it as the active window and steal focus.\n- If the app fails to start, try setting `WEBKIT_DISABLE_DMABUF_RENDERER=1`.\n- If you see `error while loading shared libraries: libgtk-layer-shell.so.0`, install the runtime package:\n\n  | Distro | Package | Command |\n  |--------|---------|---------|\n  | Ubuntu/Debian | `libgtk-layer-shell0` | `sudo apt install libgtk-layer-shell0` |\n  | Fedora/RHEL | `gtk-layer-shell` | `sudo dnf install gtk-layer-shell` |\n  | Arch | `gtk-layer-shell` | `sudo pacman -S gtk-layer-shell` |\n\n## Building from Source\n\n**Prerequisites:** [Rust](https://rustup.rs/) (latest stable), [Bun](https://bun.sh/)\n\n```sh\n# Clone the repository\ngit clone https://github.com/rishiskhare/parrot\ncd parrot\n\n# Install frontend dependencies\nbun install\n\n# Run in development mode\nbun run tauri dev\n\n# Build a release binary\nbun run tauri build\n```\n\n\u003e On macOS, if you hit a CMake error:\n\u003e ```sh\n\u003e CMAKE_POLICY_VERSION_MINIMUM=3.5 bun run tauri dev\n\u003e ```\n\n## Architecture\n\nParrot 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.\n\n```\nsrc-tauri/src/\n├── managers/\n│   ├── tts.rs          # Streaming TTS synthesis and audio playback\n│   ├── model.rs        # Model download, extraction, and lifecycle\n│   └── history.rs      # Utterance storage and retention\n├── audio_toolkit/      # Audio device enumeration and resampling\n├── commands/           # Tauri IPC handlers (frontend ↔ backend)\n├── settings.rs         # Persistent settings with serde\n├── shortcut/           # Global hotkey capture (Tauri + HandyKeys backends)\n└── overlay.rs          # Floating speaking indicator window\n\nsrc/\n├── components/settings/   # Settings UI (35+ components)\n├── overlay/               # Speaking overlay window\n└── stores/settingsStore.ts  # Zustand state management\n```\n\n**Key dependencies:** `tts-rs` (Kokoro TTS), `rodio` (audio playback), `cpal` (audio devices), `tauri-specta` (type-safe IPC)\n\n## Acknowledgments\n\nParrot 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.\n\nTTS synthesis is powered by [Kokoro-82M](https://huggingface.co/hexgrad/Kokoro-82M) via [tts-rs](https://github.com/rishiskhare/tts-rs).\n\n## License\n\nMIT. See [LICENSE](LICENSE) for full text.\n\nParrot is a derivative work of [Handy](https://github.com/cjpais/Handy) (© 2025 CJ Pais). Both are distributed under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frishiskhare%2Fparrot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frishiskhare%2Fparrot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frishiskhare%2Fparrot/lists"}