Metadata-Version: 2.4
Name: lowhum
Version: 0.4.6
Summary: Deep Brown Noise for Focus as a MenuBar App & CLI Tool
Project-URL: Homepage, https://lmarkmann.github.io/lowhum/
Project-URL: Repository, https://github.com/lmarkmann/lowhum
Author: Luis Markmann
License-Expression: MIT
License-File: LICENSE
Keywords: audio,brown-noise,focus,macos,menu-bar
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: MacOS X
Classifier: Intended Audience :: End Users/Desktop
Classifier: Operating System :: MacOS
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Multimedia :: Sound/Audio
Requires-Python: >=3.12
Requires-Dist: numpy>=2.4
Requires-Dist: pillow>=12.0
Requires-Dist: rumps>=0.4.0
Requires-Dist: scipy>=1.17
Requires-Dist: sounddevice>=0.5
Requires-Dist: typer>=0.23
Description-Content-Type: text/markdown

# LowHum

[![PyPI](https://img.shields.io/pypi/v/lowhum)](https://pypi.org/project/lowhum/)
[![Python](https://img.shields.io/pypi/pyversions/lowhum)](https://pypi.org/project/lowhum/)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
[![Downloads](https://img.shields.io/pypi/dm/lowhum)](https://pypi.org/project/lowhum/)

Deep brown noise for focus, as a macOS menu bar app. Requires macOS and Python 3.12+. [Website](https://lmarkmann.github.io/lowhum/)

Brown noise is the default: cumulative-sum white noise through a 1 to 500 Hz Butterworth bandpass with a 20 Hz sub-bass highpass. Pink and white are low-passed at 8 kHz and 4 kHz so they don't hurt your ears. Files live in `~/.lowhum/` and stream through PortAudio via memory-mapped files. They're generated on first play, not at startup.

## Install

```bash
uv tool install lowhum
```

## Usage

```bash
lhm                  # launch the menu-bar app
lhm devices          # list output devices
lhm generate         # pre-generate the audio files
```

### Menu bar

- Play / Stop
- Noise Color (brown, pink, white)
- Output Device
- Block Built-in Speakers
- Launch at Login

Playback stops when headphones disconnect and resumes when they come back. If a newer version is on PyPI, you get a notification at startup.

## Development

```bash
just run       # run the app locally
just fmt       # format and lint
just check     # pyright + pytest
just build     # build wheel
just clean     # remove caches and build artifacts
```
