**Summary:** I compared what the SoundCloud API actually returns for a few tracks with how they show up in the library, and noticed a pattern that might help improve how artist/title are split for tracks with “feat.” in the title. Screenshot attached to show what I’m seeing.
---
## What I did
I wanted to see whether odd artist/title display was coming from SoundCloud’s data or from how it’s being interpreted. So I:
1. Used the **SoundCloud API** (OAuth, `/resolve` then the returned track URL) to fetch the **raw** fields for several “Pray to God” tracks.
2. Checked the official **`title`** and **`user.username`** (uploader) values.
3. Compared that to how the same (or similar) tracks appear in the VirtualDJ library.
SoundCloud’s docs say that **`title`** is the full track title as uploaded, and **`user.username`** is the **uploader**, not necessarily the track artist. So when we map SoundCloud data into “Artist” and “Title,” we have to parse `title` (and any other metadata) to split artist vs title.
---
## Tracks I tested (SoundCloud API results)
I re-ran the checks today and focused on examples that line up closely with what I’m seeing in the library.

### Incorrectly displayed examples
#### 1. Jim Slim Bootleg
- **URL:** https://soundcloud.com/thejimslim/calvin-harris-pray-to-god-ft-haim-jim-slim-bootleg
- **API `title`:** `Calvin Harris - Pray To God Ft. Haim ( Jim Slim Bootleg)`
- **API `user.username` (uploader):** `The Jim Slim`
In the library this appears as **Title:** `Calvin Harris - Pray To God (Jim Slim Bootleg)` and **Artist:** `feat. Haim`, which looks like the `Ft. Haim` part has been split out of the title and moved into Artist.
---
#### 2. Mike Pickering vs Calvin Harris Hacienda Remix
- **URL:** https://soundcloud.com/calvinharris/calvin-harris-feat-haim-pray-to-god-mike-pickering-vs-calvin-harris-hacienda-remix
- **API `title`:** `Calvin Harris feat Haim - Pray To God (Mike Pickering vs Calvin Harris Hacienda Remix)`
- **API `user.username` (uploader):** `Calvin Harris`
In the library I’m seeing one version that looks sensible, but also another row where it appears as **Title:** `Calvin Harris (Mike Pickering vs Calvin Harris Hacienda Remix)` and **Artist:** `feat. Haim - Pray To God`, which suggests the parser is splitting at `feat` and then carrying part of the title into Artist.
---
#### 3. Mashual mashup
- **URL:** https://soundcloud.com/mashualdj/dallask-alienz-vs-calvin-harris-feathaim-pray-to-god-mashual-mashup
- **API `title`:** `Dallask - Alienz Vs Calvin Harris Feat.Haim - Pray To God (Mashual Mashup)`
- **API `user.username` (uploader):** `Mashual`
In the library this shows up as **Title:** `Dallask - Alienz Vs Calvin Harris (Mashual Mashup)` and **Artist:** `feat. Haim - Pray To God`, which again looks like `Feat.Haim - Pray To God` has been treated as the artist part instead of remaining in the full title string until the main artist/title split is done.
---
#### 4. Thalbundt vs Calvin Harris
- **URL:** https://soundcloud.com/hurcules-henley/thalbundt-vs-calvin-harris-feat-haim-pray-to-god
- **API `title`:** `Thalbundt Vs Calvin Harris Feat Haim - Pray To God`
- **API `user.username` (uploader):** `Al Henley`
This appears in the library as **Title:** `Thalbundt Vs Calvin Harris` and **Artist:** `feat. Haim - Pray To God`, which follows the same pattern.
---
### A couple that display more naturally
#### 5. Gryffin remix
- **URL:** https://soundcloud.com/ph-records-1/calvin-harris-pray-to-god-gryffin-remix
- **API `title`:** `Calvin Harris - Pray To God (Gryffin Remix)`
- **API `user.username` (uploader):** `Gui.`
This one appears more naturally in the library because the title is already a straightforward `Artist - Title (Remix)` string without `feat.` in the artist portion.
---
#### 6. ROKAI extended edit
- **URL:** https://soundcloud.com/rokai/calvin-harris-geat-haim-pray-to-god-rokai-extended-edit
- **API `title`:** `Calvin Harris Geat HAIM - Pray To God (ROKAI Extended Edit)`
- **API `user.username` (uploader):** `ROKAI`
This one also appears relatively understandable in the library compared with the `feat.` examples above, even though the source title itself is a bit messy.
---
## What I’m seeing in the library (screenshot)
In the library, several “Pray to God” tracks have an **Artist** column that starts with **`feat.`**, for example:
- **Title:** `Calvin Harris - Pray To God (Jim Slim Bootleg)`
**Artist:** `feat. Haim`
- **Title:** `Calvin Harris (Mike Pickering vs Calvin Harris Hacienda Remix)`
**Artist:** `feat. Haim - Pray To God`
- **Title:** `Dallask - Alienz Vs Calvin Harris (Mashual Mashup)`
**Artist:** `feat. Haim - Pray To God`
- **Title:** `Thalbundt Vs Calvin Harris`
**Artist:** `feat. Haim - Pray To God`
- **Title:** `Calvin Harris - Pray To God (r3vitar Remix)`
**Artist:** `feat. HAIM`
So the **title** side often has the main artist (e.g. Calvin Harris), while the **artist** side gets the “feat. …” part (and sometimes a bit of the title or other text). That suggests the logic that splits “artist” and “title” from the raw SoundCloud string is likely treating **“feat.”** as the main split point, instead of treating it as part of the artist and splitting on the **main “ – ”** between artist and track name.
A more robust approach would be:
- Treat **“ – ”** (dash with spaces) as the primary boundary between **artist** and **title** when it appears in the full title.
- Keep **“feat. …”** (and “vs”, “&”, etc.) **inside the artist part**, so Artist becomes e.g. `Calvin Harris feat. HAIM` and Title becomes `Pray To God (r3vitar Remix)`.
That way we’d align with how SoundCloud structures the string and avoid “feat.” (or “feat. … - Pray To God”) appearing as the sole artist.
---
## Why this would help
- **Consistency:** Tracks like “Calvin Harris feat. HAIM - Pray To God (Remix)” would show a single, readable artist (e.g. `Calvin Harris feat. HAIM`) instead of `feat. HAIM` in the artist column.
- **Less noise:** Extra text (e.g. “FREE DOWNLOAD”) that sometimes appears after “feat.” in the raw data wouldn’t end up in the artist field if we only take the “artist” segment (up to the main “ – ”) and keep “feat.” inside it.
- **Uploader vs artist:** We’d be relying on parsing the **title** for display, and only using **user** (uploader) where it’s appropriate (e.g. “uploaded by”), which matches SoundCloud’s own distinction.
---
## Bitrate loading (inconsistency when track is loaded)

