commit
This commit is contained in:
commit
a00ff3b1b6
16
README.md
16
README.md
@ -1,4 +1,4 @@
|
|||||||
# music-downloader
|
# A Music-Downloader with CLI
|
||||||
This programm will first get the metadata of various songs from metadata provider like musicbrainz, and then search for download links on pages like bandcamp. Then it will download the song and edit the metadata according.
|
This programm will first get the metadata of various songs from metadata provider like musicbrainz, and then search for download links on pages like bandcamp. Then it will download the song and edit the metadata according.
|
||||||
|
|
||||||
## Metadata
|
## Metadata
|
||||||
@ -55,6 +55,7 @@ Those Tags are for the musicplayer to not sort for Example the albums of a band
|
|||||||
|
|
||||||
This is the **international standart release code**. With this a track can be identified 100% percicely all of the time, if it is known and the website has a search api for that. Obviously this will get important later.
|
This is the **international standart release code**. With this a track can be identified 100% percicely all of the time, if it is known and the website has a search api for that. Obviously this will get important later.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Download
|
## Download
|
||||||
|
|
||||||
@ -89,3 +90,16 @@ This is a shortened example for the response the api gives. The results are very
|
|||||||
- If they match get the download links and cache them.
|
- If they match get the download links and cache them.
|
||||||
|
|
||||||
### Youtube
|
### Youtube
|
||||||
|
|
||||||
|
Herte the **isrc** plays a huge role. You probaply know it, when you search on youtube for a song, and the music videos has a long intro or the first result is a live version. I don't want those in my music collection, only if the tracks are like this in the official release. Well how can you get around that?
|
||||||
|
|
||||||
|
Turns out if you search for the **isrc** on youtube the results contain the music, like it is on the official release and some japanese meme videos. The tracks I wan't just have the title of the released track, so one can just compare those two.
|
||||||
|
|
||||||
|
For searching, as well as for downloading I use the programm `youtube-dl`, which also has a programming interface for python.
|
||||||
|
|
||||||
|
There are two bottlenecks with this approach though:
|
||||||
|
1. `youtube-dl` is just slow. Actually it has to be, to not get blocked by youtube.
|
||||||
|
2. Ofthen musicbrainz just doesn't give the isrc for some songs.
|
||||||
|
|
||||||
|
**TODO**
|
||||||
|
- look at how the isrc id derived an try to generate it for the tracks without directly getting it from mb.
|
||||||
|
@ -4,3 +4,5 @@ mutagen~=1.46.0
|
|||||||
musicbrainzngs~=0.7.1
|
musicbrainzngs~=0.7.1
|
||||||
jellyfish~=0.9.0
|
jellyfish~=0.9.0
|
||||||
pydub~=0.25.1
|
pydub~=0.25.1
|
||||||
|
youtube_dl
|
||||||
|
beautifulsoup4~=4.11.1
|
BIN
src/__pycache__/phonetic_compares.cpython-310.pyc
Normal file
BIN
src/__pycache__/phonetic_compares.cpython-310.pyc
Normal file
Binary file not shown.
127
src/download.py
127
src/download.py
@ -1,3 +1,4 @@
|
|||||||
|
import mutagen.id3
|
||||||
import requests
|
import requests
|
||||||
import os.path
|
import os.path
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
@ -13,69 +14,42 @@ import youtube_music
|
|||||||
https://en.wikipedia.org/wiki/ID3
|
https://en.wikipedia.org/wiki/ID3
|
||||||
https://mutagen.readthedocs.io/en/latest/user/id3.html
|
https://mutagen.readthedocs.io/en/latest/user/id3.html
|
||||||
|
|
||||||
>>> from mutagen.easyid3 import EasyID3
|
# to get all valid keys
|
||||||
>>> print(EasyID3.valid_keys.keys())
|
from mutagen.easyid3 import EasyID3
|
||||||
dict_keys(
|
print(EasyID3.valid_keys.keys())
|
||||||
[
|
|
||||||
'album',
|
|
||||||
'bpm',
|
|
||||||
'compilation',
|
|
||||||
'composer',
|
|
||||||
'copyright',
|
|
||||||
'encodedby',
|
|
||||||
'lyricist',
|
|
||||||
'length',
|
|
||||||
'media',
|
|
||||||
'mood',
|
|
||||||
'grouping',
|
|
||||||
'title',
|
|
||||||
'version',
|
|
||||||
'artist',
|
|
||||||
'albumartist',
|
|
||||||
'conductor',
|
|
||||||
'arranger',
|
|
||||||
'discnumber',
|
|
||||||
'organization',
|
|
||||||
'tracknumber',
|
|
||||||
'author',
|
|
||||||
'albumartistsort',
|
|
||||||
'albumsort',
|
|
||||||
'composersort',
|
|
||||||
'artistsort',
|
|
||||||
'titlesort',
|
|
||||||
'isrc',
|
|
||||||
'discsubtitle',
|
|
||||||
'language',
|
|
||||||
'genre',
|
|
||||||
'date',
|
|
||||||
'originaldate',
|
|
||||||
'performer:*',
|
|
||||||
'musicbrainz_trackid',
|
|
||||||
'website',
|
|
||||||
'replaygain_*_gain',
|
|
||||||
'replaygain_*_peak',
|
|
||||||
'musicbrainz_artistid',
|
|
||||||
'musicbrainz_albumid',
|
|
||||||
'musicbrainz_albumartistid',
|
|
||||||
'musicbrainz_trmid',
|
|
||||||
'musicip_puid',
|
|
||||||
'musicip_fingerprint',
|
|
||||||
'musicbrainz_albumstatus',
|
|
||||||
'musicbrainz_albumtype', <----------
|
|
||||||
'releasecountry',
|
|
||||||
'musicbrainz_discid',
|
|
||||||
'asin',
|
|
||||||
'performer',
|
|
||||||
'barcode',
|
|
||||||
'catalognumber',
|
|
||||||
'musicbrainz_releasetrackid',
|
|
||||||
'musicbrainz_releasegroupid',
|
|
||||||
'musicbrainz_workid',
|
|
||||||
'acoustid_fingerprint',
|
|
||||||
'acoustid_id'
|
|
||||||
])
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def write_metadata(row, file_path):
|
||||||
|
# only convert the file to the proper format if mutagen doesn't work with it due to time
|
||||||
|
try:
|
||||||
|
audiofile = EasyID3(file_path)
|
||||||
|
except mutagen.id3.ID3NoHeaderError:
|
||||||
|
AudioSegment.from_file(file_path).export(file_path, format="mp3")
|
||||||
|
audiofile = EasyID3(file_path)
|
||||||
|
|
||||||
|
valid_keys = list(EasyID3.valid_keys.keys())
|
||||||
|
|
||||||
|
for key in list(row.keys()):
|
||||||
|
if type(row[key]) == list or key in valid_keys and not pd.isna(row[key]):
|
||||||
|
# print(key)
|
||||||
|
if type(row[key]) == int or type(row[key]) == float:
|
||||||
|
row[key] = str(row[key])
|
||||||
|
audiofile[key] = row[key]
|
||||||
|
|
||||||
|
logging.info("saving")
|
||||||
|
audiofile.save(file_path, v1=2)
|
||||||
|
|
||||||
|
|
||||||
|
def path_stuff(path: str, file_: str):
|
||||||
|
# returns true if it shouldn't be downloaded
|
||||||
|
if os.path.exists(file_):
|
||||||
|
logging.info(f"'{file_}' does already exist, thus not downloading.")
|
||||||
|
return True
|
||||||
|
os.makedirs(path, exist_ok=True)
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
class Download:
|
class Download:
|
||||||
def __init__(self, session: requests.Session = requests.Session(), file: str = ".cache3.csv", temp: str = "temp",
|
def __init__(self, session: requests.Session = requests.Session(), file: str = ".cache3.csv", temp: str = "temp",
|
||||||
base_path: str = ""):
|
base_path: str = ""):
|
||||||
@ -94,8 +68,8 @@ class Download:
|
|||||||
row['file'] = os.path.join(base_path, row['file'])
|
row['file'] = os.path.join(base_path, row['file'])
|
||||||
row['path'] = os.path.join(base_path, row['path'])
|
row['path'] = os.path.join(base_path, row['path'])
|
||||||
|
|
||||||
if self.path_stuff(row['path'], row['file']):
|
if path_stuff(row['path'], row['file']):
|
||||||
self.write_metadata(row, row['file'])
|
write_metadata(row, row['file'])
|
||||||
continue
|
continue
|
||||||
|
|
||||||
src = row['src']
|
src = row['src']
|
||||||
@ -103,32 +77,7 @@ class Download:
|
|||||||
musify.download(row)
|
musify.download(row)
|
||||||
elif src == 'youtube':
|
elif src == 'youtube':
|
||||||
youtube_music.download(row)
|
youtube_music.download(row)
|
||||||
self.write_metadata(row, row['file'])
|
write_metadata(row, row['file'])
|
||||||
|
|
||||||
def path_stuff(self, path: str, file_: str):
|
|
||||||
# returns true if it shouldn't be downloaded
|
|
||||||
if os.path.exists(file_):
|
|
||||||
logging.info(f"'{file_}' does already exist, thus not downloading.")
|
|
||||||
return True
|
|
||||||
os.makedirs(path, exist_ok=True)
|
|
||||||
return False
|
|
||||||
|
|
||||||
def write_metadata(self, row, filePath):
|
|
||||||
AudioSegment.from_file(filePath).export(filePath, format="mp3")
|
|
||||||
|
|
||||||
audiofile = EasyID3(filePath)
|
|
||||||
|
|
||||||
valid_keys = list(EasyID3.valid_keys.keys())
|
|
||||||
|
|
||||||
for key in list(row.keys()):
|
|
||||||
if type(row[key]) == list or key in valid_keys and not pd.isna(row[key]):
|
|
||||||
# print(key)
|
|
||||||
if type(row[key]) == int or type(row[key]) == float:
|
|
||||||
row[key] = str(row[key])
|
|
||||||
audiofile[key] = row[key]
|
|
||||||
|
|
||||||
print("saving")
|
|
||||||
audiofile.save(filePath, v1=2)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
@ -31,6 +31,12 @@ class Download:
|
|||||||
self.add_url(youtube_url, 'youtube', dict(row))
|
self.add_url(youtube_url, 'youtube', dict(row))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
# check musify again, but with a diffrent methode that takes longer
|
||||||
|
musify_url = musify.get_musify_url_slow(row)
|
||||||
|
if musify_url is not None:
|
||||||
|
self.add_url(musify_url, 'musify', dict(row))
|
||||||
|
continue
|
||||||
|
|
||||||
logging.warning(f"Didn't find any sources for {row['title']}")
|
logging.warning(f"Didn't find any sources for {row['title']}")
|
||||||
|
|
||||||
self.dump_urls(file)
|
self.dump_urls(file)
|
||||||
|
32
src/main.py
32
src/main.py
@ -7,17 +7,28 @@ import logging
|
|||||||
import requests
|
import requests
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|
||||||
TEMP = "temp"
|
TEMP = "temp"
|
||||||
STEP_ONE_CACHE = ".cache1.csv"
|
STEP_ONE_CACHE = ".cache1.csv"
|
||||||
STEP_TWO_CACHE = ".cache2.csv"
|
STEP_TWO_CACHE = ".cache2.csv"
|
||||||
STEP_THREE_CACHE = ".cache3.csv"
|
STEP_THREE_CACHE = ".cache3.csv"
|
||||||
|
|
||||||
|
NOT_A_GENRE = ".", "..", "misc_scripts", "Music", "script", ".git", ".idea"
|
||||||
MUSIC_DIR = os.path.expanduser('~/Music')
|
MUSIC_DIR = os.path.expanduser('~/Music')
|
||||||
TOR = False
|
TOR = False
|
||||||
|
|
||||||
logging.basicConfig(level=logging.INFO)
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
|
||||||
|
|
||||||
|
def get_existing_genre():
|
||||||
|
valid_directories = []
|
||||||
|
for elem in os.listdir(MUSIC_DIR):
|
||||||
|
if elem not in NOT_A_GENRE:
|
||||||
|
valid_directories.append(elem)
|
||||||
|
|
||||||
|
return valid_directories
|
||||||
|
|
||||||
|
|
||||||
def search_for_metadata(query: str):
|
def search_for_metadata(query: str):
|
||||||
search = metadata.Search(query=query, temp=TEMP)
|
search = metadata.Search(query=query, temp=TEMP)
|
||||||
|
|
||||||
@ -41,6 +52,24 @@ def search_for_metadata(query: str):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
||||||
|
def get_genre():
|
||||||
|
existing_genres = get_existing_genre()
|
||||||
|
print("printing available genres:")
|
||||||
|
for i, genre_option in enumerate(existing_genres):
|
||||||
|
print(f"{i}: {genre_option}")
|
||||||
|
|
||||||
|
genre = input("Input the ID for an existing genre or text for a new one: ")
|
||||||
|
|
||||||
|
if genre.isdigit():
|
||||||
|
genre_id = int(genre)
|
||||||
|
if genre_id >= len(existing_genres):
|
||||||
|
logging.warning("An invalid genre id has been given")
|
||||||
|
return get_genre()
|
||||||
|
return existing_genres[genre_id]
|
||||||
|
|
||||||
|
return genre
|
||||||
|
|
||||||
|
|
||||||
def cli(start_at: int = 0):
|
def cli(start_at: int = 0):
|
||||||
session = requests.Session()
|
session = requests.Session()
|
||||||
if TOR:
|
if TOR:
|
||||||
@ -50,7 +79,8 @@ def cli(start_at: int = 0):
|
|||||||
}
|
}
|
||||||
|
|
||||||
if start_at <= 2:
|
if start_at <= 2:
|
||||||
genre = input("genre to download to: ")
|
genre = get_genre()
|
||||||
|
logging.info(f"{genre} has been set as genre.")
|
||||||
|
|
||||||
if start_at <= 0:
|
if start_at <= 0:
|
||||||
search = search_for_metadata(query=input("initial query: "))
|
search = search_for_metadata(query=input("initial query: "))
|
||||||
|
@ -10,16 +10,18 @@ musicbrainzngs.set_useragent("metadata receiver", "0.1", "https://github.com/HeI
|
|||||||
|
|
||||||
KNOWN_KIND_OF_OPTIONS = ["artist", "release", "track"]
|
KNOWN_KIND_OF_OPTIONS = ["artist", "release", "track"]
|
||||||
|
|
||||||
|
|
||||||
def output(msg: str):
|
def output(msg: str):
|
||||||
print(msg)
|
print(msg)
|
||||||
|
|
||||||
def get_elem_from_obj(current_object, keys: list, after_process=lambda x: x):
|
|
||||||
|
def get_elem_from_obj(current_object, keys: list, after_process=lambda x: x, return_if_none=None):
|
||||||
current_object = current_object
|
current_object = current_object
|
||||||
for key in keys:
|
for key in keys:
|
||||||
if key in current_object or (type(key) == int and key < len(current_object)):
|
if key in current_object or (type(key) == int and key < len(current_object)):
|
||||||
current_object = current_object[key]
|
current_object = current_object[key]
|
||||||
else:
|
else:
|
||||||
return None
|
return return_if_none
|
||||||
return after_process(current_object)
|
return after_process(current_object)
|
||||||
|
|
||||||
|
|
||||||
@ -47,6 +49,7 @@ class Search:
|
|||||||
|
|
||||||
metadata_list = []
|
metadata_list = []
|
||||||
if kind == "artist":
|
if kind == "artist":
|
||||||
|
|
||||||
metadata_list = self.download_artist(mb_id)
|
metadata_list = self.download_artist(mb_id)
|
||||||
elif kind == "release":
|
elif kind == "release":
|
||||||
metadata_list = self.download_release(mb_id)
|
metadata_list = self.download_release(mb_id)
|
||||||
@ -70,7 +73,6 @@ class Search:
|
|||||||
|
|
||||||
for i, release in enumerate(result["artist"]["release-list"]):
|
for i, release in enumerate(result["artist"]["release-list"]):
|
||||||
metadata_list.extend(self.download_release(release["id"], i))
|
metadata_list.extend(self.download_release(release["id"], i))
|
||||||
|
|
||||||
return metadata_list
|
return metadata_list
|
||||||
|
|
||||||
def download_release(self, mb_id, album_sort: int = None):
|
def download_release(self, mb_id, album_sort: int = None):
|
||||||
@ -80,6 +82,7 @@ class Search:
|
|||||||
label-rels, place-rels, event-rels, recording-rels, release-rels, release-group-rels, series-rels, url-rels,
|
label-rels, place-rels, event-rels, recording-rels, release-rels, release-group-rels, series-rels, url-rels,
|
||||||
work-rels, instrument-rels
|
work-rels, instrument-rels
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_additional_artist_info(mb_id_):
|
def get_additional_artist_info(mb_id_):
|
||||||
r = musicbrainzngs.get_artist_by_id(mb_id_, includes=["releases"])
|
r = musicbrainzngs.get_artist_by_id(mb_id_, includes=["releases"])
|
||||||
|
|
||||||
@ -91,10 +94,12 @@ class Search:
|
|||||||
break
|
break
|
||||||
|
|
||||||
return album_sort
|
return album_sort
|
||||||
|
|
||||||
result = musicbrainzngs.get_release_by_id(mb_id, includes=["artists", "recordings", 'release-groups'])
|
result = musicbrainzngs.get_release_by_id(mb_id, includes=["artists", "recordings", 'release-groups'])
|
||||||
|
|
||||||
if album_sort is None:
|
if album_sort is None:
|
||||||
album_sort = get_additional_artist_info(get_elem_from_obj(result, ['release', 'artist-credit', 0, 'artist', 'id']))
|
album_sort = get_additional_artist_info(
|
||||||
|
get_elem_from_obj(result, ['release', 'artist-credit', 0, 'artist', 'id']))
|
||||||
release_type = get_elem_from_obj(result, ['release', 'release-group', 'type'])
|
release_type = get_elem_from_obj(result, ['release', 'release-group', 'type'])
|
||||||
|
|
||||||
tracklist_metadata = []
|
tracklist_metadata = []
|
||||||
@ -107,11 +112,15 @@ class Search:
|
|||||||
track_id = track["recording"]["id"]
|
track_id = track["recording"]["id"]
|
||||||
this_track = track["position"]
|
this_track = track["position"]
|
||||||
|
|
||||||
tracklist_metadata.extend(self.download_track(track_id, is_various_artist=is_various_artist, track=this_track, total_tracks=track_count, album_sort=album_sort, album_type=release_type))
|
tracklist_metadata.extend(
|
||||||
|
self.download_track(track_id, is_various_artist=is_various_artist, track=this_track,
|
||||||
|
total_tracks=track_count, album_sort=album_sort, album_type=release_type,
|
||||||
|
release_data=result['release']))
|
||||||
|
|
||||||
return tracklist_metadata
|
return tracklist_metadata
|
||||||
|
|
||||||
def download_track(self, mb_id, is_various_artist: bool = None, track: int = None, total_tracks: int = None, album_sort: int = None, album_type: str = None):
|
def download_track(self, mb_id, is_various_artist: bool = None, track: int = None, total_tracks: int = None,
|
||||||
|
album_sort: int = None, album_type: str = None, release_data: dict = None):
|
||||||
"""
|
"""
|
||||||
TODO
|
TODO
|
||||||
bpm its kind of possible via the AcousticBrainz API. however, the data may not be of very good
|
bpm its kind of possible via the AcousticBrainz API. however, the data may not be of very good
|
||||||
@ -159,16 +168,18 @@ class Search:
|
|||||||
recording-rels, release-rels, release-group-rels, series-rels, url-rels, work-rels, instrument-rels
|
recording-rels, release-rels, release-group-rels, series-rels, url-rels, work-rels, instrument-rels
|
||||||
"""
|
"""
|
||||||
|
|
||||||
result = musicbrainzngs.get_recording_by_id(mb_id, includes=["artists", "releases", "recording-rels", "isrcs", "work-level-rels"])
|
result = musicbrainzngs.get_recording_by_id(mb_id, includes=["artists", "releases", "recording-rels", "isrcs",
|
||||||
|
"work-level-rels"])
|
||||||
recording_data = result['recording']
|
recording_data = result['recording']
|
||||||
isrc = get_elem_from_obj(recording_data, ['isrc-list', 0])
|
isrc = get_elem_from_obj(recording_data, ['isrc-list', 0])
|
||||||
|
|
||||||
release_data = recording_data['release-list'][0]
|
if release_data is None:
|
||||||
|
# choosing the last release, because it is the least likely one to be a single
|
||||||
|
release_data = recording_data['release-list'][-1]
|
||||||
mb_release_id = release_data['id']
|
mb_release_id = release_data['id']
|
||||||
|
|
||||||
title = recording_data['title']
|
title = recording_data['title']
|
||||||
|
|
||||||
|
|
||||||
artist = []
|
artist = []
|
||||||
mb_artist_ids = []
|
mb_artist_ids = []
|
||||||
for artist_ in recording_data['artist-credit']:
|
for artist_ in recording_data['artist-credit']:
|
||||||
@ -177,8 +188,6 @@ class Search:
|
|||||||
continue
|
continue
|
||||||
artist.append(name_)
|
artist.append(name_)
|
||||||
mb_artist_ids.append(get_elem_from_obj(artist_, ['artist', 'id']))
|
mb_artist_ids.append(get_elem_from_obj(artist_, ['artist', 'id']))
|
||||||
# artist = [get_elem_from_obj(artist_, ['artist', 'name']) for artist_ in recording_data['artist-credit']]
|
|
||||||
# mb_artist_ids = [get_elem_from_obj(artist_, ['artist', 'id']) for artist_ in recording_data['artist-credit']]
|
|
||||||
|
|
||||||
def get_additional_artist_info(mb_id_):
|
def get_additional_artist_info(mb_id_):
|
||||||
r = musicbrainzngs.get_artist_by_id(mb_id_, includes=["releases"])
|
r = musicbrainzngs.get_artist_by_id(mb_id_, includes=["releases"])
|
||||||
@ -193,7 +202,8 @@ class Search:
|
|||||||
return album_sort
|
return album_sort
|
||||||
|
|
||||||
def get_additional_release_info(mb_id_):
|
def get_additional_release_info(mb_id_):
|
||||||
r = musicbrainzngs.get_release_by_id(mb_id_, includes=["artists", "recordings", "recording-rels", 'release-groups'])
|
r = musicbrainzngs.get_release_by_id(mb_id_,
|
||||||
|
includes=["artists", "recordings", "recording-rels", 'release-groups'])
|
||||||
is_various_artist_ = len(r['release']['artist-credit']) > 1
|
is_various_artist_ = len(r['release']['artist-credit']) > 1
|
||||||
tracklist = r['release']['medium-list'][0]['track-list']
|
tracklist = r['release']['medium-list'][0]['track-list']
|
||||||
track_count_ = len(tracklist)
|
track_count_ = len(tracklist)
|
||||||
@ -412,7 +422,8 @@ def interactive_demo():
|
|||||||
search = Search(query=input("initial query: "))
|
search = Search(query=input("initial query: "))
|
||||||
print(search.options)
|
print(search.options)
|
||||||
while True:
|
while True:
|
||||||
input_ = input("d to download, q to quit, .. for previous options, . for current options, int for this element: ").lower()
|
input_ = input(
|
||||||
|
"d to download, q to quit, .. for previous options, . for current options, int for this element: ").lower()
|
||||||
input_.strip()
|
input_.strip()
|
||||||
if input_ == "q":
|
if input_ == "q":
|
||||||
break
|
break
|
||||||
@ -435,9 +446,12 @@ if __name__ == "__main__":
|
|||||||
# automated_demo()
|
# automated_demo()
|
||||||
search = Search(query="psychonaut 4")
|
search = Search(query="psychonaut 4")
|
||||||
# search.download_release("27f00fb8-983c-4d5c-950f-51418aac55dc")
|
# search.download_release("27f00fb8-983c-4d5c-950f-51418aac55dc")
|
||||||
|
search.download_release("1aeb676f-e556-4b17-b45e-64ab69ef0375")
|
||||||
# for track_ in search.download_artist("c0c720b5-012f-4204-a472-981403f37b12"):
|
# for track_ in search.download_artist("c0c720b5-012f-4204-a472-981403f37b12"):
|
||||||
# print(track_)
|
# print(track_)
|
||||||
res = search.download_track("83a30323-aee1-401a-b767-b3c1bdd026c0")
|
# res = search.download_track("83a30323-aee1-401a-b767-b3c1bdd026c0")
|
||||||
|
# res = search.download_track("5e1ee2c5-502c-44d3-b1bc-22803441d8c6")
|
||||||
|
res = search.download_track("86b43bec-eea6-40ae-8624-c1e404204ba1")
|
||||||
# res = search.download_track("5cc28584-10c6-40e2-b6d4-6891e7e7c575")
|
# res = search.download_track("5cc28584-10c6-40e2-b6d4-6891e7e7c575")
|
||||||
|
|
||||||
for key in res[0]:
|
for key in res[0]:
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
import logging
|
import logging
|
||||||
import requests
|
import requests
|
||||||
|
import bs4
|
||||||
|
|
||||||
|
import phonetic_compares
|
||||||
|
|
||||||
session = requests.Session()
|
session = requests.Session()
|
||||||
session.headers = {
|
session.headers = {
|
||||||
@ -7,6 +10,7 @@ session.headers = {
|
|||||||
"Referer": "https://musify.club/"
|
"Referer": "https://musify.club/"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def get_musify_url(row):
|
def get_musify_url(row):
|
||||||
title = row['title']
|
title = row['title']
|
||||||
artists = row['artist']
|
artists = row['artist']
|
||||||
@ -22,6 +26,7 @@ def get_musify_url(row):
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_download_link(default_url):
|
def get_download_link(default_url):
|
||||||
# https://musify.club/track/dl/18567672/rauw-alejandro-te-felicito-feat-shakira.mp3
|
# https://musify.club/track/dl/18567672/rauw-alejandro-te-felicito-feat-shakira.mp3
|
||||||
# /track/sundenklang-wenn-mein-herz-schreit-3883217'
|
# /track/sundenklang-wenn-mein-herz-schreit-3883217'
|
||||||
@ -34,6 +39,10 @@ def get_download_link(default_url):
|
|||||||
|
|
||||||
return f"https://musify.club/track/dl/{musify_id}/{musify_name}.mp3"
|
return f"https://musify.club/track/dl/{musify_id}/{musify_name}.mp3"
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
|
||||||
|
>>>>>>> e923dcdaf208a95492af3afaa9e49fbbcfb9520c
|
||||||
def download_from_musify(file, url):
|
def download_from_musify(file, url):
|
||||||
logging.info(f"downloading: '{url}'")
|
logging.info(f"downloading: '{url}'")
|
||||||
r = session.get(url)
|
r = session.get(url)
|
||||||
@ -46,7 +55,66 @@ def download_from_musify(file, url):
|
|||||||
mp3_file.write(r.content)
|
mp3_file.write(r.content)
|
||||||
logging.info("finished")
|
logging.info("finished")
|
||||||
|
|
||||||
|
|
||||||
def download(row):
|
def download(row):
|
||||||
url = row['url']
|
url = row['url']
|
||||||
file_ = row['file']
|
file_ = row['file']
|
||||||
return download_from_musify(file_, url)
|
return download_from_musify(file_, url)
|
||||||
|
|
||||||
|
|
||||||
|
def search_for_track(row):
|
||||||
|
track = row.title
|
||||||
|
artist = row.artist
|
||||||
|
|
||||||
|
url = f"https://musify.club/search?searchText={track}"
|
||||||
|
r = session.get(url)
|
||||||
|
if r.status_code != 200:
|
||||||
|
raise ConnectionError(f"{r.url} returned {r.status_code}:\n{r.content}")
|
||||||
|
soup = bs4.BeautifulSoup(r.content, features="html.parser")
|
||||||
|
tracklist_container_soup = soup.find_all("div", {"class": "playlist"})
|
||||||
|
if len(tracklist_container_soup) != 1:
|
||||||
|
raise Exception("Connfusion Error. HTML Layout of https://musify.club changed.")
|
||||||
|
tracklist_container_soup = tracklist_container_soup[0]
|
||||||
|
|
||||||
|
tracklist_soup = tracklist_container_soup.find_all("div", {"class": "playlist__details"})
|
||||||
|
|
||||||
|
def parse_track_soup(_track_soup):
|
||||||
|
anchor_soups = _track_soup.find_all("a")
|
||||||
|
band_name = anchor_soups[0].text.strip()
|
||||||
|
title = anchor_soups[1].text.strip()
|
||||||
|
url_ = anchor_soups[1]['href']
|
||||||
|
return band_name, title, url_
|
||||||
|
|
||||||
|
for track_soup in tracklist_soup:
|
||||||
|
band_option, title_option, track_url = parse_track_soup(track_soup)
|
||||||
|
|
||||||
|
title_match, title_distance = phonetic_compares.match_titles(track, title_option)
|
||||||
|
band_match, band_distance = phonetic_compares.match_artists(artist, band_option)
|
||||||
|
|
||||||
|
print(track, title_option, title_match, title_distance)
|
||||||
|
print(artist, band_option, band_match, band_distance)
|
||||||
|
|
||||||
|
if not title_match and not band_match:
|
||||||
|
return get_download_link(track_url)
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def get_musify_url_slow(row):
|
||||||
|
print(row)
|
||||||
|
result = search_for_track(row)
|
||||||
|
if result is not None:
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import pandas as pd
|
||||||
|
import json
|
||||||
|
|
||||||
|
df = pd.read_csv("../temp/.cache1.csv")
|
||||||
|
print(df)
|
||||||
|
|
||||||
|
for idx, row in df.iterrows():
|
||||||
|
row['artist'] = json.loads(row['artist'].replace("'", '"'))
|
||||||
|
print("-" * 200)
|
||||||
|
print(get_musify_url_slow(row))
|
||||||
|
23
src/phonetic_compares.py
Normal file
23
src/phonetic_compares.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import jellyfish
|
||||||
|
|
||||||
|
TITLE_THRESHOLD_LEVENSHTEIN = 2
|
||||||
|
|
||||||
|
|
||||||
|
def match_titles(title_1: str, title_2: str) -> (bool, int):
|
||||||
|
distance = jellyfish.levenshtein_distance(title_1, title_2)
|
||||||
|
return distance > 1, distance
|
||||||
|
|
||||||
|
|
||||||
|
def match_artists(artist_1, artist_2: str) -> (bool, int):
|
||||||
|
if type(artist_1) == list:
|
||||||
|
distances = []
|
||||||
|
|
||||||
|
for artist_1_ in artist_1:
|
||||||
|
print(artist_1_)
|
||||||
|
match, distance = match_titles(artist_1_, artist_2)
|
||||||
|
if not match:
|
||||||
|
return match, distance
|
||||||
|
|
||||||
|
distances.append(distance)
|
||||||
|
return True, min(distances)
|
||||||
|
return match_titles(artist_1, artist_2)
|
@ -1,14 +1,19 @@
|
|||||||
,id,album,title,artist,album_artist,tracknumber,albumsort,titlesort,isrc,date,year,musicbrainz_artistid,musicbrainz_albumid,musicbrainz_albumartistid,musicbrainz_albumstatus,total_tracks,language,musicbrainz_albumtype,compilation,releasecountry,barcode
|
,id,album,title,artist,album_artist,tracknumber,albumsort,titlesort,isrc,date,year,musicbrainz_artistid,musicbrainz_albumid,musicbrainz_albumartistid,musicbrainz_albumstatus,total_tracks,language,musicbrainz_albumtype,compilation,releasecountry,barcode
|
||||||
0,5e1ee2c5-502c-44d3-b1bc-22803441d8c6,Abgesägte Schrotflinte,Abgesägte Schrotflinte,['Crystal F'],Crystal F,1,0,1,DEVY82000223,2021-03-12,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,ca933487-97ff-4a44-ab6f-9e4fcd26ceda,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4062851774871
|
0,755e2c25-2a88-4d87-a794-580dc4886ab9,Into Light's Graven Womb,Intro,['Nocturnal Triumph'],Nocturnal Triumph,1,0,1,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,
|
||||||
1,71e4dd64-6479-45be-b9a0-37d4edc364fa,Das Leben danach,Schockschwerenot,['Crystal F'],Crystal F,2,0,2,DEVY82000317,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133
|
1,f0d029c3-fcfa-4ae3-b05c-9900807c3bd6,Into Light's Graven Womb,The Key and the Stone,['Nocturnal Triumph'],Nocturnal Triumph,2,0,2,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,
|
||||||
2,c6b0ce24-b75b-40ad-a12a-1fa8a412dc14,Genug,Genug,['Crystal F'],Crystal F,3,0,3,DEVY82000308,2021-04-30,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,e9043dfa-189e-4caa-94c8-7e329d009389,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4062851604161
|
2,587999cf-d697-49e3-9c17-3d25c8d9acfe,Into Light's Graven Womb,Of Worship and Principle,['Nocturnal Triumph'],Nocturnal Triumph,3,0,3,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,
|
||||||
3,d01df009-40cf-4bae-8ab4-19e70c552feb,Du willst mit mir gehen,Du willst mit mir gehen,['Crystal F'],Crystal F,4,0,4,DEVY82000296,2021-04-02,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,2659e838-ac3b-425b-935d-7cb93043bb3f,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4062851783668
|
3,f819f1f5-d3d6-4776-b56b-57b75d04844b,Into Light's Graven Womb,Into Light's Graven Womb,['Nocturnal Triumph'],Nocturnal Triumph,4,0,4,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,
|
||||||
4,5a3d0f0f-d847-4678-b14d-f0875339ec13,Das Leben danach,Komm wir tun mir weh,['Crystal F'],Crystal F,5,0,5,DEVY82000318,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133
|
4,66a00bfa-e1f0-467b-98f5-559e71538188,Into Light's Graven Womb,Desolate Chambers Echo,['Nocturnal Triumph'],Nocturnal Triumph,5,0,5,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,
|
||||||
5,8426e0e1-e14b-48ec-8e53-950fdf3b8754,Das Leben danach,S4distentreff 4,"['Crystal F', 'MXP', 'Dollar John', 'G-Ko']",Crystal F,6,0,6,DEVY82000319,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133
|
5,755e2c25-2a88-4d87-a794-580dc4886ab9,Into Light's Graven Womb,Intro,['Nocturnal Triumph'],Nocturnal Triumph,1,1,1,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,
|
||||||
6,1543f558-4d54-4047-a6aa-affd02e89ab4,Das Leben danach,Stehen geblieben,['Crystal F'],Crystal F,7,0,7,DEVY82000320,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133
|
6,f0d029c3-fcfa-4ae3-b05c-9900807c3bd6,Into Light's Graven Womb,The Key and the Stone,['Nocturnal Triumph'],Nocturnal Triumph,2,1,2,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,
|
||||||
7,ccf6d043-7157-492b-bca0-78a24c0c8372,Das Leben danach,"Blau, grün, gelb","['Crystal F', 'Ruffiction']",Crystal F,8,0,8,DEVY82000321,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133
|
7,587999cf-d697-49e3-9c17-3d25c8d9acfe,Into Light's Graven Womb,Of Worship and Principle,['Nocturnal Triumph'],Nocturnal Triumph,3,1,3,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,
|
||||||
8,41ad47ab-0337-4fcc-b369-5a4b1e12dc3c,Das Leben danach,Was fühlst du noch,"['Crystal F', 'Zero/Zero', 'Nils Davis', 'Taha']",Crystal F,9,0,9,DEVY82000322,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133
|
8,f819f1f5-d3d6-4776-b56b-57b75d04844b,Into Light's Graven Womb,Into Light's Graven Womb,['Nocturnal Triumph'],Nocturnal Triumph,4,1,4,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,
|
||||||
9,ed6cc3e1-d493-4a51-973c-3adc1a6ea978,Das Leben danach,Katzen,"['Crystal F', 'Kito', 'Kirby']",Crystal F,10,0,10,DEVY82000323,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133
|
9,66a00bfa-e1f0-467b-98f5-559e71538188,Into Light's Graven Womb,Desolate Chambers Echo,['Nocturnal Triumph'],Nocturnal Triumph,5,1,5,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,
|
||||||
10,b49a466f-e77b-465d-9c01-06298efb0c9d,Das Leben danach,Wach sein,['Crystal F'],Crystal F,11,0,11,DEVY82000324,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133
|
10,de6095d0-40f8-4121-8ae9-7ca8332b0fc4,The Fangs of Miseries Past,The Fires of Tragedy,['Nocturnal Triumph'],Nocturnal Triumph,1,2,1,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,
|
||||||
11,86b43bec-eea6-40ae-8624-c1e404204ba1,Das Leben danach,Rote Augen,['Crystal F'],Crystal F,12,0,12,DEVY82000325,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133
|
11,4337fac9-ee73-4183-bd63-7d6b7c279e1f,The Fangs of Miseries Past,The Fangs of Miseries Past,['Nocturnal Triumph'],Nocturnal Triumph,2,2,2,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,
|
||||||
12,2a3dc1ae-6752-420f-b1d3-ca9e26a15c48,Das Leben danach,Schlechtes Essen,['Crystal F'],Crystal F,13,0,13,DEVY82000326,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133
|
12,d9118f78-34bd-4c57-8df6-34ee2775a895,The Fangs of Miseries Past,A Moon Cloaked in Despair,['Nocturnal Triumph'],Nocturnal Triumph,3,2,3,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,
|
||||||
|
13,2e6cfa77-ee95-4c76-a802-06aa8cf8364a,The Fangs of Miseries Past,Towards Rebirth and Demise,['Nocturnal Triumph'],Nocturnal Triumph,4,2,4,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,
|
||||||
|
14,e5eda55f-6048-4f8c-8f0f-463af2b5b9f7,Nocturnal Triumph,The Hammer of Immateriality,['Nocturnal Triumph'],Nocturnal Triumph,1,3,1,,2022-01-12,2022,6bee5e73-5340-4514-90aa-22dad13c2206,0b533827-8d1d-4881-a9bb-84cd3054d321,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,XW,
|
||||||
|
15,4d19329f-3e48-440b-85f4-293bfc2780b7,Nocturnal Triumph,Beneath the Veins of God,['Nocturnal Triumph'],Nocturnal Triumph,2,3,2,,2022-01-12,2022,6bee5e73-5340-4514-90aa-22dad13c2206,0b533827-8d1d-4881-a9bb-84cd3054d321,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,XW,
|
||||||
|
16,7a601bea-f05c-486b-8ce1-0bedd6099b2c,Nocturnal Triumph,Where He Slumbers in Wait,['Nocturnal Triumph'],Nocturnal Triumph,3,3,3,,2022-01-12,2022,6bee5e73-5340-4514-90aa-22dad13c2206,0b533827-8d1d-4881-a9bb-84cd3054d321,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,XW,
|
||||||
|
17,79d7db2c-6ef7-4525-9eab-c47f3a074d1a,Nocturnal Triumph,Torn by the Weight of Reversal,['Nocturnal Triumph'],Nocturnal Triumph,4,3,4,,2022-01-12,2022,6bee5e73-5340-4514-90aa-22dad13c2206,0b533827-8d1d-4881-a9bb-84cd3054d321,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,XW,
|
||||||
|
|
@ -1,14 +1,13 @@
|
|||||||
,id,album,title,artist,album_artist,tracknumber,albumsort,titlesort,isrc,date,year,musicbrainz_artistid,musicbrainz_albumid,musicbrainz_albumartistid,musicbrainz_albumstatus,total_tracks,language,musicbrainz_albumtype,compilation,releasecountry,barcode,url,src
|
,id,album,title,artist,album_artist,tracknumber,albumsort,titlesort,isrc,date,year,musicbrainz_artistid,musicbrainz_albumid,musicbrainz_albumartistid,musicbrainz_albumstatus,total_tracks,language,musicbrainz_albumtype,compilation,releasecountry,barcode,url,src
|
||||||
0,5e1ee2c5-502c-44d3-b1bc-22803441d8c6,Abgesägte Schrotflinte,Abgesägte Schrotflinte,['Crystal F'],Crystal F,1,0,1,DEVY82000223,2021-03-12,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,ca933487-97ff-4a44-ab6f-9e4fcd26ceda,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4062851774871,https://www.youtube.com/watch?v=QLvZVY_iiUc,youtube
|
0,f0d029c3-fcfa-4ae3-b05c-9900807c3bd6,Into Light's Graven Womb,The Key and the Stone,['Nocturnal Triumph'],Nocturnal Triumph,2,0,2,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,,https://musify.club/track/dl/10342760/nocturnal-triumph-the-key-and-the-stone.mp3,musify
|
||||||
1,71e4dd64-6479-45be-b9a0-37d4edc364fa,Das Leben danach,Schockschwerenot,['Crystal F'],Crystal F,2,0,2,DEVY82000317,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=VJESTJWnRhU,youtube
|
1,587999cf-d697-49e3-9c17-3d25c8d9acfe,Into Light's Graven Womb,Of Worship and Principle,['Nocturnal Triumph'],Nocturnal Triumph,3,0,3,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,,https://musify.club/track/dl/10342761/nocturnal-triumph-of-worship-and-principle.mp3,musify
|
||||||
2,c6b0ce24-b75b-40ad-a12a-1fa8a412dc14,Genug,Genug,['Crystal F'],Crystal F,3,0,3,DEVY82000308,2021-04-30,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,e9043dfa-189e-4caa-94c8-7e329d009389,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4062851604161,https://www.youtube.com/watch?v=C0-n46T22vo,youtube
|
2,f819f1f5-d3d6-4776-b56b-57b75d04844b,Into Light's Graven Womb,Into Light's Graven Womb,['Nocturnal Triumph'],Nocturnal Triumph,4,0,4,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,,https://musify.club/track/dl/10342762/nocturnal-triumph-into-lights-graven-womb.mp3,musify
|
||||||
3,d01df009-40cf-4bae-8ab4-19e70c552feb,Du willst mit mir gehen,Du willst mit mir gehen,['Crystal F'],Crystal F,4,0,4,DEVY82000296,2021-04-02,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,2659e838-ac3b-425b-935d-7cb93043bb3f,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4062851783668,https://www.youtube.com/watch?v=D0rYWsUgDuQ,youtube
|
3,66a00bfa-e1f0-467b-98f5-559e71538188,Into Light's Graven Womb,Desolate Chambers Echo,['Nocturnal Triumph'],Nocturnal Triumph,5,0,5,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,,https://musify.club/track/dl/10342763/nocturnal-triumph-desolate-chambers-echo.mp3,musify
|
||||||
4,5a3d0f0f-d847-4678-b14d-f0875339ec13,Das Leben danach,Komm wir tun mir weh,['Crystal F'],Crystal F,5,0,5,DEVY82000318,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=3Hq0_qc3zqo,youtube
|
4,f0d029c3-fcfa-4ae3-b05c-9900807c3bd6,Into Light's Graven Womb,The Key and the Stone,['Nocturnal Triumph'],Nocturnal Triumph,2,1,2,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,,https://musify.club/track/dl/10342760/nocturnal-triumph-the-key-and-the-stone.mp3,musify
|
||||||
5,8426e0e1-e14b-48ec-8e53-950fdf3b8754,Das Leben danach,S4distentreff 4,"['Crystal F', 'MXP', 'Dollar John', 'G-Ko']",Crystal F,6,0,6,DEVY82000319,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=sFmYIN0JNec,youtube
|
5,587999cf-d697-49e3-9c17-3d25c8d9acfe,Into Light's Graven Womb,Of Worship and Principle,['Nocturnal Triumph'],Nocturnal Triumph,3,1,3,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,,https://musify.club/track/dl/10342761/nocturnal-triumph-of-worship-and-principle.mp3,musify
|
||||||
6,1543f558-4d54-4047-a6aa-affd02e89ab4,Das Leben danach,Stehen geblieben,['Crystal F'],Crystal F,7,0,7,DEVY82000320,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=V65bn2jN4ZE,youtube
|
6,f819f1f5-d3d6-4776-b56b-57b75d04844b,Into Light's Graven Womb,Into Light's Graven Womb,['Nocturnal Triumph'],Nocturnal Triumph,4,1,4,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,,https://musify.club/track/dl/10342762/nocturnal-triumph-into-lights-graven-womb.mp3,musify
|
||||||
7,ccf6d043-7157-492b-bca0-78a24c0c8372,Das Leben danach,"Blau, grün, gelb","['Crystal F', 'Ruffiction']",Crystal F,8,0,8,DEVY82000321,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=Mo7hZ984faU,youtube
|
7,66a00bfa-e1f0-467b-98f5-559e71538188,Into Light's Graven Womb,Desolate Chambers Echo,['Nocturnal Triumph'],Nocturnal Triumph,5,1,5,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,,https://musify.club/track/dl/10342763/nocturnal-triumph-desolate-chambers-echo.mp3,musify
|
||||||
8,41ad47ab-0337-4fcc-b369-5a4b1e12dc3c,Das Leben danach,Was fühlst du noch,"['Crystal F', 'Zero/Zero', 'Nils Davis', 'Taha']",Crystal F,9,0,9,DEVY82000322,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=T15QiksB7do,youtube
|
8,de6095d0-40f8-4121-8ae9-7ca8332b0fc4,The Fangs of Miseries Past,The Fires of Tragedy,['Nocturnal Triumph'],Nocturnal Triumph,1,2,1,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,,https://musify.club/track/dl/11131947/nocturnal-triumph-the-fires-of-tragedy.mp3,musify
|
||||||
9,ed6cc3e1-d493-4a51-973c-3adc1a6ea978,Das Leben danach,Katzen,"['Crystal F', 'Kito', 'Kirby']",Crystal F,10,0,10,DEVY82000323,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=eKCpu74GYxs,youtube
|
9,4337fac9-ee73-4183-bd63-7d6b7c279e1f,The Fangs of Miseries Past,The Fangs of Miseries Past,['Nocturnal Triumph'],Nocturnal Triumph,2,2,2,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,,https://musify.club/track/dl/11131949/nocturnal-triumph-the-fangs-of-miseries-past.mp3,musify
|
||||||
10,b49a466f-e77b-465d-9c01-06298efb0c9d,Das Leben danach,Wach sein,['Crystal F'],Crystal F,11,0,11,DEVY82000324,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=dboTFFBUPW0,youtube
|
10,d9118f78-34bd-4c57-8df6-34ee2775a895,The Fangs of Miseries Past,A Moon Cloaked in Despair,['Nocturnal Triumph'],Nocturnal Triumph,3,2,3,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,,https://musify.club/track/dl/11131948/nocturnal-triumph-a-moon-cloaked-in-despair.mp3,musify
|
||||||
11,86b43bec-eea6-40ae-8624-c1e404204ba1,Das Leben danach,Rote Augen,['Crystal F'],Crystal F,12,0,12,DEVY82000325,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=zvYHKYz6AGI,youtube
|
11,2e6cfa77-ee95-4c76-a802-06aa8cf8364a,The Fangs of Miseries Past,Towards Rebirth and Demise,['Nocturnal Triumph'],Nocturnal Triumph,4,2,4,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,,https://musify.club/track/dl/11131950/nocturnal-triumph-towards-rebirth-and-demise.mp3,musify
|
||||||
12,2a3dc1ae-6752-420f-b1d3-ca9e26a15c48,Das Leben danach,Schlechtes Essen,['Crystal F'],Crystal F,13,0,13,DEVY82000326,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=XAfpge1FxLY,youtube
|
|
||||||
|
|
@ -1,14 +1,13 @@
|
|||||||
,id,album,title,artist,album_artist,tracknumber,albumsort,titlesort,isrc,date,year,musicbrainz_artistid,musicbrainz_albumid,musicbrainz_albumartistid,musicbrainz_albumstatus,total_tracks,language,musicbrainz_albumtype,compilation,releasecountry,barcode,url,src,path,file,genre
|
,id,album,title,artist,album_artist,tracknumber,albumsort,titlesort,isrc,date,year,musicbrainz_artistid,musicbrainz_albumid,musicbrainz_albumartistid,musicbrainz_albumstatus,total_tracks,language,musicbrainz_albumtype,compilation,releasecountry,barcode,url,src,path,file,genre
|
||||||
0,5e1ee2c5-502c-44d3-b1bc-22803441d8c6,Abgesägte Schrotflinte,Abgesägte Schrotflinte,['Crystal F'],Crystal F,1,0,1,DEVY82000223,2021-03-12,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,ca933487-97ff-4a44-ab6f-9e4fcd26ceda,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4062851774871,https://www.youtube.com/watch?v=QLvZVY_iiUc,youtube,horrorcore/Crystal F/Abgesägte Schrotflinte,horrorcore/Crystal F/Abgesägte Schrotflinte/Abgesägte Schrotflinte.mp3,horrorcore
|
0,f0d029c3-fcfa-4ae3-b05c-9900807c3bd6,Into Light's Graven Womb,The Key and the Stone,['Nocturnal Triumph'],Nocturnal Triumph,2,0,2,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,,https://musify.club/track/dl/10342760/nocturnal-triumph-the-key-and-the-stone.mp3,musify,black metal/Nocturnal Triumph/Into Light's Graven Womb,black metal/Nocturnal Triumph/Into Light's Graven Womb/The Key and the Stone.mp3,black metal
|
||||||
1,71e4dd64-6479-45be-b9a0-37d4edc364fa,Das Leben danach,Schockschwerenot,['Crystal F'],Crystal F,2,0,2,DEVY82000317,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=VJESTJWnRhU,youtube,horrorcore/Crystal F/Das Leben danach,horrorcore/Crystal F/Das Leben danach/Schockschwerenot.mp3,horrorcore
|
1,587999cf-d697-49e3-9c17-3d25c8d9acfe,Into Light's Graven Womb,Of Worship and Principle,['Nocturnal Triumph'],Nocturnal Triumph,3,0,3,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,,https://musify.club/track/dl/10342761/nocturnal-triumph-of-worship-and-principle.mp3,musify,black metal/Nocturnal Triumph/Into Light's Graven Womb,black metal/Nocturnal Triumph/Into Light's Graven Womb/Of Worship and Principle.mp3,black metal
|
||||||
2,c6b0ce24-b75b-40ad-a12a-1fa8a412dc14,Das Leben danach,Genug,['Crystal F'],Crystal F,3,0,3,DEVY82000308,2021-04-30,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,e9043dfa-189e-4caa-94c8-7e329d009389,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4062851604161,https://www.youtube.com/watch?v=C0-n46T22vo,youtube,horrorcore/Crystal F/Genug,horrorcore/Crystal F/Genug/Genug.mp3,horrorcore
|
2,f819f1f5-d3d6-4776-b56b-57b75d04844b,Into Light's Graven Womb,Into Light's Graven Womb,['Nocturnal Triumph'],Nocturnal Triumph,4,0,4,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,,https://musify.club/track/dl/10342762/nocturnal-triumph-into-lights-graven-womb.mp3,musify,black metal/Nocturnal Triumph/Into Light's Graven Womb,black metal/Nocturnal Triumph/Into Light's Graven Womb/Into Light's Graven Womb.mp3,black metal
|
||||||
3,d01df009-40cf-4bae-8ab4-19e70c552feb,Du willst mit mir gehen,Du willst mit mir gehen,['Crystal F'],Crystal F,4,0,4,DEVY82000296,2021-04-02,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,2659e838-ac3b-425b-935d-7cb93043bb3f,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4062851783668,https://www.youtube.com/watch?v=D0rYWsUgDuQ,youtube,horrorcore/Crystal F/Du willst mit mir gehen,horrorcore/Crystal F/Du willst mit mir gehen/Du willst mit mir gehen.mp3,horrorcore
|
3,66a00bfa-e1f0-467b-98f5-559e71538188,Into Light's Graven Womb,Desolate Chambers Echo,['Nocturnal Triumph'],Nocturnal Triumph,5,0,5,,2016,2016,6bee5e73-5340-4514-90aa-22dad13c2206,f5910dba-3972-4250-956f-7cfa7cbd4cd1,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,,,https://musify.club/track/dl/10342763/nocturnal-triumph-desolate-chambers-echo.mp3,musify,black metal/Nocturnal Triumph/Into Light's Graven Womb,black metal/Nocturnal Triumph/Into Light's Graven Womb/Desolate Chambers Echo.mp3,black metal
|
||||||
4,5a3d0f0f-d847-4678-b14d-f0875339ec13,Das Leben danach,Komm wir tun mir weh,['Crystal F'],Crystal F,5,0,5,DEVY82000318,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=3Hq0_qc3zqo,youtube,horrorcore/Crystal F/Das Leben danach,horrorcore/Crystal F/Das Leben danach/Komm wir tun mir weh.mp3,horrorcore
|
4,f0d029c3-fcfa-4ae3-b05c-9900807c3bd6,Into Light's Graven Womb,The Key and the Stone,['Nocturnal Triumph'],Nocturnal Triumph,2,1,2,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,,https://musify.club/track/dl/10342760/nocturnal-triumph-the-key-and-the-stone.mp3,musify,black metal/Nocturnal Triumph/Into Light's Graven Womb,black metal/Nocturnal Triumph/Into Light's Graven Womb/The Key and the Stone.mp3,black metal
|
||||||
5,8426e0e1-e14b-48ec-8e53-950fdf3b8754,Das Leben danach,S4distentreff 4,"['Crystal F', 'MXP', 'Dollar John', 'G-Ko']",Crystal F,6,0,6,DEVY82000319,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=sFmYIN0JNec,youtube,horrorcore/Crystal F/Das Leben danach,horrorcore/Crystal F/Das Leben danach/S4distentreff 4.mp3,horrorcore
|
5,587999cf-d697-49e3-9c17-3d25c8d9acfe,Into Light's Graven Womb,Of Worship and Principle,['Nocturnal Triumph'],Nocturnal Triumph,3,1,3,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,,https://musify.club/track/dl/10342761/nocturnal-triumph-of-worship-and-principle.mp3,musify,black metal/Nocturnal Triumph/Into Light's Graven Womb,black metal/Nocturnal Triumph/Into Light's Graven Womb/Of Worship and Principle.mp3,black metal
|
||||||
6,1543f558-4d54-4047-a6aa-affd02e89ab4,Das Leben danach,Stehen geblieben,['Crystal F'],Crystal F,7,0,7,DEVY82000320,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=V65bn2jN4ZE,youtube,horrorcore/Crystal F/Das Leben danach,horrorcore/Crystal F/Das Leben danach/Stehen geblieben.mp3,horrorcore
|
6,f819f1f5-d3d6-4776-b56b-57b75d04844b,Into Light's Graven Womb,Into Light's Graven Womb,['Nocturnal Triumph'],Nocturnal Triumph,4,1,4,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,,https://musify.club/track/dl/10342762/nocturnal-triumph-into-lights-graven-womb.mp3,musify,black metal/Nocturnal Triumph/Into Light's Graven Womb,black metal/Nocturnal Triumph/Into Light's Graven Womb/Into Light's Graven Womb.mp3,black metal
|
||||||
7,ccf6d043-7157-492b-bca0-78a24c0c8372,Das Leben danach,"Blau, grün, gelb","['Crystal F', 'Ruffiction']",Crystal F,8,0,8,DEVY82000321,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=Mo7hZ984faU,youtube,horrorcore/Crystal F/Das Leben danach,"horrorcore/Crystal F/Das Leben danach/Blau, grün, gelb.mp3",horrorcore
|
7,66a00bfa-e1f0-467b-98f5-559e71538188,Into Light's Graven Womb,Desolate Chambers Echo,['Nocturnal Triumph'],Nocturnal Triumph,5,1,5,,2017-07-31,2017,6bee5e73-5340-4514-90aa-22dad13c2206,81fa66bc-425e-45c3-ad80-2a7624e380a4,6bee5e73-5340-4514-90aa-22dad13c2206,Official,5,eng,Album,,XW,,https://musify.club/track/dl/10342763/nocturnal-triumph-desolate-chambers-echo.mp3,musify,black metal/Nocturnal Triumph/Into Light's Graven Womb,black metal/Nocturnal Triumph/Into Light's Graven Womb/Desolate Chambers Echo.mp3,black metal
|
||||||
8,41ad47ab-0337-4fcc-b369-5a4b1e12dc3c,Das Leben danach,Was fühlst du noch,"['Crystal F', 'Zero/Zero', 'Nils Davis', 'Taha']",Crystal F,9,0,9,DEVY82000322,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=T15QiksB7do,youtube,horrorcore/Crystal F/Das Leben danach,horrorcore/Crystal F/Das Leben danach/Was fühlst du noch.mp3,horrorcore
|
8,de6095d0-40f8-4121-8ae9-7ca8332b0fc4,The Fangs of Miseries Past,The Fires of Tragedy,['Nocturnal Triumph'],Nocturnal Triumph,1,2,1,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,,https://musify.club/track/dl/11131947/nocturnal-triumph-the-fires-of-tragedy.mp3,musify,black metal/Nocturnal Triumph/The Fangs of Miseries Past,black metal/Nocturnal Triumph/The Fangs of Miseries Past/The Fires of Tragedy.mp3,black metal
|
||||||
9,ed6cc3e1-d493-4a51-973c-3adc1a6ea978,Das Leben danach,Katzen,"['Crystal F', 'Kito', 'Kirby']",Crystal F,10,0,10,DEVY82000323,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=eKCpu74GYxs,youtube,horrorcore/Crystal F/Das Leben danach,horrorcore/Crystal F/Das Leben danach/Katzen.mp3,horrorcore
|
9,4337fac9-ee73-4183-bd63-7d6b7c279e1f,The Fangs of Miseries Past,The Fangs of Miseries Past,['Nocturnal Triumph'],Nocturnal Triumph,2,2,2,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,,https://musify.club/track/dl/11131949/nocturnal-triumph-the-fangs-of-miseries-past.mp3,musify,black metal/Nocturnal Triumph/The Fangs of Miseries Past,black metal/Nocturnal Triumph/The Fangs of Miseries Past/The Fangs of Miseries Past.mp3,black metal
|
||||||
10,b49a466f-e77b-465d-9c01-06298efb0c9d,Das Leben danach,Wach sein,['Crystal F'],Crystal F,11,0,11,DEVY82000324,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=dboTFFBUPW0,youtube,horrorcore/Crystal F/Das Leben danach,horrorcore/Crystal F/Das Leben danach/Wach sein.mp3,horrorcore
|
10,d9118f78-34bd-4c57-8df6-34ee2775a895,The Fangs of Miseries Past,A Moon Cloaked in Despair,['Nocturnal Triumph'],Nocturnal Triumph,3,2,3,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,,https://musify.club/track/dl/11131948/nocturnal-triumph-a-moon-cloaked-in-despair.mp3,musify,black metal/Nocturnal Triumph/The Fangs of Miseries Past,black metal/Nocturnal Triumph/The Fangs of Miseries Past/A Moon Cloaked in Despair.mp3,black metal
|
||||||
11,86b43bec-eea6-40ae-8624-c1e404204ba1,Das Leben danach,Rote Augen,['Crystal F'],Crystal F,12,0,12,DEVY82000325,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=zvYHKYz6AGI,youtube,horrorcore/Crystal F/Das Leben danach,horrorcore/Crystal F/Das Leben danach/Rote Augen.mp3,horrorcore
|
11,2e6cfa77-ee95-4c76-a802-06aa8cf8364a,The Fangs of Miseries Past,Towards Rebirth and Demise,['Nocturnal Triumph'],Nocturnal Triumph,4,2,4,,2018,2018,6bee5e73-5340-4514-90aa-22dad13c2206,874bba46-d47f-4ef3-9960-9468c6dfa536,6bee5e73-5340-4514-90aa-22dad13c2206,Official,4,eng,Album,,,,https://musify.club/track/dl/11131950/nocturnal-triumph-towards-rebirth-and-demise.mp3,musify,black metal/Nocturnal Triumph/The Fangs of Miseries Past,black metal/Nocturnal Triumph/The Fangs of Miseries Past/Towards Rebirth and Demise.mp3,black metal
|
||||||
12,2a3dc1ae-6752-420f-b1d3-ca9e26a15c48,Das Leben danach,Schlechtes Essen,['Crystal F'],Crystal F,13,0,13,DEVY82000326,2021-06-11,2021,5cfecbe4-f600-45e5-9038-ce820eedf3d1,1aeb676f-e556-4b17-b45e-64ab69ef0375,5cfecbe4-f600-45e5-9038-ce820eedf3d1,Official,13,deu,Album,,XW,4260526714133,https://www.youtube.com/watch?v=XAfpge1FxLY,youtube,horrorcore/Crystal F/Das Leben danach,horrorcore/Crystal F/Das Leben danach/Schlechtes Essen.mp3,horrorcore
|
|
||||||
|
|
@ -1,41 +1,52 @@
|
|||||||
import youtube_dl
|
import youtube_dl
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import jellyfish
|
|
||||||
import logging
|
import logging
|
||||||
|
import time
|
||||||
|
|
||||||
|
import phonetic_compares
|
||||||
|
|
||||||
YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist': 'True'}
|
YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist': 'True'}
|
||||||
YOUTUBE_URL_KEY = 'webpage_url'
|
YOUTUBE_URL_KEY = 'webpage_url'
|
||||||
|
YOUTUBE_TITLE_KEY = 'title'
|
||||||
|
WAIT_BETWEEN_BLOCK = 10
|
||||||
|
MAX_TRIES = 3
|
||||||
|
|
||||||
|
|
||||||
def get_youtube_from_isrc(isrc: str):
|
def get_youtube_from_isrc(isrc: str):
|
||||||
# https://stackoverflow.com/questions/63388364/searching-youtube-videos-using-youtube-dl
|
# https://stackoverflow.com/questions/63388364/searching-youtube-videos-using-youtube-dl
|
||||||
with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
|
with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
|
||||||
video = ydl.extract_info(f"ytsearch:{isrc}", download=False)['entries'][0]
|
videos = ydl.extract_info(f"ytsearch:{isrc}", download=False)['entries']
|
||||||
print(type(video))
|
|
||||||
if YOUTUBE_URL_KEY not in video:
|
return [{
|
||||||
return None
|
|
||||||
return {
|
|
||||||
'url': video[YOUTUBE_URL_KEY],
|
'url': video[YOUTUBE_URL_KEY],
|
||||||
'title': video['title']
|
'title': video[YOUTUBE_TITLE_KEY]
|
||||||
}
|
} for video in videos]
|
||||||
|
|
||||||
|
|
||||||
def get_youtube_url(row):
|
def get_youtube_url(row):
|
||||||
if pd.isna(row['isrc']):
|
if pd.isna(row['isrc']):
|
||||||
return None
|
return None
|
||||||
real_title = row['title'].lower()
|
real_title = row['title'].lower()
|
||||||
|
|
||||||
result = get_youtube_from_isrc(row['isrc'])
|
final_result = None
|
||||||
|
results = get_youtube_from_isrc(row['isrc'])
|
||||||
|
for result in results:
|
||||||
video_title = result['title'].lower()
|
video_title = result['title'].lower()
|
||||||
|
match, distance = phonetic_compares.match_titles(video_title, real_title)
|
||||||
|
|
||||||
phonetic_distance = jellyfish.levenshtein_distance(real_title, video_title)
|
if match:
|
||||||
|
logging.warning(
|
||||||
|
f"dont downloading {result['url']} cuz the phonetic distance ({distance}) between {real_title} and {video_title} is to high.")
|
||||||
|
continue
|
||||||
|
|
||||||
print(real_title, video_title, phonetic_distance)
|
final_result = result
|
||||||
if phonetic_distance > 1:
|
|
||||||
logging.warning(f"dont downloading {result['url']} cuz the phonetic distance ({phonetic_distance}) between {real_title} and {video_title} is to high.")
|
if final_result is None:
|
||||||
return None
|
return None
|
||||||
return result['url']
|
return final_result['url']
|
||||||
|
|
||||||
def download(row):
|
|
||||||
|
def download(row, trie: int = 0):
|
||||||
url = row['url']
|
url = row['url']
|
||||||
file_ = row['file']
|
file_ = row['file']
|
||||||
options = {
|
options = {
|
||||||
@ -49,11 +60,20 @@ def download(row):
|
|||||||
'outtmpl': file_
|
'outtmpl': file_
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try:
|
||||||
with youtube_dl.YoutubeDL(options) as ydl:
|
with youtube_dl.YoutubeDL(options) as ydl:
|
||||||
ydl.download([url])
|
ydl.download([url])
|
||||||
|
except youtube_dl.utils.DownloadError:
|
||||||
|
logging.warning(f"youtube blocked downloading. ({trie}-{MAX_TRIES})")
|
||||||
|
if trie >= MAX_TRIES:
|
||||||
|
logging.warning("too many tries, returning")
|
||||||
|
logging.warning(f"retrying in {WAIT_BETWEEN_BLOCK} seconds again")
|
||||||
|
time.sleep(WAIT_BETWEEN_BLOCK)
|
||||||
|
return download(row, trie=trie+1)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
# example isrc that exists on youtube music
|
# example isrc that exists on YouTube music
|
||||||
ISRC = "DEUM71500715"
|
ISRC = "DEUM71500715"
|
||||||
result = get_youtube_from_isrc(ISRC)
|
result = get_youtube_from_isrc(ISRC)
|
||||||
print(result)
|
print(result)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
,id,album,title,artist,album_artist,tracknumber,albumsort,titlesort,isrc,date,year,musicbrainz_artistid,musicbrainz_albumid,musicbrainz_albumartistid,musicbrainz_albumstatus,total_tracks,language,musicbrainz_albumtype,compilation,releasecountry,barcode
|
,id,album,title,artist,album_artist,tracknumber,albumsort,titlesort,isrc,date,year,musicbrainz_artistid,musicbrainz_albumid,musicbrainz_albumartistid,musicbrainz_albumstatus,total_tracks,language,musicbrainz_albumtype,compilation,releasecountry,barcode
|
||||||
|
<<<<<<< HEAD
|
||||||
0,03634ecf-5ef1-4ec4-8c9a-89be5df6462d,Mate. Feed. Kill. Repeat.,Slipknot,['Slipknot'],Slipknot,1,2,1,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027
|
0,03634ecf-5ef1-4ec4-8c9a-89be5df6462d,Mate. Feed. Kill. Repeat.,Slipknot,['Slipknot'],Slipknot,1,2,1,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027
|
||||||
1,c4d73bed-2164-4869-a274-db111f12f09f,Mate. Feed. Kill. Repeat.,Gently,['Slipknot'],Slipknot,2,2,2,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027
|
1,c4d73bed-2164-4869-a274-db111f12f09f,Mate. Feed. Kill. Repeat.,Gently,['Slipknot'],Slipknot,2,2,2,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027
|
||||||
2,1be117c9-9cad-4141-82c1-e0c07a5a0d09,Mate. Feed. Kill. Repeat.,Do Nothing / Bitchslap,['Slipknot'],Slipknot,3,2,3,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027
|
2,1be117c9-9cad-4141-82c1-e0c07a5a0d09,Mate. Feed. Kill. Repeat.,Do Nothing / Bitchslap,['Slipknot'],Slipknot,3,2,3,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027
|
||||||
@ -7,3 +8,15 @@
|
|||||||
5,baf6624a-fc9c-4485-8beb-4aed5d8a0ea6,Mate. Feed. Kill. Repeat.,Confessions,['Slipknot'],Slipknot,6,2,6,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027
|
5,baf6624a-fc9c-4485-8beb-4aed5d8a0ea6,Mate. Feed. Kill. Repeat.,Confessions,['Slipknot'],Slipknot,6,2,6,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027
|
||||||
6,42119c6c-74a6-4b73-a887-1b9e023db9a5,Mate. Feed. Kill. Repeat.,Some Feel,['Slipknot'],Slipknot,7,2,7,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027
|
6,42119c6c-74a6-4b73-a887-1b9e023db9a5,Mate. Feed. Kill. Repeat.,Some Feel,['Slipknot'],Slipknot,7,2,7,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027
|
||||||
7,a4c44e11-ff51-49f5-b100-658f4e263a59,Mate. Feed. Kill. Repeat.,Killers Are Quiet / Dogfish Rising,['Slipknot'],Slipknot,8,2,8,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027
|
7,a4c44e11-ff51-49f5-b100-658f4e263a59,Mate. Feed. Kill. Repeat.,Killers Are Quiet / Dogfish Rising,['Slipknot'],Slipknot,8,2,8,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027
|
||||||
|
=======
|
||||||
|
0,ba953d81-663e-4acc-90d7-c86005960341,Pain Remains,"Welcome Back, O’ Sleeping Dreamer",['Lorna Shore'],Lorna Shore,1,0,1,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830
|
||||||
|
1,b7b623b0-a64d-40b4-b6cb-b1b45a3b0d91,Pain Remains,Into the Earth,['Lorna Shore'],Lorna Shore,2,0,2,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830
|
||||||
|
2,7dfa4dd2-1ac7-4b17-91b4-fcdc1f859b74,Pain Remains,Sun//Eater,['Lorna Shore'],Lorna Shore,3,0,3,GBDHC2334003,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830
|
||||||
|
3,7e6cf7ec-c566-47c1-88e9-da7731089428,Pain Remains,Cursed to Die,['Lorna Shore'],Lorna Shore,4,0,4,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830
|
||||||
|
4,7abf38eb-de34-44e5-9a90-1438a0c54d2d,Pain Remains,Soulless Existence,['Lorna Shore'],Lorna Shore,5,0,5,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830
|
||||||
|
5,a2b9b1e5-7d32-4ba4-9a16-ad63b374a8ad,Pain Remains,Apotheosis,['Lorna Shore'],Lorna Shore,6,0,6,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830
|
||||||
|
6,fcd1d262-bd4f-4838-831a-547cb4066ef8,Pain Remains,Wrath,['Lorna Shore'],Lorna Shore,7,0,7,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830
|
||||||
|
7,4a1dca7c-2409-40e3-9dfa-3ae26789db18,Pain Remains,Pain Remains I: Dancing Like Flames,['Lorna Shore'],Lorna Shore,8,0,8,GBDHC2334008,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830
|
||||||
|
8,af01b1dc-f14e-4d02-b91a-d059b235f452,Pain Remains,"Pain Remains II: After All I’ve Done, I’ll Disappear",['Lorna Shore'],Lorna Shore,9,0,9,GBDHC2334009,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830
|
||||||
|
9,b9ead1a7-b054-4a8a-8e36-e860ab7e8d5f,Pain Remains,Pain Remains III: In a Sea of Fire,['Lorna Shore'],Lorna Shore,10,0,10,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830
|
||||||
|
>>>>>>> e923dcdaf208a95492af3afaa9e49fbbcfb9520c
|
||||||
|
Can't render this file because it has a wrong number of fields in line 2.
|
@ -1,4 +1,5 @@
|
|||||||
,id,album,title,artist,album_artist,tracknumber,albumsort,titlesort,isrc,date,year,musicbrainz_artistid,musicbrainz_albumid,musicbrainz_albumartistid,musicbrainz_albumstatus,total_tracks,language,musicbrainz_albumtype,compilation,releasecountry,barcode,url,src
|
,id,album,title,artist,album_artist,tracknumber,albumsort,titlesort,isrc,date,year,musicbrainz_artistid,musicbrainz_albumid,musicbrainz_albumartistid,musicbrainz_albumstatus,total_tracks,language,musicbrainz_albumtype,compilation,releasecountry,barcode,url,src
|
||||||
|
<<<<<<< HEAD
|
||||||
0,03634ecf-5ef1-4ec4-8c9a-89be5df6462d,Mate. Feed. Kill. Repeat.,Slipknot,['Slipknot'],Slipknot,1,2,1,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48121/slipknot-slipknot.mp3,musify
|
0,03634ecf-5ef1-4ec4-8c9a-89be5df6462d,Mate. Feed. Kill. Repeat.,Slipknot,['Slipknot'],Slipknot,1,2,1,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48121/slipknot-slipknot.mp3,musify
|
||||||
1,c4d73bed-2164-4869-a274-db111f12f09f,Mate. Feed. Kill. Repeat.,Gently,['Slipknot'],Slipknot,2,2,2,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/11541988/slipknot-gently.mp3,musify
|
1,c4d73bed-2164-4869-a274-db111f12f09f,Mate. Feed. Kill. Repeat.,Gently,['Slipknot'],Slipknot,2,2,2,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/11541988/slipknot-gently.mp3,musify
|
||||||
2,1be117c9-9cad-4141-82c1-e0c07a5a0d09,Mate. Feed. Kill. Repeat.,Do Nothing / Bitchslap,['Slipknot'],Slipknot,3,2,3,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48127/slipknot-do-nothing-bitchslap.mp3,musify
|
2,1be117c9-9cad-4141-82c1-e0c07a5a0d09,Mate. Feed. Kill. Repeat.,Do Nothing / Bitchslap,['Slipknot'],Slipknot,3,2,3,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48127/slipknot-do-nothing-bitchslap.mp3,musify
|
||||||
@ -6,3 +7,12 @@
|
|||||||
4,2a0ece26-1d36-4fd1-84be-8dc018a599d1,Mate. Feed. Kill. Repeat.,Tattered & Torn,['Slipknot'],Slipknot,5,2,5,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/10267/slipknot-tattered-and-torn.mp3,musify
|
4,2a0ece26-1d36-4fd1-84be-8dc018a599d1,Mate. Feed. Kill. Repeat.,Tattered & Torn,['Slipknot'],Slipknot,5,2,5,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/10267/slipknot-tattered-and-torn.mp3,musify
|
||||||
5,baf6624a-fc9c-4485-8beb-4aed5d8a0ea6,Mate. Feed. Kill. Repeat.,Confessions,['Slipknot'],Slipknot,6,2,6,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48126/slipknot-confessions.mp3,musify
|
5,baf6624a-fc9c-4485-8beb-4aed5d8a0ea6,Mate. Feed. Kill. Repeat.,Confessions,['Slipknot'],Slipknot,6,2,6,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48126/slipknot-confessions.mp3,musify
|
||||||
6,42119c6c-74a6-4b73-a887-1b9e023db9a5,Mate. Feed. Kill. Repeat.,Some Feel,['Slipknot'],Slipknot,7,2,7,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48124/slipknot-some-feel.mp3,musify
|
6,42119c6c-74a6-4b73-a887-1b9e023db9a5,Mate. Feed. Kill. Repeat.,Some Feel,['Slipknot'],Slipknot,7,2,7,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48124/slipknot-some-feel.mp3,musify
|
||||||
|
=======
|
||||||
|
0,ba953d81-663e-4acc-90d7-c86005960341,Pain Remains,"Welcome Back, O’ Sleeping Dreamer",['Lorna Shore'],Lorna Shore,1,0,1,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712884/lorna-shore-welcome-back-o-sleeping-dreamer.mp3,musify
|
||||||
|
1,7dfa4dd2-1ac7-4b17-91b4-fcdc1f859b74,Pain Remains,Sun//Eater,['Lorna Shore'],Lorna Shore,3,0,3,GBDHC2334003,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18013578/lorna-shore-sun-eater.mp3,musify
|
||||||
|
2,7e6cf7ec-c566-47c1-88e9-da7731089428,Pain Remains,Cursed to Die,['Lorna Shore'],Lorna Shore,4,0,4,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18254249/lorna-shore-cursed-to-die.mp3,musify
|
||||||
|
3,7abf38eb-de34-44e5-9a90-1438a0c54d2d,Pain Remains,Soulless Existence,['Lorna Shore'],Lorna Shore,5,0,5,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712888/lorna-shore-soulless-existence.mp3,musify
|
||||||
|
4,4a1dca7c-2409-40e3-9dfa-3ae26789db18,Pain Remains,Pain Remains I: Dancing Like Flames,['Lorna Shore'],Lorna Shore,8,0,8,GBDHC2334008,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712891/lorna-shore-pain-remains-i-dancing-like-flames.mp3,musify
|
||||||
|
5,af01b1dc-f14e-4d02-b91a-d059b235f452,Pain Remains,"Pain Remains II: After All I’ve Done, I’ll Disappear",['Lorna Shore'],Lorna Shore,9,0,9,GBDHC2334009,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712892/lorna-shore-pain-remains-ii-after-all-ive-done-ill-disappear.mp3,musify
|
||||||
|
6,b9ead1a7-b054-4a8a-8e36-e860ab7e8d5f,Pain Remains,Pain Remains III: In a Sea of Fire,['Lorna Shore'],Lorna Shore,10,0,10,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712893/lorna-shore-pain-remains-iii-in-a-sea-of-fire.mp3,musify
|
||||||
|
>>>>>>> e923dcdaf208a95492af3afaa9e49fbbcfb9520c
|
||||||
|
Can't render this file because it has a wrong number of fields in line 2.
|
@ -1,4 +1,5 @@
|
|||||||
,id,album,title,artist,album_artist,tracknumber,albumsort,titlesort,isrc,date,year,musicbrainz_artistid,musicbrainz_albumid,musicbrainz_albumartistid,musicbrainz_albumstatus,total_tracks,language,musicbrainz_albumtype,compilation,releasecountry,barcode,url,src,path,file,genre
|
,id,album,title,artist,album_artist,tracknumber,albumsort,titlesort,isrc,date,year,musicbrainz_artistid,musicbrainz_albumid,musicbrainz_albumartistid,musicbrainz_albumstatus,total_tracks,language,musicbrainz_albumtype,compilation,releasecountry,barcode,url,src,path,file,genre
|
||||||
|
<<<<<<< HEAD
|
||||||
0,03634ecf-5ef1-4ec4-8c9a-89be5df6462d,Mate. Feed. Kill. Repeat.,Slipknot,['Slipknot'],Slipknot,1,2,1,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48121/slipknot-slipknot.mp3,musify,nu metal/Slipknot/Mate. Feed. Kill. Repeat.,nu metal/Slipknot/Mate. Feed. Kill. Repeat./Slipknot.mp3,nu metal
|
0,03634ecf-5ef1-4ec4-8c9a-89be5df6462d,Mate. Feed. Kill. Repeat.,Slipknot,['Slipknot'],Slipknot,1,2,1,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48121/slipknot-slipknot.mp3,musify,nu metal/Slipknot/Mate. Feed. Kill. Repeat.,nu metal/Slipknot/Mate. Feed. Kill. Repeat./Slipknot.mp3,nu metal
|
||||||
1,c4d73bed-2164-4869-a274-db111f12f09f,Mate. Feed. Kill. Repeat.,Gently,['Slipknot'],Slipknot,2,2,2,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/11541988/slipknot-gently.mp3,musify,nu metal/Slipknot/Mate. Feed. Kill. Repeat.,nu metal/Slipknot/Mate. Feed. Kill. Repeat./Gently.mp3,nu metal
|
1,c4d73bed-2164-4869-a274-db111f12f09f,Mate. Feed. Kill. Repeat.,Gently,['Slipknot'],Slipknot,2,2,2,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/11541988/slipknot-gently.mp3,musify,nu metal/Slipknot/Mate. Feed. Kill. Repeat.,nu metal/Slipknot/Mate. Feed. Kill. Repeat./Gently.mp3,nu metal
|
||||||
2,1be117c9-9cad-4141-82c1-e0c07a5a0d09,Mate. Feed. Kill. Repeat.,Do Nothing / Bitchslap,['Slipknot'],Slipknot,3,2,3,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48127/slipknot-do-nothing-bitchslap.mp3,musify,nu metal/Slipknot/Mate. Feed. Kill. Repeat.,nu metal/Slipknot/Mate. Feed. Kill. Repeat./Do Nothing Bitchslap.mp3,nu metal
|
2,1be117c9-9cad-4141-82c1-e0c07a5a0d09,Mate. Feed. Kill. Repeat.,Do Nothing / Bitchslap,['Slipknot'],Slipknot,3,2,3,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48127/slipknot-do-nothing-bitchslap.mp3,musify,nu metal/Slipknot/Mate. Feed. Kill. Repeat.,nu metal/Slipknot/Mate. Feed. Kill. Repeat./Do Nothing Bitchslap.mp3,nu metal
|
||||||
@ -6,3 +7,12 @@
|
|||||||
4,2a0ece26-1d36-4fd1-84be-8dc018a599d1,Mate. Feed. Kill. Repeat.,Tattered & Torn,['Slipknot'],Slipknot,5,2,5,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/10267/slipknot-tattered-and-torn.mp3,musify,nu metal/Slipknot/Mate. Feed. Kill. Repeat.,nu metal/Slipknot/Mate. Feed. Kill. Repeat./Tattered & Torn.mp3,nu metal
|
4,2a0ece26-1d36-4fd1-84be-8dc018a599d1,Mate. Feed. Kill. Repeat.,Tattered & Torn,['Slipknot'],Slipknot,5,2,5,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/10267/slipknot-tattered-and-torn.mp3,musify,nu metal/Slipknot/Mate. Feed. Kill. Repeat.,nu metal/Slipknot/Mate. Feed. Kill. Repeat./Tattered & Torn.mp3,nu metal
|
||||||
5,baf6624a-fc9c-4485-8beb-4aed5d8a0ea6,Mate. Feed. Kill. Repeat.,Confessions,['Slipknot'],Slipknot,6,2,6,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48126/slipknot-confessions.mp3,musify,nu metal/Slipknot/Mate. Feed. Kill. Repeat.,nu metal/Slipknot/Mate. Feed. Kill. Repeat./Confessions.mp3,nu metal
|
5,baf6624a-fc9c-4485-8beb-4aed5d8a0ea6,Mate. Feed. Kill. Repeat.,Confessions,['Slipknot'],Slipknot,6,2,6,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48126/slipknot-confessions.mp3,musify,nu metal/Slipknot/Mate. Feed. Kill. Repeat.,nu metal/Slipknot/Mate. Feed. Kill. Repeat./Confessions.mp3,nu metal
|
||||||
6,42119c6c-74a6-4b73-a887-1b9e023db9a5,Mate. Feed. Kill. Repeat.,Some Feel,['Slipknot'],Slipknot,7,2,7,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48124/slipknot-some-feel.mp3,musify,nu metal/Slipknot/Mate. Feed. Kill. Repeat.,nu metal/Slipknot/Mate. Feed. Kill. Repeat./Some Feel.mp3,nu metal
|
6,42119c6c-74a6-4b73-a887-1b9e023db9a5,Mate. Feed. Kill. Repeat.,Some Feel,['Slipknot'],Slipknot,7,2,7,,1996-10-31,1996,a466c2a2-6517-42fb-a160-1087c3bafd9f,ce4722b7-7d58-4f7d-b76d-cb4b37fb661b,a466c2a2-6517-42fb-a160-1087c3bafd9f,Official,8,eng,Album,,US,742617000027,https://musify.club/track/dl/48124/slipknot-some-feel.mp3,musify,nu metal/Slipknot/Mate. Feed. Kill. Repeat.,nu metal/Slipknot/Mate. Feed. Kill. Repeat./Some Feel.mp3,nu metal
|
||||||
|
=======
|
||||||
|
0,ba953d81-663e-4acc-90d7-c86005960341,Pain Remains,"Welcome Back, O’ Sleeping Dreamer",['Lorna Shore'],Lorna Shore,1,0,1,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712884/lorna-shore-welcome-back-o-sleeping-dreamer.mp3,musify,deathcore/Lorna Shore/Pain Remains,"deathcore/Lorna Shore/Pain Remains/Welcome Back, O’ Sleeping Dreamer.mp3",deathcore
|
||||||
|
1,7dfa4dd2-1ac7-4b17-91b4-fcdc1f859b74,Pain Remains,Sun//Eater,['Lorna Shore'],Lorna Shore,3,0,3,GBDHC2334003,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18013578/lorna-shore-sun-eater.mp3,musify,deathcore/Lorna Shore/Pain Remains,deathcore/Lorna Shore/Pain Remains/Sun Eater.mp3,deathcore
|
||||||
|
2,7e6cf7ec-c566-47c1-88e9-da7731089428,Pain Remains,Cursed to Die,['Lorna Shore'],Lorna Shore,4,0,4,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18254249/lorna-shore-cursed-to-die.mp3,musify,deathcore/Lorna Shore/Pain Remains,deathcore/Lorna Shore/Pain Remains/Cursed to Die.mp3,deathcore
|
||||||
|
3,7abf38eb-de34-44e5-9a90-1438a0c54d2d,Pain Remains,Soulless Existence,['Lorna Shore'],Lorna Shore,5,0,5,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712888/lorna-shore-soulless-existence.mp3,musify,deathcore/Lorna Shore/Pain Remains,deathcore/Lorna Shore/Pain Remains/Soulless Existence.mp3,deathcore
|
||||||
|
4,4a1dca7c-2409-40e3-9dfa-3ae26789db18,Pain Remains,Pain Remains I: Dancing Like Flames,['Lorna Shore'],Lorna Shore,8,0,8,GBDHC2334008,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712891/lorna-shore-pain-remains-i-dancing-like-flames.mp3,musify,deathcore/Lorna Shore/Pain Remains,deathcore/Lorna Shore/Pain Remains/Pain Remains I: Dancing Like Flames.mp3,deathcore
|
||||||
|
5,af01b1dc-f14e-4d02-b91a-d059b235f452,Pain Remains,"Pain Remains II: After All I’ve Done, I’ll Disappear",['Lorna Shore'],Lorna Shore,9,0,9,GBDHC2334009,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712892/lorna-shore-pain-remains-ii-after-all-ive-done-ill-disappear.mp3,musify,deathcore/Lorna Shore/Pain Remains,"deathcore/Lorna Shore/Pain Remains/Pain Remains II: After All I’ve Done, I’ll Disappear.mp3",deathcore
|
||||||
|
6,b9ead1a7-b054-4a8a-8e36-e860ab7e8d5f,Pain Remains,Pain Remains III: In a Sea of Fire,['Lorna Shore'],Lorna Shore,10,0,10,,2022-10-14,2022,e86fc1f5-d632-44b2-8aea-38f83aadffe8,7d70eb7f-68b0-4c20-aa17-bfb414f88f4c,e86fc1f5-d632-44b2-8aea-38f83aadffe8,Official,10,eng,Album,,XW,886449882830,https://musify.club/track/dl/18712893/lorna-shore-pain-remains-iii-in-a-sea-of-fire.mp3,musify,deathcore/Lorna Shore/Pain Remains,deathcore/Lorna Shore/Pain Remains/Pain Remains III: In a Sea of Fire.mp3,deathcore
|
||||||
|
>>>>>>> e923dcdaf208a95492af3afaa9e49fbbcfb9520c
|
||||||
|
Can't render this file because it has a wrong number of fields in line 2.
|
Loading…
Reference in New Issue
Block a user