# 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