From 77d178808ae75d29ebed852e9e19df0bd8dec747 Mon Sep 17 00:00:00 2001 From: Wouter2devries Date: Fri, 20 Mar 2026 13:53:06 +0100 Subject: [PATCH] Added has_cover_art query No test cases yet. Query to find albums with/without embedded cover art #2572 --- beets/library/models.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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):