A Python tool that simulates realistic human typing behavior — complete with typos, corrections, thinking pauses, and mid-sentence edits. Designed to bypass typing analysis systems like GPTZero by mimicking authentic human typing patterns.
Key Use Case: typesim is specifically designed to avoid detection systems that analyze the typing process (e.g., GPTZero typing analysis). It achieves this by varying per-character delays, inserting natural pauses, and performing human-like edits and corrections. Please use responsibly and comply with the rules of the apps and platforms where you type.
- Bypass Typing Analysis Systems: Specifically designed to evade typing-process detectors like GPTZero typing analysis by simulating authentic human timing patterns, natural edits, and realistic corrections
- Realistic typos: Randomly hits neighboring keys on QWERTY keyboard
- Automatic corrections: Backspaces and fixes typos naturally
- Variable typing speed: Randomized delays between keystrokes with human-like rhythm
- Thinking pauses: Longer pauses at sentence boundaries, commas, and paragraphs
- Mid-sentence edits: Goes back to change words, insert phrases, or improve text
- Sentence rephrasing: Types rephrased versions then changes back (AI-powered)
- Keyboard shortcuts: Pause, speed control, stop
- TUI Settings Menu: Configure all behaviors through a beautiful interface
- File loading: Read text from files
- AI integration: Optional Gemini API for smarter word suggestions and rephrasing
- Emergency stop: Press Esc anytime to stop typing
# Install directly from GitHub using uv
uv tool install git+https://github.com/pc-style/typesim.gitThis project uses UV for dependency management.
# Clone the repository
git clone https://github.com/pc-style/typesim.git
cd typesim
# Install dependencies
uv sync
# Or install in development mode
uv pip install -e .- Get a Gemini API key from Google AI Studio (optional, for AI features)
- Set it as an environment variable:
export GEMINI_API_KEY="your-api-key-here"
- Install dependencies:
uv sync
Run the simulator:
# If installed via uv tool install
typesim
# If running from source
uv run typesimThe TUI provides a main menu with options:
- Start Typing - Enter text and start typing simulation
- Settings - Configure all typing behaviors
- Load from File - Load text from a file
- Reset to Defaults - Reset all settings
- Space - Pause/Resume typing
- + - Increase typing speed
- - - Decrease typing speed
- Esc - Stop typing completely
- Run the command
- Choose option from main menu
- Enter text (or load from file)
- Press Enter to start the countdown
- Switch to your target app (text editor, chat, etc.)
- Watch the realistic typing happen!
- Use keyboard shortcuts to control typing
All settings can be configured through the TUI Settings Menu (option 2):
- Typo Probability: Chance of making a typo per character (0-50%)
- Edit Probability: Chance to go back and edit something (0-100%)
- Rephrase Probability: Chance to rephrase entire sentences (0-100%)
- Base Delay: Normal typing speed range (min/max in milliseconds)
- Thinking Pause: Pause duration for thinking (min/max in milliseconds)
- Sentence Pause: Pause at sentence ends (min/max in milliseconds)
- Comma Pause: Pause at commas (min/max in milliseconds)
- Use AI: Toggle Gemini API features (synonyms, rephrasing)
- Countdown Seconds: Countdown duration before typing starts
- Speed Multiplier: Base typing speed multiplier (0.1x to 5.0x)
Settings are saved to ~/.typesim/config.yaml and persist between sessions.
- Python 3.12+
- pynput (for keyboard control)
- google-genai (for Gemini API integration, optional)
- rich (for TUI)
- pyyaml (for config persistence)
- Make sure you have time to switch to your target app during the countdown
- The simulator types into whatever window is active after the countdown
- On macOS, you may need to grant accessibility permissions for keyboard control
- If Gemini API is unavailable or disabled, the app falls back to hardcoded alternatives
- Configuration is saved automatically when you exit the settings menu
typesim
# Choose option 1
# Paste your text
# Press Enter
# Switch to target apptypesim
# Choose option 3
# Enter file path: /path/to/text.txt
# Press Enter
# Switch to target apptypesim
# Choose option 2
# Edit any setting
# Press 'b' to go back (saves automatically)