Are you a weirdo who likes to listen to slowed, nightcore music? Well, you'll probably like this app.
The app is available at moonlit.wastu.net.
For quick access, you can replace the URL with the Moonlit URL:
- YouTube: Replace
youtube.comwithmoonlit.wastu.netto the URL (example: moonlit.wastu.net/watch?v=JGwWNGJdvx8)
moonlit-demo.mp4
- Pitch Lock & Shifting: Change the speed without affecting pitch, or shift pitch independently (non lite mode).
- Reverb Effect: Add ambiance to your tracks with adjustable reverb.
- Search Support: Search for videos on YouTube for faster access.
- Lyrics Support: View synchronized, syllable-level lyrics with Japanese and Korean romanization.
- Client-Side Cookie Management: Use your own YouTube cookies to bypass restrictions (e.g., age-gated content).
- Export Options: Download the original media or export your processed remix as a WAV or MP3 file.
- Self-Hostable: Run with a single Docker container or directly on your host.
docker run -d \
--name moonlit \
-p 3000:3000 \
-v moonlit-data:/app/data \
ghcr.io/bgwastu/moonlit:latestTo build from source, run docker build -t moonlit . and use moonlit as the image in the command above.
Prerequisites: Bun 1.4.2+, Node.js 24+, ffmpeg and ffprobe.
bun install
bun run build
NODE_ENV=production bun run startFor development, use bun run dev.
Open http://localhost:3000. Keep the moonlit-data volume (or data/ for a native install) to retain cached media and cookies across restarts.
| Variable | Description |
|---|---|
ADMIN_PASSWORD |
Enables cookie management at /admin |
PROXY_URL |
HTTP CONNECT proxy for YouTube requests (http:// or https://) |
YOUTUBE_CREDENTIAL_MODE |
Set system to use data/cookies.txt (/app/data/cookies.txt in Docker) |
Playback is anonymous by default. You can also enable personal cookies in the app.
- Signalsmith Stretch: A massive shoutout to Signalsmith Audio for their open-source time-stretching library. Honestly, I'm too dumb to implement complex DSP algorithms like this by myself, so this library is doing all the heavy lifting! 😅
- Better Lyrics: Thanks to Better Lyrics and the Better Lyrics API for syllable-synced lyrics and TTML timing data.
- LRCLIB: Thanks to lrclib.net for providing additional lyrics when Better Lyrics has no match.
If you like this project, please consider donating. Your support helps me pay for domain and hosting services. Thanks!