# Конфигурация (`.env`) Все параметры хранятся в файле `.env` в корне проекта. Копируется из `.env.example` при первой настройке. Файл `.env` не коммитится в Git. Параметры командной строки (где применимо) **переопределяют** значения из `.env`. --- ## Пути ```env DIR_IN=D:\Audiobooks DIR_OUT=D:\Audiobooks\result ``` | Переменная | Тип | По умолчанию | Описание | |---|---|---|---| | `DIR_IN` | string | — | Корневой каталог для сканирования. Можно переопределить аргументом CLI. | | `DIR_OUT` | string | `/result` | Куда складывать обработанные книги. Можно переопределить флагом `-result`. | --- ## TorrAPI сервер ```env TORRAPI_URL=http://localhost:9200 ``` | Переменная | Тип | По умолчанию | Описание | |---|---|---|---| | `TORRAPI_URL` | string | `http://localhost:9200` | URL TorrAPI-совместимого сервера. Переопределяется флагом `-api`. | --- ## Параметры конвейера ```env PROCESSING_WORKERS=2 PROCESSING_TIMEOUT=5m PROCESSING_SEARCH_RETRIES=3 PROCESSING_SEARCH_RETRY_DELAY=3s PROCESSING_SEARCH_CONCURRENCY=2 ``` | Переменная | Тип | По умолчанию | Описание | |---|---|---|---| | `PROCESSING_WORKERS` | int | `2` | Число параллельных горутин-воркеров (Fan-Out). Переопределяется `-workers`. | | `PROCESSING_TIMEOUT` | duration | `5m` | Дедлайн для всей сессии обработки. Переопределяется `-timeout`. | | `PROCESSING_SEARCH_RETRIES` | int | `3` | Сколько попыток найти книгу на трекерах перед перемещением в `ERROR/`. | | `PROCESSING_SEARCH_RETRY_DELAY` | duration | `3s` | Задержка между повторными попытками поиска. | | `PROCESSING_SEARCH_CONCURRENCY` | int | `2` | Ограничение числа одновременных HTTP-запросов к TorrAPI (семафор). | ### Приоритет параметров ``` CLI-флаг (-workers/-timeout) > .env > встроенные defaults ``` Флаги `-workers` и `-timeout` со значением `0` (умолчание) не перетирают значение из `.env`. --- ## OpenRouter LLM (опционально) ```env OPENROUTER_API_KEY=sk-or-v1-your-key OPENROUTER_BASE_URL=https://openrouter.ai/api/v1 OPENROUTER_TIMEOUT=120s OPENROUTER_MODEL=openai/gpt-4o-mini OPENROUTER_MAX_RETRIES=3 OPENROUTER_RETRY_BACKOFF=1s OPENROUTER_RETRY_BACKOFF_MAX=8s # OPENROUTER_PROMPT= # опционально, переопределяет встроенный промпт ``` | Переменная | Тип | По умолчанию | Описание | |---|---|---|---| | `OPENROUTER_API_KEY` | string | `""` | API ключ. Если пуст — LLM выключен. Можно передать через переменную окружения ОС. | | `OPENROUTER_BASE_URL` | string | `https://openrouter.ai/api/v1` | Базовый URL API. | | `OPENROUTER_TIMEOUT` | duration | `120s` | Таймаут одного запроса к API. | | `OPENROUTER_MODEL` | string | `openai/gpt-3.5-turbo` | Идентификатор модели в формате `provider/model`. | | `OPENROUTER_MAX_RETRIES` | int | `3` | Количество ретраев при ошибках API. | | `OPENROUTER_RETRY_BACKOFF` | duration | `1s` | Начальная задержка между ретраями (экспоненциальный backoff). | | `OPENROUTER_RETRY_BACKOFF_MAX` | duration | `8s` | Максимальная задержка backoff. | | `OPENROUTER_PROMPT` | string | (встроенный) | Системный промпт. Если не задан — используется дефолтный из кода. | ### Ключ через переменную окружения ОС `OPENROUTER_API_KEY` можно не писать в `.env` — достаточно задать в окружении ОС. Переменные ОС имеют приоритет над `.env`: ```bash export OPENROUTER_API_KEY=sk-or-... ./genaudiobookinfo ``` --- ## Форматы продолжительностей Go-синтаксис: `300ms`, `1.5s`, `2m30s`, `1h`. Примеры для `*_TIMEOUT`: `5m`, `10m`, `1h30m`. --- ## Полный пример `.env` ```env # Пути DIR_IN=D:\Audiobooks DIR_OUT=D:\Audiobooks\result # TorrAPI TORRAPI_URL=http://localhost:9200 # Конвейер PROCESSING_WORKERS=4 PROCESSING_TIMEOUT=15m PROCESSING_SEARCH_RETRIES=3 PROCESSING_SEARCH_RETRY_DELAY=3s PROCESSING_SEARCH_CONCURRENCY=2 # OpenRouter OPENROUTER_API_KEY=sk-or-v1-xxxxxxxxxxxxxxxxxxxx OPENROUTER_BASE_URL=https://openrouter.ai/api/v1 OPENROUTER_TIMEOUT=120s OPENROUTER_MODEL=openai/gpt-4o-mini OPENROUTER_MAX_RETRIES=3 OPENROUTER_RETRY_BACKOFF=1s OPENROUTER_RETRY_BACKOFF_MAX=8s ```