Catalog PyPI
Back to packageRELEASE DETAILS

1.0.1

PyPI

56k-screech

Retro dial-up style internet connection manager for macOS menu bar

dial-upinternetmacosmenu-barproductivityretro
Published28 Jun 2026
Direct dependencies6
Transitive dependenciesNot calculated

README

Version 1.0.1 documentation

📵 56k Screech

Retro dial-up internet manager for the macOS menu bar — because connecting to the internet should be a deliberate act, not an automatic reflex.

Python License


What it does

56k Screech lives in the menu bar and actually controls your Mac's Wi-Fi. When the internet isn't turned on via DialUp, it simply doesn't work. No silent syncs, no background notifications, no cloud quietly refreshing without your knowledge.

And of course — connecting is accompanied by an authentic dial-up sound ritual. 📟

56k Screech is menu-bar-only: it never shows a Dock icon or a Cmd+Tab entry.

Features

📡Real Wi-Fi on/off (networksetup), reconciled every second against the actual radio state (catches manual toggles from the system menu too)
🔊Dial-up handshake sound — bundled recording, with a ~12s procedurally generated fallback if it (or afplay) is unavailable
⏱Live connection timer
⚡Real-time download / upload speed
📦Data transferred in the current session
💰Cost per session — currency and price/hour are live-editable in Settings
📊Stats: today / 7 days / 30 days / all time, plus the last 5 sessions
🔔Notification Center alert (with a chime) after you've been online past a configurable time limit — includes a one-tap "Disconnect" button
😴Billing and the alert timer pause across system sleep — waking up doesn't inflate your session cost or fire an overdue alert the instant you're back
⚙️In-menu Settings: currency, price/hour, modem sound on/off, alerts on/off + limit, Wi-Fi interface picker
🚀LaunchAgent for automatic startup

The menu bar icon itself reflects connection state: 📵 offline, 📡 connecting, 📶 connected (idle), 🌐 connected (actively transferring data).


Installation

pip

pip install 56k-screech

From source

git clone https://github.com/muzzug/screech.git
cd screech
pip install -e .

Running

screech
# or, without the installed entry point:
python -m screech.app

The 📵 icon appears in the menu bar. Click → "Connect to internet".

The modem sound plays in full before Wi-Fi actually turns on — that's the ritual, not a hang. Expect a several-second delay between clicking Connect and the radio (and the status row) actually going live.


Automatic startup (LaunchAgent)

screech install-launchagent

Uninstall:

screech uninstall-launchagent

Configuration

Most settings are edited live from the app itself — click the Settings section in the menu to expand it:

  • Currency and Price/hour — used to compute the cost shown live and recorded per session
  • Modem sound — turn the dial-up handshake on/off
  • Alerts — toggle on/off, plus a Limit (min) for how often you get a Notification Center reminder while connected
  • Wi-Fi Interface — pick the right Wi-Fi device from a submenu populated from networksetup -listallhardwareports, instead of editing code; this is the fix if 56k Screech "does nothing" (or reports it couldn't turn Wi-Fi on) when you click Connect

Alerts use macOS Notification Center, so the first time you connect you'll be asked to grant 56k Screech permission under System Settings → Notifications. Each alert plays the standard notification chime — if you'd rather it stayed silent, turn off the sound for 56k Screech there.

Settings are persisted to:

~/Library/Application Support/56k Screech/config.json

Session history (used for the Stats section) is stored in:

~/Library/Application Support/56k Screech/sessions.db

A Reset Stats… item at the bottom of the Stats section permanently erases all recorded session history.


License

MIT © Ondřej "Muzzug" Kadlec

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 6

Native requirements
6 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
rumps
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
rumps<0.5,>=0.4.0runtime
psutil
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
psutil>=5.9runtime
numpy
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
numpy>=1.24runtime
sounddevice
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
sounddevice>=0.4runtime
pyobjc-framework-UserNotifications
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
pyobjc-framework-UserNotifications>=10runtime
pytest
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
pytest>=8; extra == "dev"runtime

Distribution files

2 collected
56k_screech-1.0.1-py3-none-any.whl

bdist_wheel · 2,575.15 KB · Python py3

Source file
56k_screech-1.0.1.tar.gz

sdist · 2,577.95 KB · Python source

Source file

Repository

PENDING
muzzug/screech

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 16:03 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:ca7b8b289a18af11ba27c890dd1a4c23e2b4fd9cd8a51302c3f4e52f8873cc7a

Other collected versions

View all collected versions →