Back to Home

Interactive Guide

Learn how to Speak. Release. Done.

How It Works

1. Press & Hold Hotkey

Press and hold the global hotkey combo (Default: Alt + LShift). The virtual keyboard lights up and a sleek floating pill pops up on your screen.

2. Speak Naturally

Speak your text, sentences, or phrases in English or Hinglish. The floating pill shows high-fidelity animated waves indicating audio capture. A progress bar tracks duration.

3. Release to Transcribe

Release the hotkey. The app stops recording and instantly streams the audio to Groq Whisper. The pill changes to a smooth, spinning blue loader ring.

4. Done & Auto-Paste

Within under a second, the transcription is finalized! The pill displays a green checkmark indicating success, and automatically types the words directly into your active window.

SPITIT SANDBOX SIMULATOR
notepad.exe - Untitled
Click "Run Simulation" or click the step cards on the left to see Spitit in action!
Esc
F1
F2
F3
F4
F5
F6
F7
F8
~
1
2
3
4
5
6
7
8
9
0
-
Tab
Q
W
E
R
T
Y
U
I
O
P
Caps
A
S
D
F
G
H
J
K
L
Enter
LShift
Z
X
C
V
B
N
M
,
.
RShift
Ctrl
Win
Alt
Space
Alt
Ctrl
12 words
Developer API & Keyboard Bindings

Spitit is built in Python using cross-platform system hotkey bindings and CustomTkinter graphics. Below is the simplified underlying code wiring up the keyboard hold combo and managing the floating status pill states:

# src/hotkey.py - Global keyboard combo controller
import keyboard

class HotkeyController:
    def __init__(self, hold_combo="alt+left shift", on_start=None, on_stop=None):
        self.hold_combo = hold_combo
        self.on_start = on_start
        self.on_stop = on_stop
        self.is_active = False

    def start(self):
        # Global hook to intercept pressed keys
        keyboard.hook(self._on_key_event)

    def _on_key_event(self, event):
        if keyboard.is_pressed(self.hold_combo):
            if not self.is_active:
                self.is_active = True
                self.on_start()  # Triggers recording and displays the status pill
        else:
            if self.is_active:
                self.is_active = False
                self.on_stop()   # Stops recording and begins transcribing