Typio is a lightweight Python library that prints text to the terminal as if it were being typed by a human. It supports multiple typing modes (character, word, line, sentence, typewriter, and adaptive), configurable delays and jitter for natural variation, and seamless integration with existing code via a simple function or a decorator. Typio is designed to be minimal, extensible, and safe, making it ideal for demos, CLIs, tutorials, and storytelling in the terminal.
| PyPI Counter | |
| Github Stars |
| Branch | main | dev |
| CI |
| Code Quality |
- Download Version 0.9 or Latest Source
pip install .
- Check Python Packaging User Guide
pip install typio==0.9
Use type_print function to print text with human-like typing effects. You can control the typing speed, randomness, mode, and output stream.
from typio import type_print
from typio import TypeMode
type_print("Hello, world!")
type_print(
"Typing with style and personality.",
delay=0.06,
jitter=0.02,
end="\n",
mode=TypeMode.ADAPTIVE,
)You can also redirect the output to any file-like object:
with open("output.txt", "w") as file:
type_print("Saved with typing effects.", file=file)| Name | Type | Description | Default |
|---|---|---|---|
text |
str |
Text to be printed | -- |
delay |
float |
Base delay (seconds) between emitted units | 0.04 |
jitter |
float |
Random delay variation (seconds) | 0 |
end |
str |
Ending character(s) | \n |
mode |
TypeMode | Callable |
Typing mode (built-in or custom) | TypeMode.CHAR |
file |
TextIOBase |
Output stream | sys.stdout |
| Mode | Description |
|---|---|
TypeMode.CHAR |
Emit text character by character |
TypeMode.WORD |
Emit text word by word, preserving whitespace |
TypeMode.LINE |
Emit text line by line |
TypeMode.SENTENCE |
Emit text character by character with longer pauses after ., !, ? |
TypeMode.TYPEWRITER |
Emit text character by character with longer pauses after newlines |
TypeMode.ADAPTIVE |
Emit text with adaptive delays based on character type (spaces, punctuation, alphanumeric) |
TypeMode.ACCELERATE |
Emit text character by character with progressively decreasing delay (gradually speeds up over time) |
TypeMode.DECELERATE |
Emit text character by character with progressively increasing delay (gradually slows down over time) |
TypeMode.BURST |
Emit text in bursts of characters followed by short pauses |
TypeMode.FAT_FINGER |
Emit text mimicking human typos and corrections |
TypeMode.THOUGHTFUL |
Emit text while pause slightly before long words to simulate thinking |
TypeMode.HEARTBEAT |
Emit text with alternating short and long pauses to simulate a heartbeat-like rhythm |
TypeMode.REWIND |
Emit text while occasionally deleting and retyping words to simulate reconsideration |
TypeMode.GLITCH |
Emit text with occasional random glitches that are quickly corrected |
TypeMode.RANDOM_CASE |
Emit text with randomly varying character casing |
TypeMode.WAVE |
Emit text with sinusoidal delay variation |
TypeMode.STUTTER |
Emit text with stuttering effect on some words |
TypeMode.NERVOUS |
Emit text erratically typing with inconsistent pauses |
TypeMode.HESITATION |
Emit text with occasional pauses within words to simulate human hesitation |
TypeMode.OVERTHINK |
Emit text while occasionally deleting and retyping a chunk of text to simulate overthinking |
TypeMode.CONFIDENT |
Emit text quickly with brief pauses, adding longer delays after punctuation to simulate confident typing |
TypeMode.ECHO |
Emit text with occasional repetition of characters faintly, like a glitchy terminal echo |
Use the @typestyle decorator to apply typing effects to all print calls inside a function, without changing the function's implementation.
from typio import typestyle
from typio import TypeMode
@typestyle(delay=0.05, mode=TypeMode.TYPEWRITER)
def intro():
print("Welcome to Typio.")
print("Every print is typed.")
intro()| Name | Type | Description | Default |
|---|---|---|---|
delay |
float |
Base delay (seconds) between emitted units | 0.04 |
jitter |
float |
Random delay variation (seconds) | 0 |
mode |
TypeMode | Callable |
Typing mode (built-in or custom) | TypeMode.CHAR |
Typio also allows defining custom typing modes.
A custom mode is a callable that receives a typing context and the text being printed.
This custom mode, named dramatic, adds exaggerated pauses after punctuation to create a dramatic typing effect.
from typio import TypioContext
def dramatic(ctx: TypioContext, text: str):
for ch in text:
ctx.emit(ch)
if ch in ".!?":
ctx.sleep(delay=ctx.delay * 6)Usage with type_print function:
type_print(
"Wait... what?!",
mode=dramatic,
delay=0.05,
jitter=0.02,
)Usage with @typestyle decorator:
@typestyle(delay=0.06, mode=dramatic)
def demo():
print("This is serious.")
print("Very serious!")
demo()This table describes the TypioContext API, which is the interface exposed to custom typing modes for emitting text, controlling timing, and accessing delay settings.
| Name | Type | Description |
|---|---|---|
emit(text) |
method |
Emit a text fragment using typing effects |
sleep(delay=None, jitter=None) |
method |
Pause execution with optional delay and jitter override |
flush() |
method |
Flush the underlying output stream |
delay |
property |
Base delay in seconds |
jitter |
property |
Jitter value in seconds |
Typio provides a simple command line interface for printing text with typing effects.
> typio --text="Hello world!" --mode=typewriter --delay=0.03Just fill an issue and describe it. We'll check it ASAP!
- Please complete the issue template
Give a ⭐️ if this project helped you!
1KtNLEEeUbTEK9PdN6Ya3ZAKXaqoKUuxCy 0xcD4Db18B6664A9662123D4307B074aE968535388 Ldnz5gMcEeV8BAdsyf8FstWDC6uyYR6pgZ DDUnKpFQbBqLpFVZ9DfuVysBdr249HxVDh TCZxzPZLcJHr2qR3uPUB1tXB6L3FDSSAx7 rN7ZuRG7HDGHR5nof8nu5LrsbmSB61V1qq bnb1zglwcf0ac3d0s2f6ck5kgwvcru4tlctt4p5qef 0xcD4Db18B6664A9662123D4307B074aE968535388 Xd3Yn2qZJ7VE8nbKw2fS98aLxR5M6WUU3s GALPOLPISRHIYHLQER2TLJRGUSZH52RYDK6C3HIU4PSMNAV65Q36EGNL zil1knmz8zj88cf0exr2ry7nav9elehxfcgqu3c5e5