Piracy: ꜱᴀɪʟ ᴛʜᴇ ʜɪɢʜ ꜱᴇᴀꜱ
⚓ Dedicated to the discussion of digital piracy, including ethical problems and legal advancements.
Rules • Full Version
1. Posts must be related to the discussion of digital piracy
2. Don't request invites, trade, sell, or self-promote
3. Don't request or link to specific pirated titles, including DMs
4. Don't submit low-quality posts, be entitled, or harass others
Loot, Pillage, & Plunder
📜 c/Piracy Wiki (Community Edition):
💰 Please help cover server costs.
Ko-fi | Liberapay |
[Original date of post creation: 2024-06-02]
Hello everyone!
For a long time, I wanted to write a guide with my process of donwloading and tagging songs (I can use it as a guide for me in case I forget it, haha). Anything here is a suggestion, you can do it differently if you want. (This guide is for windows (10) devices, linux tools may be different. I haven't moved to Linux, yet..) This is gonna be long.
Tools we may need:
(online means that they don't have to be installed)
-- Deemix to download songs from deezer (open source).
-- Soulseek platfrom to share music. There is an android open source client SeekerAndroid and a PC open source client Nicotine+.
-- TuneMyMusic website to create/edit/import/export playlists to/from/in various music platfrom (online). It can also export in text.
-- ytDownloader to download songs from Youtube (for PC, open source). It can also download videos/songs from many other sources, acts as a gui for yt-dpl.
-- Seal to download songs from Youtube (for android, open source). It can also download videos/songs from many other sources, acts as a gui for yt-dpl.
-- Mp3tag (for Linux you can use puddletag, but I can't help you with that as of now) to manually (and batch) edit tags of my downloaded songs (closed source freeware, until recently I thought it was open source.. I might replace it with Kid3 if I ever get to know how to use it). Mp3tag has "actions" which help you do batch edit of metadata, like format the filename of a song using the artist and title tags (and with ctrl+a you can select all songs to apply that action).
-- OneTagger to automatically tag songs (open source). It can fetch metadata from various platforms, like musicbrainz, deeer, spotify, musixmatch, bandcamp, discogs etc.
-- LyricsGenius python program to fetch data from genius using genius api (open source).
-- lrcget to batch fetch lyrics from lrclib (open source).
-- lrclib website with synced and unsynced lyrics (online).
-- Genius website with unsynced lyrics, song metadata and lyrics interpretations (online).
-- Notepad++ to edit text (open source).
-- fre:ac to convert my files from .flac to .opus (open source). It can do many more, it can also rip CDs etc.
-- Quodlibet windows/linux/macos music player (open source). Very good.
-- Symphony android music player (open source). Very good.
-- ListenBrainz to record my listening history (open source, online). It has an offcial open source android client too. Many music players (on pc at least) have plug-ins that support ListenBrainz.
-- Noteable mentions: Simplest file renamer to batch rename files or get a list of the filenames in a folder (open source) and Libre Office to use the Office calc funtions (open source).
The download part:
I will be using Deemix as my primary source, Soulseek for anything else and Youtube when I can't find my song anywhere else.
Deemix needs an account, so you can probably find a ARL here (arl is like a token for an account). If the link doesn't work in the future, you'll have to find it yourself. Soulseek simply needs a free account (but there it is encouraged to share your music with others).
In Deemix you can search songs seperately or download playlists (either from deemix or spotify). You can create spotify playlists from various sources (even text list) with TuneMyMusic.
Deemix settings:
-- Use this trackname template in all occasions:
%artist% - %title% [%year%]
-- Save covers at 1200 size in .png format
-- Save all tags apart from copyright
-- Set concurent downloads to 1, because it makes sure songs from playlists get downloaded with the same order in the playlist (it helps me check later what has been downloaded properly) and makes it harder to be detected.
-- Set it to download Flac
and set it to create .lrc files
-- Turn on Keep "Various artists" in the Album artists
-- Use YYYY-MM-DD
date format
-- Set it to remove "featured artists" from the title
-- Add your Spotify account with the proper tokens/credentials
Youtube: either use yt-dpl or ytDonloader (it has a gui)
The tagging part (the longest part):
Our main tools will be Mp3tag and OneTagger. OneTagger will fetch the tags and Mp3tag will edit them.
First, we will create our folder structure which we will use:
-- Create a folder 1T
.
-- Inside create 10 more: 0 Raw
, 1 Deezer
, 2 Spotify
, 3 Musicbrainz
, 4 Bandcamp
, 5 Musixmatch
, 6 Opus
, 7 Final
, Images
, Texts
.
-- Inside the 7 Final
folder create 2 more: Flac
and Opus
.
I will first describe how to set up OneTagger, Mp3tag and anything else and then I'll describe the steps.
OneTagger settings:
(!Attention!) I mention any changes from the default, anything else I'll probably not mention it.
Some terms explained before we start:
-- ReleaseID
is the part after the last /
of the deezer url of the album which the song belongs to. i.e. from this link https://www.deezer.com/en/album/5447741
the id is 5447741
.
-- TrackID
is the part after the last /
of the deezer url of the album which the song belongs to. If you download a song from Deemix, it usually has the TrackID saved in the SOURCEID
tag. i.e. from this link https://www.deezer.com/en/track/55848051
the id is 55848051
.
First we will create our AutoTag profiles:
1) Create new profile 1 Deezer
(This is for songs downloaded with Deemix, the 6th profile is the universal alternative.)
-- In platforms tab select Deezer
as platform
-- In tags tab, select Version
, Label
, ReleaseID
, Catalog Number
, Disc Number
, OneTagger Tags
. (Select album art only if you want to change the art or you haven't downloaded the songs from deemix). Select as input the path of the folder 0 Raw
.
-- In platform specific settings set Album Art resolution to 1600 (Redundant step)
-- In advanced turn on only ID3v2.4
, Identify tracks with Shazam
, Move successfully tagged files after taggins
and add the path of the 1 Deezer
folder underneath. In the overwrite tags area, add those tags: Version
, Label
, ReleaseID
, Catalog Number
, Disc Number
, OneTagger Tags
. Set track number leading zeros to 2 and use //
as separators.
2) Create new profile 2 Spotify
-- In platforms tab select Spotify
as platform
-- In tags tab, select Album Artist
, ReleaseID
, TrackID
, URL
. Select as input the path of the folder 1 Deezer
.
-- In platform specific settings put in your Spotify credentials
-- In advanced turn on only ID3v2.4
, Identify tracks with Shazam
, Move successfully tagged files after taggins
and add the path of the 2 Spotify
folder underneath. In the overwrite tags area, add those tags: Album Artist
, ReleaseID
, TrackID
, URL
. Set track number leading zeros to 2 and use //
as separators.
3) Create new profile 3 Musicbrainz
-- In platforms tab select Musicbrainz
as platform
-- In tags tab, select Genre
, ReleaseID
, TrackID
, URL
. Select as input the path of the folder 2 Spotify
.
-- In advanced turn on only ID3v2.4
, Identify tracks with Shazam
, Move successfully tagged files after taggins
and add the path of the 3 Musicbrainz
folder underneath. In the overwrite tags area, add those tags: Genre
, ReleaseID
, TrackID
, URL
. Set track number leading zeros to 2 and use //
as separators.
4) Create new profile 4 Bandcamp
-- In platforms tab select Bandcamp
as platform
-- In tags tab, select Genre
, Style/Subgenre
, ReleaseID
, TrackID
. Select as input the path of the folder 3 Musicbrainz
.
-- In advanced turn on only ID3v2.4
, Identify tracks with Shazam
, Move successfully tagged files after taggins
and add the path of the 4 Bandcamp
folder underneath. In the overwrite tags area, add those tags: Genre
, Style/Subgenre
, ReleaseID
, TrackID
. Set track number leading zeros to 2 and use //
as separators. In Genre/Style/Subgenre options select Merge to Genre tag
.
5) Create new profile 5 Musixmatch
-- In platforms tab select Musixmatch
as platform
-- In tags tab, select Unsynced Lyrics
, Synced Lyrics
. Select as input the path of the folder 4 Bandcamp
.
-- In advanced turn on only ID3v2.4
, Identify tracks with Shazam
, Write .LRC file
, Move successfully tagged files after taggins
and add the path of the 5 Musixmatch
folder underneath. In the overwrite tags area, add those tags: Unsynced Lyrics
, Synced Lyrics
. Set track number leading zeros to 2 and use //
as separators. In Genre/Style/Subgenre options select Merge to Genre tag
.
Extra/Secondary profiles to use when you don't tag songs downloaded from Deemix:
6) Create new profile 1 Deezer - Universal
-- In platforms tab select Deezer
as platform
-- In tags tab, select everything apart from Explicit
and Album Art
(select album art only if you want to change the art or you haven't downloaded the songs from deemix). Select as input the path of the folder 0 Raw
.
-- In platform specific settings set Album Art resolution to 1600 (Redundant step)
-- In advanced turn on only Overwrite tags
, ID3v2.4
, Identify tracks with Shazam
, Move successfully tagged files after taggins
and add the path of the 1 Deezer
folder underneath. Set track number leading zeros to 2 and use //
as separators.
7) Create new profile 2 Spotify - Universal
-- In platforms tab select Spotify
as platform
-- In tags tab, select Artist
, Album Artist
, ReleaseID
, TrackID
, ISRC
, URL
. Select as input the path of the folder 1 Deezer
.
-- In platform specific settings put in your Spotify credentials
-- In advanced turn on only ID3v2.4
, Identify tracks with Shazam
, Move successfully tagged files after taggins
and add the path of the 2 Spotify
folder underneath. In the overwrite tags area, add those tags: Artist
, ReleaseID
, TrackID
, ISRC
, URL
. Set track number leading zeros to 2 and use //
as separators.
8) Create new profile 3 Musicbrainz - Universal
-- In platforms tab select Musicbrainz
as platform
-- In tags tab, select Genre
, ReleaseID
, TrackID
, ISRC
, URL
. Select as input the path of the folder 2 Spotify
.
-- In advanced turn on only ID3v2.4
, Identify tracks with Shazam
, Move successfully tagged files after taggins
and add the path of the 3 Musicbrainz
folder underneath. In the overwrite tags area, add those tags: Genre
, ReleaseID
, TrackID
, ISRC
, URL
. Set track number leading zeros to 2 and use //
as separators.
These are all the profiles we will need.
Next we will set up the Audio Features tab:
-- Put in your spotify credentials and log in.
-- In the Select Input field put the path of the 5 Musixmatch
folder.
-- Leave properties as they are.
-- In separators section use //
as the separators.
-- In advanced section enable the Write OneTagger meta tag
and Include subfolders
. Disable the Skip already tagged tracks
.
And now OneTagger is set up.
Mp3tag setup:
1) First we will create an export configuration which we will use later:
-- Create a new configuration csv for py script (only artist and title)
, and edit it using this as the code:
$filename(titleartistlist.csv,utf-16)artist title
$loop(%_filename_ext%)$meta_sep(artist,$char(44) ) %title%
$loopend()
-- Set export filename to titleartistlist.csv
and add behind it the path of the Texts
folder we created before (we want the exported file to be inside the Texts folder)
2) Then we will create our actions:
(I will write the name and the steps needed to create each action)
1. wwwaudio to wwwaudiosource (Deezer) from Deemix
-- Create a format action type: set field to WWWAUDIOSOURCE
and format string to https://www.deezer.com/track/%sourceid%
2. wwwaudio to www (Spotify)
-- Create a format action type: set field to WWW
and format string to %wwwaudiofile%
3a. Format 1 rating
-- Create a format action type: set field to RATING
and format string to 20
-- Create a format action type: set field to RATING WMP
and format string to 1
3b. Format 1 rating
-- Create a format action type: set field to RATING
and format string to 40
-- Create a format action type: set field to RATING WMP
and format string to 64
3c. Format 1 rating
-- Create a format action type: set field to RATING
and format string to 60
-- Create a format action type: set field to RATING WMP
and format string to 128
3d. Format 1 rating
-- Create a format action type: set field to RATING
and format string to 80
-- Create a format action type: set field to RATING WMP
and format string to 192
3e. Format 1 rating
-- Create a format action type: set field to RATING
and format string to 100
-- Create a format action type: set field to RATING WMP
and format string to 255
4. Filename format artist - title [year]( -- [YT])
-- Create a format action type: set field to _FILENAME
and format string to $meta_sep(artist,; ) - %title% $char(91)$left(%year%,4)$char(93)$if($geql($strstr($meta_sep(genre,\\),$char(91)YT$char(93)),1), -- $char(91)YT$char(93),)
-- Note: $char(91) is [
and $char(93) is ]
4b. Filename format artist - title [year]( -- [YT])
-- Create a format action type: set field to _FILENAME
and format string to $meta_sep(artist,; ) - %title%$if($geql($strstr($meta_sep(genre,\\),$char(91)YT$char(93)),1), -- $char(91)YT$char(93),)
5. Add-Fix [Xstar(s)] genre
-- Create a format action type: set field to GENRE
and format string to $if($or($geql($strstr($meta_sep(genre,\\),$char(91)5stars$char(93)),1),$geql($strstr($meta_sep(genre,\\),$char(91)4stars$char(93)),1),$geql($strstr($meta_sep(genre,\\),$char(91)3stars$char(93)),1),$geql($strstr($meta_sep(genre,\\),$char(91)2stars$char(93)),1),$geql($strstr($meta_sep(genre,\\),$char(91)1star$char(93)),1),$geql($strstr($meta_sep(genre,\\),$char(91)0star$char(93)),1)),$replace($meta_sep(genre,\\\\),$char(91)5stars$char(93),$char(91)$div(%rating%,20)star$ifgreater(%rating%,20,s,)$char(93),$char(91)4stars$char(93),$char(91)$div(%rating%,20)star$ifgreater(%rating%,20,s,)$char(93),$char(91)3stars$char(93),$char(91)$div(%rating%,20)star$ifgreater(%rating%,20,s,)$char(93),$char(91)2stars$char(93),$char(91)$div(%rating%,20)star$ifgreater(%rating%,20,s,)$char(93),$char(91)1star$char(93),$char(91)$div(%rating%,20)star$ifgreater(%rating%,20,s,)$char(93),$char(91)0star$char(93),$char(91)$div(%rating%,20)star$ifgreater(%rating%,20,s,)$char(93)),$meta_sep(genre,\\\\)\\\\$char(91)$div(%rating%,20)star$ifgreater(%rating%,20,s,)$char(93))
6. Replace hiphoprap and Capitalise Genre
-- Create a replace action type: set field to GENRE
, original to Hip-hop-rap
and replace with Rap/Hip-Hop
-- Create a replace action type: set field to GENRE
, original to Rap/Hip Hop
and replace with Rap/Hip-Hop
-- Create a case conversion action type: set field to GENRE
, case conversion to Mixed Case
and words begin from/after any of ;/&[-
(the spacebar is not a typo)
7. Synced Lyrics from lrc
(this has a lot of steps because we use regular expressions to fix the line breaks)
-- Create an Import text file action type: set field to SYNCEDLYRICS
and filename %_filename%.lrc
-- Create a replace with regular expression action type: set field to SYNCEDLYRICS
, regular expression to \]\x20
, replace with \]
and don't use case-sensitive comparison
-- Create a replace with regular expression action type: set field to SYNCEDLYRICS
, regular expression to \]\x20
, replace with \]
and don't use case-sensitive comparison
-- Create a replace with regular expression action type: set field to SYNCEDLYRICS
, regular expression to (\]\r\n|\]\n)
, replace with \]\x{266A}\n
and don't use case-sensitive comparison
-- Create a replace with regular expression action type: set field to SYNCEDLYRICS
, regular expression to \r
, replace with `` (nothing, blank) and don't use case-sensitive comparison
-- Create a format action type: set field to SYNCEDLYRICS
and format string to $if($strcmp($right(%syncedlyrics%,1),$char(93)),%syncedlyrics%$char(9834),%syncedlyrics%)
-- Create a format action type: set field to SYNCEDLYRICS
and format string to $char(91)ti:%title%$char(93)$char(10)$char(91)ar:%artist%$char(93)$char(10)%syncedlyrics%
-- Create a format action type: set field to LYRICS
and format string to %syncedlyrics%
-- Create a replace with regular expression action type: set field to LYRICS
, regular expression to (\[\d\d\:\d\d.\d\d\]|\[\d\d\:\d\d.\d\d\d])
, replace with `` (nothing, blank) and don't use case-sensitive comparison
-- Create a format action type: set field to UNSYNCEDLYRICS
and format string to %lyrics%
8. Export artist and title for genius and backup year and cover
-- Create an export action type: pick the csv for py script (only artist and title)
we've created and set export filename to titleartistlist.csv
and add behind it the path of the Texts
folder we created before (we want the exported file to be inside the Texts folder)
-- Create a format action type: set field to DEEZER_YEAR
and format string to %year%
-- Create an export cover to file action and in the format string add the path to the Images\Old\%_filename%_Deezer
(from the Images
folder we've created). This will act as a backup of our images. Note that it adds the _Deezer name at the end of each filename, this may cause inaccuracies if we use songs that have images from different sources.
9. Merge, trim, and genius Year
-- Create a merge duplicate fields action type: set field to YEAR
and separator to \\
-- Create a replace action type: set field to GENIUS_YEAR
, original to None
and replace with 00
-- Create a replace with regular expression action type: set field to GENIUS_YEAR
, regular expression to (\d+)-(\d+)-(\d+)
, replace with $1-$if($eql($len($2),1),0$2,$2)-$if($eql($len($3),1),0$3,$3)
and don't use case-sensitive comparison
-- Create a format action type: set field to YEAR
and format string to $if($grtr($len(%year%),10),$cutLeft(%year%,6),%year%)
-- Create a format action type: set field to YEAR
and format string to $if($or($eql($left(%genius_year%,1),0),$and($strstr(%genius_year%,$char(45)00$char(45)00),$and($eql($len(%deezer_year%),10),$leql($if($less($sub($left(%genius_year%,4),$left(%deezer_year%,4)),0),$mul(-1,$sub($left(%genius_year%,4),$left(%deezer_year%,4))),$sub($left(%genius_year%,4),$left(%deezer_year%,4))),1)))),%deezer_year%,%genius_year%)
Genre adding [YT]
-- Create a format action type: set field to GENRE
and format string to $if($eql($strstr($meta_sep(genre,\\),$char(91)YT$char(93)),0),$meta_sep(genre,\\\\)\\\\$char(91)YT$char(93),$meta_sep(genre,\\\\))
Genre adding [Instrument@l]
-- Create a format action type: set field to GENRE
and format string to $if($eql($strstr($meta_sep(genre,\\),$char(91)Instrument$char(64)l$char(93)),0),$meta_sep(genre,\\\\)\\\\$char(91)Instrument$char(64)l$char(93),$meta_sep(genre,\\\\))
Genre adding [Gr33k]
-- Create a format action type: set field to GENRE
and format string to $if($eql($strstr($meta_sep(genre,\\),$char(91)Gr33k$char(93)),0),$meta_sep(genre,\\\\)\\\\$char(91)Gr33k$char(93),$meta_sep(genre,\\\\))
Genre adding [8b@ll]
-- Create a format action type: set field to GENRE
and format string to $if($eql($strstr($meta_sep(genre,\\),$char(91)8B$char(64)ll$char(93)),0),$meta_sep(genre,\\\\)\\\\$char(91)8B$char(64)ll$char(93),$meta_sep(genre,\\\\))
Genre adding [Nitr0]
-- Create a format action type: set field to GENRE
and format string to $if($eql($strstr($meta_sep(genre,\\),$char(91)Nitr0$char(93)),0),$meta_sep(genre,\\\\)\\\\$char(91)Nitr0$char(93),$meta_sep(genre,\\\\))
Genre adding [F@vourites]
-- Create a format action type: set field to GENRE
and format string to $if($eql($strstr($meta_sep(genre,\\),$char(91)F$char(64)vourites$char(93)),0),$meta_sep(genre,\\\\)\\\\$char(91)F$char(64)vourites$char(93),$meta_sep(genre,\\\\))
Remove favourite genre
-- Create a format action type: set field to GENRE
and format string to $if($eql($strstr($meta_sep(genre,\\),$char(91)F$char(64)vourites$char(93)),0),$meta_sep(genre,\\\\),$replace($meta_sep(genre,\\\\),$char(91)F$char(64)vourites$char(93),))
Source to Deezer
-- Create a format action type: set field to SOURCE
and format string to Deezer
wwwaudio to wwwaudiosource (Deezer)
-- Create a format action type: set field to WWWAUDIOSOURCE
and format string to %wwwaudiofile%
Merge and split tags
-- Create a merge duplicate fields action type: set field to ALBUMARTIST
and separator to \\
-- Create a replace action type: set field to ALBUMARTIST
, original to \\
and replace with ;
-- Create a merge duplicate fields action type: set field to ARTIST
and separator to \\
-- Create a replace action type: set field to ARTIST
, original to \\
and replace with ;
-- Create a merge duplicate fields action type: set field to GENRE
and separator to \\
-- Create a replace action type: set field to GENRE
, original to \\
and replace with ;
-- Create a merge duplicate fields action type: set field to PUBLISHER
and separator to \\
-- Create a replace action type: set field to PUBLISHER
, original to \\
and replace with ;
-- Create a merge duplicate fields action type: set field to AUTHOR
and separator to \\
-- Create a replace action type: set field to AUTHOR
, original to \\
and replace with ;
-- Create a merge duplicate fields action type: set field to COMPOSER
and separator to \\
-- Create a replace action type: set field to COMPOSER
, original to \\
and replace with ;
-- Create a merge duplicate fields action type: set field to AUDIO_FEATURES
and separator to \\
-- Create a replace action type: set field to AUDIO_FEATURES
, original to \\
and replace with ;
-- Create a merge duplicate fields action type: set field to LABEL
and separator to \\
-- Create a replace action type: set field to LABEL
, original to \\
and replace with ;
; to double inverted slash
-- Create a replace action type: set field to ARTIST
, original to ;
and replace with \\
-- Create a replace action type: set field to GENRE
, original to ;
and replace with \\
-- Create a replace action type: set field to ALBUMARTIST
, original to ;
and replace with \\
-- Create a replace action type: set field to AUDIO_FEATURES
, original to ;
and replace with \\
-- Create a replace action type: set field to PUBLISHER
, original to ;
and replace with \\
-- Create a replace action type: set field to LABEL
, original to ;
and replace with \\
-- Create a replace action type: set field to COMPOSER
, original to ;
and replace with \\
-- Create a replace action type: set field to AUTHOR
, original to ;
and replace with \\
And these were all the actions we needed!
3) Next we will create our python script that will fetch data from genius:
For this we first need to install the LyricsGenius program from github. Our script will use that program.
I'll just copy paste the code. Name it genius_data_fetcher.py
and saved it in the Texts
folder we've created.
This script takes a titleartistlist.csv
list we create and it creates a geniusdata.txt
file which contains the following items separated by tab: geniusID
, url
, genius song cover url
, genius song cover url
, arists
and title
. It also adds in the begging the date
or at least the year or year-month (if they exist, otherwise their data slots are filled with zeroes). Lastly it adds in the end of each line the artists
and the title
of each song it reads from the list. Currently I have disabled/commented out the part that downloads the images, as it's not much necessary.
Remeber to change the path to match the appropriate folders on your device and use your own Genius token (replace the PlaceholderForYourGeniusToken
)!
code
import csv
import requests
from lyricsgenius import Genius
genius = Genius('PlaceholderForYourGeniusToken', timeout=20, sleep_time=1)
'''
#imports two .txt
#importing title list
with open("title_list.txt",'r', encoding='utf-16') as titles_file:
titlelist = titles_file.read().splitlines()
titles_file.close()
# importing artist list
with open("artist_list.txt",'r', encoding='utf-16') as artist_file:
artistlist = artist_file.read().splitlines()
artist_file.close()
'''
titlelist = []
artistlist = []
with open('C:\\Users\BS\\Downloads\\1T\\Texts\\titleartistlist.csv', mode='r', encoding='utf-16') as csv_file:
csv_reader = csv.DictReader(csv_file, delimiter='\t')
#line_count = 0
for row in csv_reader:
'''if line_count == 0:
#print(f'Column names are {", ".join(row)}')
#print(row["title"])
line_count += 1
#print(f'{row["title"]} ; {row["title"]}')
else:'''
#print(row["artist"])
artistlist.append(row["artist"])
titlelist.append(row["title"])
#line_count += 1
#print(f'Processed {line_count} lines.\n')
array_length = len(artistlist)
#searching genius
with open('C:\\Users\BS\\Downloads\\1T\\Texts\\geniusdata.txt', 'w', encoding='utf-16') as gd:
for i in range(array_length):
SArtist = artistlist[i]
STitle = titlelist[i]
song = genius.search_song(STitle, SArtist)
if song is None:
gd.write('0000-00-00\t0000\t0000\t0000\t0000\t0000') #00 or 0000 as error code
gd.write('\t')
gd.write(SArtist)
gd.write('\t')
gd.write(STitle)
gd.write('\n')
else:
song_dict = song.to_dict()
RDate=song_dict.get('release_date_components')
if RDate is None:
line = ['0000-00-00\t',
str(song_dict.get('id')),'\t',
song_dict.get('url'),'\t',
song_dict.get('song_art_image_url'),'\t',
song_dict.get('artist_names'),'\t',
song_dict.get('title'),'\t',
SArtist,'\t',STitle,'\n']
gd.writelines(line)
#uncomment the next two blocks of code if you want to download the images as well
'''image_url = song_dict.get('song_art_image_url') #downloads image
default_url_check = image_url.find('default_cover_image.png') #checks default image
print(default_url_check)
if default_url_check == -1:
file_destination = ''.join(['C:\\Users\BS\\Downloads\\1T\\Images\\Genius\\',image_url.rsplit('/', 1)[-1]])
res = requests.get(image_url)
if res.status_code == 200: # http 200 means success
with open(file_destination, 'wb') as file_handle: # wb means Write Binary
file_handle.write(res.content)
file_handle.close()
print('Image downloaded')
else:
print('Default image, skip.')'''
else:
line = [str(RDate.get('year')),'-',
str(RDate.get('month')),'-',
str(RDate.get('day')),'\t',
str(song_dict.get('id')),'\t',
song_dict.get('url'),'\t',
song_dict.get('song_art_image_url'),'\t',
song_dict.get('artist_names'),'\t',
song_dict.get('title'),'\t',
SArtist,'\t',STitle,'\n']
'''image_url = song_dict.get('song_art_image_url') #downloads image
default_url_check = image_url.find('default_cover_image') #checks default image
if default_url_check == -1:
file_destination = ''.join(['C:\\Users\BS\\Downloads\\1T\\Images\\Genius\\',image_url.rsplit('/', 1)[-1]])
res = requests.get(image_url)
if res.status_code == 200: # http 200 means success
with open(file_destination, 'wb') as file_handle: # wb means Write Binary
file_handle.write(res.content)
file_handle.close()
print('Image downloaded')
else:
print('Default image, skip.')'''
gd.writelines(line)
gd.close()
print('Finished!!\nGo to:\nC:\\Users\BS\\Downloads\\1T\\Texts\\')
#['_type', 'annotation_count', 'api_path', 'artist_names', 'full_title', 'header_image_thumbnail_url', 'header_image_url', 'id', 'instrumental', 'lyrics_owner_id', 'lyrics_state', 'lyrics_updated_at', 'path', 'pyongs_count', 'relationships_index_url', 'release_date_components', 'release_date_for_display', 'release_date_with_abbreviated_month_for_display', 'song_art_image_thumbnail_url', 'song_art_image_url', 'stats', 'title', 'title_with_featured', 'updated_by_human_at', 'url', 'featured_artists', 'primary_artist', 'artist', 'lyrics']
4) Now that we have our python script, we will create a batch script that will call the python script:
-- Name it GeniusFetcherCall.bat
and save it inside the Texts
folder. It's just 3 lines of code:
cd C:\Users\BS\Downloads\1T\Texts
python genius_data_fetcher.py
PAUSE
5) We will use this batch script to create a tool in Mp3tag:
(It makes it easier to call it without searching for the actual file.)
-- Go to File->Options->Tools->New
-- In the name field put Genius Data Fetcher
and in the path field put the path of your batch script.
We have finished setting up Mp3tag!
Now it's time to actually tag the files:
-
Throw all your downloaded song files in
0 Raw
folder. In case you also downloaded .lrc files, throw the .lrc files in the5 Musixmatch
folder. -
Open OneTagger and run the
1. Deezer
profile. (If the downloaded files aren't downloaded using Deemix, run the1. Deezer - Universal
profile instead.)(!Attention!) Re-run if there are fails/skips. If there are fails again, re-run by enabling the
Force Shazam
option in the advanced tab (shazam seems to stop working after 20 (successfull?) scans, so you'll have to manually cut and paste the failed scaned songs to the1 Deezer
folder. Do this section every time we run a profile and you get failed/skipped songs. Remember to move the files to the appropriate folder. (Here we move them from0 Raw
to1 Deezer
manually, because we have the set profile to only move the successfully tagged files to the next folder. I won't repeat this section in the next steps to avoid repeating myself.Once you're done with scanning, move all songs to the
1 Deezer
folder.Side note: failed songs probably won't have the Deezer ReleaseID and TrackID. You can add them manually (painfull) with the edit tag tab of OneTagger (or with Mp3tag), by searching online Deezer for each song separately.
-
Open Mp3tag.
(!Attention!) You must select the appropriate folder each time you use Mp3tag. This time we must open the
1 Deezer
folder by pasting the path of the folder on the directory field located at the middle-bottom right of the window. We want to edit the newly tagged files each time, so we will change that directory after we focus on a different folder. I think simply opening the folder to where we last moved our files should be good. I want mention every time what Directory we will open.Select all the songs and run the action
1. wwwaudio to wwwaudiosource (Deezer) from Deemix
. If you didn't get the songs using Deemix, then choosewwwaudio to wwwaudiosource (Deezer)
instead. This will copy the deezer url of the songs in theWWWAUDIOSOURCE
tag. -
In OneTagger run the
2. Spotify
profile. (If the downloaded files aren't downloaded using Deemix, run the2. Spotify - Universal
profile instead.)Once you're done with scanning, move all songs to the
3 Musicbrainz
folder. -
Open Mp3tag, select all the songs and run the action
2. wwwaudio to www (Spotify)
. This will copy the spotify url of the songs in theWWW
tag. -
In OneTagger run the
3. Musicbrainz
profile. (If the downloaded files aren't downloaded using Deemix, run the3. Musicbrainz - Universal
profile instead.)Once you're done with scanning, move all songs to the
4 Bandcamp
folder. -
In OneTagger run the
4. Bandcamp
profile.Once you're done with scanning, move all songs to the
5 Musixmatch
folder. -
In OneTagger run the
5. Musixmatch
profile.Once you're done with scanning, move the .lrc files (stored in
4 Bandcamp
folder) to the5 Musixmatch
folder. -
Open Mp3tag and tag/rate any songs you want using actions from 3a. to 3e. Each of those actions writes on two different tags, one for windows media player and one for the general rating tag. As you can see the 1/2/3/4/5 star scale corresponts to 1/64/128/192/255 in wmp rating and to 20/40/60/80/100 in rating.
-
In Mp3tag select all the songs and run the
4. Filename format artist - title [year]( -- [YT])
action. This will change the filename of all the songs by using the following template:Artist1; Artist2 - Title [Year]
(not the date)Each artist is separated by
;
and the action adds the-- [YT]
suffix only if we have added[YT]
as genre in the song, which denotes that we got the song from Youtube.The 4b. action is used just in case we don't want to add the [Year] suffix (yet).
-
In Mp3tag select all the songs and run the
5. Add-Fix [Xstar(s)] genre
action. This action reads theRATING
tag and adds the appropriate star rating in theGENRE
tag. i.e. A song with rating 100 gets[5stars]
in the genre tag. A song with 20 rating gets[1star]
. -
In Mp3tag select all songs and run the
6. Replace hiphoprap and Capitalise Genre
action. This fixes theRap/Hip-Hop
genre (some sources use different name for the same genre, so I replace them to be uniform) and capitalises the 1st letter of each word. -
Now it's time to deal with lyrics. Musixmatch may not find all the lyrics or it may not find synced lyrics (on very rare occassions it may create black .lrc files??). Adding lyrics can be very time consuming. Side note: Mp3tag should change the filename of the .lrc files when you change the filename of the song (.flac, .opus etc.) files.
a) One way is to install and use lrcget to automatically batch download lyrics and then copy the generated .lrc files to the
5 Musixmatch
folder.b) Another way is to use the lrclib website which where lrcget fetches the lyrics. You can fine tune the search by yourself. Then you can copy the result to a text file with the same filename of the song you searched and use the .lrc extension. i.e.
The Script; will.i.am - Hall of Fame [2012].flac
should have aThe Script; will.i.am - Hall of Fame [2012].lrc
lyrics file.c) One last way is to browse Genius website (or any other lyrics website) which has only unsynced lyrics and copy-paste the lyrics to an appropriate .lrc file you will create.
Once you have all the lyrics files together, you'll have to batch edit them.
Open all of the files in Notepad++ (just select them all and drag them inside the window). Turn on the document list from notepad to have a better view of the files in a list. Mp3tag and many music players that support lrc files seem to have some issues with extra linebreakes and the way linebreaks are created. On windows
\r\n
is used for a line break, while linux (and mp3tag/music players seem to prefer)\n
. To fix this open the replace dialogue (ctrl+h) on Notepad++. Enable only theWrap around
,Transparency
andExtended
(search mode) options. In theFind what
field we put the text we want to detect and in theReplace with
we put the text which we want our detected text to be replace with.We will run a series of replacements (follow the order):
a) Replace
]
with]
b) Replace
]\n
with]♪\n
c) Replace
\n\r
with♪
d) Replace
\r\n\r\n
with\r\n♪\r\n
e) Replace
\n\n
with\n♪\n
f) Replace
\r\n
with\r\n♪
This should fix most of the lyrics. Save them all (you can try closing the Notepad++ window and press enter on each confirmation dialogue which will ask to save the file before closing.
After all these, in Mp3tag run the
7. Synced Lyrics from lrc
action. It will copy the contents of the .lrc files in the songs (inside theSYNCEDLYRICS
,LYRICS
andUNSYNCEDLYRICS
tags). TheUNSYNCEDLYRICS
tag will have the timestamps removed.Note: Any songs that don't have an .lrc file will return an error window, just ignore it.
-
In Mp3tag run the
8. Export artist and title for genius and backup year and cover
action. This exports a list containing only the artists and the titles of the songs in a .csv file which will later be used by our python script. It also copies theYEAR
(date) tag in theDEEZER_YEAR
tag. Lastly, it exports the cover images in theImages/Old
folder, while adding the_Deezer
suffix to each file created. -
Time to use the script we made: Select a random song, right-click, go to Tools and select the
Genius Data Fetcher
tool. It will open a cmd window and run the python script. This may take a while. It will start writing thegeniusdata.txt
inside theTexts
folder.It may stop at a random point. If this happens, copy the contents of the
geniusdata.txt
to a separate text file, delete thegeniusdata.txt
and remove any artists-titles the script managed to scan on genius. You want to retain the order of the songs as they are in thetitleartistlist.csv
list, so be careful when you merge the data from interrupted uses of the script (create a geniusdata.txt with the same order of songs as they are on titleartistlist.csv). -
Paste the contents of
geniusdata.txt
inside LibreOffice Calc (or any kind of Excel program), read them as csv and selectTab
as the only delimiter. The script may not have been 100% accurate and it may has mistaken songs for different songs. To fix this, check if the genius artists and title match the last 2 columns which contain the artists and the title we used as input. If there is a mismatch set thedate
of this song to0000-00-00
. This will prevent from wrong info to appear later in theYEAR
tag. -
In Mp3tag select all the songs and right-click->Convert->
Text file-Tag
. In the filename field puth the path of thegeniusdata.txt
. In the format string field put this text:%genius_year% %genius_id% %genius_url% %genius_art_url% %temp%
. This reads the values from the text file we created and pastes them in the appropriate tags of our songs. -
In Mp3tag select all songs and run
9. Merge, trim, and genius Year
action. This tidies up theYEAR
andGENIUS_YEAR
tags (merges any duplicate fields, converts the textNone
to 00 (redundant) and it adds a leading zero to the month and year fields of the genius year). Then it compares theGENIUS_YEAR
andDEEZER_YEAR
. If the Genius_year starts with 0 (meaning that the date is 0000-00-00) or the month and the days are zero (year-00-00) and the deezer_year has more info than the year (meaning if it isn't simply 4 digits without month-day) and the absolute difference of the years between deezer and genius years are less than one year, it will keep the old,DEEZER_YEAR
in theYEAR
field, otherwise theGENIUS_YEAR
is written on theYEAR
field. -
In Mp3tag select all songs and run
4. Filename format artist - title [year]( -- [YT])
action. This updates the year in the filename since it probably changed in the step above (19). -
Use any of the
Genre adding [YT]
,Genre adding [Instrument@l]
,Genre adding [Gr33k]
,Genre adding [8b@ll]
,Genre adding [Nitr0]
,Genre adding [F@vourites]
actions if you deem it necessary. Afterwards run the6. Replace hiphoprap and Capitalise Genre
action just to make sure things are properly capitalised.I decided not to use playlists anymore, but instead to add in the
GENRE
tag, names of playlists or (custom) attributes. This way, if the player supports multiple genres, you ~don't need playlists anymore! You just pick the genre(s) you want. I put my custom Genres in[]
to differentiate them from the rest. You can add more if you know how edit my code in the appropriate actions above. The code I've written checks if the Genre I add already exists in theGENRE
tag (it reads all the genres in the tag by mentioning that the separator is\\
) and if it doesn't, then it adds the new Genre, along with the rest that already existed.[YT]
: songs that I downloaded from Youtube[Instrument@l]
: songs that are purely instrumental[Gr33k]
: songs that are of Greek language (you can do something similar for other languages)[8b@ll]
and[Nitr0]
: names of previous playlists[F@vourites]
: songs that I would otherwise add (or already have added) in my spotify/etc. favourites category -
In Mp3tag select all songs that got donwloaded from Deemix (or Deezer) and run the
Source to Deezer
action. This writes the wordDeezer
in theSOURCE
tag. You can edit this if you want to use it with different sources or simply just ignore this step. -
To make sure the correct separators are used, use the
; to double inverted slash
actions. I have decided to use the double inverted slash\\
as my separator in my .flac files when a tag field has multiple tags (for example theArtist
tag in2Pac; Roniece - Changes [2012].flac
will be2Pac\\Roniece
. Mp3tag interpretes\\
as separator for multiple tags and if you check the extended tags of the song, you'll see theArtist
tag twice). Many music players seem to get along with that, so I kept it. -
Time to convert our songs to .opus (we will also keep the .flac files as well).
(!Attention!) There may be an issue with deleting/editing the .opus files on windows, this can be somewhat fixed by following one of the two soltions provided in the comments here on reddit (web archive link).
To do this we must open and set up fre:ac:
Go to Options->General settings setup:
a) Select
Encoders
tab:-- Select the
Opus Audio Encoder
tab. Configure the encoder and leave everything default apart from Bitrate and file extension. Set the Bitrate to128
and the extension to.opus
. Click OK and go back.b) Select
Output files
tab:-- In the output folder put the path of the
6 Opus
folder we created.-- In the output filenames enable only the
Use <filename> when title info is not available
,Append sequential numbers to otherwise identical filenames
andAllow Unicode characters
. In the Filename pattern field put<filename>
(this prevents fre:ac from creating new folder for each song, as the default behaviour would do).And we're done! Fre:ac is set up.
Go to File->Add->Audio file(s) and add all the .flac files (this could also be done differently). Start the encoding process with the "play" button and wait.
-
Now we must put our songs in the correct folders:
-- Move all the .flac files and the .lrc files in the
Flac
folder we created inside theFinal
folder.-- Move all the .opus files in the
Opus
folder we created inside theFinal
folder.-- Copy-paste all the .lrc files in the
Opus
folder we created inside theFinal
folder. -
Now we will transfer any tags to the .opus files that went missing during the conversion.
-- Open Mp3tag and choose the
Flac
folder path. Make sure songs are sorted alphabetically (from a to z), select all and then copy (ctrl+c).-- In Mp3tag choose the
Opus
folder path. Make sure songs are sorted alphabetically (from a to z), select all and then paste (ctrl+v). -
The last necassary (or not so necassary) step! In Mp3tag choose the
Opus
folder path. Select all songs and run theMerge and split tags
action. This changes the separator from\\
to;
. The reason for that is because the music player on my phone doesn't recognize tag fields with multiple tags. Thus, I have to convert the seperator to;
and this way Mp3tag will merge all multiple tags of the same type into a single tag. Then my music player will separate the tags by recognizing the;
separator.
WE DID IT! Our songs are properly organized and tagged!
As you may have noticed, we didn't use one action. I'll explain what it does:
Remove favourite genre
: Removes the [F@vourites]
genre. It searches if this genre exist and if yes it removes it. The only limitation I managed to find in my code is that if you somehow only have the [F@vourites]
genre multiple times (>1 time) and you have no other genre in the tag field, it won't remove anything. It seems like a very rare case, but this is a bug.
Happy tagging!
Extras:
Music players:
-
For my Windows PC I use Quodlibet. It reads multiple tags very well and scans my .flac collection rather fast.
How to set it up:
-- I have enabled the following plug-ins:
Advanced Prefernces
,Application Information
,Change Language
,ListenBrainz Submission
,Rescan Songs
,Synchronized Lyrics
,Unique Query
,View Lyrics
andWaveform Seek Bar
.-- In layout prefernces I'm using the Small Column layout and in the column content I use a custom set up with 3 genre columns. I'm using the Panned browser.
-- In preferences:
a) Song list tab:
- I've enabled
Jump to playing song automatically
,Always allow sorting
,Sort songs when tags are modified
andTitle includes version
. I've selected theArtist
,Title
,Year
,Genre
andLength
to be visible.
b) Browsers:
- I have disabled
Enable one-click ratings
c) Library:
- In the scan directories I have put the path of the
Flac
directory and have enabledScan library on start
.
d) Tags:
- I have everything disabled: I have disabled
Auto-save tag changes
andSave ratings and play counts in tags
.
Generally, I don't want Quodlibet to alter my tags.
- I've enabled
-
For my Android (13) device I'm using Symphony.
It has support for custom tag separators, but it doesn't read multiple tags. That's the reason why I'm separting tags with multiple items using
;
.It takes a long while to initially load the files when you first add the folder, but once it does it is very fast. It has many features, probably the most you can find on an open source android local music player. Plus, it's beauuuutiful.
Music scrobblers/listen history recorders:
I use ListenBrainz on my devices to record my listen history. I have integated my Spotify account too (I just have to find a way to import my whole Spotify listening history with the proper tools). I have installed it on my android device and I added my music players to the list of apps to watch and record. On pc I have the built-in listenbrainz plugin enabled in Quodlibet. One issue or feature (depending on how you see it) with this platform is that it makes publicly available your listening history with detailed timestamps (date and time with minute resolution). That's why I am using a kinda random nickname. This helps you find people with similar tastes.
This is the end of the guide! I hope it helped you somehow or gave you any ideas for your workflow!
🏴☠️ AHOY fellow pirates and welcome to the state of global piracy for May 2024! ARRR! 🏴☠️
Please let me know if you have ideas about interesting stats, I'll see if I can make it happen.
Enjoy the numbers!
TOTAL SCENE RELEASES BY SECTION
I have a total of 77 sections in my PreDB. The sections in here are combined/simplified for a better overview. Numbers in braces are the values from the previous month.
total (prev/change) | section |
---|---|
16.982 (19.710 / -14%) | TV (HD) |
16.435 (12.849 / 28%) | MP3 |
5.735 (5.773 / -0.7%) | XXX |
5.269 (4.683 / 13%) | FLAC |
3.501 (3.133 / 12%) | EBOOK |
2.165 (2.895 / -25%) | MOViES (HD) |
1.290 (1.357 / -5%) | DOCU |
1.141 (1.726 / -34%) | ANiME |
1.016 (2.475 / -59%) | TV (SD) |
742 (1.482 / -50%) | SPORTS |
562 (596 / -6%) | GAMES (PC) |
525 (710 / -26%) | APPS |
422 (426 / -0.9%) | GAMES (CONSOLE) |
377 (580 / -35%) | MOViES (SD) |
203 (165 / 23%) | BOOKWARE |
187 (280 / -33%) | MViD |
82 (43 / 91%) | ABOOK |
7 (7 / 0.0%) | OTHER |
Total: 56.641 (58.878)
TOP 20 GROUPS WITH MOST RELEASES
The sections in here are combined/simplified for a better overview, same as above.
Pos. | Total (prev/change) | Pos. change | Group | Section |
---|---|---|---|---|
1. | 2.705 (2.516 / +8%) | ↑ +1 | WRB | XXX |
2. | 2.697 (2.542 / +6%) | ↓ -1 | PTC | FLAC,MP3 |
3. | 2.693 (2.210 / +22%) | ~ | AFO | FLAC,MP3 |
4. | 2.428 (621 / +291%) | ↑ +16 | BABAS | FLAC,MP3 |
5. | 1.322 (1.773 / -25%) | ~ | NEUROSiS | MOViES (HD),TV (HD) |
6. | 1.319 (1.078 / +22%) | ↑ +4 | AMB3R | MOViES (HD),TV (HD),TV (SD) |
7. | 1.210 (1.792 / -32%) | ↓ -3 | LEWD | XXX |
8. | 1.144 (571 / +100%) | ↑ +15 | OBZEN | FLAC |
9. | 1.092 (1.206 / -9%) | ↓ -1 | EDITH | MOViES (HD),SPORTS,TV (HD) |
10. | 1.068 (964 / +11%) | ↑ +1 | ZzZz | MP3 |
11. | 970 (201 / +383%) | ↑ +59 | XTC_iNT | MP3 |
12. | 946 (827 / +14%) | ↑ +2 | 21A1 | EBOOK |
13. | 941 (1.323 / -29%) | ↓ -7 | FLAME | MOViES (HD),MOViES (SD),TV (HD),TV (SD) |
14. | 932 (424 / +120%) | ↑ +22 | Narcos | XXX |
15. | 881 (1.146 / -23%) | ↓ -6 | CBFM | MOViES (HD),TV (HD) |
16. | 817 (0) | ↑ + New | AZR | DOCU,MOViES (HD),TV (HD) |
17. | 782 (644 / +21%) | ↑ +2 | CTO | EBOOK |
18. | 738 (750 / -2%) | ↓ -2 | RAGEMP3 | MP3 |
19. | 709 (569 / +25%) | ↑ +5 | ENRiCH | FLAC,MP3 |
20. | 671 (468 / +43%) | ↑ +10 | FiH | MP3 |
TOP 20 MOST NUKED GROUPS
nuked (total/percentage) | group |
---|---|
28 (2.693 / 1%) | AFO |
10 (340 / 3%) | TRIPEL |
8 (122 / 7%) | HiggsBoson |
7 (149 / 5%) | RiLE |
7 (18 / 39%) | DrMARIO |
6 (18 / 33%) | NewDoctorWhoDis |
5 (1.319 / 0.4%) | AMB3R |
5 (462 / 1%) | BitBook |
4 (49 / 8%) | ESG |
3 (110 / 3%) | COS |
3 (1.144 / 0.3%) | OBZEN |
3 (12 / 25%) | AGROMASH |
3 (2.428 / 0.1%) | BABAS |
3 (16 / 19%) | COOLHD |
3 (200 / 2%) | XTC |
3 (56 / 5%) | UPRiSiNG |
2 (34 / 6%) | DETAiLS |
2 (31 / 6%) | OLDTiME |
2 (11 / 18%) | XME |
2 (27 / 7%) | GUACAMOLE |
MOST NUKED SECTIONS
The sections in here are combined/simplified for a better overview, same as above.
total | section |
---|---|
42 | MP3 |
38 | TV (HD) |
25 | MOViES (HD) |
12 | FLAC |
8 | APPS |
5 | MOViES (SD) |
5 | EBOOK |
2 | GAMES (PC) |
2 | TV (SD) |
ACCUMULATED RELEASE SIZE FOR MAY 2024
From the 56.641 scene releases, only 41.286 of them had file + size information.
They total to: 61.35 TB (64.335.146 MB) in 726 thousand files (726.261).
No idea about the size of the missing information, so the real value should be much higher.
ARCHIVES
NOTES
- Only Scene Release Groups, no p2p or individuals.
- Powered by predb.net
Mostly asking because I've never used these before due to never needing to. That, and I have a few old disc based PC games that I'd love to be able to straight up boot without the game disc. These are games I could just pirate, but I figure I already own them in disc, so I'd rather see if there are any reputable places with no-disc patches. The places I've looked in the megathread don't have what I'm looking for.
Closest they have is either a link to the game on another platform in the case of My Abandonware due to it being sold, or a link to just straight up pirate the full thing in the case of Magipack Games. I've also done some digging on the Internet Archive but have yet to yield results (probably because I suck at finding things there). Still gonna keep looking there, but any helpful info would be much appreciated.
I don't think I can share the game names, even in DM, due to the rules here, so site mainpages are my best shot.
The original icons are these:
- Copyright: https://www.svgrepo.com/svg/102010/copyright-symbol
- Bone: https://www.svgrepo.com/svg/506122/bone
The copyright logo is CC0 licensed (public domain), but the original bone has a CC attribution license, so i thought might as well link the copyright logo as well. Surely this is the kind of attention they had hoped for lol.
While I'm at it (not that it matters much here on the high seas), this work shall hereby be CC0 (public domain) licensed as well.
I managed to get Photoshop CS6 installed on Lutris, using the script on their site. The problem is however, that whenever I open a file (doesn't matter if it is jpg, png, psd, etc.) the screen remains black. I can see the picture in the Layer thumbnail, but not in the main work-area. Does anyone know what the problem might be? (Also, sorry if this is the wrong place to ask).
Just wondering what a rough split is of people using either Usenet, torrents, or both?
I've only just discovered Usenet and while it is paid, it is very cheap and much more convenient than torrents.
Using torrents as well with the *arr suite set up for my various Linux ISOs.
A question here recently brought up memories of listening to this song growing up. Long since lost my copy and had to hear it again. Figured some here might get a trip out it.
TL;DR: for a whole decade YouTube allowed a copyright troll to claim all the rights on a recording of a washing machine end cycle chime
The account of the copyright troll is still standing and it's not permanently banned
IMHO in this case YouTube should permanently ban at the first offense any copyright troll that maliciously claim as their property something that's in the public domain
Also: if it wasn't that it affected a big streamer with lots of followers, YouTube would have ignored the problem
So basically I want to download an album that is only on Apple Music onto my Android Device to listen offline
Is this possible?
cross-posted from: https://lemmy.dbzer0.com/post/21328454
PGSub - A Giant Archive of Subtitles For Everyone
I've been working on this subtitle archive project for some time. It is a Postgres database along with a CLI and API application allowing you to easily extract the subs you want. It is primarily intended for encoders or people with large libraries, but anyone can use it!
PGSub is composed from three dumps:
- opensubtitles.org.Actually.Open.Edition.2022.07.25
- Subscene V2 (prior to shutdown)
- Gnome's Hut of Subs (as of 2024-04)
As such, it is a good resource for films and series up to around 2022.
Some stats (copied from README):
- Out of 9,503,730 files originally obtained from dumps, 9,500,355 (99.96%) were inserted into the database.
- Out of the 9,500,355 inserted, 8,389,369 (88.31%) are matched with a film or series.
- There are 154,737 unique films or series represented, though note the lines get a bit hazy when considering TV movies, specials, and so forth. 133,780 are films, 20,957 are series.
- 93 languages are represented, with a special '00' language indicating a .mks file with multiple languages present.
- 55% of matched items have a FPS value present.
Once imported, the recommended way to access it is via the CLI application. The CLI and API can be compiled on Windows and Linux (and maybe Mac), and there also pre-built binaries available.
The database dump is distributed via torrent (if it doesn't work for you, let me know), which you can find in the repo. It is ~243 GiB compressed, and uses a little under 300 GiB of table space once imported.
For a limited time I will devote some resources to bug-fixing the applications, or perhaps adding some small QoL improvements. But, of course, you can always fork them or make or own if they don't suit you.
Hi Everyone,
Apologies if this isn't the right place for this. I have been trying to run DQX Offline (Switch) on Suyu for Android on an Ayn Odin 2 (Pro). Using the English Patch. After about 3 days of tinkering I finally got it to work and wanted to share how.
I had many issues getting the game to start, getting it load, to render anything at all, and then getting it to render properly. It's all been harrowing, I wanted to document this process for anyone else with the same trials and tribulations I have been facing the past few days. Please note there is more tweaking and adjusting to be done, and this may not all be mandatory. However these are the settings I was using when I got the game to a playable state.
-Download the Latest version of Suyu (Build: 0de49070e4-relWithDebInfo)
-Download Switch Firmware 18.0.0
-Download GPU Driver Turnip-24.2.0_weav-chan_R19_Experimental
-Download the Game, Patch 2.01, The English Patch, and All the DLCs
-Download the English patch
Install all of the above (For those unaware, GPU Driver is from Suyu's main menu, Firmware is from Manage Suyu data.)
Go to Advanced settings:
System:
-Docked Mode: off
-Emulated Region: Japan
Graphics:
-Accuracy Level: High
-Vsync mode: Immediate
-Use asynchronous shaders: On
Debug:
-CPU Backend: Dynamic
Edit: NCE works fine and has better FPS.
Using all of the above I got the game to launch playable.
Here are some images of the various issues I had while testing:
World Rendering only in white
Nothing Rendering at all (Flashing)
World Rendering with Artifacts
All shading wrong - Pink mostly
World rendering in Sepia
And the final working image
I recently set up Sonarr and Radarr on my home server and I'm loving it.
However, I don't get why you would ever use Lidarr. Why would you ever download music using torrents? You can use tools like spotdl
and yt-dlp
to download songs from YouTube music and Spotify, it's faster and more reliable; I have had some issues finding torrents of music from less-known artists.
To me it seems like it would be much better to have a tool like Lidarr or have support in Jellyseerr to download music from common streaming services.
What are your views on this?
These groups do most mainstream shows with similar settings so when should you choose one over the other?
I am having issues it keeps saying internal server error did the fuzz get them ? edt: also why isn't it in the megeathread ( if it is not being in the process of being nuked right now it is much better than most sites there)
Torrents • Uploaded: 2,627 • Uploaded today: 78 • Seeders: 4,230 • Leechers: 9 • Peers: 4,239 • Views: 299 • Downloads: 15737 • Comments: 217 Members • Registered: 6,489 • New today: 5 • Warned: 0 • Disabled: 56 • Messages: 12,778
LunaSea, the open source Usenet monitoring app is pronounced dead for the most part. The developer via a Reddit thread said this:
tl;dr: development focus has shifted to a successor to LunaSea and is slowly being worked on. No timelines at this time, as I’m working on it when I have the drive to spend time on it. LunaSea is in maintenance mode and won’t be receiving any updates unless there is a major breaking issue discovered due to one of the supported modules having a breaking change.
LunaSea was started over 5 years ago and in truth has a really poor code base. Mix of inexperience at the time with good design patterns alongside rapid feature releases has grown LunaSea to a point of being a huge time investment to make any major changes to the project.
- Mix that in with a few other things, I have lost a lot of interest in working on LunaSea. Some things include:
- A tale as old as time in the industry: major burnout. This has triggered me to spend a lot more time investing in hobbies outside of coding and my computer in general
- Getting married late last year and spending more personal time with my wife
- Planning a cross-country move later this year and preparing for that
- Taking up a higher seniority position in my professional career (also as a software engineer) which has me committing more time to my career
You also pointed out a really good fact, LunaSea does not really have any income. As it is now, donations are about equal to the infrastructure cost for maintaining LunaSea. Between donations on all the different platforms and Ko-Fi, I average approximately $40-$50/month.
It’s increasingly difficult to want to invest a lot of time into something that isn’t really garnering any financial gains. I would probably estimate at least 3,000 hours have been spent working on LunaSea, and while I am a huge proponent of open-source and free applications, and I don’t regret making LunaSea FOSS, I do wish that I had more financial gains to show for how much time was invested working on the project over the years.
All that being said, I’ve slowly been chipping away at working on a successor to LunaSea. LunaSea is no longer being worked on but I will publish a fix for any major breaking bugs if they occur. As it is now, LunaSea does have minor non-breaking bugs but is in a state where all intended functionality works, so there is no need for any updates.
The successor will remain fully open-source, but will charge for the client application when installed from a monetization-supported platform (such as the App Store, Play Store, etc.). However, free copies of the binaries (IPAs, APKs, etc.) will always be available officially.
This will be a complete rewrite that shifts to a server-client approach where the user would install/run (via Docker) a server component and the client application connects only to that. It allows me to start fresh away from all of the technical debt while having a much improved experience across the board.
However, I’ll admit I’m not overly focused on this either. I work on it when I want to, and I’m not putting any pressure on myself to meet any timelines or release in any timeframe. I really love software engineering and want to avoid burning out again.
I made the mistake of giving general timelines before regarding this project and have missed them all, so at this point I can only say it will be ready when it’s ready. Progress is still being made (albeit admittedly slowly), and I will remain monitoring feedback and giving support for LunaSea when I can.
Back when we would record onto VHS, is that considered piracy? Found a super bowl XXXI tape from my Uncle circa 1997. I'm curious lol.
Also side note, have any of you dabbled in digitizing old VHS? Have quite a few home videos on VHS and I'm wanting to preserve them for the future. I've done a bit of research and have come across a wide array of information. I know that doesn't really qualify as piracy, if there's a better comm for this, please direct me there!
I have been using this config for qBittorrent for awhile and been working for the most part. Sometimes it gets "connection status: Firewalled" I would fix this by going to settings -> connection and click the "Random" button a couple times and save and then it would work again. This seems to not work anymore. Is there a better fix for this? Back before I used docker I don't remember ever having to do this. I have never done any kind of manual port forwarding my current VPN provider does not do that at the price I have it for right now. Let me know if you need more information about my setup or something
Thanks I guess it is just randomly breaks for now since it appears to be back.
Current Config file (minus the keys and stuff)
services:
gluetun:
image: qmcgaw/gluetun:latest
cap_add:
- NET_ADMIN
environment:
- VPN_SERVICE_PROVIDER=windscribe
- VPN_TYPE=wireguard
- WIREGUARD_PRIVATE_KEY=
- WIREGUARD_ADDRESSES=
- VPN_ENDPOINT_PORT=
- WIREGUARD_PRESHARED_KEY=
- SERVER_REGIONS=
ports:
- 8080:8080
- 6881:6881
- 6881:6881/udp
restart: always
qbittorrent:
container_name: qbittorrent
image: lscr.io/linuxserver/qbittorrent:latest
network_mode: "service:gluetun"
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- WEBUI_PORT=8080
volumes:
- /home/blxter/server/qbittorrent/config:/config
- /home/blxter/raid/media/torrents:/torrents
restart: unless-stopped
depends_on:
gluetun:
condition: service_healthy
If you cannot pass on your ownership rights to your purchased games to your children, then you cannot pass on your copyright either, I guess?
Looking for more modern high quality files for a QRS player piano system. New to this, but it seems like midi files are the most likely to find since specialty qrs / player piano file formats seem nearly nonexistent on the internet. Having a hard time finding copyrighted more modern (most available internet midi files for piano are from 1800s) song libraries of decent quality. Can anyone here point me in the right direction?