Стилистическое редактирование
This commit is contained in:
488
README.md
488
README.md
@@ -1,53 +1,56 @@
|
|||||||
# AE Anons - Automated After Effects Announcement Generator
|
# AE Anons - Автоматизированный генератор спортивных анонсов After Effects
|
||||||
|
|
||||||
Automated pipeline for generating sports announcements using After Effects templates via Nexrender, with data sourced from Synology Office spreadsheets.
|
Автоматизированная система для создания спортивных анонсов с использованием шаблонов After Effects через Nexrender, с данными из электронных таблиц Synology Office.
|
||||||
|
|
||||||
## Overview
|
## Обзор
|
||||||
|
|
||||||
AE Anons automates the creation of broadcast announcement videos by:
|
AE Anons автоматизирует создание видеороликов спортивных анонсов путем:
|
||||||
|
|
||||||
1. Connecting to Synology NAS to retrieve schedule data from Office spreadsheets (.osheet)
|
1. Подключения к NAS Synology для получения данных расписания из файлов офисных таблиц (.osheet)
|
||||||
2. Parsing Excel data containing sports events, teams, channels and timing information
|
2. Парсинга Excel данных, содержащих информацию о спортивных событиях, командах, каналах и временных интервалах
|
||||||
3. Generating Nexrender jobs with appropriate templates and assets
|
3. Генерации заданий Nexrender с соответствующими шаблонами и ресурсами
|
||||||
4. Monitoring render completion and managing output files
|
4. Мониторинга завершения рендеринга и управления выходными файлами
|
||||||
|
|
||||||
## Features
|
## Особенности
|
||||||
|
|
||||||
- **Synology Integration**: Seamless authentication and file retrieval from Synology NAS
|
- **Интеграция с Synology**: Плавная аутентификация и загрузка файлов с NAS Synology
|
||||||
- **Office Spreadsheet Export**: Automatic conversion of .osheet files to Excel format
|
- **Экспорт офисных таблиц**: Автоматическое преобразование файлов .osheet в формат Excel
|
||||||
- **Flexible Data Parsing**: Dynamic sheet parsing with header detection
|
- **Гибкий парсинг данных**: Динамический парсинг листов с обнаружением заголовков
|
||||||
- **Multi-variant Generation**: Creates "Today", "Tomorrow" and dated variants for each announcement
|
- **Множественная генерация вариантов**: Создание "Сегодня", "Завтра" и датированных версий для каждого анонса
|
||||||
- **Smart Logo Management**: Automatic logo resolution and scaling based on team/sport associations
|
- **Умное управление логотипами**: Автоматическое разрешение и масштабирование логотипов на основе связей команд/спорта
|
||||||
- **Nexrender Job Orchestration**: Automated job submission, monitoring and cleanup
|
- **Оркестрация заданий Nexrender**: Автоматическая отправка, мониторинг и очистка заданий
|
||||||
- **Professional Logging**: Structured logging with configurable verbosity levels
|
- **Профессиональное логирование**: Структурированный журнал с возможностью настройки уровня детализации
|
||||||
- **Environment-based Configuration**: All settings managed via `.env` file
|
- **Конфигурация через переменные окружения**: Все параметры управляются через файл `.env`
|
||||||
|
|
||||||
## Prerequisites
|
## Предварительные требования
|
||||||
|
|
||||||
- Rust 1.70 or higher
|
- Rust 1.70 или выше
|
||||||
- Access to Synology NAS with File Station and Office enabled
|
- Доступ к NAS Synology с включенными File Station и Office
|
||||||
- Nexrender server instance
|
- Экземпляр сервера Nexrender
|
||||||
- After Effects templates configured on render nodes
|
- Шаблоны After Effects, настроенные на узлах рендеринга (формат Adobe After Effects 2024 .aepx)
|
||||||
|
|
||||||
## Installation
|
## Установка
|
||||||
|
|
||||||
### 1. Clone the Repository
|
### 1. Клонирование репозитория
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/your-org/ae_anons.git
|
git clone https://github.com/your-org/ae_anons.git
|
||||||
cd ae_anons
|
cd ae_anons
|
||||||
|
```
|
||||||
|
|
||||||
2. Build the Project
|
### 2. Сборка проекта
|
||||||
bash
|
|
||||||
|
|
||||||
|
```bash
|
||||||
cargo build --release
|
cargo build --release
|
||||||
|
```
|
||||||
|
|
||||||
The binary will be available at target/release/ae_anons
|
Бинарный файл будет доступен по пути `target/release/ae_anons`
|
||||||
3. Configure Environment
|
|
||||||
|
|
||||||
Create a .env file in the project root:
|
### 3. Настройка окружения
|
||||||
env
|
|
||||||
|
|
||||||
|
Создайте файл `.env` в корне проекта:
|
||||||
|
|
||||||
|
```env
|
||||||
NAS_FQDN=https://your-synology-nas.example.com:5001
|
NAS_FQDN=https://your-synology-nas.example.com:5001
|
||||||
NAS_USER=service_account
|
NAS_USER=service_account
|
||||||
NAS_PASS=secure_password
|
NAS_PASS=secure_password
|
||||||
@@ -55,292 +58,291 @@ NAS_FILE=/Team Folder/Broadcast/Auto_Anons/schedule.osheet
|
|||||||
NEXRENDER_API_URL=http://nexrender-server:3000/api/v1/jobs
|
NEXRENDER_API_URL=http://nexrender-server:3000/api/v1/jobs
|
||||||
OUTPUT_FOLDER=//file-server/edit/Auto_Anons
|
OUTPUT_FOLDER=//file-server/edit/Auto_Anons
|
||||||
RUST_LOG=info
|
RUST_LOG=info
|
||||||
|
```
|
||||||
|
|
||||||
See Configuration section for detailed options.
|
См. раздел Конфигурация для подробной информации.
|
||||||
Usage
|
|
||||||
Basic Execution
|
|
||||||
bash
|
|
||||||
|
|
||||||
# Run with default configuration
|
## Использование
|
||||||
|
|
||||||
|
### Базовое выполнение
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Запуск с настройками по умолчанию
|
||||||
./target/release/ae_anons
|
./target/release/ae_anons
|
||||||
|
|
||||||
# Run with custom log level
|
# Запуск с пользовательским уровнем логирования
|
||||||
RUST_LOG=debug ./target/release/ae_anons
|
RUST_LOG=debug ./target/release/ae_anons
|
||||||
|
```
|
||||||
|
|
||||||
# Run with specific .env file
|
## Уровни логирования
|
||||||
dotenv -f /path/to/.env.production run ./target/release/ae_anons
|
|
||||||
|
|
||||||
Development Mode
|
Управляйте детализацией вывода через переменную окружения `RUST_LOG`:
|
||||||
bash
|
|
||||||
|
|
||||||
cargo run
|
- **error** - Только критические ошибки
|
||||||
|
- **warn** - Предупреждения и ошибки
|
||||||
Logging Levels
|
- **info** - Общие операционные сообщения (по умолчанию)
|
||||||
|
- **debug** - Детальная информация о процессе обработки
|
||||||
Control output verbosity via RUST_LOG environment variable:
|
- **trace** - Полное отладочное логирование с деталями API вызовов
|
||||||
|
|
||||||
error - Only critical errors
|
|
||||||
|
|
||||||
warn - Warnings and errors
|
|
||||||
|
|
||||||
info - General operational messages (default)
|
|
||||||
|
|
||||||
debug - Detailed processing information
|
|
||||||
|
|
||||||
trace - Full debugging with API call details
|
|
||||||
|
|
||||||
bash
|
|
||||||
|
|
||||||
|
```bash
|
||||||
RUST_LOG=debug cargo run
|
RUST_LOG=debug cargo run
|
||||||
|
```
|
||||||
|
|
||||||
Configuration
|
## Конфигурация
|
||||||
Environment Variables
|
|
||||||
Variable Required Default Description
|
|
||||||
NAS_FQDN Yes - Synology NAS URL with protocol and port
|
|
||||||
NAS_USER Yes - Synology account username
|
|
||||||
NAS_PASS Yes - Synology account password
|
|
||||||
NAS_FILE Yes - Full path to .osheet file on NAS
|
|
||||||
NEXRENDER_API_URL
|
|
||||||
OUTPUT_FOLDER Network path for rendered videos
|
|
||||||
RUST_LOG No info Logging verbosity level
|
|
||||||
Spreadsheet Structure
|
|
||||||
|
|
||||||
The input Excel file (converted from .osheet) must contain the following sheets:
|
### Переменные окружения
|
||||||
Start Sheet
|
|
||||||
|
|
||||||
Main data source for announcements generation.
|
| Переменная | Обязательна | Описание |
|
||||||
Column Description Example
|
|------------|-------------|----------|
|
||||||
STATE Processing flag FALSE (active), TRUE (skip)
|
| `NAS_FQDN` | Да | URL NAS Synology с протоколом и портом |
|
||||||
SPORT Sport category Футбол, Хоккей
|
| `NAS_USER` | Да | Имя пользователя учетной записи Synology |
|
||||||
LEAGUE League name Премьер-лига
|
| `NAS_PASS` | Да | Пароль учетной записи Synology |
|
||||||
TEAM A Home team Спартак#FC Spartak#150
|
| `NAS_FILE` | Да | Полный путь к файлу .osheet на NAS |
|
||||||
TEAM B Away team Зенит#FC Zenit#150
|
| `NEXRENDER_API_URL` | Да | Конечная точка API сервера Nexrender |
|
||||||
CHANEL Broadcast channel Матч ТВ
|
| `OUTPUT_FOLDER` | Да | Сетевой путь для рендеренных видео |
|
||||||
TIME Event time 19:30
|
| `RUST_LOG` | Нет | Уровень детализации логирования (по умолчанию: info) |
|
||||||
DATA Event date 15.04.2026
|
|
||||||
SPORT Sheet
|
|
||||||
|
|
||||||
Mapping between sports and their video pack templates.
|
## Структура электронной таблицы
|
||||||
Column Description
|
|
||||||
SPORT Sport identifier
|
|
||||||
LINK Path to video pack file
|
|
||||||
TEAMS Sheet
|
|
||||||
|
|
||||||
Team logo registry with sport associations.
|
Файл Excel должен содержать следующие листы со специфичными структурами:
|
||||||
Column Description
|
|
||||||
TEAM Team identifier
|
|
||||||
SPORT Associated sport
|
|
||||||
LINK Path to team logo file
|
|
||||||
CHANELL Sheet
|
|
||||||
|
|
||||||
Channel logo mappings.
|
### Лист "SPORT"
|
||||||
Column Description
|
|
||||||
CHANELL Channel name
|
|
||||||
LINK Path to channel logo file
|
|
||||||
Team Name Format
|
|
||||||
|
|
||||||
Team names can include resolution hints using hash separators:
|
Связывает названия видов спорта с соответствующими видео пакетами.
|
||||||
text
|
|
||||||
|
|
||||||
Display Name#Search Key#Target Size
|
| SPORT | LINK |
|
||||||
|
|-------|------|
|
||||||
|
| Без оформления | \\server\share\path\to\null.mov |
|
||||||
|
| Футбол | \\server\share\path\to\football_pack.mov |
|
||||||
|
| Волейбол | \\server\share\path\to\volleyball_pack.mov |
|
||||||
|
|
||||||
Example: Спартак#FC Spartak#150
|
### Лист "TEAMS"
|
||||||
|
|
||||||
Спартак - Display name in graphics
|
Сопоставляет имена команд с их видами спорта и логотипами. Колонка SPORT заполняется из выпадающего списка (заполнена из листа SPORT).
|
||||||
|
|
||||||
FC Spartak - Key for logo lookup
|
Если несколько команд в одном виде спорта имеют одинаковые названия, но разные логотипы, используется разделитель хеш # для уникальной идентификации.
|
||||||
|
|
||||||
150 - Target size in pixels for logo scaling
|
| TEAM | SPORT | LINK |
|
||||||
|
|------|-------|------|
|
||||||
|
| Галатасарай#Turki | Футбол | \\server\share\path\to\galatasaray_football.png |
|
||||||
|
| Галатасарай | Волейбол | \\server\share\path\to\galatasaray_volleyball.png |
|
||||||
|
| Галатасарай#UCL | Волейбол | \\server\share\path\to\galatasaray_ucl.png |
|
||||||
|
| Сомбатей##400 | Футбол | \\server\share\path\to\szombathely.png |
|
||||||
|
|
||||||
Output Files
|
### Лист "CHANELL"
|
||||||
JSON Exports
|
|
||||||
|
|
||||||
During processing, JSON representations of the workbook are saved:
|
Сопоставляет названия каналов с их логотипами. Поля заполняются вручную без выпадающих списков.
|
||||||
|
|
||||||
{filename}_workbook.json - Complete workbook structure
|
| CHANEL | LINK |
|
||||||
|
|--------|------|
|
||||||
|
| КАНАЛ | \\server\share\path\to\channel_logo.png |
|
||||||
|
| TRIUMPH | \\server\share\path\to\triumph_logo.png |
|
||||||
|
|
||||||
{filename}_{SheetName}.json - Individual sheet data
|
### Лист "Start"
|
||||||
|
|
||||||
Rendered Videos
|
Основной источник данных для генерации анонсов. Большинство полей заполняются из выпадающих списков, основанных на других листах.
|
||||||
|
|
||||||
Output videos are saved to OUTPUT_FOLDER with naming pattern:
|
Обязательные колонки: DATA, TIME, CHANEL, SPORT, LEAGUE, TEAM A, TEAM B
|
||||||
text
|
|
||||||
|
|
||||||
|
**Примечание**: Колонка LEAGUE обязательна для заполнения, но не имеет выпадающего списка. Проверка орфографии и опечаток отсутствует!
|
||||||
|
|
||||||
|
| STATE | TRIPPLE | DATA | TIME | SPORT | LEAGUE | CHANEL | TEAM A | TEAM B |
|
||||||
|
|-------|---------|------|------|-------|--------|--------|--------|--------|
|
||||||
|
| TRUE | TRUE | 27.2.2026 | 23:40 | Футбол | Чемпионат Португалии | START | Спортинг#ll#550 | Эшторил#ll#550 |
|
||||||
|
| FALSE | TRUE | 28.2.2026 | 12:55 | Волейбол | Чемпионат Турции. Женщины | TRIUMPH | Бешикташ | Галатасарай#Turki |
|
||||||
|
|
||||||
|
### Формат имен команд
|
||||||
|
|
||||||
|
Имена команд поддерживают два типа разделителей хэш #:
|
||||||
|
|
||||||
|
1. **Первый хеш**: Уникальный идентификатор для команд с одинаковыми названиями в одном виде спорта, или одинаковым названием в разных видах спорта.
|
||||||
|
Примеры:
|
||||||
|
|
||||||
|
- `Динамо#Футбол`, `Динамо#Волейбол` - Одно название разный вид спорта
|
||||||
|
- `Спартак#ЖенскийФ`, `Спартак#МужскойФ` Одно название _разный_ вид спорта
|
||||||
|
|
||||||
|
1. **Второй хеш**: Целевой размер в пикселях для масштабирования логотипа
|
||||||
|
|
||||||
|
Формат: `DisplayName#UniqueID#TargetSize`
|
||||||
|
|
||||||
|
Примеры:
|
||||||
|
|
||||||
|
- `Галатасарай#Turki` - только уникальный идентификатор
|
||||||
|
- `Сомбатей##400` - только целевой размер (обратите внимание на двойной хеш)
|
||||||
|
- `Спортинг#ll#550` - оба идентификатор и целевой размер
|
||||||
|
|
||||||
|
**Важно**: Обрабатывается **только второй хеш** для масштабирования логотипа. Если уникальный идентификатор не требуется, используйте двойной хеш ## перед целевым размером.
|
||||||
|
|
||||||
|
## Выходные файлы
|
||||||
|
|
||||||
|
### Экспорт JSON
|
||||||
|
|
||||||
|
Во время обработки сохраняются представления таблицы в формате JSON:
|
||||||
|
|
||||||
|
- `{filename}_workbook.json` - Полная структура книги
|
||||||
|
- `{filename}_{SheetName}.json` - Данные отдельного листа
|
||||||
|
|
||||||
|
### Рендеренные видео
|
||||||
|
|
||||||
|
Рендерные видео сохраняются в `OUTPUT_FOLDER` по следующему шаблону именования:
|
||||||
|
|
||||||
|
```
|
||||||
YYYYMMDD_Sport_League_TeamA_TeamB_Channel[_Variant].mp4
|
YYYYMMDD_Sport_League_TeamA_TeamB_Channel[_Variant].mp4
|
||||||
|
```
|
||||||
|
|
||||||
Examples:
|
Имена файлов транслитерируются в латиницу. Примеры:
|
||||||
|
|
||||||
20260415_Футбол_Премьер-лига_Спартак_Зенит_Матч-ТВ.mp4 (Base version)
|
- `20260228_Volleyball_Championship-Turkey-Women_Beşiktaş_Galatasaray_TRIUMPH.mp4`
|
||||||
|
- `20260228_Volleyball_Championship-Turkey-Women_Beşiktaş_Galatasaray_TRIUMPH_Today.mp4`
|
||||||
|
- `20260228_Volleyball_Championship-Turkey-Women_Beşiktaş_Galatasaray_TRIUMPH_Tomorrow.mp4`
|
||||||
|
|
||||||
20260415_Футбол_Премьер-лига_Спартак_Зенит_Матч-ТВ_Today.mp4
|
## Рабочий процесс
|
||||||
|
|
||||||
20260415_Футбол_Премьер-лига_Спартак_Зенит_Матч-ТВ_Tomorrow.mp4
|
1. **Аутентификация**: Подключение к NAS Synology с использованием предоставленных учетных данных
|
||||||
|
2. **Получение файла**: Поиск и экспорт указанного файла .osheet в Excel
|
||||||
|
3. **Парсинг данных**: Чтение всех листов и структурирование данных
|
||||||
|
4. **Разрешение ресурсов**: Сопоставление видов спорта, команд и каналов с визуальными элементами
|
||||||
|
5. **Генерация заданий**: Создание заданий Nexrender для каждой активной строки с вариантами
|
||||||
|
6. **Очистка**: Удаление завершенных/неудачных заданий из предыдущих запусков
|
||||||
|
7. **Отправка**: Отправка заданий на API Nexrender
|
||||||
|
8. **Мониторинг**: Слежение за прогрессом выполнения до завершения
|
||||||
|
9. **Завершение сеанса**: Закрытие сессии Synology
|
||||||
|
|
||||||
Workflow
|
## Требования к шаблонам After Effects
|
||||||
|
|
||||||
Authentication: Connects to Synology NAS using provided credentials
|
Шаблоны должны быть предварительно настроены на узлах рендеринга со следующими именами слоев:
|
||||||
|
|
||||||
File Retrieval: Locates and exports the specified .osheet file as Excel
|
### Типы шаблонов
|
||||||
|
|
||||||
Data Parsing: Reads all sheets and structures the data
|
| Файл шаблона | Назначение |
|
||||||
|
|--------------|------------|
|
||||||
|
| `PackShot_DOUBLE.aepx` | Сопоставление с двумя командами |
|
||||||
|
| `PackShot_SINGLE.aepx` | Анонсы для одной команды |
|
||||||
|
|
||||||
Asset Resolution: Matches sports, teams and channels with their visual assets
|
### Обязательные слои
|
||||||
|
|
||||||
Job Generation: Creates Nexrender jobs for each active row with variants
|
| Имя слоя | Тип | Описание |
|
||||||
|
|----------|-----|----------|
|
||||||
|
| DATA | Text | Отображение даты (автоматически подстраивается) |
|
||||||
|
| TIME / TIME_H / TIME_M | Text | Отображение времени |
|
||||||
|
| LEAGUE | Text | Название лиги |
|
||||||
|
| SPORT | Text | Категория спорта |
|
||||||
|
| TEAMS | Text | Скомбинированные имена команд |
|
||||||
|
| TEAM_A_LOGO | Image | Логотип домашней команды |
|
||||||
|
| TEAM_B_LOGO | Image | Логотип гостевой команды |
|
||||||
|
| CHANEL | Image | Логотип канала |
|
||||||
|
| TOP | Video | Наложение видео оформления |
|
||||||
|
|
||||||
Cleanup: Removes completed/failed jobs from previous runs
|
### Настройки композиции
|
||||||
|
|
||||||
Submission: Sends jobs to Nexrender API
|
- Имя композиции: `pack`
|
||||||
|
- Выходной модуль: `Start_h264`
|
||||||
|
- Формат вывода: `mp4`
|
||||||
|
- Формат проекта: Adobe After Effects 2024 .aepx
|
||||||
|
|
||||||
Monitoring: Tracks job progress until completion
|
## Устранение неисправностей
|
||||||
|
|
||||||
Logout: Terminates Synology session
|
### Частые проблемы
|
||||||
|
|
||||||
After Effects Template Requirements
|
**Ошибка подключения к NAS**
|
||||||
|
|
||||||
Templates must be pre-configured on render nodes with specific layer names:
|
- Проверьте, что `NAS_FQDN` включает протокол и порт (например, `https://nas.example.com:5001`)
|
||||||
Template Types
|
- Проверьте сетевую связность с NAS
|
||||||
Template File Use Case
|
- Убедитесь, что сервисы File Station и Office включены
|
||||||
Double Team PackShot_DOUBLE.aepx Matches with two teams
|
|
||||||
Single Team PackShot_SINGLE.aepx Single team announcements
|
|
||||||
Required Layers
|
|
||||||
Layer Name Type Description
|
|
||||||
DATA Text Date display (auto-adjusted)
|
|
||||||
TIME / TIME_H / TIME_M Text Time display
|
|
||||||
LEAGUE Text League name
|
|
||||||
SPORT Text Sport category
|
|
||||||
TEAMS Text Combined team names
|
|
||||||
TEAM_A_LOGO Image Home team logo
|
|
||||||
TEAM_B_LOGO Image Away team logo
|
|
||||||
CHANELL Image Channel logo
|
|
||||||
TOP Video Sport pack overlay
|
|
||||||
Composition Settings
|
|
||||||
|
|
||||||
Composition name: pack
|
**Файл не найден**
|
||||||
|
|
||||||
Output module: Start_h264
|
- Убедитесь, что путь в `NAS_FILE` точно соответствует пути в Synology Drive
|
||||||
|
- Путь должен начинаться с `/Team Folder/` для рабочих папок
|
||||||
|
- Проверьте права доступа к файлу для учетной записи сервиса
|
||||||
|
|
||||||
Output format: mp4
|
**Ошибка отправки задания Nexrender**
|
||||||
|
|
||||||
Troubleshooting
|
- Подтвердите доступность сервера Nexrender
|
||||||
Common Issues
|
- Убедитесь, что `NEXRENDER_API_URL` правильный
|
||||||
Connection to NAS failed
|
- Проверьте существование файлов шаблонов на узлах рендеринга
|
||||||
|
|
||||||
Verify NAS_FQDN includes protocol and port (e.g., https://nas.example.com:5001)
|
### Режим отладки
|
||||||
|
|
||||||
Check network connectivity to NAS
|
Включите подробное логирование для детального анализа:
|
||||||
|
|
||||||
Ensure File Station and Office services are enabled
|
|
||||||
|
|
||||||
File not found
|
|
||||||
|
|
||||||
Verify the path in NAS_FILE exactly matches the Synology Drive path
|
|
||||||
|
|
||||||
Path should start with /Team Folder/ for team folders
|
|
||||||
|
|
||||||
Check file permissions for the service account
|
|
||||||
|
|
||||||
Nexrender job submission fails
|
|
||||||
|
|
||||||
Confirm Nexrender server is accessible
|
|
||||||
|
|
||||||
Verify NEXRENDER_API_URL is correct
|
|
||||||
|
|
||||||
Check that template files exist on render nodes
|
|
||||||
|
|
||||||
Debug Mode
|
|
||||||
|
|
||||||
Enable debug logging for detailed troubleshooting:
|
|
||||||
bash
|
|
||||||
|
|
||||||
|
```bash
|
||||||
RUST_LOG=debug ./target/release/ae_anons
|
RUST_LOG=debug ./target/release/ae_anons
|
||||||
|
```
|
||||||
|
|
||||||
This will output:
|
Это выведет:
|
||||||
|
|
||||||
API request/response details
|
- Детали API запросов/ответов
|
||||||
|
- Информацию о парсинге листов
|
||||||
|
- Детали создания заданий
|
||||||
|
- Процесс разрешения ресурсов
|
||||||
|
|
||||||
Sheet parsing information
|
## Возможные ограничения по производительности
|
||||||
|
|
||||||
Job creation details
|
- **Большие таблицы**: Ограничение обработки до 10,000 строк на лист
|
||||||
|
- **Задержка сети**: Загрузка файлов с NAS может занимать время для больших файлов
|
||||||
|
- **Параллельные задания**: Nexrender управляет очередью заданий внутренне
|
||||||
|
- **Использование памяти**: Парсинг Excel сохраняет всю книгу в памяти
|
||||||
|
|
||||||
Asset resolution process
|
## Примечания по безопасности
|
||||||
|
|
||||||
Performance Considerations
|
- Храните учетные данные только в файле `.env` (исключен из git)
|
||||||
|
- Используйте специальные аккаунты с минимально необходимыми правами
|
||||||
|
- Сессии Synology завершаются после выполнения
|
||||||
|
- HTTPS рекомендуется для подключений NAS в продакшене
|
||||||
|
|
||||||
Large Spreadsheets: Processing limited to 10,000 rows per sheet
|
## Разработка
|
||||||
|
|
||||||
Network Latency: File downloads from NAS may take time for large files
|
### Структура кода
|
||||||
|
|
||||||
Concurrent Jobs: Nexrender handles job queuing internally
|
|
||||||
|
|
||||||
Memory Usage: Excel parsing keeps entire workbook in memory
|
|
||||||
|
|
||||||
Security Notes
|
|
||||||
|
|
||||||
Store credentials only in .env file (excluded from git)
|
|
||||||
|
|
||||||
Use dedicated service accounts with minimal required permissions
|
|
||||||
|
|
||||||
Synology sessions are properly terminated after execution
|
|
||||||
|
|
||||||
HTTPS recommended for NAS connections in production
|
|
||||||
|
|
||||||
Development
|
|
||||||
Running Tests
|
|
||||||
bash
|
|
||||||
|
|
||||||
cargo test
|
|
||||||
|
|
||||||
Code Structure
|
|
||||||
text
|
|
||||||
|
|
||||||
|
```
|
||||||
src/
|
src/
|
||||||
├── main.rs # Application entry point and orchestration
|
├── main.rs # Точка входа и оркестрация приложения
|
||||||
├── config.rs # Configuration management
|
├── config.rs # Управление конфигурацией
|
||||||
├── nexrender.rs # Nexrender job generation and structures
|
├── nexrender.rs # Генерация заданий Nexrender и структура данных
|
||||||
└── synology.rs # Synology API client
|
└── synology.rs # Клиент API Synology
|
||||||
|
```
|
||||||
|
|
||||||
Adding New Features
|
### Планируемые новые возможностеи
|
||||||
|
|
||||||
Extend JobData in nexrender.rs for new data fields
|
1. Расширь `JobData` в `nexrender.rs` для новых полей данных
|
||||||
|
2. Обновить логику парсинга листов при необходимости добавления новых колонок
|
||||||
|
3. Добавьть соответствующие слои After Effects в шаблоны
|
||||||
|
4. Обновите метод `to_nexrender_job()` с новыми сопоставлениями ресурсов
|
||||||
|
|
||||||
Update sheet parsing logic if new columns are required
|
## Зависимости
|
||||||
|
|
||||||
Add corresponding After Effects layers to templates
|
| Crate | Версия | Назначение |
|
||||||
|
|-------|--------|------------|
|
||||||
|
| reqwest | 0.12 | HTTP клиент для коммуникации API |
|
||||||
|
| serde / serde_json | 1.0 | Сериализация JSON |
|
||||||
|
| calamine | 0.26 | Парсинг файлов Excel |
|
||||||
|
| chrono | 0.4 | Обработка дат и времени |
|
||||||
|
| tokio | 1.0 | Асинхронная среда выполнения |
|
||||||
|
| dotenv | 0.15 | Конфигурация через переменные окружения |
|
||||||
|
| log / env_logger | 0.11 | Инфраструктура логирования |
|
||||||
|
| thiserror | 2.0 | Определение типов ошибок |
|
||||||
|
| anyhow | 1.0 | Обработка ошибок |
|
||||||
|
|
||||||
Update to_nexrender_job() method with new asset mappings
|
## Лицензия
|
||||||
|
|
||||||
Dependencies
|
Ещё не выбранна
|
||||||
Crate Version Purpose
|
|
||||||
reqwest 0.12 HTTP client for API communication
|
|
||||||
serde / serde_json 1.0 JSON serialization
|
|
||||||
calamine 0.26 Excel file parsing
|
|
||||||
chrono 0.4 Date/time handling
|
|
||||||
tokio 1.0 Async runtime
|
|
||||||
dotenv 0.15 Environment configuration
|
|
||||||
log / env_logger 0.4 Logging infrastructure
|
|
||||||
thiserror 2.0 Error type definitions
|
|
||||||
anyhow 1.0 Error handling
|
|
||||||
License
|
|
||||||
|
|
||||||
[Specify your license here]
|
## Поддержка
|
||||||
Support
|
|
||||||
|
|
||||||
For issues and feature requests, please contact:
|
Для вопросов и запросов функций обращайтесь:
|
||||||
|
|
||||||
[Your Team Email]
|
- <a.barabanov@tvstart.ru>
|
||||||
|
- [README.md](https://git.tvstart.ru/lexx/AE_Anons)
|
||||||
|
|
||||||
[Internal Documentation Link]
|
## История изменений
|
||||||
|
|
||||||
Changelog
|
### v0.1.0
|
||||||
v0.1.0
|
|
||||||
|
|
||||||
Initial release
|
- Первый выпуск
|
||||||
|
- Интеграция с Synology Office
|
||||||
Synology Office integration
|
- Базовая генерация заданий Nexrender
|
||||||
|
- Парсинг Excel с динамическим обнаружением листов
|
||||||
Basic Nexrender job generation
|
- Создание множественных вариантов
|
||||||
|
- Автоматические настройки размера шрифта и позиции
|
||||||
Excel parsing with dynamic sheet detection
|
- Умное масштабирование логотипов по целевому размеру
|
||||||
|
|
||||||
Multi-variant job creation
|
|
||||||
|
|||||||
Reference in New Issue
Block a user