Three brands. Three platforms. One approval click.
Your content team keeps making the images and videos. Everything after the upload runs on its own, with one human click before anything goes live.
One still in, four platform files out.
A made-up cold brew brand, so nothing here belongs to anyone else. The still was generated, animated into a ten second spot, cut to a beat with kinetic type and an end card, then encoded to each platform's spec by the same pipeline that would handle your team's uploads.
- Hero stillGenerated from a text brief in the brand's look. In production this is the file your team drops into the brand folder.
- MotionImage to video in three beats: sun flare on the table, an orbit of ice and coffee in slow motion, the slam and the frozen splash.
- Cut and typeKinetic headlines on the cuts, a flash frame on the slam, an end card with the wordmark. The beat underneath was generated for this spot and mixed to broadcast loudness.
- Caption and hashtagsWritten onto the record, editable before approval. "Slow morning, cold can. Monsun cold brew, straight from the fridge to the window seat."
- EncodesH.264 High profile, 30 fps, AAC audio, moov atom up front so previews start instantly. One file per placement, with the headlines re-laid out for the 4:5 and 1:1 crops.
The workflow, station by station.
Every station reads and writes the same record. That is what keeps three brands apart: each record carries its brand, and each brand has its own tokens, folder and calendar.
Intake
A watcher per brand picks up new images, reels and stories from a shared folder and creates one record per asset.
Prepare
Caption, hashtags and a variant per platform are written onto the record. Video is transcoded to 9:16, 4:5 and 1:1.
Approve
Approve, edit or reject in a simple view. The publisher refuses anything that is not approved, even when called directly.
Publish
Meta Graph API for Instagram and Facebook, TikTok Content Posting API. Time slots per brand live in a settings table.
Ad rules
Budget caps, pause thresholds and boost triggers as rows in a sheet, run on a schedule against the Marketing API.
Report
A weekly page per brand with reach, engagement and spend, organic and paid side by side.
Alerts
Failed posts, expiring tokens and campaigns over their limit ping the team. Failed jobs re-run from the record.
How I would build it for you.
Stack
- Runtime
- n8n if your team wants a visual editor, a small Node service if you prefer plain code. Same record schema either way.
- Records and settings
- A small database or an Airtable base. Schedules and ad rules are tables your team edits, so thresholds change without a developer.
- Credentials
- One store per brand, scoped tokens, nothing shared across brands.
- Media
- ffmpeg for encodes, so every upload passes the platform checks on the first try.
Phases
- Intake, record schema and approval for a single brand, with your real assets.
- Publishing to Instagram and Facebook for that brand, then the other two.
- TikTok, once the Content Posting API app is approved.
- Ad rules against the Marketing API.
- Reporting and alerts, once there is real data to report on.
- Documentation, troubleshooting guide and handover session.
Assumptions
Each brand has a Facebook page, an Instagram professional account and an ad account under a Business Manager you control. TikTok's app approval takes longer than the code around it, so it gets filed on day one.
How this demo was made.
Everything on this page was produced by scripts, at the lowest resolution that still shows the idea. The same scripts scale up for production.
- Explainer written as an HTML composition, timed to the narration, rendered to MP4 with HyperFrames.
- Narration ElevenLabs v3 with emotion tags in the script, one file per scene.
- Hero still generated with GPT Image 2 via WaveSpeed from a text brief.
- Motion Seedance 2.0 image to video via WaveSpeed, 720p, ten second master from a scripted three-beat prompt.
- Ad edit HyperFrames composition on top of the master: kinetic type, flash cuts, end card, one render per crop format.
- Music generated beat, loudness-normalised with ffmpeg.
- Encodes ffmpeg, one command per placement, verified with ffprobe.
- Orchestration Claude Code runs every step above as a script, so a rerun is one command.
- This page plain HTML, no framework, works on a phone.
Take the files with you.
Every render on this page, at full resolution. Drop them into a test post if you want to see how the platforms treat them.