Skip to content
bgwastuPublic

Repository files navigation

Moonlit

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:

moonlit-demo.mp4

Features

  • 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.

Quick start

Docker

docker run -d \
  --name moonlit \
  -p 3000:3000 \
  -v moonlit-data:/app/data \
  ghcr.io/bgwastu/moonlit:latest

To build from source, run docker build -t moonlit . and use moonlit as the image in the command above.

Native host (no Docker)

Prerequisites: Bun 1.4.2+, Node.js 24+, ffmpeg and ffprobe.

bun install
bun run build
NODE_ENV=production bun run start

For 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.

Optional settings

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.

Credits

  • 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.

Donating

If you like this project, please consider donating. Your support helps me pay for domain and hosting services. Thanks!

Releases

Packages

Used by

Contributors

Languages