improve cover image retrieval logic

This commit is contained in:
Alex Gleyzer 2025-01-31 15:50:29 -05:00
parent 1a1248d1e4
commit 28a258c291

View file

@ -45,10 +45,11 @@ def main(kokoro, file_path, lang, voice, pick_manually, speed, providers):
title = book.get_metadata('DC', 'title')[0][0] title = book.get_metadata('DC', 'title')[0][0]
creator = book.get_metadata('DC', 'creator')[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_maybe = find_cover(book)
cover_image = cover_maybe[0].get_content() if cover_maybe else b"" cover_image = cover_maybe.get_content() if cover_maybe else b""
if cover_maybe: 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}' intro = f'{title} by {creator}'
print(intro) 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_index_file(title, creator, chapter_mp3_files, durations)
create_m4b(chapter_mp3_files, filename, title, creator, cover_image) 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): def extract_texts(chapters):
texts = [] texts = []