diff --git a/README.md b/README.md index e91eb56..1b611cc 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# AudiobookOrganizer +# BookFlow Curator -AudiobookOrganizer — консольный инструмент на Python для автоматизации разбора и организации коллекции аудиокниг. +BookFlow Curator — консольный инструмент на Python для автоматизации разбора и организации коллекции аудиокниг. > **Portfolio snapshot.** Проект показывает полный файловый pipeline: сканирование коллекции, извлечение тегов, AI-обогащение, нормализацию структуры и формирование `metadata.json` для дальнейшей интеграции. -![Рабочий сценарий AudiobookOrganizer](docs/images/overview.png) +![Рабочий сценарий BookFlow Curator](docs/images/overview.png) Проект сканирует папки с аудиофайлами, извлекает метаданные (теги, длительность, главы), при необходимости дополняет их через LLM (OpenRouter), переименовывает каталоги по единому формату и формирует структурированную библиотеку с `metadata.json`. @@ -26,12 +26,12 @@ AudiobookOrganizer — консольный инструмент на Python д ## Структура проекта -- `audiobookorganizer.py` — основной исполняемый файл, содержит: +- `bookflow_curator.py` — основной исполняемый файл, содержит: - конфигурацию (`ConfigurationManager`, `SettingsManager`), - UI и меню (`UIManager`, `InteractiveMenu`), - AI-слой (`AITextProcessor`), - сканер/извлечение/организацию (`AudiobookScanner`, `AudiobookMetadataExtractor`), - - оркестратор (`AudiobookOrganizer`) и точку входа `main()`. + - оркестратор (`BookFlowCurator`) и точку входа `main()`. - `README.md` — документация проекта. ## Требования @@ -72,7 +72,7 @@ AUDIOBOOK_LIBRARY_PATH=./audiobooks OPENROUTER_BASE_URL=https://openrouter.ai/api/v1 OPENROUTER_MODEL=deepseek/deepseek-chat-v3-0324:free OPENROUTER_REFERER=https://github.com/dfofanov/repo -OPENROUTER_APP_TITLE=AudiobookOrganizer +OPENROUTER_APP_TITLE=BookFlow Curator OPENROUTER_MAX_INPUT_CHARS=12000 # Форматы @@ -86,13 +86,13 @@ SUPPORTED_TEXT_EXTENSIONS=txt,pdf,epub,mobi AUDIOBOOK_SOURCE_API_KEY= AUDIOBOOK_SOURCE_BASE_URL= AUDIOBOOK_SOURCE_TIMEOUT=20 -AUDIOBOOK_SOURCE_USER_AGENT=Mozilla/5.0 (compatible; AudiobookOrganizerBot/1.0) +AUDIOBOOK_SOURCE_USER_AGENT=Mozilla/5.0 (compatible; BookFlowCuratorBot/1.0) ``` ## Запуск ```bash -python audiobookorganizer.py +python bookflow_curator.py ``` Далее сценарий такой: @@ -139,8 +139,8 @@ python audiobookorganizer.py ## Рекомендованная структура локальных данных ```text -AudiobookOrganizer/ -├─ audiobookorganizer.py +bookflow-curator/ +├─ bookflow_curator.py ├─ .env ├─ scan/ # входные неорганизованные аудиокниги ├─ output/ # структурированный вывод diff --git a/audiobookorganizer.py b/bookflow_curator.py similarity index 99% rename from audiobookorganizer.py rename to bookflow_curator.py index 8a11823..b383a8d 100644 --- a/audiobookorganizer.py +++ b/bookflow_curator.py @@ -154,7 +154,7 @@ class ConfigurationManager: 'model_name': os.getenv('OPENROUTER_MODEL', 'z-ai/glm-4.5-air:free'), # Рекомендуемые заголовки для OpenRouter (не обязательны, но полезны для квот) 'referer': os.getenv('OPENROUTER_REFERER', 'https://github.com/dfofanov/repo'), - 'app_title': os.getenv('OPENROUTER_APP_TITLE', 'AudiobookOrganizer') + 'app_title': os.getenv('OPENROUTER_APP_TITLE', 'BookFlow Curator') } @property @@ -168,7 +168,7 @@ class ConfigurationManager: return { 'base_url': os.getenv('AUDIOBOOK_SOURCE_BASE_URL', 'https://audiobooks.example.com'), 'timeout': int(os.getenv('AUDIOBOOK_SOURCE_TIMEOUT', '20')), - 'user_agent': os.getenv('AUDIOBOOK_SOURCE_USER_AGENT', 'Mozilla/5.0 (compatible; AudiobookOrganizerBot/1.0)') + 'user_agent': os.getenv('AUDIOBOOK_SOURCE_USER_AGENT', 'Mozilla/5.0 (compatible; BookFlowCuratorBot/1.0)') } @@ -2230,7 +2230,7 @@ class AudiobookMetadataExtractor: return False # Заменяем заглушку оркестратора полной реализацией -class AudiobookOrganizer: +class BookFlowCurator: """Основной оркестратор процесса организации аудиокниг""" def __init__(self): self.ui_manager = UIManager() @@ -2395,7 +2395,7 @@ async def main(): SUPPORTED_TEXT_EXTENSIONS = set(os.getenv('SUPPORTED_TEXT_EXTENSIONS', 'txt,pdf,epub,mobi').split(',')) # Создание оркестратора - orchestrator = AudiobookOrganizer() + orchestrator = BookFlowCurator() # Создание консоли и интерактивного меню console = Console() diff --git a/docs/images/overview.png b/docs/images/overview.png index 70aeaea..5cabf94 100644 Binary files a/docs/images/overview.png and b/docs/images/overview.png differ diff --git a/requirements.txt b/requirements.txt index ca2344b..b211bf5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ +# Lists the Python packages required by this project. InquirerPy>=0.3,<1 PyPDF2>=3,<4 openai>=1,<2