Dmitriy Fofanov 91f5c42859
Wiki Sync / Синхронизация Wiki (push) Failing after 0s
Release CI/CD / Сборка и публикация релиза (push) Failing after 1s
Fix: убраны uses actions, заменены на run (совместимость с dfgit)
2026-02-23 22:46:25 +03:00

GenAudioBookInfo

Go-утилита для обработки аудиокниг: сканирует папки, извлекает/нормализует теги, ищет данные через TorrAPI, (опционально) валидирует через OpenRouter, генерирует metadata.json (AudioBookShelf) и раскладывает по структуре.

Что делает программа:

  1. Сканирует каталог и находит папки с аудиофайлами (MP3, M4B, FLAC и др.)
  2. Извлекает метаданные из тегов первого аудиофайла (автор, название, жанр, год)
  3. Исправляет кодировку — автоматически устраняет mojibake в тегах (UTF-8 → Latin-1)
  4. Валидирует метаданные через LLM (OpenRouter) — нормализует формат автора, убирает мусор из названия
  5. Ищет аудиокнигу на торрент-трекерах через TorrAPI (RuTracker, Kinozal, NoNameClub, RuTor) — получает описание, постер, жанр
  6. Скачивает обложку (cover.jpg) из найденной раздачи
  7. Формирует metadata.json в формате AudioBookShelf с главами, нарраторами, серией
  8. Организует файлы в структурированную иерархию: 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) и раскладывает по структуре.
Readme 378 KiB
2026-02-23 23:13:23 +03:00
Languages
Go 77.6%
Makefile 17%
PowerShell 5.4%