Script for ripping genre, year & record label from beatport.com

Thank u.

I added a new topic in support to add this functionality natively to MP3 tag.

I change the script based on your info, you can find it in the new topic i added
/t/12439/1

I did not changed the ";" to seperate artists because the \\ does not seem work in Windows Media Player. Only seperator thats works from what I know is the semicolomn ";"

Thanks again, I hope the people from MP3 tag will add this functionality

I don't understand what you want to say with this example. The Spence & Hil Release of your link is an one-artist release. High Rankin is only the remixer. You don't want Remixers listed as albumartists, do you?

Use this code, to get two ALBUMARTIST with a Comma as seperator. The only line I changed is the one in red print. Btw: the last line belongs logically under the following # TRACK headline.

# ALBUMARTIST

outputto "albumartist"
findline "<performer ref="Artist""
joinuntil ""
findinline ""
sayuntil "</"
moveline 1
unspace
if "<performer ref="Artist""

joinuntil "</performer>"
say ", "
findinline "<name>"
sayuntil "</"
moveline 1
unspace
if "<performer ref=\"Artist\""
    set "albumartist", "VA"
# COMPILATION "1" IF "VA" outputto "compilation" say "1"
endif

endif
replace "|" "/"

no, only if there is nothing else as whitespaces

> bla bla <

will stay as it is

> <

will be replaced by

><
QUOTE (stevehero @ Aug 25 2011, 08:31) <{POST_SNAPBACK}>
I've tried to code this below can't see what I am doing wrong? Unless it a multi line issue within the API?
# UNSYNCED LYRICS
        outputto "unsyncedlyrics"
        findline "<description>"
        findinline "<description>"
        sayuntil "</"<!--QuoteEnd--></div><!--QuoteEEnd-->

the solution is again:

gotoline 1

the parser was at the frist descirption of the "Users Also Bought" section at.

yes:

COVERURL

outputto "coverurl"
findline "width="500" height="500"" 1 1
unspace
ifnot "<image url="

gotoline 1
findline "width=\"60\" height=\"60\" ref=\""
moveline 1

endif
findinline "url=""
sayuntil "" "

This makes use of an undocumented feature which is possible for some commands. findline "bla bla" 1 1. It is described here:
moveline to empty line fails

