Let your Python scripts speak updates out loud.
Project description
🔊 blurtpy
Offline, cross-platform Python text-to-speech and sound notifications. 100% local, privacy-friendly, and works without internet.
✨ Features
- 🗣️ Offline Text-to-Speech (TTS): Speak messages aloud on any platform, no internet required
- 🔔 Sound Alerts: Play system or custom sounds, 100% locally
- ✅ Decorators: Announce when a function completes
- 🔄 Context Managers: Announce start and finish of code blocks
- 🗂️ Class-based API: Full control over voice, rate, volume, and more
- 🧩 Configurable: Set rate, volume, voice, pitch, and language (user/env/default)
- 🔒 Privacy-first: No data sent to the cloud, works in air-gapped environments
- 🧪 Fully tested: Windows, macOS, Linux (CI + Docker)
- 🔇 Mute mode: Set
BLURT_MUTE=trueto silence all output - 🧠 Extensible: Easy to add new drivers or notification types
🔒 100% Offline & Privacy-Friendly
- All features work entirely on your device—no internet connection required.
- No data is sent to the cloud. Your messages and sounds stay private.
- Perfect for secure environments, air-gapped systems, and privacy-conscious users.
📦 Installation
pip install blurtpy
Or with Pipenv:
pipenv install blurtpy
🚀 Quick Examples
from blurt import say, beep, play_sound, notify_when_done, announce_during, Blurt
say("This task has started!")
beep()
play_sound() # Plays default alert sound
@notify_when_done("All done!")
def compute():
for i in range(3):
print("Working...", i)
compute()
with announce_during("Start", "Finished"):
print("Doing something long...")
# Instance-based API
b = Blurt({"rate": 250, "volume": 0.7})
b.say("Custom rate and volume!")
🧩 Configuration
- User config: Pass a dict to
Blurt() - Environment config: Set
BLURT_CONFIGas a JSON string - Default config: Used if nothing else is set
Configurable keys: rate, volume, voice, pitch, language
export BLURT_CONFIG='{"rate": 180, "volume": 0.5, "voice": "Alex"}'
🛠️ Global API
say(message: str)— Speak a message aloud (offline)beep()— Play a beep sound (offline)play_sound(path: str = None)— Play a sound file (offline)list_voices()— List available system voicesnotify_when_done(message: str)— Decorator to announce after function completesannounce_during(start: str, end: str)— Context manager to announce start/end
🏗️ Class-based API
from blurt import Blurt
b = Blurt({"rate": 200, "volume": 0.8, "voice": "Samantha"})
b.say("Hello from Blurt instance!")
b.beep()
b.play_sound()
voices = b.list_voices()
b.set_rate(300)
b.set_volume(0.5)
b.set_voice("Alex")
🖥 Platform Support
| OS | Voice Tool | Sound Tool |
|---|---|---|
| macOS | say |
afplay |
| Linux | espeak/spd-say |
aplay |
| Windows | pyttsx3 |
winsound |
Linux users: You may need:
sudo apt install espeak aplay
🧪 Testing & CI
- Full test suite:
pytest -v - Linux tests:
docker build -f Dockerfile.linux -t blurtpy-linux-test . && docker run --rm blurtpy-linux-test - Cross-platform CI: GitHub Actions for Windows, macOS, Linux
🧠 Environment Variables
| Variable | Description | Example |
|---|---|---|
BLURT_MUTE |
Mute all output | true |
BLURT_CONFIG |
JSON config for Blurt | '{"rate": 180, "voice": "Alex"}' |
📚 Documentation
Full docs: blurtpy.readthedocs.io
👨💻 Maintainer
Author: Buddheshwar Nath Keshari
📝 License
MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file blurtpy-0.3.1.tar.gz.
File metadata
- Download URL: blurtpy-0.3.1.tar.gz
- Upload date:
- Size: 1.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3edb4c9e9ad134949845ee7b59e76c2e053356eb919650c1894db91a87ac8fb0
|
|
| MD5 |
bd30a41f452c4f7f6f7d253053469c87
|
|
| BLAKE2b-256 |
9a16b9340aa4839852ff83bfe9f44f4e2e9dec0bc2608b65765a1d3a2eb62a1e
|
File details
Details for the file blurtpy-0.3.1-py3-none-any.whl.
File metadata
- Download URL: blurtpy-0.3.1-py3-none-any.whl
- Upload date:
- Size: 1.3 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bfe99320337729d35369463c255a27a0e2feecbebdb475abc313bf4785967999
|
|
| MD5 |
a302d80dae79fbf8a84b10896bd47bce
|
|
| BLAKE2b-256 |
05da1df55a41142b359de8954b759f9688c5dc5a76c927dd1860b8734991406c
|