| containers | ||
| docs | ||
| stack | ||
| .gitignore | ||
| build-and-push.sh | ||
| README.md | ||
Sleep Meditation
Sleep Meditation is a self-hosted web player for MP3 files, optimized for mobile use.
Goal
A simple website that can play MP3 audio while an iPhone screen is locked, as long as playback is started manually (iOS limitation).
Features
- Playlist through
mp3/playlist.json - Automatic track discovery from
/mp3/whenplaylist.jsonis missing - Standard HTML5 audio player
- Media Session API support (play/pause/next/previous on lock screen)
- Playlist ends at the last track (no automatic loop)
Back to startbutton resets to track 1 without autoplay- Server-side audio download via URL (avoids browser timeout on long files)
- Downloaded tracks stored in
/mp3/downloads/, played individually (no auto-advance) - Track titles editable via Settings page (titles stored separately from filenames)
- Rename and delete downloaded tracks via Settings
- Two-page UI: player + settings (hash routing)
- PWA manifest + service worker
- Containerized with Nginx + Python API (supervisord)
Repository layout
containers/sleep-meditation/: Docker image, Nginx config, Python API, web appstack/stack.yml: Portainer/Compose stackstack/sleep-meditation.env: environment variablesdocs/TECHNICAL.md: technical details and iPhone behavior
Deploy (Portainer)
- Deploy
stack/stack.ymlwith variables fromstack/sleep-meditation.env. - Ensure
${SLEEP_MEDITATION_MP3_PATH}points to a host folder containing MP3 files. - Optionally add
${SLEEP_MEDITATION_MP3_PATH}/playlist.jsonfor custom ordering/metadata. - Open
http://<host>:<port>and press Play manually once.
Playlist format
mp3/playlist.json
[
{
"title": "Deep Sleep Wave",
"artist": "Sleep Meditation",
"src": "/mp3/deep-sleep-wave.mp3"
}
]
Download a track
Open Settings in the app, enter a direct audio URL and a title, then press Download. The file is downloaded server-side and saved to mp3/downloads/. It appears in the Downloads section on the main page.