Skip to main content

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.

PyPI version Build Status Documentation Status


✨ 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=true to 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_CONFIG as 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 voices
  • notify_when_done(message: str) — Decorator to announce after function completes
  • announce_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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

blurtpy-0.3.1.tar.gz (1.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

blurtpy-0.3.1-py3-none-any.whl (1.3 MB view details)

Uploaded Python 3

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

Hashes for blurtpy-0.3.1.tar.gz
Algorithm Hash digest
SHA256 3edb4c9e9ad134949845ee7b59e76c2e053356eb919650c1894db91a87ac8fb0
MD5 bd30a41f452c4f7f6f7d253053469c87
BLAKE2b-256 9a16b9340aa4839852ff83bfe9f44f4e2e9dec0bc2608b65765a1d3a2eb62a1e

See more details on using hashes here.

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

Hashes for blurtpy-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bfe99320337729d35369463c255a27a0e2feecbebdb475abc313bf4785967999
MD5 a302d80dae79fbf8a84b10896bd47bce
BLAKE2b-256 05da1df55a41142b359de8954b759f9688c5dc5a76c927dd1860b8734991406c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page