feat: rename project to BookFlow Metadata Engine
Wiki Sync / Синхронизация Wiki (push) Successful in 1s

This commit is contained in:
2026-08-31 19:31:51 +03:00
parent 11a77cfe27
commit 1cbcefcfd9
33 changed files with 148 additions and 144 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
# =============================================================================
# GenAudioBookInfo — пример конфигурации
# BookFlow Metadata Engine — пример конфигурации
# Скопируй этот файл в .env и заполни своими значениями:
# cp .env.example .env
# =============================================================================
+4 -4
View File
@@ -1,5 +1,5 @@
# ══════════════════════════════════════════════════════════════════════════════
# CI/CD Pipeline: Сборка и публикация релиза GenAudioBookInfo
# CI/CD Pipeline: Сборка и публикация релиза BookFlow Metadata Engine
# ══════════════════════════════════════════════════════════════════════════════
#
# ЗАПУСК:
@@ -32,7 +32,7 @@ on:
env:
GO_VERSION: "1.24"
APP_NAME: genaudiobookinfo
APP_NAME: bookflow-metadata
BUILD_DIR: build
# ══════════════════════════════════════════════════════════════════════════════
@@ -121,7 +121,7 @@ jobs:
VER="${{ steps.ver.outputs.version }}"
LDFLAGS="-s -w -X main.version=${VER}"
GOFLAGS="-trimpath"
CMD="./cmd/genaudiobookinfo"
CMD="./cmd/bookflow-metadata"
OUT="${BUILD_DIR}"
mkdir -p "${OUT}"
@@ -255,7 +255,7 @@ jobs:
# ── Начинаем формировать тело релиза ───────────────────────────
{
echo "## GenAudioBookInfo ${TAG}"
echo "## BookFlow Metadata Engine ${TAG}"
echo ""
# Пользовательские заметки (RELEASE_NOTES.md — приоритет)
+1
View File
@@ -1,3 +1,4 @@
# Defines project automation or runtime configuration.
name: "Wiki Sync"
on:
+4 -4
View File
@@ -1,5 +1,5 @@
# ══════════════════════════════════════════════════════════════════════════════
# CI/CD Pipeline: Сборка и публикация релиза GenAudioBookInfo
# CI/CD Pipeline: Сборка и публикация релиза BookFlow Metadata Engine
# ══════════════════════════════════════════════════════════════════════════════
#
# ЗАПУСК:
@@ -32,7 +32,7 @@ on:
env:
GO_VERSION: "1.24"
APP_NAME: genaudiobookinfo
APP_NAME: bookflow-metadata
BUILD_DIR: build
# ══════════════════════════════════════════════════════════════════════════════
@@ -121,7 +121,7 @@ jobs:
VER="${{ steps.ver.outputs.version }}"
LDFLAGS="-s -w -X main.version=${VER}"
GOFLAGS="-trimpath"
CMD="./cmd/genaudiobookinfo"
CMD="./cmd/bookflow-metadata"
OUT="${BUILD_DIR}"
mkdir -p "${OUT}"
@@ -255,7 +255,7 @@ jobs:
# ── Начинаем формировать тело релиза ───────────────────────────
{
echo "## GenAudioBookInfo ${TAG}"
echo "## BookFlow Metadata Engine ${TAG}"
echo ""
# Пользовательские заметки (RELEASE_NOTES.md — приоритет)
+1
View File
@@ -1,3 +1,4 @@
# Defines project automation or runtime configuration.
name: "Wiki Sync"
on:
+1
View File
@@ -1,3 +1,4 @@
# Excludes generated files and local development data.
*.exe
*.exe~
*.dll
+7 -7
View File
@@ -1,9 +1,9 @@
# GenAudioBookInfo Makefile
# BookFlow Metadata Engine Makefile
# Работает под Windows (PowerShell), Linux и macOS
APP_NAME := genaudiobookinfo
APP_NAME := bookflow-metadata
BUILD_DIR := build
CMD_PATH := ./cmd/genaudiobookinfo
CMD_PATH := ./cmd/bookflow-metadata
GO := go
GOFLAGS := -trimpath
@@ -13,7 +13,7 @@ OUTPUT_DIR := ./result
# ── Параметры Gitea для CI/CD-команд ─────────────────────────────────────────
# Переопределить через env или CLI: make release-tag GITEA_URL=https://...
GITEA_URL ?= https://github.dfv24.com
GITEA_REPO ?= fofanov.dmitry/GenAudioBookInfo
GITEA_REPO ?= fofanov.dmitry/bookflow-metadata
GIT_TOKEN ?=
GITEA_TOKEN ?=
@@ -538,7 +538,7 @@ release:
*) OTHER="$$OTHER\n- $$line" ;; \
esac; \
done; \
BODY="## GenAudioBookInfo $$tag\n\n"; \
BODY="## BookFlow Metadata Engine $$tag\n\n"; \
[ -f RELEASE_NOTES.md ] && BODY="$$BODY$$(cat RELEASE_NOTES.md)\n\n"; \
BODY="$$BODY---\n\n### Информация о сборке\n\n| Параметр | Значение |\n|---|---|\n| Коммит | \`$$COMMIT\` |\n| Дата | $$DATE |\n"; \
BODY_JSON=$$(printf '%s' "$$BODY" | python3 -c 'import sys,json; print(json.dumps(sys.stdin.read()))'); \
@@ -661,12 +661,12 @@ endif
## Показать справку
help:
$(info )
$(info GenAudioBookInfo v$(VERSION) — Makefile)
$(info BookFlow Metadata Engine v$(VERSION) — Makefile)
$(info ─────────────────────────────────────────)
$(info )
$(info Основные:)
$(info make build Сборка для текущей платформы)
$(info make build-windows-current Сборка genaudiobookinfo.exe)
$(info make build-windows-current Сборка bookflow-metadata.exe)
$(info make run Запуск без сборки (workers=8, timeout=60m))
$(info make run-custom ARGS="…" Запуск с параметрами)
$(info make clean Очистка артефактов сборки)
+12 -12
View File
@@ -1,15 +1,15 @@
# GenAudioBookInfo
# BookFlow Metadata Engine
[![](https://img.shields.io/badge/Go-1.24+-00ADD8?logo=go)](https://go.dev "Go version")
[![](https://img.shields.io/gitea/v/release/fofanov.dmitry/GenAudioBookInfo?gitea_url=https://github.dfv24.com&label=release)](https://github.dfv24.com/fofanov.dmitry/GenAudioBookInfo/releases/latest "Latest release")
[![](https://img.shields.io/gitea/last-commit/fofanov.dmitry/GenAudioBookInfo?gitea_url=https://github.dfv24.com)](https://github.dfv24.com/fofanov.dmitry/GenAudioBookInfo/commits/branch/master "Last Commit")
[![](https://img.shields.io/gitea/issues/open/fofanov.dmitry/GenAudioBookInfo?gitea_url=https://github.dfv24.com)](https://github.dfv24.com/fofanov.dmitry/GenAudioBookInfo/issues "Open Issues")
[![](https://img.shields.io/gitea/issues/closed/fofanov.dmitry/GenAudioBookInfo?gitea_url=https://github.dfv24.com&label=closed%20issues&color=green)](https://github.dfv24.com/fofanov.dmitry/GenAudioBookInfo/issues?type=comment&state=closed "Closed Issues")
[![](https://img.shields.io/gitea/languages/count/fofanov.dmitry/GenAudioBookInfo?gitea_url=https://github.dfv24.com)](https://github.dfv24.com/fofanov.dmitry/GenAudioBookInfo "Languages")
[![](https://img.shields.io/gitea/v/release/fofanov.dmitry/bookflow-metadata?gitea_url=https://github.dfv24.com&label=release)](https://github.dfv24.com/fofanov.dmitry/bookflow-metadata/releases/latest "Latest release")
[![](https://img.shields.io/gitea/last-commit/fofanov.dmitry/bookflow-metadata?gitea_url=https://github.dfv24.com)](https://github.dfv24.com/fofanov.dmitry/bookflow-metadata/commits/branch/master "Last Commit")
[![](https://img.shields.io/gitea/issues/open/fofanov.dmitry/bookflow-metadata?gitea_url=https://github.dfv24.com)](https://github.dfv24.com/fofanov.dmitry/bookflow-metadata/issues "Open Issues")
[![](https://img.shields.io/gitea/issues/closed/fofanov.dmitry/bookflow-metadata?gitea_url=https://github.dfv24.com&label=closed%20issues&color=green)](https://github.dfv24.com/fofanov.dmitry/bookflow-metadata/issues?type=comment&state=closed "Closed Issues")
[![](https://img.shields.io/gitea/languages/count/fofanov.dmitry/bookflow-metadata?gitea_url=https://github.dfv24.com)](https://github.dfv24.com/fofanov.dmitry/bookflow-metadata "Languages")
Go-утилита для обработки аудиокниг: сканирует папки, извлекает/нормализует теги, ищет данные через TorrAPI, (опционально) валидирует через OpenRouter, генерирует metadata.json (AudioBookShelf) и раскладывает по структуре.
![Пайплайн GenAudioBookInfo](docs/images/overview.png)
![Пайплайн BookFlow Metadata Engine](docs/images/overview.png)
**English summary.** A concurrent Go CLI that turns inconsistent audiobook folders into Audiobookshelf-ready libraries using embedded tags, optional TorrAPI/OpenRouter enrichment and deterministic `metadata.json` output.
@@ -32,7 +32,7 @@ Go-утилита для обработки аудиокниг: сканируе
```
cmd/
genaudiobookinfo/
bookflow-metadata/
main.go ← Composition Root (точка входа, DI)
internal/
@@ -66,20 +66,20 @@ internal/
## Сборка
```bash
go build -o genaudiobookinfo.exe ./cmd/genaudiobookinfo/
go build -o bookflow-metadata.exe ./cmd/bookflow-metadata/
```
## Использование
```bash
# Сканировать каталог с аудиокнигами
genaudiobookinfo.exe D:\Audiobooks
bookflow-metadata.exe D:\Audiobooks
# Указать количество воркеров
genaudiobookinfo.exe -workers 8 D:\Audiobooks
bookflow-metadata.exe -workers 8 D:\Audiobooks
# Установить таймаут
genaudiobookinfo.exe -timeout 60s D:\Audiobooks
bookflow-metadata.exe -timeout 60s D:\Audiobooks
```
## Поддерживаемые форматы
@@ -13,11 +13,11 @@ import (
"syscall"
"time"
"github.com/fofanov/genaudiobookinfo/internal/domain"
"github.com/fofanov/genaudiobookinfo/internal/infrastructure"
"github.com/fofanov/genaudiobookinfo/internal/presentation"
"github.com/fofanov/genaudiobookinfo/internal/usecase"
"github.com/joho/godotenv"
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/infrastructure"
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/presentation"
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/usecase"
)
var version = "dev" // переопределяется при сборке: -ldflags "-X main.version=X.Y.Z"
@@ -78,7 +78,7 @@ func main() {
cfg := loadConfig(".env")
if *showVersion {
fmt.Printf("GenAudioBookInfo v%s\n", version)
fmt.Printf("BookFlow Metadata Engine v%s\n", version)
os.Exit(0)
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 KiB

After

Width:  |  Height:  |  Size: 1.0 MiB

+1 -1
View File
@@ -1,4 +1,4 @@
module github.com/fofanov/genaudiobookinfo
module github.dfv24.com/fofanov.dmitry/bookflow-metadata
go 1.24.2
+14 -14
View File
@@ -6,22 +6,22 @@ import "time"
// AudioBookInfo — агрегат, содержащий метаданные аудиокниги.
type AudioBookInfo struct {
FolderPath string // путь к папке с аудиокнигой
Title string // название книги
Author string // автор
Album string // альбом (часто совпадает с названием)
Genre string // жанр
Year int // год издания
Comment string // описание / комментарий
Duration time.Duration // длительность первого трека
Format string // формат файла (mp3, m4b, ogg …)
SourceFile string // файл, из которого извлечены метаданные
CoverFound bool // обложка найдена
FilesCount int // количество аудиофайлов в папке
FolderPath string // путь к папке с аудиокнигой
Title string // название книги
Author string // автор
Album string // альбом (часто совпадает с названием)
Genre string // жанр
Year int // год издания
Comment string // описание / комментарий
Duration time.Duration // длительность первого трека
Format string // формат файла (mp3, m4b, ogg …)
SourceFile string // файл, из которого извлечены метаданные
CoverFound bool // обложка найдена
FilesCount int // количество аудиофайлов в папке
}
// ScanResult оборачивает результат сканирования одной папки.
type ScanResult struct {
Info *AudioBookInfo
Err error
Info *AudioBookInfo
Err error
}
+21 -21
View File
@@ -63,10 +63,10 @@ type TorrentDetail struct {
type TrackerName string
const (
TrackerRuTracker TrackerName = "RuTracker"
TrackerKinozal TrackerName = "Kinozal"
TrackerNoNameClub TrackerName = "NoNameClub"
TrackerRuTor TrackerName = "RuTor"
TrackerRuTracker TrackerName = "RuTracker"
TrackerKinozal TrackerName = "Kinozal"
TrackerNoNameClub TrackerName = "NoNameClub"
TrackerRuTor TrackerName = "RuTor"
)
// TrackerPriority — порядок обхода трекеров.
@@ -97,23 +97,23 @@ type EnrichedBookInfo struct {
// BookMetadata — JSON-структура файла metadata.json.
type BookMetadata struct {
Tags []string `json:"tags"`
Chapters []ChapterInfo `json:"chapters"`
Title string `json:"title"`
Subtitle string `json:"subtitle"`
Authors []string `json:"authors"`
Narrators []string `json:"narrators"`
Series []string `json:"series"`
Genres []string `json:"genres"`
PublishedYear string `json:"publishedYear"`
PublishedDate string `json:"publishedDate"`
Publisher string `json:"publisher"`
Description string `json:"description"`
ISBN string `json:"isbn"`
ASIN string `json:"asin"`
Language string `json:"language"`
Explicit bool `json:"explicit"`
Abridged bool `json:"abridged"`
Tags []string `json:"tags"`
Chapters []ChapterInfo `json:"chapters"`
Title string `json:"title"`
Subtitle string `json:"subtitle"`
Authors []string `json:"authors"`
Narrators []string `json:"narrators"`
Series []string `json:"series"`
Genres []string `json:"genres"`
PublishedYear string `json:"publishedYear"`
PublishedDate string `json:"publishedDate"`
Publisher string `json:"publisher"`
Description string `json:"description"`
ISBN string `json:"isbn"`
ASIN string `json:"asin"`
Language string `json:"language"`
Explicit bool `json:"explicit"`
Abridged bool `json:"abridged"`
}
// ChapterInfo — информация о главе.
+1 -1
View File
@@ -45,7 +45,7 @@ func (d *HTTPCoverDownloader) Download(ctx context.Context, url string, destFold
if err != nil {
return fmt.Errorf("ошибка создания запроса обложки: %w", err)
}
req.Header.Set("User-Agent", "GenAudioBookInfo/1.0")
req.Header.Set("User-Agent", "BookFlow Metadata Engine/1.0")
resp, err := d.httpClient.Do(req)
if err != nil {
@@ -13,8 +13,8 @@ import (
"unicode/utf8"
"github.com/dhowden/tag"
"github.com/fofanov/genaudiobookinfo/internal/domain"
"github.com/fofanov/genaudiobookinfo/internal/nameparser"
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/nameparser"
)
// TagMetadataExtractor реализует domain.MetadataExtractor.
+1 -1
View File
@@ -14,7 +14,7 @@ import (
"strings"
"time"
"github.com/fofanov/genaudiobookinfo/internal/domain"
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
)
// OpenRouterClient реализует интерфейс domain.LLMClient для работы с OpenRouter API.
+2 -2
View File
@@ -17,9 +17,9 @@ import (
"unicode/utf8"
"github.com/dhowden/tag"
"github.com/fofanov/genaudiobookinfo/internal/domain"
"github.com/fofanov/genaudiobookinfo/internal/nameparser"
"github.com/tcolgate/mp3"
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/nameparser"
)
// FSResultWriter реализует domain.ResultWriter.
+1 -1
View File
@@ -14,7 +14,7 @@ import (
"strings"
"time"
"github.com/fofanov/genaudiobookinfo/internal/domain"
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
)
// TorrAPIClient реализует domain.TorrentSearcher.
+1 -1
View File
@@ -11,7 +11,7 @@ import (
"strings"
"unicode"
"github.com/fofanov/genaudiobookinfo/internal/domain"
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
)
// ============================================================================
+1 -1
View File
@@ -7,8 +7,8 @@ import (
"os"
"sync"
"github.com/fofanov/genaudiobookinfo/internal/domain"
"github.com/schollz/progressbar/v3"
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
)
// ConsoleLogger реализует domain.ProcessLogger для вывода логов в консоль.
+1 -1
View File
@@ -8,7 +8,7 @@ import (
"strings"
"text/tabwriter"
"github.com/fofanov/genaudiobookinfo/internal/domain"
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
)
// ConsolePresenter реализует domain.Presenter для вывода в stdout.
+3 -3
View File
@@ -14,7 +14,7 @@ import (
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
"github.com/fofanov/genaudiobookinfo/internal/domain"
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
)
// ═══════════════════════════════════════════════════════════════════════
@@ -210,9 +210,9 @@ func (m tuiModel) renderTop(height int) string {
elapsed := time.Since(m.startTime).Round(time.Second)
var titleStr string
if m.version != "" {
titleStr = tuiStyleHeader.Render("GenAudioBookInfo") + " " + tuiStyleVersion.Render("v"+m.version)
titleStr = tuiStyleHeader.Render("BookFlow Metadata Engine") + " " + tuiStyleVersion.Render("v"+m.version)
} else {
titleStr = tuiStyleHeader.Render("GenAudioBookInfo")
titleStr = tuiStyleHeader.Render("BookFlow Metadata Engine")
}
b.WriteString(fmt.Sprintf(" %s %s\n", titleStr, tuiStyleTime.Render(elapsed.String())))
+2 -2
View File
@@ -17,8 +17,8 @@ import (
"sync"
"time"
"github.com/fofanov/genaudiobookinfo/internal/domain"
"github.com/fofanov/genaudiobookinfo/internal/nameparser"
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/domain"
"github.dfv24.com/fofanov.dmitry/bookflow-metadata/internal/nameparser"
)
// ProcessingConfig содержит настройки конвейера обработки.
+4 -3
View File
@@ -1,3 +1,4 @@
# Implements Windows project automation.
<#
.SYNOPSIS
Полный локальный релиз: сборка + архивы + тег + публикация в Gitea.
@@ -21,10 +22,10 @@
param(
[Parameter(Mandatory)][string]$Version,
[string]$Token,
[string]$AppName = "genaudiobookinfo",
[string]$AppName = "bookflow-metadata",
[string]$BuildDir = "build",
[string]$GiteaUrl = "https://github.dfv24.com",
[string]$GiteaRepo = "fofanov.dmitry/GenAudioBookInfo",
[string]$GiteaRepo = "fofanov.dmitry/bookflow-metadata",
[string]$GoVersion = "unknown"
)
@@ -166,7 +167,7 @@ $other = @()
}
# Формируем тело релиза
$body = "## GenAudioBookInfo $tag`n`n"
$body = "## BookFlow Metadata Engine $tag`n`n"
if (Test-Path 'RELEASE_NOTES.md') {
$body += (Get-Content 'RELEASE_NOTES.md' -Raw) + "`n`n"
+4 -4
View File
@@ -1,6 +1,6 @@
# Архитектура
GenAudioBookInfo построен по принципам **Чистой архитектуры** (Clean Architecture / Hexagonal Architecture).
BookFlow Metadata Engine построен по принципам **Чистой архитектуры** (Clean Architecture / Hexagonal Architecture).
Бизнес-логика не зависит от внешних библиотек, баз данных или UI-фреймворков.
---
@@ -9,7 +9,7 @@ GenAudioBookInfo построен по принципам **Чистой арх
```
┌──────────────────────────────────────────────────────────┐
│ cmd/genaudiobookinfo/main.go (Composition Root / DI) │
│ cmd/bookflow-metadata/main.go (Composition Root / DI) │
├──────────────────────────────────────────────────────────┤
│ presentation/ TUI, ConsoleLogger, Presenter │
├──────────────────────────────────────────────────────────┤
@@ -29,9 +29,9 @@ GenAudioBookInfo построен по принципам **Чистой арх
## Структура папок
```
genaudiobookinfo/
bookflow-metadata/
├── cmd/
│ └── genaudiobookinfo/
│ └── bookflow-metadata/
│ └── main.go # Точка входа, DI, TUI запуск
├── internal/
│ ├── domain/
+10 -10
View File
@@ -3,7 +3,7 @@
## Синтаксис
```
genaudiobookinfo [опции] [путь к каталогу с аудиокнигами]
bookflow-metadata [опции] [путь к каталогу с аудиокнигами]
```
Если путь не передан, используется `dir.in` из `config.yaml`.
@@ -35,37 +35,37 @@ CLI-флаг > config.yaml > встроенные defaults
### Минимальный запуск (всё из config.yaml)
```bash
./genaudiobookinfo
./bookflow-metadata
```
### Указать входной каталог явно
```bash
./genaudiobookinfo D:\Audiobooks
./bookflow-metadata D:\Audiobooks
```
### Переопределить количество воркеров
```bash
./genaudiobookinfo -workers 6 D:\Audiobooks
./bookflow-metadata -workers 6 D:\Audiobooks
```
### Другой сервер TorrAPI
```bash
./genaudiobookinfo -api http://192.168.1.10:9200 D:\Audiobooks
./bookflow-metadata -api http://192.168.1.10:9200 D:\Audiobooks
```
### Указать нестандартную папку результатов
```bash
./genaudiobookinfo -result E:\ProcessedBooks D:\Audiobooks
./bookflow-metadata -result E:\ProcessedBooks D:\Audiobooks
```
### Полный набор параметров
```bash
./genaudiobookinfo \
./bookflow-metadata \
-workers 4 \
-timeout 30m \
-api http://localhost:9200 \
@@ -76,8 +76,8 @@ CLI-флаг > config.yaml > встроенные defaults
### Проверить версию
```bash
./genaudiobookinfo -version
# GenAudioBookInfo v2.0.0
./bookflow-metadata -version
# BookFlow Metadata Engine v2.0.0
```
---
@@ -90,7 +90,7 @@ CLI-флаг > config.yaml > встроенные defaults
```bash
export OPENROUTER_API_KEY=sk-or-v1-xxxx
./genaudiobookinfo D:\Audiobooks
./bookflow-metadata D:\Audiobooks
```
---
+1 -1
View File
@@ -90,7 +90,7 @@ OPENROUTER_RETRY_BACKOFF_MAX=8s
```bash
export OPENROUTER_API_KEY=sk-or-...
./genaudiobookinfo
./bookflow-metadata
```
---
+6 -6
View File
@@ -1,4 +1,4 @@
# GenAudioBookInfo
# BookFlow Metadata Engine
> Автоматический каталогизатор аудиокниг с обогащением метаданных из торрент-трекеров и LLM.
@@ -15,20 +15,20 @@
```bash
# Сборка
go build -o genaudiobookinfo ./cmd/genaudiobookinfo
go build -o bookflow-metadata ./cmd/bookflow-metadata
# Первичная настройка
cp .env.example .env
# Отредактировать .env: задать DIR_IN, TORRAPI_URL, OPENROUTER_API_KEY
# Запуск (входная папка из DIR_IN в .env)
./genaudiobookinfo
./bookflow-metadata
# Явное указание каталога
./genaudiobookinfo D:\Audiobooks
./bookflow-metadata D:\Audiobooks
# С переопределением параметров
./genaudiobookinfo -workers 4 -timeout 10m D:\Audiobooks
./bookflow-metadata -workers 4 -timeout 10m D:\Audiobooks
```
Полная документация по флагам: [[CLI-Usage]].
@@ -58,7 +58,7 @@ cp .env.example .env
## Ссылки
- Репозиторий: `https://github.dfv24.com/fofanov/genaudiobookinfo`
- Репозиторий: `https://github.dfv24.com/fofanov.dmitry/bookflow-metadata`
- Документация OpenRouter: [[OpenRouter]]
Sync test 2026-02-23T14:27:00
+6 -6
View File
@@ -12,14 +12,14 @@
```bash
# Клонировать репозиторий
git clone https://github.dfv24.com/fofanov/genaudiobookinfo.git
cd genaudiobookinfo
git clone https://github.dfv24.com/fofanov.dmitry/bookflow-metadata.git
cd bookflow-metadata
# Загрузить зависимости
go mod tidy
# Сборка
go build -o genaudiobookinfo ./cmd/genaudiobookinfo
go build -o bookflow-metadata ./cmd/bookflow-metadata
# Или через Makefile
make build
@@ -28,7 +28,7 @@ make build
### Windows
```powershell
go build -o genaudiobookinfo.exe ./cmd/genaudiobookinfo
go build -o bookflow-metadata.exe ./cmd/bookflow-metadata
```
## Зависимости
@@ -69,7 +69,7 @@ TORRAPI_URL=http://localhost:9200 # адрес TorrServer
4. Запустить:
```bash
./genaudiobookinfo
./bookflow-metadata
```
## Проверка сборки
@@ -77,7 +77,7 @@ TORRAPI_URL=http://localhost:9200 # адрес TorrServer
```bash
go vet ./...
go test ./...
./genaudiobookinfo -version
./bookflow-metadata -version
```
## Обновление
+25 -25
View File
@@ -10,16 +10,16 @@
| Переменная | Значение по умолчанию | Назначение |
|---------------|-----------------------------------|----------------------------------------------------|
| `APP_NAME` | `genaudiobookinfo` | Имя исполняемого файла |
| `APP_NAME` | `bookflow-metadata` | Имя исполняемого файла |
| `VERSION` | `2.0.0` | Версия, встраивается в бинарник через `-ldflags` |
| `BUILD_DIR` | `build` | Директория для артефактов сборки |
| `CMD_PATH` | `./cmd/genaudiobookinfo` | Путь к `main.go` |
| `CMD_PATH` | `./cmd/bookflow-metadata` | Путь к `main.go` |
| `GO` | `go` | Команда Go-компилятора |
| `GOFLAGS` | `-trimpath` | Флаги компилятора (убирает пути хоста из бинарника)|
| `LDFLAGS` | `-s -w -X main.version=$(VERSION)`| Линковщик: strip debug, strip DWARF, встроить версию |
| `OUTPUT_DIR` | `./result` | Директория с результатами работы программы |
| `GITEA_URL` | `https://github.dfv24.com` | Адрес Gitea-инстанции |
| `GITEA_REPO` | `fofanov/genaudiobookinfo` | Владелец/репозиторий в Gitea |
| `GITEA_REPO` | `fofanov/bookflow-metadata` | Владелец/репозиторий в Gitea |
| `GITEA_TOKEN` | *(пусто)* | Токен API Gitea (нужен только для `ci-release`) |
Переменные можно переопределять при вызове:
@@ -56,9 +56,9 @@ make all
| ОС | Результирующий файл |
|---------|----------------------------------|
| Windows | `build/genaudiobookinfo.exe` |
| Linux | `build/genaudiobookinfo` |
| macOS | `build/genaudiobookinfo` |
| Windows | `build/bookflow-metadata.exe` |
| Linux | `build/bookflow-metadata` |
| macOS | `build/bookflow-metadata` |
Флаги компилятора: `-trimpath -ldflags "-s -w -X main.version=2.0.0"`.
@@ -70,7 +70,7 @@ make build VERSION=2.1.0 # встроить другую версию
---
### `make build-windows-current`
Компилирует `genaudiobookinfo.exe` (Windows/amd64) **в корневой директории проекта** (не в `build/`). Удобно для быстрой локальной проверки на Windows без отдельной папки.
Компилирует `bookflow-metadata.exe` (Windows/amd64) **в корневой директории проекта** (не в `build/`). Удобно для быстрой локальной проверки на Windows без отдельной папки.
```bash
make build-windows-current
@@ -182,7 +182,7 @@ make tidy
### `make clean`
Удаляет артефакты сборки:
- папку `build/`
- файл `genaudiobookinfo.exe` в корне (от `build-windows-current`)
- файл `bookflow-metadata.exe` в корне (от `build-windows-current`)
- файлы `coverage.out` и `coverage.html`
```bash
@@ -229,22 +229,22 @@ make build-all VERSION=2.1.0
| Команда make | GOOS | GOARCH | Доп. флаг | Файл |
|-------------------------|---------|----------|---------------|---------------------------------------------|
| `build-linux-amd64` | linux | amd64 | — | `genaudiobookinfo-linux-amd64` |
| `build-linux-386` | linux | 386 | — | `genaudiobookinfo-linux-386` |
| `build-linux-arm64` | linux | arm64 | — | `genaudiobookinfo-linux-arm64` |
| `build-linux-arm7` | linux | arm | GOARM=7 | `genaudiobookinfo-linux-armv7` |
| `build-darwin-amd64` | darwin | amd64 | — | `genaudiobookinfo-darwin-amd64` |
| `build-darwin-arm64` | darwin | arm64 | — | `genaudiobookinfo-darwin-arm64` |
| `build-windows-amd64` | windows | amd64 | — | `genaudiobookinfo-windows-amd64.exe` |
| `build-windows-386` | windows | 386 | — | `genaudiobookinfo-windows-386.exe` |
| `build-windows-arm64` | windows | arm64 | — | `genaudiobookinfo-windows-arm64.exe` |
| `build-arm-mips` | linux | mips | GOMIPS=softfloat | `genaudiobookinfo-linux-mips` |
| `build-arm-mipsle` | linux | mipsle | GOMIPS=softfloat | `genaudiobookinfo-linux-mipsle` |
| `build-arm-riscv64` | linux | riscv64 | — | `genaudiobookinfo-linux-riscv64` |
| `build-freebsd-amd64` | freebsd | amd64 | — | `genaudiobookinfo-freebsd-amd64` |
| `build-freebsd-arm64` | freebsd | arm64 | — | `genaudiobookinfo-freebsd-arm64` |
| `build-openbsd-amd64` | openbsd | amd64 | — | `genaudiobookinfo-openbsd-amd64` |
| `build-netbsd-amd64` | netbsd | amd64 | — | `genaudiobookinfo-netbsd-amd64` |
| `build-linux-amd64` | linux | amd64 | — | `bookflow-metadata-linux-amd64` |
| `build-linux-386` | linux | 386 | — | `bookflow-metadata-linux-386` |
| `build-linux-arm64` | linux | arm64 | — | `bookflow-metadata-linux-arm64` |
| `build-linux-arm7` | linux | arm | GOARM=7 | `bookflow-metadata-linux-armv7` |
| `build-darwin-amd64` | darwin | amd64 | — | `bookflow-metadata-darwin-amd64` |
| `build-darwin-arm64` | darwin | arm64 | — | `bookflow-metadata-darwin-arm64` |
| `build-windows-amd64` | windows | amd64 | — | `bookflow-metadata-windows-amd64.exe` |
| `build-windows-386` | windows | 386 | — | `bookflow-metadata-windows-386.exe` |
| `build-windows-arm64` | windows | arm64 | — | `bookflow-metadata-windows-arm64.exe` |
| `build-arm-mips` | linux | mips | GOMIPS=softfloat | `bookflow-metadata-linux-mips` |
| `build-arm-mipsle` | linux | mipsle | GOMIPS=softfloat | `bookflow-metadata-linux-mipsle` |
| `build-arm-riscv64` | linux | riscv64 | — | `bookflow-metadata-linux-riscv64` |
| `build-freebsd-amd64` | freebsd | amd64 | — | `bookflow-metadata-freebsd-amd64` |
| `build-freebsd-arm64` | freebsd | arm64 | — | `bookflow-metadata-freebsd-arm64` |
| `build-openbsd-amd64` | openbsd | amd64 | — | `bookflow-metadata-openbsd-amd64` |
| `build-netbsd-amd64` | netbsd | amd64 | — | `bookflow-metadata-netbsd-amd64` |
Каждую платформу можно собирать независимо:
@@ -319,7 +319,7 @@ make release-tag VERSION=2.1.0 # 2. создаём тег → CI запу
> **Внимание**: если `VERSION` не изменён (остался `2.0.0`), команда выведет предупреждение, но тег всё равно будет создан. Обязательно указывайте нужную версию явно.
После создания тега статус CI доступен по адресу:
`https://github.dfv24.com/fofanov/genaudiobookinfo/actions`
`https://github.dfv24.com/fofanov.dmitry/bookflow-metadata/actions`
---
+2 -2
View File
@@ -1,6 +1,6 @@
# OpenRouter (LLM интеграция)
GenAudioBookInfo поддерживает опциональную нормализацию метаданных через LLM с помощью [OpenRouter](https://openrouter.ai/) — унифицированного API-шлюза к сотням AI-моделей.
BookFlow Metadata Engine поддерживает опциональную нормализацию метаданных через LLM с помощью [OpenRouter](https://openrouter.ai/) — унифицированного API-шлюза к сотням AI-моделей.
---
@@ -34,7 +34,7 @@ openrouter:
```bash
export OPENROUTER_API_KEY=sk-or-v1-xxxx
./genaudiobookinfo
./bookflow-metadata
```
Переменная `OPENROUTER_API_KEY` проверяется если `api_key` в конфиге пуст.
+2 -2
View File
@@ -1,6 +1,6 @@
# TorrAPI (Поиск на трекерах)
GenAudioBookInfo использует [TorrServer](https://github.com/YouROK/TorrServer) / TorrAPI-совместимый сервер для поиска аудиокниг на торрент-трекерах и получения метаданных раздач.
BookFlow Metadata Engine использует [TorrServer](https://github.com/YouROK/TorrServer) / TorrAPI-совместимый сервер для поиска аудиокниг на торрент-трекерах и получения метаданных раздач.
---
@@ -40,7 +40,7 @@ torrapi:
Можно переопределить флагом:
```bash
./genaudiobookinfo -api http://192.168.1.10:9200 D:\Audiobooks
./bookflow-metadata -api http://192.168.1.10:9200 D:\Audiobooks
```
---
+1 -1
View File
@@ -1,4 +1,4 @@
## GenAudioBookInfo
## BookFlow Metadata Engine
- [[Home]]
- [[Installation]]