Automated video content pipeline for financial analysis. Combines AI-generated content with production automation to turn SEC filings into narrated videos, podcasts, and social posts.
- Campaign-Driven: Reusable campaign templates define the editorial angle, slide designs, and output specs — apply them to any ticker
- AI Content Generation: Claude Cowork analyzes filings via RoboSystems MCP tools and produces narrative briefs, video scripts, charts, and social posts
- Automated Production: Pipeline screenshots charts, synthesizes voiceover, assembles video, and extracts podcast audio
- Two Production Modes: Slides-only (voiceover + charts) or mixed (avatar segments + charts) — auto-detected from script
git clone https://github.com/RoboFinSystems/robosystems-content-machine.git
cd robosystems-content-machine
# Scaffold a project from a campaign
just campaign TICKER campaign_name
# Or scaffold from the base template (no campaign)
just new TICKERThe first just command auto-creates .env from .env.example. Fill in your API keys (see Setup).
Every project starts from the base template/, which provides the folder structure, chart types, slide examples, and pipeline assets. Scaffold one for any ticker:
just new TICKERFor thematic coverage across multiple companies, campaigns add an editorial layer on top of the base template. A campaign defines the voice, analytical framework, slide designs, and target tickers for a class of companies.
campaigns/
my_campaign/
CAMPAIGN_BRIEF.md # Editorial strategy and analytical framework
COWORK_INSTRUCTIONS.md # Claude's production instructions (overrides base)
tickers.md # Target companies and production calendar
sources/ # Third-party research and reference data (gitignored)
overrides/ # File replacements (custom slide templates, assets)
When you scaffold with a campaign, the base template is applied first, then the campaign overlays its instructions, briefs, and templates on top.
just campaigns # List available campaigns
just campaign TICKER campaign_name # Scaffold with campaign overlayOpen Claude Desktop and start a Cowork session pointed at the scaffolded project folder. Claude reads the instructions and produces:
- Narrative brief — written analysis (Markdown)
- Video script — structured JSON with segment timing and narration
- Charts and slides — one HTML file per visual segment
- Social posts — platform-specific copy (X, StockTwits)
- Thumbnail — YouTube thumbnail HTML
just pipeline PROJECT # Run all steps end-to-end| Step | Command | What it does |
|---|---|---|
| Validate | just validate PROJECT |
Checks Cowork outputs exist and script JSON matches schema |
| Screenshots | just screenshots PROJECT |
Opens each chart HTML in headless Chrome, captures 1920x1080 PNGs |
| Avatar | just avatar PROJECT |
Sends avatar narration to HeyGen API (mixed mode only) |
| Voiceover | just voiceover PROJECT |
Sends visual narration to ElevenLabs TTS |
| Assemble | just assemble PROJECT |
Uploads assets to S3, builds Shotstack timeline, renders final MP4 |
| Podcast | just podcast PROJECT |
Extracts podcast audio (MP3) from final video |
just projects # List all projects
just play PROJECT # Play the final video
just durations PROJECT # Show media durations via ffprobe
just clean PROJECT # Remove generated assets (keeps source files)- uv — Python package manager
- just — command runner
- Google Chrome — headless chart screenshots
- ffmpeg / ffprobe — media processing
- AWS CLI — S3 uploads
Configure in .env after first run:
| Service | Keys | Purpose |
|---|---|---|
| ElevenLabs | ELEVEN_LABS_API_KEY, ELEVEN_LABS_VOICE_ID |
Voice synthesis |
| Shotstack | SHOTSTACK_API_KEY, SHOTSTACK_OWNER_ID |
Cloud video assembly |
| HeyGen | HEYGEN_API_KEY, HEYGEN_AVATAR_ID, HEYGEN_VOICE_ID |
Avatar video (mixed mode only) |
| AWS | AWS_PROFILE, S3_BUCKET, S3_REGION |
Asset uploads for Shotstack |
The content generation phase requires Claude Desktop with the RoboSystems MCP server configured.
This project is licensed under the MIT License - see the LICENSE file for details.
MIT © 2026 RFS LLC