From 290cae9a8f6790d8d412b36965ad73ac3ec8139e Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Sat, 2 Jun 2018 09:21:55 +0200 Subject: [PATCH] Fix #231 and #219: ensure we import covers regarless of the import method Can now import covers from track metadata and track directory as well --- api/config/settings/local.py | 1 + api/funkwhale_api/music/metadata.py | 113 ++++++++++++++++----------- api/funkwhale_api/music/models.py | 25 +++++- api/funkwhale_api/music/tasks.py | 114 ++++++++++++++++++++++++++-- api/tests/music/cover.jpg | Bin 0 -> 107 bytes api/tests/music/cover.png | Bin 0 -> 379 bytes api/tests/music/sample.flac | Bin 9793 -> 91522 bytes api/tests/music/test_metadata.py | 14 ++++ api/tests/music/test_models.py | 8 ++ api/tests/music/test_tasks.py | 71 +++++++++++++++++ changes/changelog.d/219.enhancement | 1 + changes/changelog.d/231.bugfix | 50 ++++++++++++ docs/importing-music.rst | 9 +++ 13 files changed, 353 insertions(+), 53 deletions(-) create mode 100644 api/tests/music/cover.jpg create mode 100644 api/tests/music/cover.png create mode 100644 changes/changelog.d/219.enhancement create mode 100644 changes/changelog.d/231.bugfix diff --git a/api/config/settings/local.py b/api/config/settings/local.py index 592600629..df14945cc 100644 --- a/api/config/settings/local.py +++ b/api/config/settings/local.py @@ -76,3 +76,4 @@ LOGGING = { }, }, } +CSRF_TRUSTED_ORIGINS = [o for o in ALLOWED_HOSTS] diff --git a/api/funkwhale_api/music/metadata.py b/api/funkwhale_api/music/metadata.py index 522c64c85..3637b1c8c 100644 --- a/api/funkwhale_api/music/metadata.py +++ b/api/funkwhale_api/music/metadata.py @@ -9,7 +9,13 @@ class TagNotFound(KeyError): pass +class UnsupportedTag(KeyError): + pass + + def get_id3_tag(f, k): + if k == 'pictures': + return f.tags.getall('APIC') # First we try to grab the standard key try: return f.tags[k].text[0] @@ -28,13 +34,39 @@ def get_id3_tag(f, k): raise TagNotFound(k) +def clean_id3_pictures(apic): + pictures = [] + for p in list(apic): + pictures.append({ + 'mimetype': p.mime, + 'content': p.data, + 'description': p.desc, + 'type': p.type.real, + }) + return pictures + + def get_flac_tag(f, k): + if k == 'pictures': + return f.pictures try: return f.get(k, [])[0] except (KeyError, IndexError): raise TagNotFound(k) +def clean_flac_pictures(apic): + pictures = [] + for p in list(apic): + pictures.append({ + 'mimetype': p.mime, + 'content': p.data, + 'description': p.desc, + 'type': p.type.real, + }) + return pictures + + def get_mp3_recording_id(f, k): try: return [ @@ -73,25 +105,15 @@ CONF = { 'field': 'TRACKNUMBER', 'to_application': convert_track_number }, - 'title': { - 'field': 'title' - }, - 'artist': { - 'field': 'artist' - }, - 'album': { - 'field': 'album' - }, + 'title': {}, + 'artist': {}, + 'album': {}, 'date': { 'field': 'date', 'to_application': lambda v: arrow.get(v).date() }, - 'musicbrainz_albumid': { - 'field': 'musicbrainz_albumid' - }, - 'musicbrainz_artistid': { - 'field': 'musicbrainz_artistid' - }, + 'musicbrainz_albumid': {}, + 'musicbrainz_artistid': {}, 'musicbrainz_recordingid': { 'field': 'musicbrainz_trackid' }, @@ -104,15 +126,9 @@ CONF = { 'field': 'TRACKNUMBER', 'to_application': convert_track_number }, - 'title': { - 'field': 'title' - }, - 'artist': { - 'field': 'artist' - }, - 'album': { - 'field': 'album' - }, + 'title': {}, + 'artist': {}, + 'album': {}, 'date': { 'field': 'date', 'to_application': lambda v: arrow.get(v).date() @@ -130,6 +146,7 @@ CONF = { }, 'MP3': { 'getter': get_id3_tag, + 'clean_pictures': clean_id3_pictures, 'fields': { 'track_number': { 'field': 'TRCK', @@ -158,40 +175,31 @@ CONF = { 'field': 'UFID', 'getter': get_mp3_recording_id, }, + 'pictures': {}, } }, 'FLAC': { 'getter': get_flac_tag, + 'clean_pictures': clean_flac_pictures, 'fields': { 'track_number': { 'field': 'tracknumber', 'to_application': convert_track_number }, - 'title': { - 'field': 'title' - }, - 'artist': { - 'field': 'artist' - }, - 'album': { - 'field': 'album' - }, + 'title': {}, + 'artist': {}, + 'album': {}, 'date': { 'field': 'date', 'to_application': lambda v: arrow.get(str(v)).date() }, - 'musicbrainz_albumid': { - 'field': 'musicbrainz_albumid' - }, - 'musicbrainz_artistid': { - 'field': 'musicbrainz_artistid' - }, + 'musicbrainz_albumid': {}, + 'musicbrainz_artistid': {}, 'musicbrainz_recordingid': { 'field': 'musicbrainz_trackid' }, - 'test': { - 'field': 'test' - }, + 'test': {}, + 'pictures': {}, } }, } @@ -213,8 +221,12 @@ class Metadata(object): return f.__class__.__name__ def get(self, key, default=NODEFAULT): - field_conf = self._conf['fields'][key] - real_key = field_conf['field'] + try: + field_conf = self._conf['fields'][key] + except KeyError: + raise UnsupportedTag( + '{} is not supported for this file format'.format(key)) + real_key = field_conf.get('field', key) try: getter = field_conf.get('getter', self._conf['getter']) v = getter(self._file, real_key) @@ -230,3 +242,16 @@ class Metadata(object): if field: v = field.to_python(v) return v + + def get_picture(self, picture_type='cover_front'): + ptype = getattr(mutagen.id3.PictureType, picture_type.upper()) + try: + pictures = self.get('pictures') + except (UnsupportedTag, TagNotFound): + return + + cleaner = self._conf.get('clean_pictures', lambda v: v) + pictures = cleaner(pictures) + for p in pictures: + if p['type'] == ptype: + return p diff --git a/api/funkwhale_api/music/models.py b/api/funkwhale_api/music/models.py index 51ece7d7b..0ba4d22c3 100644 --- a/api/funkwhale_api/music/models.py +++ b/api/funkwhale_api/music/models.py @@ -23,6 +23,7 @@ from funkwhale_api import downloader from funkwhale_api import musicbrainz from funkwhale_api.federation import utils as federation_utils from . import importers +from . import metadata from . import utils @@ -192,10 +193,20 @@ class Album(APIModelMixin): } objects = AlbumQuerySet.as_manager() - def get_image(self): - image_data = musicbrainz.api.images.get_front(str(self.mbid)) - f = ContentFile(image_data) - self.cover.save('{0}.jpg'.format(self.mbid), f) + def get_image(self, data=None): + if data: + f = ContentFile(data['content']) + extensions = { + 'image/jpeg': 'jpg', + 'image/png': 'png', + 'image/gif': 'gif', + } + extension = extensions.get(data['mimetype'], 'jpg') + self.cover.save('{}.{}'.format(self.uuid, extension), f) + else: + image_data = musicbrainz.api.images.get_front(str(self.mbid)) + f = ContentFile(image_data) + self.cover.save('{0}.jpg'.format(self.mbid), f) return self.cover.file def __str__(self): @@ -522,6 +533,12 @@ class TrackFile(models.Model): self.mimetype = utils.guess_mimetype(self.audio_file) return super().save(**kwargs) + def get_metadata(self): + audio_file = self.get_audio_file() + if not audio_file: + return + return metadata.Metadata(audio_file) + IMPORT_STATUS_CHOICES = ( ('pending', 'Pending'), diff --git a/api/funkwhale_api/music/tasks.py b/api/funkwhale_api/music/tasks.py index 993456c27..218e374e8 100644 --- a/api/funkwhale_api/music/tasks.py +++ b/api/funkwhale_api/music/tasks.py @@ -1,7 +1,10 @@ +import logging import os from django.core.files.base import ContentFile +from musicbrainzngs import ResponseError + from funkwhale_api.common import preferences from funkwhale_api.federation import activity from funkwhale_api.federation import actors @@ -16,6 +19,8 @@ from . import models from . import lyrics as lyrics_utils from . import utils as music_utils +logger = logging.getLogger(__name__) + @celery.app.task(name='acoustid.set_on_track_file') @celery.require_instance(models.TrackFile, 'track_file') @@ -74,6 +79,7 @@ def import_track_from_remote(library_track): def _do_import(import_job, replace=False, use_acoustid=False): + logger.info('[Import Job %s] starting job', import_job.pk) from_file = bool(import_job.audio_file) mbid = import_job.mbid acoustid_track_id = None @@ -91,15 +97,32 @@ def _do_import(import_job, replace=False, use_acoustid=False): mbid = match['recordings'][0]['id'] acoustid_track_id = match['id'] if mbid: + logger.info( + '[Import Job %s] importing track from musicbrainz recording %s', + import_job.pk, + str(mbid)) track, _ = models.Track.get_or_create_from_api(mbid=mbid) elif import_job.audio_file: + logger.info( + '[Import Job %s] importing track from uploaded track data at %s', + import_job.pk, + import_job.audio_file.path) track = audiofile_tasks.import_track_data_from_path( import_job.audio_file.path) elif import_job.library_track: + logger.info( + '[Import Job %s] importing track from federated library track %s', + import_job.pk, + import_job.library_track.pk) track = import_track_from_remote(import_job.library_track) elif import_job.source.startswith('file://'): + tf_path = import_job.source.replace('file://', '', 1) + logger.info( + '[Import Job %s] importing track from local track data at %s', + import_job.pk, + tf_path) track = audiofile_tasks.import_track_data_from_path( - import_job.source.replace('file://', '', 1)) + tf_path) else: raise ValueError( 'Not enough data to process import, ' @@ -107,8 +130,13 @@ def _do_import(import_job, replace=False, use_acoustid=False): track_file = None if replace: + logger.info( + '[Import Job %s] replacing existing audio file', import_job.pk) track_file = track.files.first() elif track.files.count() > 0: + logger.info( + '[Import Job %s] skipping, we already have a file for this track', + import_job.pk) if import_job.audio_file: import_job.audio_file.delete() import_job.status = 'skipped' @@ -132,6 +160,9 @@ def _do_import(import_job, replace=False, use_acoustid=False): pass elif not import_job.audio_file and not import_job.source.startswith('file://'): # not an implace import, and we have a source, so let's download it + logger.info( + '[Import Job %s] downloading audio file from remote', + import_job.pk) track_file.download_file() elif not import_job.audio_file and import_job.source.startswith('file://'): # in place import, we set mimetype from extension @@ -139,23 +170,96 @@ def _do_import(import_job, replace=False, use_acoustid=False): track_file.mimetype = music_utils.get_type_from_ext(ext) track_file.set_audio_data() track_file.save() + # if no cover is set on track album, we try to update it as well: + if not track.album.cover: + logger.info( + '[Import Job %s] retrieving album cover', + import_job.pk) + update_album_cover(track.album, track_file) import_job.status = 'finished' import_job.track_file = track_file if import_job.audio_file: # it's imported on the track, we don't need it anymore import_job.audio_file.delete() import_job.save() - + logger.info( + '[Import Job %s] job finished', + import_job.pk) return track_file +def update_album_cover(album, track_file, replace=False): + if album.cover and not replace: + return + + if track_file: + # maybe the file has a cover embedded? + try: + metadata = track_file.get_metadata() + except FileNotFoundError: + metadata = None + if metadata: + cover = metadata.get_picture('cover_front') + if cover: + # best case scenario, cover is embedded in the track + logger.info( + '[Album %s] Using cover embedded in file', + album.pk) + return album.get_image(data=cover) + if track_file.source and track_file.source.startswith('file://'): + # let's look for a cover in the same directory + path = os.path.dirname(track_file.source.replace('file://', '', 1)) + logger.info( + '[Album %s] scanning covers from %s', + album.pk, + path) + cover = get_cover_from_fs(path) + if cover: + return album.get_image(data=cover) + if not album.mbid: + return + try: + logger.info( + '[Album %s] Fetching cover from musicbrainz release %s', + album.pk, + str(album.mbid)) + return album.get_image() + except ResponseError as exc: + logger.warning( + '[Album %s] cannot fetch cover from musicbrainz: %s', + album.pk, + str(exc)) + + +IMAGE_TYPES = [ + ('jpg', 'image/jpeg'), + ('png', 'image/png'), +] + +def get_cover_from_fs(dir_path): + if os.path.exists(dir_path): + for e, m in IMAGE_TYPES: + cover_path = os.path.join(dir_path, 'cover.{}'.format(e)) + if not os.path.exists(cover_path): + logger.debug('Cover %s does not exists', cover_path) + continue + with open(cover_path, 'rb') as c: + logger.info('Found cover at %s', cover_path) + return { + 'mimetype': m, + 'content': c.read(), + } + + + @celery.app.task(name='ImportJob.run', bind=True) @celery.require_instance( models.ImportJob.objects.filter( status__in=['pending', 'errored']), 'import_job') def import_job_run(self, import_job, replace=False, use_acoustid=False): - def mark_errored(): + def mark_errored(exc): + logger.error('[Import Job %s] Error during import: %s', str(exc)) import_job.status = 'errored' import_job.save(update_fields=['status']) @@ -167,9 +271,9 @@ def import_job_run(self, import_job, replace=False, use_acoustid=False): try: self.retry(exc=exc, countdown=30, max_retries=3) except: - mark_errored() + mark_errored(exc) raise - mark_errored() + mark_errored(exc) raise diff --git a/api/tests/music/cover.jpg b/api/tests/music/cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..71911bf48766c7181518c1070911019fbb00b1fc GIT binary patch literal 107 zcmex=v6O#mT|R$;HFZ!^O?V&B@6t$jiqs zARs8f#UmsvBp}Q$ARzGnBm*}G10w??BcmY0|1%713<3hI|8FsHFfuYQ*fU%@ukimS E0KS6{<^TWy literal 0 HcmV?d00001 diff --git a/api/tests/music/cover.png b/api/tests/music/cover.png new file mode 100644 index 0000000000000000000000000000000000000000..32f56c8ac2aa42bb85f38529fcf59d509c724957 GIT binary patch literal 379 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 FCjmoy(WL+Y delta 293 zcmZoV&3e#hg08w7F9QREPhwe`skxr1nVzA6p*8~p14u9=$kEx`FVxq`HOSU*qO-m* zKLZ1Ui(`nZt&xF&g|30Au7T;qB29ID1_p+JAb*!oXV)NG$DG7G1>gMAoRrieYsZq3 z%;eHyg`oW6V(W>Y&u+fVIEhi+kb!~0)z972&lRuw$xE2GSUQ5tb`5g#5At;lvh~U@ z&QNeGN=+?JwGPTp%FI)6%gjs8wsy=(EiO*XODW1%aLz9($;`{N-n@f_iE-j=N#;fd eh3y9u7=JKtzmUNAk|=Weg#^Y`(|4vYo&*5nEn&?7 diff --git a/api/tests/music/test_metadata.py b/api/tests/music/test_metadata.py index 9f9c93984..326f18324 100644 --- a/api/tests/music/test_metadata.py +++ b/api/tests/music/test_metadata.py @@ -58,6 +58,20 @@ def test_can_get_metadata_from_id3_mp3_file(field, value): assert data.get(field) == value +@pytest.mark.parametrize('name', ['test.mp3', 'sample.flac']) +def test_can_get_pictures(name): + path = os.path.join(DATA_DIR, name) + data = metadata.Metadata(path) + + pictures = data.get('pictures') + assert len(pictures) == 1 + cover_data = data.get_picture('cover_front') + assert cover_data['mimetype'].startswith('image/') + assert len(cover_data['content']) > 0 + assert type(cover_data['content']) == bytes + assert type(cover_data['description']) == str + + @pytest.mark.parametrize('field,value', [ ('title', '999,999'), ('artist', 'Nine Inch Nails'), diff --git a/api/tests/music/test_models.py b/api/tests/music/test_models.py index e926d07fa..feb68ea33 100644 --- a/api/tests/music/test_models.py +++ b/api/tests/music/test_models.py @@ -110,3 +110,11 @@ def test_track_get_file_size_in_place(factories): in_place=True, source='file://{}'.format(path)) assert tf.get_file_size() == 297745 + + +def test_album_get_image_content(factories): + album = factories['music.Album']() + album.get_image(data={'content': b'test', 'mimetype':'image/jpeg'}) + album.refresh_from_db() + + assert album.cover.read() == b'test' diff --git a/api/tests/music/test_tasks.py b/api/tests/music/test_tasks.py index dfe649be0..77245e204 100644 --- a/api/tests/music/test_tasks.py +++ b/api/tests/music/test_tasks.py @@ -56,6 +56,7 @@ def test_import_batch_run(factories, mocker): mocked_job_run.assert_called_once_with(import_job_id=job.pk) +@pytest.mark.skip('Acoustid is disabled') def test_import_job_can_run_with_file_and_acoustid( artists, albums, tracks, preferences, factories, mocker): preferences['providers_acoustid__api_key'] = 'test' @@ -183,3 +184,73 @@ def test_import_job_can_be_errored(factories, mocker, preferences): assert job.track_file is None assert job.status == 'errored' + + +def test__do_import_calls_update_album_cover_if_no_cover(factories, mocker): + path = os.path.join(DATA_DIR, 'test.ogg') + album = factories['music.Album'](cover='') + track = factories['music.Track'](album=album) + + mocker.patch( + 'funkwhale_api.providers.audiofile.tasks.import_track_data_from_path', + return_value=track) + + mocked_update = mocker.patch( + 'funkwhale_api.music.tasks.update_album_cover') + + job = factories['music.FileImportJob']( + audio_file__path=path, track_file=None) + + tasks.import_job_run(import_job_id=job.pk) + + mocked_update.assert_called_once_with(album, track.files.first()) + + +def test_update_album_cover_mbid(factories, mocker): + album = factories['music.Album'](cover='') + + mocked_get = mocker.patch('funkwhale_api.music.models.Album.get_image') + tasks.update_album_cover(album=album, track_file=None) + + mocked_get.assert_called_once_with() + + +def test_update_album_cover_file_data(factories, mocker): + path = os.path.join(DATA_DIR, 'test.mp3') + album = factories['music.Album'](cover='', mbid=None) + tf = factories['music.TrackFile'](track__album=album) + + mocked_get = mocker.patch('funkwhale_api.music.models.Album.get_image') + mocker.patch( + 'funkwhale_api.music.metadata.Metadata.get_picture', + return_value={'hello': 'world'}) + tasks.update_album_cover(album=album, track_file=tf) + md = data = tf.get_metadata() + mocked_get.assert_called_once_with( + data={'hello': 'world'}) + + +@pytest.mark.parametrize('ext,mimetype', [ + ('jpg', 'image/jpeg'), + ('png', 'image/png'), +]) +def test_update_album_cover_file_cover_separate_file( + ext, mimetype, factories, mocker): + mocker.patch('funkwhale_api.music.tasks.IMAGE_TYPES', [(ext, mimetype)]) + path = os.path.join(DATA_DIR, 'test.mp3') + image_path = os.path.join(DATA_DIR, 'cover.{}'.format(ext)) + with open(image_path, 'rb') as f: + image_content = f.read() + album = factories['music.Album'](cover='', mbid=None) + tf = factories['music.TrackFile']( + track__album=album, + source='file://' + image_path) + + mocked_get = mocker.patch('funkwhale_api.music.models.Album.get_image') + mocker.patch( + 'funkwhale_api.music.metadata.Metadata.get_picture', + return_value=None) + tasks.update_album_cover(album=album, track_file=tf) + md = data = tf.get_metadata() + mocked_get.assert_called_once_with( + data={'mimetype': mimetype, 'content': image_content}) diff --git a/changes/changelog.d/219.enhancement b/changes/changelog.d/219.enhancement new file mode 100644 index 000000000..fec9a07ac --- /dev/null +++ b/changes/changelog.d/219.enhancement @@ -0,0 +1 @@ +Can now use album covers from flac/mp3 metadata and separate file in track directory (#219) diff --git a/changes/changelog.d/231.bugfix b/changes/changelog.d/231.bugfix new file mode 100644 index 000000000..0b37b6274 --- /dev/null +++ b/changes/changelog.d/231.bugfix @@ -0,0 +1,50 @@ +We now fetch album covers regardless of the import methods (#231) + +Smarter album cover importer +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In earlier versions, covers where only imported when launching a YouTube import. +Starting from this release, covers will be imported regardless of the import mode +(file upload, youtube-dl, CLI, in-place...). Funkwhale will look for covers +in the following order: + +1. In the imported file itself (FLAC/MP3 only) +2. In a cover.jpg or cover.png in the file directory +3. By fetching cover art from Musibrainz, assuming the file is tagged correctly + +This will only work for newly imported tracks and albums though. In the future, +we may offer an option to refetch album covers from the interface, but in the +meantime, you can use the following snippet: + +.. code-block:: python + + # Store this in /tmp/update_albums.py + from funkwhale_api.music.models import Album, TrackFile + from funkwhale_api.music.tasks import update_album_cover + + albums_without_covers = Album.objects.filter(cover='') + total = albums_without_covers.count() + print('Found {} albums without cover'.format(total)) + for i, album in enumerate(albums_without_covers.iterator()): + print('[{}/{}] Fetching cover for {}...'.format(i+1, total, album.title)) + f = TrackFile.objects.filter(track__album=album).filter(source__startswith='file://').first() + update_album_cover(album, track_file=f) + +Then launch it:: + + # docker setups + cat /tmp/update_albums.py | docker-compose run --rm api python manage.py shell -i python + + # non-docker setups + source /srv/funkwhale/load_env + source /srv/funkwhale/virtualenv/bin/activate + cat /tmp/update_albums.py | python manage.py shell -i python + + # cleanup + rm /tmp/update_albums.py + +.. note:: + + Depending on your number of albums, the previous snippet may take some time + to execute. You can interrupt it at any time using ctrl-c and relaunch it later, + as it's idempotent. diff --git a/docs/importing-music.rst b/docs/importing-music.rst index 4d256604b..b190dff36 100644 --- a/docs/importing-music.rst +++ b/docs/importing-music.rst @@ -76,6 +76,15 @@ configuration options to ensure the webserver can serve them properly: Thus, be especially careful when you manipulate the source files. +Album covers +^^^^^^^^^^^^ + +Whenever possible, Funkwhale will import album cover, with the following precedence: + +1. It will use the cover embedded in the audio files themeselves, if any (Flac/MP3 only) +2. It will use a cover.jpg or a cover.png file from the imported track directory, if any +3. It will fectch cover art from musicbrainz, assuming the file is tagged correctly + Getting demo tracks ^^^^^^^^^^^^^^^^^^^