Перенёс README
This commit is contained in:
346
src/README.md
346
src/README.md
@@ -1,346 +0,0 @@
|
||||
# AE Anons - Automated After Effects Announcement Generator
|
||||
|
||||
Automated pipeline for generating sports announcements using After Effects templates via Nexrender, with data sourced from Synology Office spreadsheets.
|
||||
|
||||
## Overview
|
||||
|
||||
AE Anons automates the creation of broadcast announcement videos by:
|
||||
|
||||
1. Connecting to Synology NAS to retrieve schedule data from Office spreadsheets (.osheet)
|
||||
2. Parsing Excel data containing sports events, teams, channels and timing information
|
||||
3. Generating Nexrender jobs with appropriate templates and assets
|
||||
4. Monitoring render completion and managing output files
|
||||
|
||||
## Features
|
||||
|
||||
- **Synology Integration**: Seamless authentication and file retrieval from Synology NAS
|
||||
- **Office Spreadsheet Export**: Automatic conversion of .osheet files to Excel format
|
||||
- **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
|
||||
- **Professional Logging**: Structured logging with configurable verbosity levels
|
||||
- **Environment-based Configuration**: All settings managed via `.env` file
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Rust 1.70 or higher
|
||||
- Access to Synology NAS with File Station and Office enabled
|
||||
- Nexrender server instance
|
||||
- After Effects templates configured on render nodes
|
||||
|
||||
## Installation
|
||||
|
||||
### 1. Clone the Repository
|
||||
|
||||
```bash
|
||||
git clone https://github.com/your-org/ae_anons.git
|
||||
cd ae_anons
|
||||
|
||||
2. Build the Project
|
||||
bash
|
||||
|
||||
cargo build --release
|
||||
|
||||
The binary will be available at target/release/ae_anons
|
||||
3. Configure Environment
|
||||
|
||||
Create a .env file in the project root:
|
||||
env
|
||||
|
||||
NAS_FQDN=https://your-synology-nas.example.com:5001
|
||||
NAS_USER=service_account
|
||||
NAS_PASS=secure_password
|
||||
NAS_FILE=/Team Folder/Broadcast/Auto_Anons/schedule.osheet
|
||||
NEXRENDER_API_URL=http://nexrender-server:3000/api/v1/jobs
|
||||
OUTPUT_FOLDER=//file-server/edit/Auto_Anons
|
||||
RUST_LOG=info
|
||||
|
||||
See Configuration section for detailed options.
|
||||
Usage
|
||||
Basic Execution
|
||||
bash
|
||||
|
||||
# Run with default configuration
|
||||
./target/release/ae_anons
|
||||
|
||||
# Run with custom log level
|
||||
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
|
||||
bash
|
||||
|
||||
cargo run
|
||||
|
||||
Logging Levels
|
||||
|
||||
Control output verbosity via RUST_LOG environment variable:
|
||||
|
||||
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
|
||||
|
||||
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)
|
||||
SPORT Sport category Футбол, Хоккей
|
||||
LEAGUE League name Премьер-лига
|
||||
TEAM A Home team Спартак#FC Spartak#150
|
||||
TEAM B Away team Зенит#FC Zenit#150
|
||||
CHANEL Broadcast channel Матч ТВ
|
||||
TIME Event time 19:30
|
||||
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.
|
||||
Column Description
|
||||
TEAM Team identifier
|
||||
SPORT Associated sport
|
||||
LINK Path to team logo file
|
||||
CHANELL Sheet
|
||||
|
||||
Channel logo mappings.
|
||||
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
|
||||
|
||||
Example: Спартак#FC Spartak#150
|
||||
|
||||
Спартак - Display name in graphics
|
||||
|
||||
FC Spartak - Key for logo lookup
|
||||
|
||||
150 - Target size in pixels for logo scaling
|
||||
|
||||
Output Files
|
||||
JSON Exports
|
||||
|
||||
During processing, JSON representations of the workbook are saved:
|
||||
|
||||
{filename}_workbook.json - Complete workbook structure
|
||||
|
||||
{filename}_{SheetName}.json - Individual sheet data
|
||||
|
||||
Rendered Videos
|
||||
|
||||
Output videos are saved to OUTPUT_FOLDER with naming pattern:
|
||||
text
|
||||
|
||||
YYYYMMDD_Sport_League_TeamA_TeamB_Channel[_Variant].mp4
|
||||
|
||||
Examples:
|
||||
|
||||
20260415_Футбол_Премьер-лига_Спартак_Зенит_Матч-ТВ.mp4 (Base version)
|
||||
|
||||
20260415_Футбол_Премьер-лига_Спартак_Зенит_Матч-ТВ_Today.mp4
|
||||
|
||||
20260415_Футбол_Премьер-лига_Спартак_Зенит_Матч-ТВ_Tomorrow.mp4
|
||||
|
||||
Workflow
|
||||
|
||||
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
|
||||
|
||||
Asset Resolution: Matches sports, teams and channels with their visual assets
|
||||
|
||||
Job Generation: Creates Nexrender jobs for each active row with variants
|
||||
|
||||
Cleanup: Removes completed/failed jobs from previous runs
|
||||
|
||||
Submission: Sends jobs to Nexrender API
|
||||
|
||||
Monitoring: Tracks job progress until completion
|
||||
|
||||
Logout: Terminates Synology session
|
||||
|
||||
After Effects Template Requirements
|
||||
|
||||
Templates must be pre-configured on render nodes with specific layer names:
|
||||
Template Types
|
||||
Template File Use Case
|
||||
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
|
||||
|
||||
Output format: mp4
|
||||
|
||||
Troubleshooting
|
||||
Common Issues
|
||||
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
|
||||
|
||||
RUST_LOG=debug ./target/release/ae_anons
|
||||
|
||||
This will output:
|
||||
|
||||
API request/response details
|
||||
|
||||
Sheet parsing information
|
||||
|
||||
Job creation details
|
||||
|
||||
Asset resolution process
|
||||
|
||||
Performance Considerations
|
||||
|
||||
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/
|
||||
├── main.rs # Application entry point and orchestration
|
||||
├── config.rs # Configuration management
|
||||
├── nexrender.rs # Nexrender job generation and structures
|
||||
└── synology.rs # Synology API client
|
||||
|
||||
Adding New Features
|
||||
|
||||
Extend JobData in nexrender.rs for new data fields
|
||||
|
||||
Update sheet parsing logic if new columns are required
|
||||
|
||||
Add corresponding After Effects layers to templates
|
||||
|
||||
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]
|
||||
|
||||
[Internal Documentation Link]
|
||||
|
||||
Changelog
|
||||
v0.1.0
|
||||
|
||||
Initial release
|
||||
|
||||
Synology Office integration
|
||||
|
||||
Basic Nexrender job generation
|
||||
|
||||
Excel parsing with dynamic sheet detection
|
||||
|
||||
Multi-variant job creation
|
||||
Reference in New Issue
Block a user