diff --git a/beets/mediafile.py b/beets/mediafile.py index 7e0328985..12df16e41 100644 --- a/beets/mediafile.py +++ b/beets/mediafile.py @@ -663,7 +663,7 @@ class MediaFile(object): etc = StorageStyle('compilation') ) albumartist = MediaField( - mp3 = StorageStyle('TXXX', id3_desc='Album Artist'), + mp3 = StorageStyle('TXXX', id3_desc=u'Album Artist'), mp4 = StorageStyle( '----:com.apple.iTunes:Album Artist', as_type=str), @@ -671,12 +671,23 @@ class MediaFile(object): StorageStyle('albumartist')] ) albumtype = MediaField( - mp3 = StorageStyle('TXXX', id3_desc='MusicBrainz Album Type'), + mp3 = StorageStyle('TXXX', id3_desc=u'MusicBrainz Album Type'), mp4 = StorageStyle( '----:com.apple.iTunes:MusicBrainz Album Type', as_type=str), etc = StorageStyle('musicbrainz_albumtype') ) + albumart = MediaField( + mp3 = StorageStyle('APIC', id3_desc=u'Cover'), + ) + albumart_mime = MediaField( + mp3 = StorageStyple('APIC', mime=u''), + ) + albumart_data = MediaField( + mp3 = StorageStyple('APIC', data=u''), + mp4 = StorageStyle('covr', as_type=str), + etc = StorageStyle('picture') + ) # MusicBrainz IDs. mb_trackid = MediaField( @@ -688,14 +699,14 @@ class MediaFile(object): etc = StorageStyle('musicbrainz_trackid') ) mb_albumid = MediaField( - mp3 = StorageStyle('TXXX', id3_desc='MusicBrainz Album Id'), + mp3 = StorageStyle('TXXX', id3_desc=u'MusicBrainz Album Id'), mp4 = StorageStyle( '----:com.apple.iTunes:MusicBrainz Album Id', as_type=str), etc = StorageStyle('musicbrainz_albumid') ) mb_artistid = MediaField( - mp3 = StorageStyle('TXXX', id3_desc='MusicBrainz Artist Id'), + mp3 = StorageStyle('TXXX', id3_desc=u'MusicBrainz Artist Id'), mp4 = StorageStyle( '----:com.apple.iTunes:MusicBrainz Artist Id', as_type=str), @@ -703,7 +714,7 @@ class MediaFile(object): ) mb_albumartistid = MediaField( mp3 = StorageStyle('TXXX', - id3_desc='MusicBrainz Album Artist Id'), + id3_desc=u'MusicBrainz Album Artist Id'), mp4 = StorageStyle( '----:com.apple.iTunes:MusicBrainz Album Artist Id', as_type=str), diff --git a/beetsplug/embedcoverart.py b/beetsplug/embedcoverart.py new file mode 100644 index 000000000..d3b59f3a2 --- /dev/null +++ b/beetsplug/embedcoverart.py @@ -0,0 +1,46 @@ +from beets.plugins import BeetsPlugin +from beets import mediafile + +import os, logging + +from email.mime.image import MIMEImage + +log = logging.getLogger('beets') +log.addHandler(logging.StreamHandler()) + + +class EmbedCoverArtPlugin(BeetsPlugin): + '''Allows albumart to be embedded into the actual files.''' + + def __init__(self): + self.register_listener('loaded', self.loaded) + self.register_listener('album_imported', self.album_imported) + + def configure(self, config): + pass + + def loaded(self): + pass + + def album_imported(self, album): + albumart = album.artpath + ALLOWED_MIMES = ('jpeg','png') + + if albumart: + albumart_raw = open(albumart, 'rb').read() + img = MIMEImage(albumart_raw) + mime_img = img.get_content_subtype() + + if mime_img in ALLOWED_MIMES: + mime_type = 'image/%s' % mime_img + + for item in album.items(): + f = mediafile.MediaFile(item) + + if "mp3" in item.type: + f.albumart_mime = mime_type + + f.albumart_data = albumart_raw + f.save() + else: + log.error('Sorry, a file of type %s is not allowed as coverart.' % mime_img)