What are your exact questions about the two regualar expressions I used? I noticed the action group (which you won't use anyway) got displayed wrong in the forum, don't know why, I copy & pasted it from my Mp3tag Actions. I edited it in my post above and now it's correct.

Sorry Pone, I havent got back to you (been busy) but thanks for all your help.

This worked how I wanted it to and now all the artist come in the format artist1, artist2, artist3, artist4 format. Thank you. Also Track headline is fixed and now reads.

# MIXARTIST    
    outputto "Mixartist"
    sayregexp "(?<=<Remixer>)[^<]+" ", " "</track>"
    say "|"
    moveline 1
    unspace
# TRACK
while "<track"

That's weird because thats one of the things I tried. Pity I didnt show you that. You probably dont believe me now!

Thanks for the coverurl fix. Works every time now.

Its okay the " ," trick worked. But for instance $regexp(%artist%,', ([^,]+) ,' & $1 ') How is this broken down?

SO, I think I'm actually finished moding this script with your great help. But I just need help for a couple of things. Its just to further get an understanding of scripting and its just the way I organise genres. I change "Progressive House" to "House Prog" and "Electro House" to "House Electro" etc. I have an action for this but I am banging my head against a wall trying to do this . I've tried the following codes:

1st attempt:

# GENRE
outputto "Genre"
findline "<genre"
joinuntil "</genre>"
findinline "<name>"
 if "Progressive House"
  say " House Prog"
 else
  say " "
  sayuntil "</"
  say "|"
 if "Electro House"
  say " House Electro"
 else
  say " "
  sayuntil "</"
  say "|" 
  endif

My logic behind this is output is to "genre" find where it says "<genre" and join until it says "</genre"
Find along the line till it finds ""
This is okay I understand that.
So this is where I've tried modifying it. I've used the same method as finding Original Mix for this one. But no luck.

2nd attempt:

# GENRE
outputto "Genre"
findline "<genre"
replace "Progressive House" "House Prog"
replace "Electro House" "House Electro"
findinline "<name>"
sayuntil "</"

I have looked at your script for "mixesdb.com" and tried to that same method here like you sample code below but no luck with that either. I wonder how you go about doing this, I've tried and cried until I'm blue in the face.

outputto "genre"
findline "id='catlinks'"
replace ">2 Step<" ">Genre:2 Step<"
findinline "Genre:" 1 1
sayuntil "<"

And I was wondering if its possible to get the total no of tracks and the description of the track in the "List of search results page"

EDIT
since the time of editing the url "http://www.beatport.com/release/its-our-future/74495" is not working properly. Its an early release so maybe its API'd differently. See "http://api.beatport.com/catalog/releases/detail?v=1.0&format=xml&id=74495"
I've tried looking at the debug info but it seems to be going over my head at this stage.
Thanks.

First, what you quoted got displayed wrong in the forum, the correct formatstring I use is:
$regexp(%artist%,', ([^,]+)$',' & $1 ')

And analyzing it now, I see still a little mistake: the trailin space. From now on, I will use:
$regexp(%artist%,', ([^,]+)$',' & $1')

I break this down for you:

$regexp(%artist%,' ',' ')

A regexp function, that replaces something from the ARTIST tag-field. The parameters are in single quotes, because otherwis I could not use commas as litterals as I do in the second paramerter.

The second parameter, the regular expression:
', ([^,]+)$'

a comma and a space as litterals any character other than a comma repeated any number of times, but at least once the end of the line (= the end of the tag field)

the parentheses mark what is represented by $1 in the rhird parameter

in other words: everything from the last comma to the end of the tag-field, with the comma and the space following it excluded from the parentheses

The third parameter, the replace for the regular expression:
' & $1'

a space, an ampersand and a space as litterals what is captered by the parentheses in the second parameter

in other words: comma and the space which were excluded from the parentheses in the second parameter are repleaced with space-ampersand-space. The rest is left unchanged.

QUOTE (stevehero @ Sep 6 2011, 06:37) <{POST_SNAPBACK}>
SO, I think I'm actually finished moding this script with your great help. But I just need help for a couple of things. Its just to further get an understanding of scripting and its just the way I organise genres. I change "Progressive House" to "House Prog" and "Electro House" to "House Electro" etc. I have an action for this but I am banging my head against a wall trying to do this . I've tried the following codes:

1st attempt:

# GENRE
outputto "Genre"
findline "<genre"
joinuntil "</genre>"
findinline "<name>"
 if "Progressive House"
  say " House Prog"
 else
  say " "
  sayuntil "</"
  say "|"
 if "Electro House"
  say " House Electro"
 else
  say " "
  sayuntil "</"
  say "|" 
  endif<!--QuoteEnd--></div><!--QuoteEEnd-->

You forgot the endif which closes the first if section. And should leave away that else sections completly. Because as you planned it, there are several

say " "

sayuntil "</"
say "|"
repeated for one track when there are other genres the ones you are looking for. That doesn't work, because with every "|" the do...while loop for the tracks jumps to the next tag-field.
This here works:

     outputto "genre"
    findline "<genre"
    joinuntil "</genre>"
    findinline "<name>"
    if "Progressive House"
        say " House Prog"
        findinline "</"
    endif
    if "Electro House"
        say " House Electro"
        findinline "</"
    endif
    ifnot "name>"
        say " "
        sayuntil "</"
    endif
    say "|"

I don't understand why you want the empty spaces here before the genre names. But your decission.
And your second attempt is much easier:

QUOTE (stevehero @ Sep 6 2011, 06:37) <{POST_SNAPBACK}>
2nd attempt:
# GENRE
 outputto "Genre"
 findline "<genre"
 replace "Progressive House" "House Prog"
 replace "Electro House" "House Electro"
 findinline "<name>"
 sayuntil "</"<!--QuoteEnd--></div><!--QuoteEEnd-->

Almost correct. You just forgot the joinuntil "" line, which was there in the original script:

    outputto "genre"
    findline "<genre"
    joinuntil "</genre>"
    replace "Progressive House" "House Prog"
    replace "Electro House" "House Electro"
    findinline "<name>"
    sayuntil "</"
    say "|"

You can also try to work with regular expression replacements here to cover more genres:

regexpreplace "(.+?) House" "House $1"

That would not shorten "House Progressive" to "Hous Prog", but it would cover Acid House, Tech House, Vocal House, Deep House,... and possilbe genres which could come in the future like Rock House, Polka House, ... :wink:

QUOTE (stevehero @ Sep 6 2011, 06:37) <{POST_SNAPBACK}>
I have looked at your script for "mixesdb.com" and tried to that same method here like you sample code below but no luck with that either. I wonder how you go about doing this, I've tried and cried until I'm blue in the face.
outputto "genre"
 findline "id='catlinks'"
 replace ">2 Step<" ">Genre:2 Step<"
 findinline "Genre:" 1 1
 sayuntil "<"<!--QuoteEnd--></div><!--QuoteEEnd-->

I used replace ">2 Step<" ">Genre:2 Step<" there because at mixesdb.com, the genre is not marked as such but just another "category" besides others like like year, artist (dj), club, show. So I put the Genre: marker before the genre to be able to find them with the script. This is only possible because there is a closed group of 56 genres at mixesdb.com.

Have a look at my discogs script for total tracks. It was one of the most complicated things i have written in that script. It works in serveral steps, should be possible for beatport too:

    • Replace the element of the page code which marks a new track by a sepial marker.
    • Delete everything else (replace with nothing)
    • Replace the track begin markers with the roman number I
    • Do a long list of replacements which transforms the roman numbers into arabic numbers.

But then still, you are only able to write total tracks in a extra tag-field. You can't write it to TRACK in the form of 1/4, 2/4, 3/4, ... The only exception, I think, are mp4 files, where TOTALTRACKS is always an extra tag field.

I have seen no description of tracks at beatport. What do you mean?

Well, I quickly adapted my script from discogs and it seems to be working. Add this at the end of the script:

#TOTALTRACKS    
outputto "TOTALTRACKS"
gotoline 1
joinuntil "<name>Users Also Bought</name>"
regexpreplace "</track>" "<<<Track>>>I<<<Track>>>"
regexpreplace ".*?(<<<Track>>>.*<<<Track>>>).*" "$1"
regexpreplace "<<<Track>>>[^I].*?<<<Track>>>" "<<<Track>>>"
replace "<<<Track>>>" ""
replace "IIIIIIIIII" "X"
replace "XXXXXXXXXX" "C"
replace "CI" "C0I"
regexpreplace "X$" "X0"
regexpreplace "C$" "C00"
replace "CCCCCCCCC" "9"
replace "CCCCCCCC" "8"
replace "CCCCCCC" "7"
replace "CCCCCC" "6"
replace "CCCCC" "5"
replace "CCCC" "4"
replace "CCC" "3"
replace "CC" "2"
replace "C" "1"
replace "XXXXXXXXX" "9"
replace "XXXXXXXX" "8"
replace "XXXXXXX" "7"
replace "XXXXXX" "6"
replace "XXXXX" "5"
replace "XXXX" "4"
replace "XXX" "3"
replace "XX" "2"
replace "X" "1"
replace "IIIIIIIII" "9"
replace "IIIIIIII" "8"
replace "IIIIIII" "7"
replace "IIIIII" "6"
replace "IIIII" "5"
replace "IIII" "4"
replace "III" "3"
replace "II" "2"
replace "I" "1"
sayrest

Thanks for that great explaination pone. I've tried my own so can you see what you think. Its just a dummy action but I want to know how you would maybe go about optimising it if at all? I know a little about regexp thanks to the regexBuddy app.

Original title:
Time to, get down, Extended Mix or
Time to, get down, Original Mix
Need this result:
Time to - get down (Extended Mix) or
Time to - get down (Original Mix)

I've used the action:
Action type: Format value
Field: TITLE
Formatstring: $regexp(%title%,'^(.+?),\s(.+),\s(Original Mix|Extended Mix)$','$1 - $2 ($3)')

With regards the two "genre" pieces to the script they unfortunatly dont work for me with an error code.

The 1st option:

outputto "genre"
findline "<genre"
joinuntil "</genre>"
findinline "<name>"
    if "Progressive House"
        say " House Prog"
        findinline "</"
    endif
    if "Electro House"
        say " House Electro"
        findinline "</"
    endif
    ifnot "name>"
        say " "
        sayuntil "</"
    endif
    say "|"

Comes back with debug info:

Not sure what the error could be here?

And 2nd option (One I will probably use):

outputto "genre"
findline "<genre"
joinuntil "</genre>"
replace "Progressive House" "House Prog"
replace "Electro House" "House Electro"
findinline "<name>"
sayuntil "</"
say "|"

Comes back with debug info:

It seems that the replace is working fine to "House Electro" but then the error is generated so basiclly it happens within:
findinline ""
sayuntil "</"
say "|"

Please see the jpeg attached to the post to see want I mean.

But thank you for the year code. I was trying to add the following code below the one you gave to output the track no as follows: 1/12, 2/12 etc

# TRACK/TOTAL TRACKS
# PLACE AFTER TRACK & TOTALTRACKS
outputto "track"
say "/"
sayoutput "TOTALTRACKS"
say ""


QUOTE (stevehero @ Sep 6 2011, 22:23) <{POST_SNAPBACK}>
.... I was trying to add the following code below the one you gave to output the total track no as follows: 1/12, 2/12 etc
# TRACK/TOTAL TRACKS
# PLACE AFTER TRACK & TOTALTRACKS
outputto "track"
say "/"
sayoutput "TOTALTRACKS"
say ""<!--QuoteEnd--></div><!--QuoteEEnd--> 

I've created an action shown below which I can quickly run afterwards along with my other actions. (saves time having to go near the autonumbering wizard as long as there is a TOTALTRACKS field available).

Name of action group: For&mat#TRACK %track%%totaltracks%

Action #1:
Action type: Format value
Field: TRACK
Formatstring: %track%/%totaltracks%

Action #2:
Action type: Replace with regular expression
Field: TRACK
Regular expression: (\d+)/(\d+)/(\d+)$
Replace matches with: $1/$2

[ ] case-sensitive comparison

Action #3:
Action type: Replace with regular expression
Field: TRACK
Regular expression: /+$
Replace matches with:

[ ] case-sensitive comparison

Action #1 Formats the TOTALTRACKS to the TRACK field in the format TRACK/TOTALTRACKS.
Action #2 Makes sure that the TRACK field follows that format for good by removing 02/10/10 if it exists leaving the correct value.
Action #3 If there is no total disks present then it removes any "/" which might be created from action #1.

BUT if you have any suggestions on how to improve this it would be great, I'm sure you will. Would still be nice if it could be implemented in the script beforehand. :stuck_out_tongue:

PS I'm getting slightly addicted to this script and scripting in general!!!

I have it within the "while loop" too. I've attached the script, I cant see the problem at all

I just wondered considering your discogs script had the info one.

No, maybe TRACK is one of those field where you cant output to?

No, just wondered if there was an all-in-one regexp to do it. But Ive added more to the action. This is if you have the TOTALTRACKS filed as "10" say it formats the TRACK field as follows "1/10" "2/10" etc and then if they are in that format with the TRACK field as "1/10" "2/10" etc and with the TOTALTRACKS field empty it puts in the "10" for example to TOTALTRACKS

Its a clever wee action because if you have an empty TRACK field it deletes the TOTALTRACKS obviously because there is not a TRACK field to begin with so it makes sence.

This action by no means takes over from the autonumbering wizard but is a nice wee tool to have.

Name of action group: For&mat#TRACK %track%%totaltracks%

Action #1:
Action type: Format value
Field: TRACK
Formatstring: %track%/%totaltracks%

Action #2:
Action type: Replace with regular expression
Field: TRACK
Regular expression: (\d+)/(\d+)/(\d+)$
Replace matches with: $1/$2

[ ] case-sensitive comparison

Action #3:
Action type: Replace with regular expression
Field: TRACK
Regular expression: /+$|^0+
Replace matches with:

[ ] case-sensitive comparison

Action #4:
Action type: Replace with regular expression
Field: TRACK
Regular expression: ^/\d+$
Replace matches with:

[ ] case-sensitive comparison

Action #5:
Action type: Format value
Field: TOTALTRACKS
Formatstring: %track%

Action #6:
Action type: Replace with regular expression
Field: TOTALTRACKS
Regular expression: ^\d+$
Replace matches with:

[ ] case-sensitive comparison

Action #7:
Action type: Replace with regular expression
Field: TOTALTRACKS
Regular expression: ^(\d+/)(\d+)$
Replace matches with: $2

[ ] case-sensitive comparison

EDIT
I've also noticed the coverurl code had strange effects on some albums even with your fix. for example on http://api.beatport.com/catalog/releases/d...ml&id=52765 I think the problem lies when it says (see bold writing) instead of true. So I have added it to the very end of the script and it seems to have done the trick to allow the script to work in them troubled releases, but it grabs the wrong cover from the "People Also Bought" section and none when the cover art is correct.

I added gotoline in line 2 of the command. But with no success (see below) Wonder why that is?

outputto "coverurl"
gotoline 1
findline "width="500" height="500"" 1 1
unspace
ifnot "<image url="
gotoline 1
findline "width=\"60\" height=\"60\" ref=\""
moveline 1
endif
findinline "url=\""
sayuntil "\" "

_Beatport_stevehero__Release.src (7.17 KB)

QUOTE (stevehero @ Sep 10 2011, 06:14) <{POST_SNAPBACK}>
I have it within the "while loop" too. I've attached the script, I cant see the problem at all :frowning: It goes through the finding of the release etc , but when i get the page to chek everything the left bottom box has no tracks showing, genre has "error" in it and no artist shows :frowning:

Any ideas?

I'm working on it ATM, your going to have to go back to the old one for the time being I'm afraid but I will post the script once I'm completely happy with it. It shouldn't be long. I just need to figure out how to fix the artwork issue and a couple of other things.

PS can you take my quote out of your reply as it fills this forum and hasn't much relevance to the Question. Cheers :slight_smile:

About the Genre replacement problem:

I've found your mistake in the script you attached in the forum post. You have repeated the last three lines of the #genre section in the #trackname section which comes afterwards.

this is your code, the red lines are wrong:

# GENRE

debug "on" "C:\Users\Sir Seppone\AppData\Roaming\Mp3tag\data\sources\debug.txt"
outputto "genre"
findline "<genre"
joinuntil ""
replace "Progressive House" "House Prog"
replace "Electro House" "House Electro"
findinline ""
sayuntil "</"
say "|"

TRACK NAME

findinline ""
sayuntil "</"
say "|"<!--colorc--></span><!--/colorc--><!--fontc--></span><!--/fontc--><!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->
findline "<performer"<!--fontc--></span><!--/fontc-->

btw.: the debug file shows you in which line the error is happening. this showed pointed me directly to the wrong line. so it's good to use a text editor which shows the numbers of the line.

About the Cover Art problem:

QUOTE (stevehero)
In the beatport script concerning the cover art. I want it to gotoline 8 where the 500px images are mostly always stored therefore I want to findinline "width="500" height="500"" and if it cant find it I want it to jump to line 7 where the 60px image of the release will always be. I've checked a lot of various release API's and they ALL hold these values with line 8 being either a 500px of the release or a different sized .jpg of the label but always line 7 is the 60px version of the release. Thats why I want it to default to line 7 if findinline 8 fails.

I have a feeling where I'm goin wrong is the ifnot line? But I'm not sure.

My attempt.

COVERURL

outputto "coverurl"
gotoline 8
findinline "width="500" height="500"" 1 1
ifnot "<image url="
gotoline 7
endif
findinline "url=\""
sayuntil "\" "

I'm still not 100% sure what the "1 1" after findinline does. I read the link you gave me but still not getting it.

Yes, ifnot is part of the problem. And you also deleted the unspace command. And you replaced findline with findinline. And you didn't escape the qutoationmarks. All these things lead to different results.

findline "text" 1 1
Finds the first next line which contains "text". If "text" can't be found in any of the next lines, the parser stops at the last line. Without the second 1 in the command, the script would stop and show if text can't be found.
After a findline command, the parser is always at the first character of a line.

findinline "text" 1 1
Finds the first next occurence of "text" in the line. If "text" can't be found in the line, the parser stops at the end of the line. Without the second 1 in the command, the script would stop and show if text can't be found.
After a findinline "text" command, the parser is at the first character which follows after "text" in the line.

unspace
This removes leading and trailing spaces of lines. And it sets the parser back to the first character of the line.

You can check the position of the parser after every line in the debug file. It is show line at "Line and position:" by this symbol: ^

This was all essential in my fix:

findline "width="500" height="500"" 1 1

unspace
ifnot "<image url="

The first line here looked for a line with width="500" height="500" in it.

If width="500" height="500" can't be found, the parser stops at the last line. Unspace doesn't change anything. And the ifnot command has a positive result (positive = the last line does not start with "<image url=" so the ifnot condition is positive, the lines until endif are executed).
If width="500" height="500" can be found, the parser stops at this line. Unspace removes the leading spaces. And the ifnot command has a negative result (negative = the line does start with "<image url=" so the ifnot condition is negative, the lines until endif are ignored).

The only thing I wonder: I don't know if my fix as I presented it in the forum worked at all. I forgot to escpape the parenthesis. The first line must be written as wollowing:
findline "width=</b>"500</b>" height=</b>"500</b>"" 1 1

So, for what you want to do now:

outputto "coverurl"

gotoline 8
findinline "width="500" height="500"" 1 1
movechar -24
ifnot "width="500" height="500""

gotoline 7

else

gotochar 1

endif
findinline "url=""
sayuntil "" "

After findinline "width="500" height="500"" 1 1 this script goes back 24 characters (the exact length of "width="500" height="500", this time without escaping the quotationmarks) and checks with ifnot, if the seached text has (not) be found. If it has not been found, it moves to line 7, if found it moves to the first character of the line (because otherwise, the following findinline "url="" would find nothing).

By the way:

ifnot "width=\"500\" height=\"500\""
 gotoline 7

else

 gotochar 1

endif

is exactly the same as: if "width=\"500\" height=\"500\"" gotochar 1 else gotoline 7 endif

e.g. changing "Progressive House" to "House Prog" Thanks for this, works.

To fix missing 500px artwork and get the 60px version. Thanks for this. And I fully understand the "1 1" function now. Thank you.

The helpfile only states that it "Removes leading and trailing spaces from the current line." Thanks.

I was wondering why there was a difference in the two. So anything before """ has to escaped like "/""?

NOTE: I'm in the process of finishing of the script along with those below and will post them later in a new thread for you all to use. All of which will output (see attached pic).
Search by release.
Search by ID.
Search by track (give specific track values)

This is where I need a little info, I cant find whether there is an API for single tracks. The album one is http://api.beatport.com/catalog/releases/d...mat=xml&id= and you add the release id to the end to find the release.

However, the track url is e.g. http://www.beatport.com/track/banger-origi...lub-mix/1686845. I was wondering if there was an api search to search this track e.g. http://www.beatport.com/track/detail?v=1.0...#0066cc]1686845[/color][/u]


use " not /"
you have to use " whenever you refer to a " in the beatport xml file.
you have to use " when it is part of the script language syntax.

Have you read my discussion with Irvin Cee in this topic.
I misunderstood him at first and wrote a search by release ID script for him:
Script for ripping genre, year & record label from beatport.com

But what he really wanted to do was a search and script for single tracks, not release pages. And he says he had success with it.
Here is the API page for the single track:
http://api.beatport.com/catalog/tracks?v=1...&id=1686845

He presented his first script here:
Script for ripping genre, year & record label from beatport.com
and I think this is his final version:
support for Beatport API single tracks based on Beatport Track ID in filename

Be aware that the single track search must be done for every track seperatly.

Good to see that you now renamed the tag-field for the release-id to BEATPORT_RELEASE_ID. It was really a pain for me to see you writing this ID to DISCOGS_RELEASE_ID. There the information would have been absolutly useless. Anybody who wanted to have a look at the release page would have been directed to a completly discogs page.

hi guys.
i really tried dont know how many times but i'm not be able to work the script.
please can you explain this procedure?
i placed the script in this folder but nothing

C:\Program File\Mp3tag\data\sources

i'm on windows xp, mp3tag v2.49, beatport 1.5 script.

thanks

see post here

ok now it works thanks!
the problem now is that i receive an error message:

error connecting to server: http://api.beatport.com

user abort

any advice?
thanks!

wow, this is pretty cool!! thanks stevehereo & pone and everyone involved for this plugin! this is gonna save me alot of time.

For anyone interested, I've finally gotten round to uploading the final scripts I've been working on with help from pone of course :slight_smile:

Please see THIS POST

It allows search and direct parsing of beatport.com by:
- Direct by BEATPORT_RELEASE_ID

  • Direct by WWW(URL)
  • Search by Release
  • Search by (Album)Artist + Release
  • Search by (Album)Artist + Title