41fb62f62e87242e2dc945b76bf1dee675d44758
Создана структура документации, описывающая функциональность, установку, использование CLI, архитектуру и интеграции с TorrAPI и OpenRouter. Добавлены примеры конфигурации и метаданных, а также описание структуры выходных данных.
GenAudioBookInfo
Go-утилита для обработки аудиокниг: сканирует папки, извлекает/нормализует теги, ищет данные через TorrAPI, (опционально) валидирует через OpenRouter, генерирует metadata.json (AudioBookShelf) и раскладывает по структуре.
Что делает программа:
- Сканирует каталог и находит папки с аудиофайлами (MP3, M4B, FLAC и др.)
- Извлекает метаданные из тегов первого аудиофайла (автор, название, жанр, год)
- Исправляет кодировку — автоматически устраняет mojibake в тегах (UTF-8 → Latin-1)
- Валидирует метаданные через LLM (OpenRouter) — нормализует формат автора, убирает мусор из названия
- Ищет аудиокнигу на торрент-трекерах через TorrAPI (RuTracker, Kinozal, NoNameClub, RuTor) — получает описание, постер, жанр
- Скачивает обложку (
cover.jpg) из найденной раздачи - Формирует
metadata.jsonв формате AudioBookShelf с главами, нарраторами, серией - Организует файлы в структурированную иерархию:
result/<Буква>/<Автор>/<Автор - Название [Год]>/
Обработка ведётся параллельно (настраиваемый пул воркеров) с отображением прогресс-бара и поддержкой graceful shutdown.
Архитектура
Проект построен по принципам Clean Architecture:
cmd/
genaudiobookinfo/
main.go ← Composition Root (точка входа, DI)
internal/
domain/
audiobook.go ← Сущности (entities)
ports.go ← Интерфейсы-порты (FolderLister, MetadataExtractor, Presenter)
usecase/
scan_audiobooks.go ← Бизнес-логика (Fan-Out / Fan-In, Worker Pool)
infrastructure/
folder_lister.go ← Реализация FolderLister (файловая система)
metadata_extractor.go ← Реализация MetadataExtractor (dhowden/tag)
audio_utils.go ← Утилиты (определение аудиоформатов)
presentation/
console_presenter.go ← Реализация Presenter (форматированный вывод)
Паттерны
| Паттерн | Где применяется |
|---|---|
| Clean Architecture | Разделение на domain / usecase / infrastructure / presentation |
| Dependency Injection | Конструкторы принимают интерфейсы, Composition Root в main.go |
| Ports & Adapters | domain/ports.go — порты; infrastructure и presentation — адаптеры |
| Fan-Out / Fan-In | usecase/scan_audiobooks.go — параллельное сканирование через каналы |
| Worker Pool | Настраиваемое количество горутин-воркеров |
| Graceful Shutdown | Обработка SIGINT/SIGTERM через context.Context |
Сборка
go build -o genaudiobookinfo.exe ./cmd/genaudiobookinfo/
Использование
# Сканировать каталог с аудиокнигами
genaudiobookinfo.exe D:\Audiobooks
# Указать количество воркеров
genaudiobookinfo.exe -workers 8 D:\Audiobooks
# Установить таймаут
genaudiobookinfo.exe -timeout 60s D:\Audiobooks
Поддерживаемые форматы
MP3, M4A, M4B, OGG, OPUS, FLAC, WMA, AAC, WAV
Зависимости
- dhowden/tag — чтение метаданных аудиофайлов
Description
Go-утилита для обработки аудиокниг: сканирует папки, извлекает/нормализует теги, ищет данные через TorrAPI, (опционально) валидирует через OpenRouter, генерирует metadata.json (AudioBookShelf) и раскладывает по структуре.
Releases
3
genaudiobookinfo v2.1.0-test
Latest
Languages
Go
77.6%
Makefile
17%
PowerShell
5.4%