Async Python client for Calm.com internal API
Project description
Calm Client (Python)
Async Python client and CLI for the internal Calm.com API. Browse the catalog, search for content, and stream audio — all from your terminal.
Features
- CLI + TUI — Browse, search, and play Calm content from the terminal
- Async API — Fully async Python client built on
httpx - Type Safe — Comprehensive Pydantic models with
py.typedsupport - Audio Playback — Stream meditation and sleep audio via
mpv - Auth — Email/password login with automatic token refresh
Installation
CLI (recommended)
Use pipx to install the CLI in an isolated environment with zero hassle — no virtualenv management needed:
# Core CLI (login, search, whoami)
pipx install calm-client
# Full CLI with audio playback (play, browse)
pipx install 'calm-client[player]'
Library
If you want to use calm-client as a Python library in your own project:
pip install calm-client
Requirements
-
Python 3.12+ - for modern typing, async, and f-strings
-
mpv — Required for
calm playandcalm browseaudio features# Ubuntu/Debian sudo apt install mpv # macOS brew install mpv # Arch sudo pacman -S mpv
Quick Start (CLI)
# 1. Login
calm login
# 2. Browse interactively
calm browse
# 3. Or search and play directly
calm search "Sleep Stories"
calm play <program_id>
Quick Start (Python)
import asyncio
from calm_client import CalmClient
async def main():
async with CalmClient() as client:
# Authenticate
await client.login("email@example.com", "password")
# Get the Sleep feed
feed = await client.get_feed("sleep")
print(f"Found {len(feed.items)} items")
# Search
results = await client.search("Rain")
print(f"Found {len(results.items)} results")
if __name__ == "__main__":
asyncio.run(main())
Documentation
- CLI Reference — Commands, options, and TUI controls
- Library Reference — Python API, classes, and models
Development
See CONTRIBUTING.md for the full development setup.
# Quick start
uv sync --all-extras --all-groups
uv run hatch test
uv run hatch fmt
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 calm_client-0.1.0.tar.gz.
File metadata
- Download URL: calm_client-0.1.0.tar.gz
- Upload date:
- Size: 109.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b9490ea6aad4f206fc2169f6ea9d23203d4625e06788b43c05b3c13578d7b90e
|
|
| MD5 |
0087c54ec5448b4f31b834053dc56047
|
|
| BLAKE2b-256 |
95d77f4968a38fc8522d07443c175e0ccbd834ed513e86736599b1aa78a75bd2
|
Provenance
The following attestation bundles were made for calm_client-0.1.0.tar.gz:
Publisher:
publish.yml on dcode/python-calm-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
calm_client-0.1.0.tar.gz -
Subject digest:
b9490ea6aad4f206fc2169f6ea9d23203d4625e06788b43c05b3c13578d7b90e - Sigstore transparency entry: 955862454
- Sigstore integration time:
-
Permalink:
dcode/python-calm-client@bcf938d2546e3cf4dec2bbc4cf24f8fb3deb6fe1 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/dcode
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bcf938d2546e3cf4dec2bbc4cf24f8fb3deb6fe1 -
Trigger Event:
release
-
Statement type:
File details
Details for the file calm_client-0.1.0-py3-none-any.whl.
File metadata
- Download URL: calm_client-0.1.0-py3-none-any.whl
- Upload date:
- Size: 31.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
984497de8e62861646acd1ebab9dc018ef722bd5fc83722cd1cf8b59f637534b
|
|
| MD5 |
30b9e3060c3b0e457eacb9a2ac09c85c
|
|
| BLAKE2b-256 |
332702bf10a4d203c396fd8a92048627484187326c7d5897000528e7c665801b
|
Provenance
The following attestation bundles were made for calm_client-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on dcode/python-calm-client
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
calm_client-0.1.0-py3-none-any.whl -
Subject digest:
984497de8e62861646acd1ebab9dc018ef722bd5fc83722cd1cf8b59f637534b - Sigstore transparency entry: 955862456
- Sigstore integration time:
-
Permalink:
dcode/python-calm-client@bcf938d2546e3cf4dec2bbc4cf24f8fb3deb6fe1 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/dcode
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bcf938d2546e3cf4dec2bbc4cf24f8fb3deb6fe1 -
Trigger Event:
release
-
Statement type: