WebSocket RPC · REST API · Stream Deck

Now playing overlay
for OBS. For free.

Soundie exposes a local WebSocket RPC and REST API so you can build real-time now-playing overlays for OBS, control music from Stream Deck, and show track info anywhere on stream.

Runs on localhost · No external server · Free forever

Real-time WebSocket events

Subscribe to track changes, play/pause, and seek events as they happen. No polling needed.

REST API for state snapshots

GET /player/state returns the current track, position, volume, and queue. Works from any HTTP client.

Stream Deck integration

POST to /player/toggle, /player/skip, or /player/volume from any Stream Deck button.

Discord Rich Presence

Soundie updates your Discord status with the current track automatically — no setup needed.

Works with any overlay tool

Browser Source in OBS, custom Electron widgets, or any tool that can make HTTP or WebSocket requests.

Free and local

Runs on 127.0.0.1 — your stream data never touches an external server. Free forever.

How to connect

REST — Get current track
// Fetch current player state
const res = await fetch('http://127.0.0.1:45289/player/state');
const { track, isPlaying, position } = await res.json();

// track.title, track.artist, track.albumArt, track.duration
console.log(`Now playing: ${track.artist} — ${track.title}`);
WebSocket — Real-time track changes
const ws = new WebSocket('ws://127.0.0.1:45289');

ws.onmessage = (e) => {
  const event = JSON.parse(e.data);

  if (event.type === 'TRACK_CHANGED') {
    // Update your OBS Browser Source overlay
    updateOverlay(event.track);
  }

  if (event.type === 'PLAYBACK_STATE') {
    // Show/hide pause indicator
    setPlaying(event.isPlaying);
  }
};
Stream Deck — Control playback via HTTP
# Play / pause (bind to a Stream Deck button)
curl -X POST http://127.0.0.1:45289/player/toggle

# Skip to next track
curl -X POST http://127.0.0.1:45289/player/next

# Set volume (0.0 – 1.0)
curl -X POST http://127.0.0.1:45289/player/volume \
  -H "Content-Type: application/json" \
  -d '{"volume": 0.6}'

OBS Browser Source setup

1

Open OBS

Go to Sources → Add → Browser Source.

2

Point to your overlay

Use a local HTML file or a hosted page that connects to ws://127.0.0.1:45289.

3

Subscribe to events

Listen for TRACK_CHANGED events and update your overlay's DOM.

4

Style it your way

The API gives you title, artist, album art URL, duration, and position — lay it out however you want.

Full API reference in the WebSocket RPC docs and REST API docs.

Add now-playing to your stream.

Download Soundie, connect OBS to the WebSocket, and you have live track data on stream in minutes.