5.2 KiB
5.2 KiB
Changelog (develop)
2026-06-06 — Released as v0.1.7
2026-06-06 — AirPlay button
Added
- AirPlay button in the player button row (
index.html,app.js,styles.css). Hidden by default; shown only when wireless playback targets are available. Safari/iOS uses the WebKit AirPlay API (webkitplaybacktargetavailabilitychanged+webkitShowPlaybackTargetPicker()); other browsers fall back to the Remote Playback API (remote.watchAvailability()+remote.prompt()). Button highlights blue while AirPlay output is active (webkitcurrentplaybacktargetiswirelesschanged/connect/disconnectevents). x-webkit-airplay="allow"attribute on the<audio>element to explicitly permit AirPlay streaming.
Changed
build-and-push.shsynced from shared master (1.2.0 → 1.7.0); test builds now also manage a dev branch from main.- New
.gitignore(ignores.files/);apple-touch-icon.png(added earlier for home-screen bookmark icon) now committed.
2026-05-10 — Released as v0.1.6
2026-05-10
- Replaced
build-and-push.shwith shared version fromshared-integrations/tooling/docker-build-and-push/; reads release version fromdocs/changelog.mdheading instead ofversion.txt. No more git operations from the script — commit and tag manually. - Removed obsolete
version.txt,.last-branch, and.gitignore(only ignoredversion.txt). - Stack: image tag now configurable via
SLEEP_MEDITATION_IMAGE_TAGinsleep-meditation.env(was hardcoded:dev); host ports already from env, container ports kept hardcoded since they're application-fixed. - Downloader: added YouTube support via
yt-dlp+ffmpeg(added to Dockerfile). YouTube URLs detected by hostname (youtube.com,youtu.be,music.youtube.com,m.youtube.com); downloaded as best audio, transcoded to mp3 at highest quality. - Downloader: direct (non-YouTube) downloads now validate
Content-Type(must beaudio/*orapplication/ogg); unsupported responses (e.g. HTML pages) are rejected with a clear error instead of silently saving a broken mp3. - Downloader: title field now optional. For YouTube URLs without a title, the API fetches the video title via
yt-dlp --get-titleand uses it as the filename. - Downloader: progress tracking. yt-dlp uses
progress_hooksto report download/convert phase; direct downloads track bytes vsContent-Length./api/download/statusreturnsprogress(0–100) andphase. UI shows a<progress>bar andDownloading 42%…/Converting…status; poll interval reduced from 2000 ms to 750 ms. - Downloader: source URL stored per file in
sources.json;/api/downloadsreturnssource. Manage list shows a "Source" link (new tab) next to each track for revisiting the origin. Cleanup on delete and on download failure.
2026-04-09
- Added skip-intro offset per downloaded track, configurable in the downloader UI.
- Skip offset stored in
downloads/skip.json;GET /api/downloadsreturnsskipfield. - Sleep app seeks to skip offset after
loadedmetadatawhen playing a downloaded track.
2026-04-09 — Released as v0.1.5
2026-04-09
- Split download management into a separate internal container (
sleep-meditation-downloader). - Public
sleep-meditationcontainer is now read-only: no write API endpoints exposed. sleep-meditation-downloaderprovides a management UI and full write API (download, rename, delete).- Both containers share the same host mp3 volume.
- Downloader port bound to all interfaces (local network only, not publicly exposed).
- Added refresh button (↺) in the app header for home screen bookmark users without a browser refresh.
- Fixed download list spacing: track rows now have a gap between them.
- Build script: added
:latesttag on release builds; fixedgit add -ffor ignoredversion.txt.
2026-04-09 — Released as v0.1.4
2026-04-09
- Added server-side audio download via URL (avoids browser timeout on long files).
- Downloaded tracks stored in
mp3/downloads/subdirectory of the existing mp3 volume. - Downloaded tracks played individually on the main page (no auto-advance after end).
- Display titles stored separately in
titles.json; special characters (:,|, etc.) preserved. - Added Settings page (hash routing
#settings) with: download form, track rename, manage downloads. - Track titles for playlist tracks editable via Settings; updates written to
playlist.json. - Removed example fallback track.
- Container extended with Python 3 + Flask API (
api.py) and supervisord alongside Nginx. - Fixed mobile layout: changed
bodyand.cardfrom CSS Grid to Flexbox for correct iPhone rendering.
2026-03-22
- Initial repository created using the
story-grabberlayout. - Added
sleep-meditationcontainer (Nginx + static player). - Implemented web player with playlist support, audio controls, and Media Session API.
- Added stack files for Portainer deployment.
- Added README and technical documentation.
- Added auto-discovery of audio files from
/mp3/whenplaylist.jsonis not present. - Fixed relative URL parsing for tracks from Nginx
/mp3/directory listing. - Changed playlist end behavior: stop at last track (no loop).
- Added
Back to startcontrol to reset to first track without autoplay. - Translated user-facing UI text and project documentation to English.