Giter Site home page Giter Site logo

marekkon5 / onetagger Goto Github PK

View Code? Open in Web Editor NEW
517.0 517.0 27.0 16.74 MB

Music tagger for Windows, MacOS and Linux with Beatport, Discogs, Musicbrainz, Spotify, Traxsource and many other platforms support.

Home Page: https://onetagger.github.io/

License: GNU General Public License v3.0

HTML 0.06% Vue 35.96% SCSS 0.52% Rust 54.82% NSIS 0.44% TypeScript 8.00% Python 0.19%
dj music music-tagger music-tagging rust

onetagger's People

Contributors

harmon758 avatar marekkon5 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

onetagger's Issues

Error while installing dependencies on macOS

Good morning!

I'm trying to compile a version with some changes I've made myself (to try/test adding Spotify too + iTunes Search API (public, limited to 20 queries/minute aprox)), but I'm not being successful to compile it, not even the base version with no modifications/add-ons.

I've already installed rustup, and I had node previously installed. However, when trying to install the dependencies, I get the following message:
The operation couldn’t be completed. Unable to locate a Java Runtime that supports apt.
Please visit http://www.java.com for information on installing Java.

I've already installed latest Java's version as per the instructions but no success at all, still same message. Any ideas?
I'm currently using a Mac Mini M1 with macOS Big Sur 11.5.2.

Of course, trying to build the mac version without dependencies returns an error.

Add "(.stem).mp4" support

Currently all "(.stem).mp4" files are skipped. Maybe it's just a small problem as ".m4s"/".aac" files work without problem.

feature request: filter results

I am unsure how complex this feature would be, but I just ran an auto tag run on a folder with around 600 tracks. Now there are 86 failed tracks and 2 skipped ones. To see which have failed and which have been skipped, I have to scroll through the list and check the icons for the state "manually". It would greatly improve user experience if it would be possible to just press the failed/skipped button on top to filter the list.

Not writing/over writing Album Art

Hi.

Firstly, best tagger ever developed! Been using it since the original Discogs Tagger.

Just started using the new OneTagger, and it's successful updating the normal ID3 tags from Discogs, ie artist, title, album etc, but it's not updating the Album Art.

I'm using the latest version on Windows 10, if I search a few songs on Discogs that it's already found and tagged the ID3 tags, I find it straight away, and Album Art is available.

This is a big issue, as Album Art is really important for a clean collection.

Please help?

Thanks

Darren

Audio Features - Limit?

First of all. I like the app very much. It is now part of my workflow for managing my DJ Library.
Good job.

For some reason Audio Features stop having "successfull' tags after 500 files.
I had to split my collection in batches of 400 files to achieve the audio features tag.

Discogs API Limit? Change timing

Hi.

I'm re-running my library of 3500 tracks through onetagger to add all the additional tags such as URL, Catalog number etc.

It gets to about 150-200 tracks in, and starts to fail. When I check https://api.discogs.com/database/search, I get the 'You're making too many requests' response.

Is there a way to limit the speed at which OneTagger hits the Discogs API, to stop this happening?

Thanks

Catalog Number

Is it possible to copy the "CATALOG" value from Beatport into the tag using OneTagger? Thank you!

Docker ?

simple question here, is a port to Docker possible? This in order to be able to use Onetagger on for example a dedicated server ...

Spacebar will not always play/stop, but press the last button

  • Be in Quick Tag view
  • Have songs loaded in
  • With the mouse click on setting gear icon or "browse folder to load"
  • close the settings menu again
  • Press spacebar to play / stop the currently selected song

Observe:

  • Settings menu opens again

Expected:

  • song plays / stops

Beatport Genre Tagging not working

I try to update the genre tag for my mp3 files with the help of Beatport.
OneTagger fails to find any of my tracks, although they are either bought at beatport or itunes.
I tried setting Strictness to 0%. Still no results
image

Anything I can do to debug this further?

Dragging folder into folder field

It would be nice to be able to drag folders into the app instead of navigating to it. This would speed up the workflow tremendously. Now it opens the folder in the view, making the app's UI disappear.

No album art + No remixer name + No release date

After the auto tagging gets completed -

  1. There's no album art. Even after checking the album art tag, setting the resolution to 500 and turning off "Save album to art file".

  2. The names of remixers of the track (if any) get removed from the track title.

  3. The release date tags are not there as well.

iTunes + Spotify API & some other suggestions

Hello and congratulations for your amazing work!

Inspired by the BeatportTagger project, I started my own tagger earlier this year, because I wanted to create a similar project which would allow me to get metadata from Spotify/AppleMusic (iTunes) too. Unfortunately, I had to focus on other things and stopped the project, but I implemented a few things which could be easily ported to this OneTagger version. I currently don't have time to get involved in this project, but i'll definitively do in the future since I find it a very useful and necessary tool for DJs! Anyway, here are a couple of suggestions:

  1. Ability to choose wether to overwrite each specific field/tag.

