You think faster than you type. ParrotInk closes that gap. It is the only open-source, Windows-native application that brings professional-grade, real-time voice-to-text directly to your cursor. With a polished visual identity and high-fidelity tray feedback, ParrotInk streams your words instantly so you never lose your flow state.
ParrotInk natively handles mixed-language environments and Right-to-Left (RTL) text.
parriotink2.mp4
(Note: Demonstration showing the real-time streaming, Skia-powered HUD with Acrylic blur, and RTL alignment.)
ParrotInk provides two ways to get started on Windows. We highly recommend the Standard Installer for the best experience, including automatic updates and stable shortcut management.
The most robust way to use ParrotInk. It handles process management, clean updates, and ensures your Start Menu and Desktop shortcuts always point to the right place.
- Download: ParrotInk-Setup.exe (Latest)
- Install Location:
%LOCALAPPDATA%\ParrotInk(No Administrator rights required). - Updates: Simply run the new installer version to automatically stop the app and perform a clean upgrade.
A single, standalone ParrotInk.exe with no installation required. Ideal for USB drives or temporary use.
- Download: ParrotInk.exe (Latest)
⚠️ Warning: If you move the.exefile after enabling Run at Startup, Windows will be unable to find the application at the next boot. We recommend the Standard Installer if you plan to use this feature.
- Zero-Latency Feel: Real-time streaming ensures your text appears as you speak, keeping you in the zone.
- Multi-Speaker Diarization: Real-time speaker labeling (e.g.,
[S1],[S2]), perfect for meetings and interviews. - Global Language Support: Works with almost any language (English, Spanish, French, Chinese, Japanese, etc.) via world-class AI models.
- Native RTL Support: Full support for Arabic and other Right-to-Left languages with correct character shaping and HUD alignment.
- Automatic Background Updates: Downloads new versions silently in the background using Windows BITS.
- Smart Injection: Automatically stops recording if you start typing manually, preventing text collisions.
- Secure by Design: API keys are stored safely in the Windows Credential Manager.
- Download & Install
- Key Features
- Getting Started
- Choose Your Engine
- User Manual: How it Works
- Privacy & Security
- The Story Behind ParrotInk
- Customization & Advanced Settings
- Building from Source
- License
🚀 The Story Behind ParrotInk (Click to expand)
I built ParrotInk because existing dictation tools broke my concentration. They either forced me to wait for "batch processing" to dump a giant block of text onto the screen, or—like the built-in Windows dictation (Win + H)—struggled heavily with slight accents.
I wanted true real-time streaming with professional-grade accuracy, and I wanted the freedom to use my own API keys from industry leaders like OpenAI and AssemblyAI. When I couldn't find a single open-source, Windows-native tool that met these standards, I decided to build it. ParrotInk is the result: a tool designed for people who want to type as fast as they can think, without the wait.
- Launch: Open
ParrotInk-Setup.exe(orParrotInk.exe). - Windows Security:
Because ParrotInk is a new open-source project and is not yet signed with a paid Microsoft Developer certificate, you may see a "Windows protected your PC" warning.
To run the app: Click More info -> Run anyway.
- Setup API Key:
- What is an API Key? A "secret password" that allows ParrotInk to securely talk to the AI models (OpenAI, AssemblyAI, or Cloudflare AI Gateway).
- How to get one: Sign up for a free account at AssemblyAI or OpenAI.
- Where to put it: Right-click the ParrotInk tray icon and select Settings > API Credentials.
- Start Dictating: Press
Ctrl + Alt + V(default) and start speaking. Your words will appear instantly at your cursor!
ParrotInk supports direct OpenAI and AssemblyAI connections and Cloudflare AI Gateway. Stop dictation, then right-click the tray icon to select Transcription > Provider and Transcription > Model. Model choices come from the app's shared model catalog. Pending audio is finalized before the next model connection starts.
The default model is Universal 3.6 Pro Realtime (universal-3-6-pro). It supports native multilingual recognition, vocabulary and conversation context, acoustic focus, and speaker labels.
- Use the response speed profile for
min_latency,balanced, ormax_accuracyoperation. - Set
language_codesfor expected languages, or leave it empty for multilingual recognition. - Headset and laptop microphone profiles map to
near-fieldandfar-fieldVoice Focus. Explicitvoice_focussettings override the profile. - Advanced settings include recognition instructions,
agent_context, and speaker labeling. Modern models return formatted turns directly.
The adapter waits for the server's Begin acknowledgement and finalizes the pending phrase when capture stops. See the AssemblyAI streaming reference and release notes.
The default model is GPT Live Transcribe (gpt-live-transcribe), which emits text while you speak. GPT Transcribe (gpt-transcribe) begins transcription after each committed phrase and is available in the Model menu.
Both modern models use local speech detection and explicit audio commits. ParrotInk commits after the configured silence interval or when you stop dictation, then waits for the final transcript. Transcript items are tracked separately and delivered in spoken order even if the server finishes them out of order.
Set languages for multilingual hints and use prompt and keywords for contextual vocabulary. The response speed profile maps to delay = "low", "medium", or "high"; advanced overrides allow all supported delay levels. Legacy GPT-4o transcription models remain supported through existing configurations but are hidden from the model menu. Their announced retirement date is February 26, 2027. See the OpenAI realtime transcription guide and deprecation schedule.
The OpenAI and AssemblyAI model menus show the two current models for each provider. Older models can still be selected in TOML. The installer bundles the configuration template for first launch; upgrades preserve your existing file, and missing settings use application defaults.
Cloudflare is a connection route to supported speech models, including Cloudflare-hosted models and third-party xAI models. The app currently supports:
| Model | Behavior |
|---|---|
@cf/deepgram/nova-3 (default) |
Cloudflare-hosted streaming transcription with interim and final results. |
@cf/deepgram/flux |
Cloudflare-hosted streaming transcription with turn events. |
xai/grok-stt |
Grok speech-to-text through Cloudflare's unified streaming endpoint. |
To configure it:
- Create an AI Gateway in your Cloudflare dashboard and obtain an API token with access to the gateway and selected model service.
- Open Settings > Configure Cloudflare Gateway... from the tray. Enter your Account ID, Gateway ID, selected Transcription model, and API token. You can also set the token through Settings > API Credentials > Set Cloudflare API Token....
- Give the token Account > AI Gateway > Run for hosted Nova-3/Flux and Account > Workers AI > Read for Grok. Scope it to your account. Provider API keys are never forwarded by the Cloudflare provider.
- Save and select Transcription > Provider > Cloudflare AI Gateway. Use Transcription > Model to change models later.
The token is stored in Windows Credential Manager. Account ID, Gateway ID, model, and other nonsecret settings are saved in TOML; leaving the dialog's token field blank preserves the saved token.
Grok uses api.cloudflare.com and requires a Cloudflare token with Account > Workers AI > Read permission plus sufficient AI Gateway credits for third-party inference. It uses only your Cloudflare token, without an xAI key. Each recording is finalized with audio.done, then the next recording opens a fresh streaming connection. Streaming model access and forwarding of interim results must be checked with your credentials. See Cloudflare Grok STT and the unified API authentication requirements.
The OpenAI GPT Live Transcribe and GPT Transcribe models are not available on Cloudflare's unified model endpoint and are omitted from the Cloudflare menu. Existing configurations retain their model IDs but give an actionable error; select a supported Cloudflare model or use the direct OpenAI provider. The old use_byok setting remains readable for compatibility and no longer forwards provider keys.
The available models are limited to the speech protocols implemented by ParrotInk. Gateway support for an arbitrary model does not make it a compatible transcription model. Gateway's chat Dynamic Routing does not perform live audio model switching; ParrotInk switches connections at phrase boundaries. See the Cloudflare realtime WebSocket guide and Gateway BYOK documentation.
- Click into the application where you want to type (Notion, Slack, Word, etc.).
- Press
Ctrl + Alt + V(or your custom hotkey). - Speak. Your words will appear instantly. Stop speaking or press any key to finish.
ParrotInk monitors a global hotkey via native Win32 hooks. You can switch between two distinct modes via the tray menu (Settings > Hold to Talk):
Best for short bursts, quick replies, and coding snippets.
- Action: Press and hold your hotkey.
- Dictate: Speak your mind.
- Stop: Release the hotkey. Audio capture stops when you let go; the pending phrase is finalized before the session closes.
Best for long-form writing, drafting long emails, or deep thinking.
- Action: Press the hotkey once to start recording. You can now take your hands off the keyboard and focus entirely on your speech.
- Stop: Press the hotkey again to finish.
- Smart Stop: If you start typing manually on your keyboard while it's listening, ParrotInk will automatically stop the session.
Dictation checks the focused local control through Windows accessibility metadata. Writable value/text patterns are accepted, including custom editors; standard Edit controls also work when read-only metadata is missing. Disabled, password, known read-only, and other unconfirmed targets are rejected. Rich editors are checked at the current selection or caret, rather than across the whole document. The target is checked again after connection setup, before microphone capture. Rejections reset the hotkey state and the HUD asks you to click an editable text field.
Mouse Without Borders does not provide remote dictation or reliable active-computer detection here. A local editor can remain focused while you control another computer. Run ParrotInk on the computer with the microphone and stop dictation before switching; disable the second instance if you do not use dictation locally there.
Search boxes with suggestion lists can report a selected result as focused before the first character is typed. When accessibility explicitly links an adjacent writable search box to that list, ParrotInk treats the box and its suggestions as the same target. Ordinary lists without that relationship remain subject to the editability check.
Click-away cancellation observes native mouse events without consuming them. In control scope, Windows UI Automation identifies the focused editor and its bounds when available; native control matching supplements it. Focus checks run off the input-hook thread. Native clicks and accessibility bounds use physical pixels, independently of the main UI scaling. The target remains attached until finalization finishes, and queued insertions recheck it on the worker immediately before writing. Results are discarded if the target changed, including while stopping.
Stop-time errors now identify whether the provider failed to finalize or final text could not be inserted. Error logs include the provider, model, stage, elapsed time, and pending insertion count without transcript contents or credentials.
AssemblyAI recordings retain the hot connection after stopping. Pending speech uses ForceEndpoint; an already-completed turn followed by silence does not request another final. Terminate is reserved for closing the connection.
Audio activity is normalized to a Python boolean before reaching providers, so silent chunks are not mistaken for pending speech by boolean identity checks.
- Right-click the tray icon.
- Select Settings > Change Hotkey....
- Press the new key combination (e.g.,
Alt + SorCtrl + Space). ParrotInk saves it instantly.
Use one main key, with optional Ctrl, Alt, Shift, or Windows modifiers. Function keys, navigation keys, and punctuation keys are supported. Press Escape or click the recorder to cancel and keep your current shortcut active. Holding a toggle shortcut triggers it once; release it before pressing again. Forwarded keyboard input, including Mouse Without Borders, is accepted on the machine running ParrotInk.
⚙️ Deep Configuration (Advanced Users)
ParrotInk follows a Portable-First configuration strategy. It looks for its settings in the following order:
- Portable Mode: A
config.tomlfile located in the same folder as theParrotInk.exe. (Ideal for USB drives or custom installs). - Standard Mode:
%APPDATA%\ParrotInk\config.toml(Used if no local file is found).
How to modify settings:
- Right-click the tray icon and select Tools > 1. Open Configuration File.
- Edit the
config.tomlin your preferred text editor (like Notepad). - Crucial: After saving your changes, right-click the tray icon and select Tools > 2. Load Configuration for the changes to take effect immediately without restarting the app.
Available Tuning:
- HUD Styles: Customize the Skia-powered HUD appearance.
- Acoustic Profiles: Switch between
Headset(near-field) andLaptop Mic(far-field) profiles. - Latency Tuning: Choose between
Fast,Balanced, orAccurateprofiles to match your speaking pace.
Detailed documentation on all technical settings and their default values can be found in the config.example.toml file located in the project root.
As an open-source project, transparency is our priority:
- Encrypted Storage: Your API keys are stored directly in the Windows Credential Manager, encrypted at the OS level.
- No Local Audio Storage: Audio is streamed via encrypted WebSockets to the provider and is never saved to your hard drive.
- Local Logs & Stats: Application logs and statistics are stored locally. Cloudflare Gateway logging and retention depend on your gateway settings; configure them in the Cloudflare dashboard.
ParrotInk stays out of your way in the System Tray. The icon color tells you exactly what the app is doing:
- Grey: Idle — App is ready and waiting for your hotkey.
- Blue: Listening — Capturing your voice and streaming text.
- Yellow: Connecting — Establishing a secure link to the AI.
- Red: Error — Something is wrong (usually a missing API key).
ParrotInk is built with Python 3.11+ and uses modern, high-performance libraries like skia-python for rendering and sounddevice for low-latency audio capture.
- Prerequisites:
- Python 3.11+
- uv (for dependency management)
- Clone & Setup:
git clone https://github.com/Aalwattar/ParrotInk.git cd ParrotInk uv sync
- Run Locally:
uv run main.py
ParrotInk is actively maintained and welcomes contributions!
- Found a bug? Open an issue on the GitHub Issue Tracker.
- Code Style: We use
rufffor linting and formatting, andmypyfor strict type checking.
Distributed under the MIT License. See LICENSE for more information.
Built for speed. Built for Windows. Built for you.