One more thing: the **Bitrate** column does populate for some SoundCloud tracks when the track is loaded (e.g. I see “256” for the Mike Pickering Hacienda Remix in the library—screenshot attached), which is great. For other tracks, though, the bitrate still doesn’t appear even after the track is loaded (e.g. the Dan Domino Club Reload and several others stay empty). So it’s not that bitrate is never available—it’s that it’s inconsistent. If there’s a way to make bitrate populate reliably whenever the stream is resolved (e.g. from the same place the 256 is coming from for the Hacienda remix), that would be really helpful for choosing between versions. No pressure—just flagging the inconsistency in case it’s an easy fix.
---
## Summary
- For the SoundCloud URLs above, the API gives a single **`title`** string that already contains both artist and track (and often `feat.`). The **uploader** is separate and often not the “artist” we want in the library.
- In the library, the current splitting seems to use “feat.” as a delimiter, which puts “feat. …” (and sometimes more) into Artist and leaves the main artist in the title.
- Adjusting the parser to prefer the main **“ – ”** as the artist/title boundary and to keep **“feat.”** inside the artist segment would likely fix the “feat.”-only artist display and make the library match SoundCloud’s intent more closely.
Thanks for considering this—happy to provide more examples or API snippets if useful.
===================
(This was clearly written with AI - I don't care if people call it out - it's helping to do a huge amount of useful work quickly).
---
## What I did
I wanted to see whether odd artist/title display was coming from SoundCloud’s data or from how it’s being interpreted. So I:
1. Used the **SoundCloud API** (OAuth, `/resolve` then the returned track URL) to fetch the **raw** fields for several “Pray to God” tracks.
2. Checked the official **`title`** and **`user.username`** (uploader) values.
3. Compared that to how the same (or similar) tracks appear in the VirtualDJ library.
SoundCloud’s docs say that **`title`** is the full track title as uploaded, and **`user.username`** is the **uploader**, not necessarily the track artist. So when we map SoundCloud data into “Artist” and “Title,” we have to parse `title` (and any other metadata) to split artist vs title.
---
## Tracks I tested (SoundCloud API results)
I re-ran the checks today and focused on examples that line up closely with what I’m seeing in the library.