To overwrite all tags may not always be a feasable option. Imagine you only want to overwrite the Genre Tag but also want to fill the missing release dates. Right now you need to do the process 2 times, which is rather uneffecitve. I can add a screenshot of how I had it done (in terms of UI), but I believe it would be a good approach to let users chose if they want to overwrite all fields, or just some of them.

  1. Search engine

I modified the search engine algorithm to have some even better results (haven't checked the current algorithm/code yet):

The idea was to get, on one hand, the "clean" title + (re)mix, and on the other hand, the artist + remixer + featurers, in order to use all this info in a better way, rather than using the Title/Artist in a generic way. To get all that info, I would try to read it from the tags themselves, using regex expressions to get them from the title/artist fields of the local & server files/tracks.

You'll find the functions in the "helper.py" file inside the attached ZIP file. Here's my suggested Search engine, which you'll also be able to find inside the itunes/spotify/beatport.py files.

API Tagger.zip

        # Start match process
        for track in results:
            # Create track object for each result
            track = Track(result)

            # Title match
            if fuzz.ratio(metadata.title, track.title) >= fuzzywuzzy_ratio:
                # Duration match
                if abs(metadata.duration - track.duration) <= timeTolerance:
                    # Artists match
                    if fuzz.ratio(metadata.artists, track.artists) >= fuzzywuzzy_ratio:
                        return track
                    # Main artists + featurers match
                    elif fuzz.token_sort_ratio(', '.join(metadata.mainArtists), ', '.join(track.mainArtists)) >= fuzzywuzzy_ratio and fuzz.token_sort_ratio(', '.join(metadata.featuringArtists), ', '.join(track.featuringArtists)) >= fuzzywuzzy_ratio:
                        return track
                    # Main artists + remixer match
                    elif fuzz.token_sort_ratio(', '.join(metadata.mainArtists), ', '.join(track.mainArtists)) >= fuzzywuzzy_ratio and fuzz.token_sort_ratio(metadata.remixer, track.remixer) >= fuzzywuzzy_ratio:
                        # Duration match
                        if abs(metadata.duration - track.duration) <= timeTolerance:
                            return track
                    else:
                        continue

            # Name match
            elif fuzz.ratio(metadata.name, track.name) >= fuzzywuzzy_ratio:
                # Mix match
                if fuzz.ratio(metadata.mix, track.mix) >= fuzzywuzzy_ratio or (metadata.mix == '' and track.mix == 'Original Mix'):
                    # Duration match
                    if abs(metadata.duration - track.duration) <= timeTolerance:
                        # Artists match
                        if fuzz.ratio(metadata.artists, track.artists) >= fuzzywuzzy_ratio:
                            return track
                        # Main artists + featurers match
                        if fuzz.token_sort_ratio(', '.join(metadata.mainArtists), ', '.join(track.mainArtists)) >= fuzzywuzzy_ratio and fuzz.token_sort_ratio(', '.join(metadata.featuringArtists), ', '.join(track.featuringArtists)) >= fuzzywuzzy_ratio:
                            return track
                        # Main artists + remixer match
                        elif fuzz.token_sort_ratio(', '.join(metadata.mainArtists), ', '.join(track.mainArtists)) >= fuzzywuzzy_ratio and fuzz.token_sort_ratio(metadata.remixer, track.remixer) >= fuzzywuzzy_ratio:
                            return track
                        else:
                            continue

                # Original/API track doesn't have mix info
                elif metadata.mix == '' or track.mix == '':
                    # Duration match
                    if abs(metadata.duration - track.duration) <= timeTolerance:
                        # Artists match
                        if fuzz.ratio(metadata.artists, track.artists) >= fuzzywuzzy_ratio:
                            return track
                        # Main artists + featurers match
                        if fuzz.token_sort_ratio(', '.join(metadata.mainArtists), ', '.join(track.mainArtists)) >= fuzzywuzzy_ratio and fuzz.token_sort_ratio(', '.join(metadata.featuringArtists), ', '.join(track.featuringArtists)) >= fuzzywuzzy_ratio:
                            return track
                        # Main artists + remixer match
                        elif fuzz.token_sort_ratio(', '.join(metadata.mainArtists), ', '.join(track.mainArtists)) >= fuzzywuzzy_ratio and fuzz.token_sort_ratio(metadata.remixer, track.remixer) >= fuzzywuzzy_ratio:
                            return track
                        else:
                            continue
  1. Explicit Spotify support + iTunes API

I'd love to fetch some data from the Spotify API or the "free" iTunes API (limits the number of request/time, just as discogs I believe). Feel free to check my spotify.py/itunes.py code :)

Finally, in the future, I'd love to see the app using OAuth in order to use properly Beatport's API + other APIs (such as Spotify API/AppleMusic/Tidal or other APIs). And also, as a Traktor user, I'd love to read and modify the collection.nml to fill the Mix/Remixer field... I believe that this would make the app an even more DJ focused app for tag editing! And using the functions above to extract all that, we could definitively make it work!

DIfference between Failed and Skipped

I'm trying to understand the numbers when Auto Tag finishes. It seems that the same files being recounted everytime it has failed/is skipped. Most importantly what do these status' mean and what is happening under the hood?

Thanks in advance.

Nested folder support for quick tagging

My music library isn't flat; the top layer is a list of artist folders, and in each of those folders, there are album folders, and in those folders live all my songs.

Quick tagging doesn't seem to support non-flat folder structures, which renders the functionality somewhat moot, since I have hundreds of artist folders, and hundreds of albums, and having to select each album folder for each artist manually makes it, well, not at all quick.

Is there a way to have onetagger search nested folder structures when using the quick tag feature?

Request: Add option to treat Discogs "Style" as custom tag when auto-tagging

Context: Auto tagging with Discogs.
For electronic music, Discogs' main genre is Electronic which isn't of much use. On Discogs, the release's Style has more relevant sub-genre information.

Currently when auto-tagging, Discogs' "Style" is read and One Tagger creates a custom id3v2.4.0. tag called "STYLE" and places the data there (for eg. House, Breakbeat). However, this "Style" tag is not read by Rekordbox (or other major platforms AFAIK).

Request: When auto-tagging, allow users to treat Discogs Style as a custom tag and write the data in comments (COMM)

Pulling specific beatport track metadata

Is there any way to pull specific track metadata because I keep getting the wrong release? Maybe some feature like we put in link in the song's file beforehand so that the tagger can pull the data from the link.

Saved metadata:
https://www.beatport.com/track/wanna-play/12409354

Correct release:
https://www.beatport.com/track/wanna-play/14201221

Also, the track length mismatch.

Song:
https://mega.nz/file/woZlxI7I#ifCf7QQtdJx0yS9XFKfe6_gMT7lHlMvSaerAOyNoiTU

Thanks in advance.

onetagger.log

Option to recurse subdirectories when finding files to tag

I want to tag my library but, since file locations are managed by iTunes, every track is stored in a directory structure like so:

iTunes Media/Artist/Album/Track

Therefore if I want to auto tag or quick tag I have to change directories for almost every single track, which is unmanageable. Could you perhaps add an option to recurse down the directory tree to find all files under a starting directory?

OneTagger - Catalog Number

hi,

when i get the tags from beatport it grab the catalog number but it display it only in OneTagger when i use for example Tag & Rename the catalog tag is empty.

your software is a very good alternative to beatport pro. Great Work.

Capture d’écran 2021-08-01 à 21 50 19

feature request: tagged date (if tagging was successful)

Would it be possible to add a 1t_taggeddate tag with the date when the tagging was done (if the tagging was successful)? Or split it to an additional tag like 1t_matched with true/false value.

p.s. thank you for your extreme fast responses and the help you are giving to the whole digital dj community.

Quick Tag does not load any file.

Hi, latest masters are not loading any file for quick tagging although i am setting the path to a folder through the settings.
Edit tags function is working correctly.

Spotify Client Secret input does not focus properly with mouse on Mac

All of this is on MacOS 11.5.2.

Keyboard input on the Client Secret input works properly when it is focused with the tab key:

image

... but not when it is focused with the mouse:

image

This behavior is extra annoying because:

  • the app does not save this field across runs (another bug? or intended?),
  • the app does not accept paste into this field via the cmd-V keyboard shortcut, and
  • this behavior blocks paste via mouse right click

... and so as a result I have to retype my Spotify client secret by hand each time I open the app. On top of that, backspace does not work in this field either, so if I make a single mistake I have to tab-focus the field again, delete all of its contents, and restart from scratch.

Please add post-process.sh "$processed_file_full_path" script execution

Hi

It would be nice to add script execution after post processing scrapping.
Let's say i winna run keyfinder-cli, find chamelot key, rename file, and return new name in place of the old one...
FYI:

#/bin/sh

RETVAL=1

___input_file="$@"

keycode=$(keyfinder-cli -n chamelot "${___input_file}" 2>/dev/null)
RETVAL=$?

if [ $RETVAL -eq 0 ]; then
    ___output_file="$keycode - ${___input_file}"
    # todo - check if ${___input_file} file has no lock and can be renamed
    mv -f "${___input_file}" "${___output_file}" 2>/dev/null 1>/dev/null

    # output new filename in place of the old one to swap in the program
    echo "${___output_file}"
    exit 0
else
    # throw error, and do nothing...
    echo Cannot detect chamelot keycode
    exit 1
fi

Audio Features tagging should escape "(Origina Mix)"

Hi, when the title of a track contains (Original Mix) onettager is not able to find it in Spotify.
This is probably happening because Spotify does not use the (Original Mix) as a description in the titles.

Screenshot 2021-05-20 164229

Quick Tag doesn't prompt to save on exit, potential data loss

Quick Tag only prompts to save a file if you select another track without hitting CTRL+S first. This leads to a bug where you can exit the program without saving the last track that you quick tagged and you lose your changes.

To reproduce:

  1. Quick tag mode.
  2. Tag a file then press arrow down, you are prompted to save.
  3. Tag another file, now don't save or change selected track, instead exit the program.
  4. OneTagger exits and changes to the last file are lost.

As an aside, I find the save prompt kind of redundant and would prefer if it just saved files without prompting me.

Not matching album on discog

Running linux 1.1.0 version and finding it just skips albums even with a 5% strictness. It would be good to add some CLI flags for linux. ie.
--debug
--verbose
and path import would be great too, eg. ./onetagger /music/my_album to auto-populate with that path

Music folder location does not get saved

Unless you switch away from the Quick Tag tab, the settings don't get applied.

  • delete your settings.json
  • open the application
  • switch to quick tag tab
  • select your music folder, do you thing with tagging :)
  • close the application
  • open the application

