diff --git a/beets/library/models.py b/beets/library/models.py index 9b8b6d291..8eff168d5 100644 --- a/beets/library/models.py +++ b/beets/library/models.py @@ -805,6 +805,7 @@ class Item(LibModel): getters = plugins.item_field_getters() getters["singleton"] = lambda i: i.album_id is None getters["filesize"] = Item.try_filesize # In bytes. + getters["has_images"] = Item.has_cover_art return getters def duplicates_query(self, fields: list[str]) -> dbcore.AndQuery: @@ -1098,6 +1099,18 @@ class Item(LibModel): log.warning("could not get filesize: {}", exc) return 0 + def has_cover_art(self): + """Check if item has embedded cover art. + + Return True if images embedded in file, False otherwise. + If file unreadable or no images, return False. + """ + try: + mediafile = MediaFile(syspath(self.path)) + return bool(mediafile.images) + except (UnreadableFileError, Exception): + return False + # Model methods. def remove(self, delete=False, with_album=True):