An offline, single page LoFi experience with a seasonal video background and auto built music playlists. Fully local. No external CDNs.
- Background video with seasonal themes
- Shuffled audio playlists built from your local folders
- Keyboard controls with saved volume and last track
- Optional offline app shell (PWA) for instant loads
project-root/
index.html
resources/
Videos/
Loop.mp4
Halloween.mp4
Xmas.mp4
April_Fools.mp4
Music/
Normal/
Halloween/
Xmas/
AprilFools/
playlists.generated.js ← created by the script
- Modern browser with HTML5 audio and video
- Windows with PowerShell to build playlists
- Your own MP3 or M4A files in the folders above
From the project root run:
.\nBuild-Playlists.ps1This scans resources/Music/* and writes resources/playlists.generated.js:
window.PLAYLISTS = {
loop: [...],
halloween: [...],
xmas: [...],
aprilfools: [...]
}Re run the script any time you add or remove tracks.
- Open
index.htmlin your browser - Click Play to satisfy autoplay rules
- Enjoy
The page picks a background by date. Override with a query parameter:
?bg=loop?bg=halloween?bg=xmas?bg=aprilfools
Example: index.html?bg=halloween
- Space play or pause
- N next track
- P previous track
- Up or Down volume up or down
- M mute toggle
- Volume and last track position are saved locally
- Filenames with spaces or non ASCII are fine. The builder URL encodes paths
- Keep videos H.264 MP4 for widest support
- To avoid a black flash before video paints, add a
posterimage to the<video>
No music plays
- Ensure
resources/playlists.generated.jsexists - Confirm paths in that file point to actual files under
resources
Video not loading
- Verify the video file exists and matches the expected name
- Try another MP4 or re encode with a common preset
Playlist missing songs
- Re run
Build-Playlists.ps1after adding files - Confirm files are inside the expected subfolders
Add a small service worker and manifest to cache the UI shell for instant offline loads. This does not cache your music library by default.
manifest.webmanifestwith name, colors, and iconssw.jsthat pre cachesindex.htmlandresources/playlists.generated.js
Personal use. Replace with your preferred license if you plan to distribute.