Observe:

  • You have to find your music folder again

Expected:

  • Setting should be saved after you select your music folder.

Workaround:

  • select your folder
  • switch to another tab

Traxsource tagging not working

Hi,

Tested on library of 3000 flac tracks and did not find 1 successful traxsource match. All artists and titles are complete.
Did extensive testing on a single track which i know is on traxsource: (0% strictness)
Johnny Corporate, Choco - Sunday Shoutin' (B Boys Shouting Dub)
This was tagged successfully on both beatport and juno options.
I am specifically interested in traxsource for certain tags but this appears none functional at the moment.

Great application, keep up the good work.
Please let me know if you need anymore information, cheers

(macOSX Catalina)

Feature Request: Manual selection Mode

Sometimes the same track is on multiple releases, and it would be nice to get the option to manual select the right one. (kinda like beatport pro was "back then")

beatport pro interface

Example: I bought "bipolar disorder" from kaiserdisco as part of the best of kd raw 2019 release (https://www.beatport.com/release/best-of-2019/2786480) - but I would like to tag it like it's the version from the "Paranoid EP" (https://www.beatport.com/release/paranoid-ep/2635325)

the only way to do this right now would be to manually change the beatport_track_id to the "correct" one and rescan the file

Beatport match not found

Hi,

Just going through some/all tracks which failed to match on beatport with auto tag in onetagger and checking manually against site search.

Onetagger cannot match a .flac file with meta set as:
ARTIST=808 State
TITLE=In Yer Face (Bicep Remix)

This is with strictness at 0%, match duration off, and even tried against filename with no success. How can onetagger not find this track which is located at:
https://www.beatport.com/track/in-yer-face/8376922 ?

I will let you know of any other cases i find if you wish. Note: Auto tag was only run against beatport, none of the others. Cheers

Suggestion: Single/Releases metadata fill

HI! There are occasions where I do have a single which has been later released in an Album of the same artist. I don't know if this would be possible, but I'd love to fill the "single" metadata with the "release" metadata, but fill the Release Date with the "single" data.
Do you think this would be possible? In case there are more than 2 similar matches for a search, for example...

One Tagger Not Finding Album Art

I'm searching for some music on Beatport for reference. I know it is finding the song, since I deleted the bpm and when I reran the program, it found the right bpm. The only problem is it isn't downloading the album art to the file.

Suggestion: Add search field on "Edit tags" tab

I want to be able to isolate specific tracks that I need to update certain tags on. Right now, I can only do it trough scrolling. Would be nice to quickly drag and drop or search to isolate and find those tracks quickly.

Support for automatic detection of tags inside the filename

Currently the user has to predefine the filenama structure to use it as tag. An option to detect tags automatically would be great.

Here are regex definitions for parsing.

  1. Get track number if available:
    (\w\d+|d+)\s*[-|_|.|+]?\s*
    Remove the parsed track number from the string

  2. Get Artist and Title
    ^(.*?)\s?[-|_|+]\s?(.*?)$


These regix support parsing tags with many filename variations:

  • "01. Artist - Title"
  • "B1-ArtistTitle"
  • "02_Artist_Title"
  • "02 - Artist - Title"
  • "Artist+Title"

Beatport Subgenre

Is there any way to pull subgenre from beatport eg. Big Room, Future House from Mainstage. Usually, the tracks get tagged with the main genre. Maybe if the tagger could pull the data to new field Subgenre or even write it to comments. Thanks :)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.