The name was chosen like such: "spotify" => "despotifier" => "despot". It symbolizes the main author's personal despise for spotify.
- Library issue detection
- Missing metadata
- Different tags in one folder
- Different extension tracks in one folder
It can allocate a significant amount of RAM if you have a large collection. (~0.5GiB for my ~1.6TiB collection)
- outdated RAM usage info
root str //path to library root directory
update_time float //last time the DB was updated
statistics: { //precomputed statistical data
max_track_peak: float //maximum value of compensated peak for track_gain
max_album_peak: float //maximum value of compensated peak for album_gain
total_length: float //combined playtime for all tracks
track_counts: {
total: int
clipping: int //tracks that have peaks exceeding 1.0
uploaded_orig: int
uploaded_opus: int
extension: {
flac: int
mp3: int
****: int
}
depth: {
16: int
24: int
**: int
}
rate: {
44100: int
48000: int
*****: int
}
lacking_metadata: {
critical: int
wanted: int
},
artwork: {
embedded: int
external: int
both: int
# any: embedded+external-both
}
}
}
last_uploaded_track: { //path to last uploaded tracks
original: str
opus: str
}
releases: {
*path_N*: { //path relative to DB root
tracks: {
*filename_N*: {
mtime: float //seconds since epoch to find modified files and directories
tags: {}
length: float //length (seconds)
samples: int //length (samples)
depth: int //bit depth
rate: int //sampling rate
link_orig: str //link to message in lossless channel
link_opus: str //link to message in opus channel
}
}
files: {
*filename_N*: {
mtime: float //seconds since epoch to find modified files and directories
link_orig: str //link to message in lossless channel
link_opus: str //link to message in opus channel
}
}
images: {
*filename_N*: {
mtime: float //seconds since epoch to find modified files and directories
link_orig: str //link to message in lossless channel
link_opus: str //link to message in opus channel
}
}
link_orig: str //link to message in lossless channel
link_opus: str //link to message in opus channel
}
}
It was decided to replace recursive tree with a release-based storage This has several benefits:
- get rid of recursion (more predictability, no need to transfer lots of data through recursion)
- higher performance
- lower memory consumption
- smaller database size
- simpler database updates
- add telegram-formatted link insertion in tracklist generated by
format_release_string
- get the target loudness that fits at least 95% of my music, but ideally >99.9%
- finish the library scanner functionality and use python json
- sort tracks by loudness, find average for info, test -18 and -23 targets
- finish the library scanner functionality and use python json