### Incorrectly displayed examples
#### 1. Jim Slim Bootleg
- **URL:** https://soundcloud.com/thejimslim/calvin-harris-pray-to-god-ft-haim-jim-slim-bootleg
- **API `title`:** `Calvin Harris - Pray To God Ft. Haim ( Jim Slim Bootleg)`
- **API `user.username` (uploader):** `The Jim Slim`
In the library this appears as **Title:** `Calvin Harris - Pray To God (Jim Slim Bootleg)` and **Artist:** `feat. Haim`, which looks like the `Ft. Haim` part has been split out of the title and moved into Artist.
---
#### 2. Mike Pickering vs Calvin Harris Hacienda Remix
- **URL:** https://soundcloud.com/calvinharris/calvin-harris-feat-haim-pray-to-god-mike-pickering-vs-calvin-harris-hacienda-remix
- **API `title`:** `Calvin Harris feat Haim - Pray To God (Mike Pickering vs Calvin Harris Hacienda Remix)`
- **API `user.username` (uploader):** `Calvin Harris`
In the library I’m seeing one version that looks sensible, but also another row where it appears as **Title:** `Calvin Harris (Mike Pickering vs Calvin Harris Hacienda Remix)` and **Artist:** `feat. Haim - Pray To God`, which suggests the parser is splitting at `feat` and then carrying part of the title into Artist.
---
#### 3. Mashual mashup
- **URL:** https://soundcloud.com/mashualdj/dallask-alienz-vs-calvin-harris-feathaim-pray-to-god-mashual-mashup
- **API `title`:** `Dallask - Alienz Vs Calvin Harris Feat.Haim - Pray To God (Mashual Mashup)`
- **API `user.username` (uploader):** `Mashual`
In the library this shows up as **Title:** `Dallask - Alienz Vs Calvin Harris (Mashual Mashup)` and **Artist:** `feat. Haim - Pray To God`, which again looks like `Feat.Haim - Pray To God` has been treated as the artist part instead of remaining in the full title string until the main artist/title split is done.
---
#### 4. Thalbundt vs Calvin Harris
- **URL:** https://soundcloud.com/hurcules-henley/thalbundt-vs-calvin-harris-feat-haim-pray-to-god
- **API `title`:** `Thalbundt Vs Calvin Harris Feat Haim - Pray To God`
- **API `user.username` (uploader):** `Al Henley`
This appears in the library as **Title:** `Thalbundt Vs Calvin Harris` and **Artist:** `feat. Haim - Pray To God`, which follows the same pattern.
---
### A couple that display more naturally
#### 5. Gryffin remix
- **URL:** https://soundcloud.com/ph-records-1/calvin-harris-pray-to-god-gryffin-remix
- **API `title`:** `Calvin Harris - Pray To God (Gryffin Remix)`
- **API `user.username` (uploader):** `Gui.`
This one appears more naturally in the library because the title is already a straightforward `Artist - Title (Remix)` string without `feat.` in the artist portion.
---
#### 6. ROKAI extended edit
- **URL:** https://soundcloud.com/rokai/calvin-harris-geat-haim-pray-to-god-rokai-extended-edit
- **API `title`:** `Calvin Harris Geat HAIM - Pray To God (ROKAI Extended Edit)`
- **API `user.username` (uploader):** `ROKAI`
This one also appears relatively understandable in the library compared with the `feat.` examples above, even though the source title itself is a bit messy.
---
## What I’m seeing in the library (screenshot)
In the library, several “Pray to God” tracks have an **Artist** column that starts with **`feat.`**, for example:
- **Title:** `Calvin Harris - Pray To God (Jim Slim Bootleg)`
**Artist:** `feat. Haim`
- **Title:** `Calvin Harris (Mike Pickering vs Calvin Harris Hacienda Remix)`
**Artist:** `feat. Haim - Pray To God`
- **Title:** `Dallask - Alienz Vs Calvin Harris (Mashual Mashup)`
**Artist:** `feat. Haim - Pray To God`
- **Title:** `Thalbundt Vs Calvin Harris`
**Artist:** `feat. Haim - Pray To God`
- **Title:** `Calvin Harris - Pray To God (r3vitar Remix)`
**Artist:** `feat. HAIM`
So the **title** side often has the main artist (e.g. Calvin Harris), while the **artist** side gets the “feat. …” part (and sometimes a bit of the title or other text). That suggests the logic that splits “artist” and “title” from the raw SoundCloud string is likely treating **“feat.”** as the main split point, instead of treating it as part of the artist and splitting on the **main “ – ”** between artist and track name.
A more robust approach would be:
- Treat **“ – ”** (dash with spaces) as the primary boundary between **artist** and **title** when it appears in the full title.
- Keep **“feat. …”** (and “vs”, “&”, etc.) **inside the artist part**, so Artist becomes e.g. `Calvin Harris feat. HAIM` and Title becomes `Pray To God (r3vitar Remix)`.
That way we’d align with how SoundCloud structures the string and avoid “feat.” (or “feat. … - Pray To God”) appearing as the sole artist.
---
## Why this would help
- **Consistency:** Tracks like “Calvin Harris feat. HAIM - Pray To God (Remix)” would show a single, readable artist (e.g. `Calvin Harris feat. HAIM`) instead of `feat. HAIM` in the artist column.
- **Less noise:** Extra text (e.g. “FREE DOWNLOAD”) that sometimes appears after “feat.” in the raw data wouldn’t end up in the artist field if we only take the “artist” segment (up to the main “ – ”) and keep “feat.” inside it.
- **Uploader vs artist:** We’d be relying on parsing the **title** for display, and only using **user** (uploader) where it’s appropriate (e.g. “uploaded by”), which matches SoundCloud’s own distinction.
---
## Bitrate loading (inconsistency when track is loaded)

