Settings guide
All settings live in OBS. Double-click the Trackspin source in Sources and the properties window opens.
Status
The top of the window shows what is playing now and which players Trackspin sees: apps, browser tabs with the extension and browsers without it. To check again, click Refresh.
Recent tracks lists the last 10 tracks with the time each one started.
Card look
- Theme: Compact or Vinyl record with a spinning disc.
- Layout: Cover on the left or Cover on top.
- Background: Dark, Light or Album cover color. With the cover color the card takes a dark shade of the cover's main color and the progress bar takes a light one, so every track looks a little different.
- Font: System (Segoe UI), Onest or Unbounded.
There is no size setting. Resize the source by its frame in the scene, like any other OBS source. The card is drawn at twice the size, so it stays sharp up to 2× larger.
Time and progress
- Progress bar: turns the thin bar under the title on or off.
- Track time: Don't show, Elapsed (
1:23), Remaining (−2:41), Elapsed and total (1:23 / 4:04) or Elapsed and remaining (1:23 · −2:41). Radio and streams have no length, so only the elapsed time is shown for them. - Custom bar color: pick your own color for the progress bar instead of the one that comes with the background.
Behavior
- On pause: Dim the card or Hide the card.
- Show card: Always, or A few seconds after a track change. In the second mode the card appears when a new track starts and when music resumes after a pause, stays for the time set in Show for (3 to 120 seconds, 10 by default), then hides.
Don't show
A list of tracks the card should skip. Write one entry per line. Each line is one of three things:
- an artist, for example
Queen; - a track title, for example
Under Pressure; - an artist and title separated by a hyphen or dash, for example
Queen - Under Pressure.
Capital letters don't matter, and Cyrillic works too.
How lines are matched
- Artist hides all of their tracks, collaborations included. Artists joined with
&, a comma,feat.orft.are checked one by one. The name is compared whole, never as part of a longer word. - Title hides that track by any artist, covers included. Extra bits in brackets or after “ - ” are ignored, so
Under Pressurealso covers “Under Pressure (Remastered 2011)” and “Under Pressure - Live”. Part of a word doesn't count. - Artist - Title hides only that track by that artist.
Examples
| Line | Hides | Doesn't hide |
|---|---|---|
Queen | Queen — Bohemian Rhapsody Queen & David Bowie — Under Pressure | Queens of the Stone Age — No One Knows |
Under Pressure | Under Pressure by any artist Under Pressure (Remastered 2011) | Pressure Drop |
Pressure | nothing: it's only part of a title | Under Pressure, Pressure Drop |
Queen - Under Pressure | Queen & David Bowie — Under Pressure, because Queen is one of the artists | a cover of Under Pressure by another artist |
What happens to a hidden track
The card acts as if nothing is playing and fades out. If another player is playing at the same time, the card shows that one instead. Hidden tracks are also left out of the text files, the API and recent tracks.
When it's useful
- tracks that may get a copyright claim on your stream;
- anything private you'd rather not show;
- ads and sounds that a player reports as a track.
Be careful with common titles. A line like Intro hides every intro by every artist. Use Artist - Intro to hide just one.
Position on screen
- Position on screen: Manual (drag with the mouse), one of the four corners, the middle of an edge, or Center.
- Margin from edge: the gap between the card and the edge of the scene in pixels, 40 by default.
The card moves to the chosen spot and stays there when you change the theme: it grows from its corner instead of sliding off. When you add the source to another scene, it snaps there too. To move the card with the mouse, choose Manual.
Music services and other sources
Music services has a switch for each service: Yandex Music, VK Music, Spotify, YouTube Music, Apple Music, SoundCloud, Deezer, TIDAL and Amazon Music. Turn one off and the card ignores it.
Other sources:
- Other music players (AIMP, foobar2000, MusicBee, Media Player and others): on by default.
- Video players (VLC, PotPlayer, MPC and others) and YouTube videos: off by default, so films and videos don't end up on the card.
- Music in browsers without the extension: Trackspin can see music in Chrome, Edge, Firefox and Opera without the extension, but it can't tell which site is playing, so a YouTube video may slip in. The browser extension fixes this.
- Test tracks (demo): shows a sample card while no music is playing, handy for setting up the look.
Save track to files
Turn on Save track to files and pick a Folder. By default it's %APPDATA%\obs-studio\plugin_config\trackspin\now-playing. Open folder shows it in Explorer. The files update on every track change:
| File | What's inside |
|---|---|
track.txt | Artist — Title |
title.txt, artist.txt, album.txt | title, artist and album, each on its own |
cover.jpg | the cover. It may hold a PNG inside, OBS handles that. With no cover it's a transparent 1×1 image |
nowplaying.json | everything at once, in the same format as the API |
When nothing is playing, the text files are empty.
To show them in OBS, add a Text (GDI+) source, tick Read from file and choose track.txt. For the cover, add an Image source with cover.jpg.
For your own widgets and bots
While OBS is open, Trackspin answers on your own computer. Streamer.bot, scripts and local widgets can read the current track from these addresses:
GET http://127.0.0.1:48210/api/now-playing: the current track as JSON;GET /events: the same JSON as Server-Sent Events, sent right after you connect and then on every change;GET /api/history: the last 20 tracks, newest first.
The port is the first free one from 48210 to 48214, usually 48210. The exact address is shown at the bottom of the properties window.
Main fields: active (false when nothing plays or the track is hidden), title, artist, album, status (playing or paused), durationMs and positionMs (empty for radio), positionAt, coverUrl, service and trackId, which changes with every track. The current position is positionMs plus the time passed since positionAt while the track plays.
const es = new EventSource('http://127.0.0.1:48210/events');
es.onmessage = (e) => {
const s = JSON.parse(e.data);
console.log(s.active ? `${s.artist} — ${s.title}` : 'nothing is playing');
};
Programs on your computer can read it freely. In a browser, only local pages can read it: ones opened from a file, from localhost or from 127.0.0.1, such as an OBS browser source with your own widget. Regular websites can't.