A beautiful web-based playlist player for Suno AI music with smooth crossfade transitions, visual effects, and a Spotify-like interface.
- Supports Artists - Play counts are reported to Suno so artists get credit for plays
- Playlist Loading - Just paste a Suno playlist URL and play
- Real-time Artist Names - Artist names load in the background via Puppeteer and update the UI as they're found
- Beautiful UI - Dark theme with blurred album art backgrounds
- Smooth Fade-In - Songs fade in gently to avoid jarring loud starts
- Crossfade Transitions - Smooth audio crossfading (0-10 seconds, defaults to 10s)
- Smart Shuffle - Plays through all songs before repeating any
- Visual Transitions - 5 transition styles + random mode:
- Dissolve
- Slide
- Zoom + Blur
- Flip
- Morph
- Playback Controls - Play, pause, next, previous, shuffle, repeat
- Volume Control - Adjustable volume with keyboard shortcuts
- Recent Playlists - Quick access to previously played playlists
- Auto-Loop - Continuous playback by default
- Keyboard Shortcuts:
Space- Play/PauseN- Next trackP- Previous track←/→- Seek 10 seconds↑/↓- Volume up/down
Player interface with crossfade controls and blurred background
- Node.js 18 or higher
- npm
# Clone the repository
git clone https://github.com/imcmurray/SunoPlaylistPlayer.git
cd SunoPlaylistPlayer
# Install dependencies
npm install
# Start the server
npm start- Open http://localhost:3000 in your browser
- Paste a Suno playlist URL (try this example:
https://suno.com/playlist/06077ddd-a0e5-49ca-9445-b0049e9b0513) - Click "Load Playlist" and enjoy!
The server uses Puppeteer to fetch playlist data from Suno:
- When you submit a playlist URL, the server launches a headless browser
- It navigates to the Suno playlist page and extracts song UUIDs
- Song metadata (titles, covers) is fetched quickly via HTTP
- The player starts immediately while artist names load in the background
- Real artist names are fetched via Puppeteer and streamed to the UI in real-time
- The player streams audio directly from Suno's CDN
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Browser │────▶│ Server │────▶│ Suno.com │
│ (Player) │ │ (Puppeteer) │ │ (Scraper) │
└─────────────┘ └─────────────┘ └─────────────┘
│ │
│ ┌─────────────┐ │
└────────▶│ Suno CDN │◀─────────────┘
│ (Audio) │
└─────────────┘
# Download and run (no clone needed)
curl -O https://raw.githubusercontent.com/imcmurray/SunoPlaylistPlayer/main/docker-compose.yml
docker compose up -dAccess at http://localhost:3000
See DOCKER.md for homelab setup, reverse proxy configs, and troubleshooting.
See DEPLOYMENT.md for instructions on deploying to Railway with GitHub Actions.
suno-playlist-player/
├── server.js # Node.js server with Puppeteer
├── playlist.html # Main player interface
├── package.json # Dependencies and scripts
├── Dockerfile # Docker build config
├── docker-compose.yml # Docker Compose config
├── DOCKER.md # Docker/homelab deployment guide
├── nixpacks.toml # Railway build config
├── DEPLOYMENT.md # Railway deployment guide
└── .github/
└── workflows/
└── deploy.yml # GitHub Actions workflow
| Variable | Default | Description |
|---|---|---|
PORT |
3000 |
Server port |
PUPPETEER_EXECUTABLE_PATH |
(auto) | Path to Chromium binary |
| Endpoint | Method | Description |
|---|---|---|
/ |
GET | Redirects to playlist player |
/playlist.html |
GET | Main player interface |
/api/fetch-playlist?url= |
GET | Fetch playlist songs |
/api/fetch-songs-batch |
POST | Batch fetch song metadata |
/api/fetch-song-info?uuid= |
GET | Fetch single song info |
/api/fetch-artists-stream?uuids= |
GET | Stream artist names via SSE (Puppeteer) |
- Backend: Node.js, Puppeteer
- Frontend: Vanilla HTML/CSS/JavaScript
- Audio: HTML5 Web Audio API
- Hosting: Railway (recommended)
Contributions are welcome! Please feel free to submit a Pull Request.
ISC License - see LICENSE for details.
This project is not affiliated with Suno AI. It's a fan-made player that uses publicly available data. Please respect Suno's terms of service.
Made with ♫ for the Suno community
