Video Render Automation Platform
Backend engineer building a Slackbot API for submitting and managing video render jobs to Adobe After Effects, enabling automated sports graphics production.
Software company developing automation tools for video production and motion graphics workflows.
Project Overview
Built a Slackbot API that enables video production teams to submit and manage render jobs for Adobe After Effects through Slack. The platform streamlines the creation of sports graphics by providing a conversational interface for configuring templates with dynamic data, then automatically queuing jobs for render nodes running After Effects with the Templater plugin.
The Product
The Templater API transforms video production workflows:
- Slack Interface: Submit render jobs using slash commands without leaving Slack
- Template Wizard: Multi-step dialogs guide users through configuration options
- Dynamic Data: Pull in live sports data for teams, games, scores, and players
- Render Queue: Jobs are queued and processed by After Effects render nodes
- Status Updates: Get notified when renders start, complete, or fail
Technical Architecture
Backend (Express.js)
Node.js API handling Slack interactions and job management:
- Framework: Express.js with body-parser
- Database: MongoDB for jobs, templates, and sports data
- Slack Integration: Slash commands, dialogs, and interactive messages
- Security: Slack signature validation for request verification
- Logging: Winston with Papertrail and Loggly integration
- Monitoring: Sentry for error tracking
Render Integration
Communication with After Effects render nodes:
- Shell Scripts: Templater fires events that call back to the API
- Job Updates: Before/after each render job, status is reported
- Asset Delivery: Rendered files uploaded to S3
Key Contributions
Slackbot Development
Built comprehensive Slack integration:
- Implemented slash command handler for
/footbotcommand - Created multi-step dialog wizard for gathering render parameters
- Built interactive message handlers for confirmations and cancellations
- Developed options endpoint for dynamic select menu population
- Implemented Slack signature validation for request security
Template System
Created flexible template configuration:
- Built template factory for generating job data from user submissions
- Developed input types: text, textarea, and dynamic select menus
- Created label formatters for custom option display
- Implemented conditional step logic based on previous selections
- Built base filters for narrowing data source options
Job Queue Management
Developed render job lifecycle:
- Created MongoDB schema for job storage
- Built job creation from dialog submissions
- Implemented status tracking (pending, processing, complete, failed)
- Developed callback handling for render node events
- Created job queries for listing and filtering
NFL Data Integration
Set up sports data infrastructure:
- Built seed scripts for teams, games, scores, and player photos
- Created queries for searching and filtering NFL data
- Implemented dynamic data sources for template selects
- Developed token replacement for filter conditions
Template Types
Implemented multiple video templates:
- Player Board: Individual player statistics and photos
- Power Rankings: Team ranking graphics
- Social Score: Social media engagement metrics
- Sunday Schedule: Weekly game schedule graphics
- Weekly Highlights: Top plays and moments
Slack Integration Details
Slash Commands
/footbot- Initiates the render job wizard
Dialog Flow
- User triggers slash command
- Template selection dialog appears
- User chooses template type (Player Board, Power Rankings, etc.)
- Step-by-step dialogs gather required inputs
- Confirmation message summarizes selections
- Job is created and queued for rendering
- Status updates sent as render progresses
Interactive Components
- Dialog submissions for multi-step input
- Button actions for confirmation/cancellation
- Dynamic select menus with search
- Message updates for status changes
Template Configuration
Input Types
Templates support various input configurations:
- Text: Free-form text input for names, titles
- Textarea: Long-form content for descriptions
- Select (Static): Pre-defined option lists
- Select (External): Dynamic options from MongoDB queries
Data Sources
Dynamic selects can query:
- NFL Teams
- Games by week/season
- Player photos
- Score data
- Custom collections
Conditional Logic
Templates support:
- Base filters for narrowing options
- Token replacement using previous answers
- Conditional steps based on selections
- Dynamic label formatting
Render Node Integration
Templater Events
After Effects render nodes communicate via shell scripts:
- Before Job: Notifies API that render is starting
- After Job: Reports completion with output file path
Event Data
Shell scripts pass:
- Job ID
- Event type (before/after)
- Output filename
- Asset file path
Development Environment
Local Setup
- ngrok for exposing local server to Slack
- Docker Compose for MongoDB
- Seed scripts for NFL data
Deployment
- AWS Elastic Beanstalk for hosting
- Bitbucket Pipelines for CI/CD
- Multiple environments (sandbox, staging, production)
Technologies Deep Dive
The technology choices optimized for video production workflows:
- Slack API provided familiar interface for production teams already using Slack
- MongoDB offered flexible schema for varied template configurations
- Templater enabled After Effects automation without custom plugin development
- Express.js handled Slack’s webhook-based communication pattern
- AWS S3 stored rendered video assets for distribution
- Winston with Papertrail enabled distributed logging across render nodes
Technologies
Key Highlights
- Built Slackbot with multi-step dialogs for configuring video render jobs
- Developed job queue system with MongoDB for managing After Effects render pipeline
- Created template system supporting player boards, power rankings, and highlight reels
- Integrated with Adobe After Effects Templater for automated video generation
- Implemented dynamic data sources for NFL teams, games, and player statistics