From 28a258c2919924a864471eaa484bd4bf970c6b9a Mon Sep 17 00:00:00 2001 From: Alex Gleyzer Date: Fri, 31 Jan 2025 15:50:29 -0500 Subject: [PATCH 1/3] improve cover image retrieval logic --- audiblez.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/audiblez.py b/audiblez.py index 9c24290..592a4c2 100755 --- a/audiblez.py +++ b/audiblez.py @@ -45,10 +45,11 @@ def main(kokoro, file_path, lang, voice, pick_manually, speed, providers): title = book.get_metadata('DC', 'title')[0][0] creator = book.get_metadata('DC', 'creator')[0][0] - cover_maybe = [c for c in book.get_items() if c.get_type() == ebooklib.ITEM_COVER] - cover_image = cover_maybe[0].get_content() if cover_maybe else b"" + cover_maybe = find_cover(book) + cover_image = cover_maybe.get_content() if cover_maybe else b"" if cover_maybe: - print(f'Found cover image {cover_maybe[0].file_name} in {cover_maybe[0].media_type} format') + print(f'Found cover image {cover_maybe.file_name} in {cover_maybe.media_type} format') + exit(0); intro = f'{title} by {creator}' print(intro) @@ -105,6 +106,27 @@ def main(kokoro, file_path, lang, voice, pick_manually, speed, providers): create_index_file(title, creator, chapter_mp3_files, durations) create_m4b(chapter_mp3_files, filename, title, creator, cover_image) +def find_cover(book): + def is_image(item): + return item is not None and item.media_type.startswith('image/') + + for item in book.get_items_of_type(ebooklib.ITEM_COVER): + if is_image(item): + return item + + # https://idpf.org/forum/topic-715 + for meta in book.get_metadata('OPF', 'cover'): + if is_image(item := book.get_item_with_id(meta[1]['content'])): + return item + + if is_image(item := book.get_item_with_id('cover')): + return item + + for item in book.get_items_of_type(ebooklib.ITEM_IMAGE): + if 'cover' in item.get_name().lower() and is_image(item): + return item + + return None def extract_texts(chapters): texts = [] From a66ff9ae1e7018b0c0a4b9b7e6cef2596777fd56 Mon Sep 17 00:00:00 2001 From: Alex Gleyzer Date: Fri, 31 Jan 2025 15:50:29 -0500 Subject: [PATCH 2/3] improve cover image retrieval logic --- audiblez.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/audiblez.py b/audiblez.py index 9c24290..592a4c2 100755 --- a/audiblez.py +++ b/audiblez.py @@ -45,10 +45,11 @@ def main(kokoro, file_path, lang, voice, pick_manually, speed, providers): title = book.get_metadata('DC', 'title')[0][0] creator = book.get_metadata('DC', 'creator')[0][0] - cover_maybe = [c for c in book.get_items() if c.get_type() == ebooklib.ITEM_COVER] - cover_image = cover_maybe[0].get_content() if cover_maybe else b"" + cover_maybe = find_cover(book) + cover_image = cover_maybe.get_content() if cover_maybe else b"" if cover_maybe: - print(f'Found cover image {cover_maybe[0].file_name} in {cover_maybe[0].media_type} format') + print(f'Found cover image {cover_maybe.file_name} in {cover_maybe.media_type} format') + exit(0); intro = f'{title} by {creator}' print(intro) @@ -105,6 +106,27 @@ def main(kokoro, file_path, lang, voice, pick_manually, speed, providers): create_index_file(title, creator, chapter_mp3_files, durations) create_m4b(chapter_mp3_files, filename, title, creator, cover_image) +def find_cover(book): + def is_image(item): + return item is not None and item.media_type.startswith('image/') + + for item in book.get_items_of_type(ebooklib.ITEM_COVER): + if is_image(item): + return item + + # https://idpf.org/forum/topic-715 + for meta in book.get_metadata('OPF', 'cover'): + if is_image(item := book.get_item_with_id(meta[1]['content'])): + return item + + if is_image(item := book.get_item_with_id('cover')): + return item + + for item in book.get_items_of_type(ebooklib.ITEM_IMAGE): + if 'cover' in item.get_name().lower() and is_image(item): + return item + + return None def extract_texts(chapters): texts = [] From 354af9ef4d3079d7e4a90bd7a3b16d5e8c23c446 Mon Sep 17 00:00:00 2001 From: Alex Gleyzer Date: Fri, 31 Jan 2025 16:44:24 -0500 Subject: [PATCH 3/3] Removed exit --- audiblez.py | 1 - 1 file changed, 1 deletion(-) diff --git a/audiblez.py b/audiblez.py index 592a4c2..8377fab 100755 --- a/audiblez.py +++ b/audiblez.py @@ -49,7 +49,6 @@ def main(kokoro, file_path, lang, voice, pick_manually, speed, providers): cover_image = cover_maybe.get_content() if cover_maybe else b"" if cover_maybe: print(f'Found cover image {cover_maybe.file_name} in {cover_maybe.media_type} format') - exit(0); intro = f'{title} by {creator}' print(intro)