Back to Projects
July 2019 - September 2019 • Backend

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 /footbot command
  • 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

  1. User triggers slash command
  2. Template selection dialog appears
  3. User chooses template type (Player Board, Power Rankings, etc.)
  4. Step-by-step dialogs gather required inputs
  5. Confirmation message summarizes selections
  6. Job is created and queued for rendering
  7. 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

Node.js Express.js MongoDB Slack API AWS Lambda AWS S3 Adobe After Effects

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