Skip to main content

Ghost-Typer is a terminal demo tool that replays source code as if someone were typing it live. It is designed for polished screen recordings, short-form demos, and social media clips.

What it does

  • Reads a source file and detects the language when possible.
  • Replays the file character by character with human-like typing delays.
  • Supports syntax highlighting with Rich and Pygments.
  • Supports built-in Pygments themes and custom JSON themes.
  • Detects special pause comments such as pause: 2s to add dramatic pauses.
  • Offers both a classic command-line mode and an interactive setup wizard.

Requirements

  • Python 3.13 or newer is recommended.
  • A virtual environment is strongly recommended.

Install from a clone

git clone <repo-url>
cd ghost-typer
python -m venv venv

Windows PowerShell

.\venv\Scripts\Activate.ps1
pip install rich pygments colorama questionary

macOS / Linux

source venv/bin/activate
pip install rich pygments colorama questionary

If you prefer, you can also install the packages globally, but a virtual environment is the safest option.

Install from PyPI

When the package is published, install it with:

pip install ghost-typer

Run it from anywhere with:

ghost-typer --cli

Quick start

Interactive mode

The interactive wizard opens automatically when you run the tool with no extra CLI flags, or explicitly with --cli.

python ghost_typer.py

or

python ghost_typer.py --cli

If you start it with only a source file, it will also enter the interactive flow without asking for the file again:

python ghost_typer.py script.py

Classic CLI mode

If you pass additional options, Ghost-Typer uses the standard CLI flow.

python ghost_typer.py script.py --theme pygments:dracula --speed 1.2

How it works

Ghost-Typer can be used in two ways:

1. Interactive wizard

The wizard guides you through:

  • choosing a theme
  • choosing a lexer if needed
  • configuring typing speed
  • configuring delay ranges
  • confirming whether to clear the screen before starting

This mode is designed to feel like a clean setup dashboard.

2. Direct command-line configuration

You can still pass parameters directly from the terminal for faster workflows, scripts, or automation.

Themes

Ghost-Typer supports two theme sources:

Built-in Pygments themes

Use the pygments: prefix:

python ghost_typer.py script.py --theme pygments:monokai
python ghost_typer.py script.py --theme pygments:dracula

Custom JSON themes

You can load a theme from a local JSON file or from a theme file inside the themes/ folder.

Examples:

python ghost_typer.py script.py --theme themes/Clancy\ Stealth.json
python ghost_typer.py script.py --theme themes/example-neon.json
python ghost_typer.py script.py --theme monokai

If the JSON theme lives inside themes/, you can use its name without the extension:

python ghost_typer.py script.py --theme example-neon

Theme catalog

List available built-in and local themes with:

python ghost_typer.py --list-themes

Custom theme format

A custom theme JSON can define:

  • metadata
  • terminal
  • syntax
  • ui
  • typing_config

Example:

{
  "metadata": {
    "name": "Clancy Stealth",
    "author": "JoseDev",
    "version": "1.0"
  },
  "terminal": {
    "background": "#000000",
    "cursor_color": "#FFE700",
    "cursor_style": "block"
  },
  "syntax": {
    "keyword": "#FF0000",
    "string": "#FFE700",
    "function": "#FFFFFF"
  },
  "ui": {
    "header_color": "#FFE700",
    "border_color": "#FF0000"
  },
  "typing_config": {
    "base_speed": 0.05,
    "variance": 0.02,
    "line_pause_multiplier": 1.5
  }
}

Pause comments

Ghost-Typer can pause on special annotations inside the file:

# pause: 2s

Supported units:

  • ms
  • s
  • m

CLI options

Core options

  • file: source file to replay
  • --theme: theme name, built-in Pygments theme, or JSON path
  • --themes-dir: folder used to search local JSON themes
  • --list-themes: print available themes and exit
  • --cli: open the interactive wizard
  • --language: force a lexer alias
  • --no-clear: do not clear the screen before starting

Typing options

  • --min-delay: minimum delay per character in milliseconds
  • --max-delay: maximum delay per character in milliseconds
  • --speed: speed multiplier
  • --newline-multiplier: extra multiplier for newline pauses

Other options

  • --cursor: visible cursor symbol in non-interactive mode

Examples

Replay a Python file with a built-in theme

python ghost_typer.py script.py --theme pygments:dracula

Replay a file using a local theme JSON

python ghost_typer.py script.py --theme themes/Clancy\ Stealth.json

Open the interactive wizard

python ghost_typer.py --cli

Use a custom lexer and speed settings

python ghost_typer.py script.py --language python --min-delay 20 --max-delay 90 --speed 1.4

Notes

  • The tool respects the terminal's native background in the minimalist UI mode.
  • If you pass additional CLI arguments, Ghost-Typer uses the command-line flow instead of the simplified interactive path.
  • Custom themes inside themes/ are discovered automatically by name.

Project structure

ghost-typer/
├── ghost_typer.py
├── pyproject.toml
├── MANIFEST.in
├── themes/
│   ├── Clancy Stealth.json
│   ├── dracula.json
│   ├── example-neon.json
│   └── monokai.json
└── venv/

Packaging and publishing (PyPI)

1. Update version

Before each release, bump the version in pyproject.toml.

2. Build distribution artifacts

From the project root:

python -m pip install --upgrade build twine
python -m build

This generates:

  • dist/*.tar.gz (source distribution)
  • dist/*.whl (wheel)

3. Validate package metadata

python -m twine check dist/*

4. Upload to TestPyPI (recommended)

python -m twine upload --repository testpypi dist/*

Test install from TestPyPI:

pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple ghost-typer

5. Upload to PyPI

python -m twine upload dist/*

If you use an API token, set it as the password in Twine with username __token__.

License

Add your preferred license here.

Metadata

Release files for ghost-typer 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ghost-typer 0.1.0
File Size Uploaded
ghost_typer-0.1.0.tar.gz 92.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ghost-typer 0.1.0
File Interpreter ABI Platform
ghost_typer-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 105.6 kB

Release files / ghost_typer-0.1.0.tar.gz

Download URL ghost_typer-0.1.0.tar.gz
Size 92.9 kB
Tags Source
SHA-256 checksum
How to use checksums
26099b5c95debc9fd2b10b0ede5b69f029fbb26319b465a02ffad6f3680f9e0e
BLAKE2b-256 checksum
How to use checksums
68b829007b2e6b5db450ec99862e1f6e3ebdd21ae9e39ae1739ec4ffd17c1646
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.7

Release files / ghost_typer-0.1.0-py3-none-any.whl

Download URL ghost_typer-0.1.0-py3-none-any.whl
Size 12.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
95e62e3ba2423d20346ee620ba8ea7f0f2b2e2e0e8da05b85bd12f186823b543
BLAKE2b-256 checksum
How to use checksums
aed2285af99dd6e0f6daa8757d22339d96430ee167fd43da1921a66c28c112d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.7

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page