Skip to content

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 while listening to your tracks.
  • 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 pull ghcr.io/bgwastu/moonlit:latest

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

Open http://localhost:3000.

Optional environment variables:

Variable Description
ADMIN_PASSWORD Enables the admin cookie management page at /admin
PROXY_URL Proxy for all outbound requests (http://, socks5://, socks5h://)
docker run -d \
  --name moonlit \
  -p 3000:3000 \
  -e ADMIN_PASSWORD=your_password \
  -e PROXY_URL=socks5://127.0.0.1:1080 \
  -v moonlit-data:/app/data \
  ghcr.io/bgwastu/moonlit:latest

Build from source

docker build -t moonlit .
docker run -d \
  --name moonlit \
  -p 3000:3000 \
  -v moonlit-data:/app/data \
  moonlit

Native host (no Docker)

Prerequisites: Bun, Node.js 24+, Python 3, ffmpeg.

bun install
bun run build
NODE_ENV=production bun run start

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