One more thing: the **Bitrate** column does populate for some SoundCloud tracks when the track is loaded (e.g. I see “256” for the Mike Pickering Hacienda Remix in the library—screenshot attached), which is great. For other tracks, though, the bitrate still doesn’t appear even after the track is loaded (e.g. the Dan Domino Club Reload and several others stay empty). So it’s not that bitrate is never available—it’s that it’s inconsistent. If there’s a way to make bitrate populate reliably whenever the stream is resolved (e.g. from the same place the 256 is coming from for the Hacienda remix), that would be really helpful for choosing between versions. No pressure—just flagging the inconsistency in case it’s an easy fix.
---
## Summary
- For the SoundCloud URLs above, the API gives a single **`title`** string that already contains both artist and track (and often `feat.`). The **uploader** is separate and often not the “artist” we want in the library.
- In the library, the current splitting seems to use “feat.” as a delimiter, which puts “feat. …” (and sometimes more) into Artist and leaves the main artist in the title.
- Adjusting the parser to prefer the main **“ – ”** as the artist/title boundary and to keep **“feat.”** inside the artist segment would likely fix the “feat.”-only artist display and make the library match SoundCloud’s intent more closely.
Thanks for considering this—happy to provide more examples or API snippets if useful.
===================
(This was clearly written with AI - I don't care if people call it out - it's helping to do a huge amount of useful work quickly).
Posted Sat 07 Mar 26 @ 9:28 am
For newer tracks, soundcloud should return metadata_artist as well. In this case vdj will use that combined with title which should be correct.
It looks like they started adding metadata_artist all the time though, even when empty.
Will fix.
Fyi, if you do want to use AI in the future to write post, please add an instruction to summarize the post in a structured way, or (preferably) just paste the instructions you gave to the AI here directly since that will contain all the actual information anyway.
Now it is mostly wasting a lot of our time trying to read through all the clutter.
In this case, something like:
"When I search for "Pray to God" here are some comparisons between vdj and soundcloud output:
SoundCloud API: Calvin Harris - Pray To God Ft. Haim ( Jim Slim Bootleg)
VirtualDJ: Title: Calvin Harris - Pray To God (Jim Slim Bootleg)
Artist: feat. Haim"
would be way easier to read and use.
It looks like they started adding metadata_artist all the time though, even when empty.
Will fix.
Fyi, if you do want to use AI in the future to write post, please add an instruction to summarize the post in a structured way, or (preferably) just paste the instructions you gave to the AI here directly since that will contain all the actual information anyway.
Now it is mostly wasting a lot of our time trying to read through all the clutter.
In this case, something like:
"When I search for "Pray to God" here are some comparisons between vdj and soundcloud output:
SoundCloud API: Calvin Harris - Pray To God Ft. Haim ( Jim Slim Bootleg)
VirtualDJ: Title: Calvin Harris - Pray To God (Jim Slim Bootleg)
Artist: feat. Haim"
would be way easier to read and use.
Posted Sat 07 Mar 26 @ 10:49 am
Thanks Adion, appreciate it & good to know. Yeah I agree after glancing at the post again, your suggested format would be a lot easier to get to the point right away.
Posted Sun 08 Mar 26 @ 9:42 am





