Editorial content on autopilot
Every week, my brand's posts and reels come out as drafts ready to review. I don't design them one by one: a signal triggers the brief, the browser plays designer with HTML, ffmpeg builds the reels, and two human gates decide what stays. I direct and approve, the factory produces.
The demo
🗂 Drafts in Publer
3 posts at 4:5 and 2 reels with burned-in subtitles, ready to review. Each with its caption and its source.
Monday · ready
🧵 Threads in Typefully
1 thread for X and 1 carousel for LinkedIn, in draft. Nothing goes out until your OK.
Monday · ready
The system
Whispertranscribes for the subtitles
Publerposts and reels, one account per brand
TypefullyX threads and LinkedIn carouselsThe tools

Claude Codethe director
The copilot that orchestrates the engine: reads the signal, writes the brief and coordinates the roles. The brand is configuration, not code.
Chrome headlessthe designer
Renders the HTML cards to PNG without opening an editor. The browser is what draws.
ffmpegvideo editor
Builds the reels: joins clips, subtitles and overlays. Runs locally, no credits.

whispersubtitles
Transcribes the clips' audio before burning in the subtitles. I fix the typical errors by hand.

Publerdistribution
Where the post and reel drafts land, one account per brand. I review and publish.

Typefullythreads and carousels
The X and LinkedIn drafts, ready to review before they go out.
Replicate it step by step
The code, the connections and the mistakes I already made for you.
Write the brand profile once
The factory is a generic engine; the brand is configuration. All the voice, palette, keywords and target account get written once into a profile, and the engine stays untouched. Adding a new brand means writing another profile, not reprogramming anything. This is the skeleton I fill:
checklist · brand profileBRAND PROFILE (written once, the engine stays untouched): - Voice: first person, direct, no fluff. What sounds like the brand and what doesn't. - Palette and type: the hex colors and the font of the cards. - Keywords: the terms the brand always uses (and the forbidden ones). - Transcription fixes: typical errors and their correct form. - Target account: where the drafts land (one network per brand). - Cover rule: where the title goes and the safe zone of the crop. Adding a new brand = writing another profile. Never touch the engine.Let a signal trigger the brief
The piece doesn't start in the tool, it starts in a fact. A signal is a verified fact with a source, not a random idea. If the fact doesn't hold, it stops right there: publishing fluff costs more than not publishing. When the signal passes, it becomes a brief:
prompt · brief from the signalTake this signal (a verified fact, with a source) and build the brief: 1. Exact 3-second hook (read as-is). 2. 3 or 4 beats to develop (one per idea, no filler). 3. The format the signal calls for (4:5 post, carousel or reel). 4. The source, so we don't publish fluff. 5. CTA and open loop toward the next piece. If the fact doesn't hold up with a real source, stop here.Render with the browser as the designer
The cards and posts get laid out in HTML with the brand's CSS, and Chrome headless captures them to PNG. No design editor to open, no credits to spend: the browser draws. A 4:5 post comes out at 1080x1350, a vertical reel at 1080x1920.
shell · an HTML card becomes a PNG# render.sh · the browser plays designer # HTML + brand CSS inside, headless capture outside. "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \ --headless=new --disable-gpu --hide-scrollbars \ --force-device-scale-factor=2 --window-size=1080,1350 \ --virtual-time-budget=8000 \ --screenshot=out.png card.html # 1080x1350 = 4:5 post. For a vertical reel: 1080x1920. # --virtual-time-budget lets fonts and data load before the shot.Reels: subtitles that actually get read
The reel gets composited with ffmpeg: clips, burned-in subtitles and overlays. The part that makes or breaks the piece is the subtitles, and the rule there is counterintuitive: static and clean beats word-by-word karaoke. And everything respects Instagram's safe zone, so it doesn't sit under the buttons.
checklist · reel subtitles (9:16, 1080x1920)SUBTITLES THAT ACTUALLY GET READ: - Static and clean: white bold, black outline, ~3 words per line. Word-by-word karaoke looks busier, but it reads worse. - Safe zone: text lives around y≈880 (~69% of the height) and under ~620px wide, to clear Instagram's buttons on the right. - Cards enter from y≈150, never glued to the edge or the profile up top. - Motion (spring-in entrances, progress bar, emoji bursts) adds to it; readable subtitles rule.Set the human gates: editor and head of design
This is where directing and letting go part ways. Before the render, an editor reviews the copy and can send it back. After the render, a head of design reviews the visual and can stop a piece even if it's already done. Each gate has to be able to say no, not just approve. A gate that always says yes isn't a gate.
Deliver as a draft, never auto-post
The last step is the most important: the factory leaves everything in draft, in Publer and Typefully, with its caption and its source. The final OK is human, always. Automating production is not automating judgment. Want to do this live, with your own business, and walk out with 30 days of content done? That's exactly the byTHELAB School workshop.
The gates: why nothing goes out on its own
- It never turns a fact I couldn't verify with a real source into a piece.
- It never publishes on its own: the engine leaves drafts, the final OK is yours.
- It never skips the copy gate: the editor can send back, not just approve.
- It never skips the visual gate: the head of design can stop an ugly piece.
- It never mixes brands: each one runs on its own profile, isolated.
Automating production is not automating judgment. The factory produces; you direct. If you want this system running on your brand, that's what I do at byTHELAB, and if you'd rather learn it, I teach it at the Escuelita.
The Escuelita is no longer a waitlist: it's a live workshop
Content creation with AI. Thursday, July 16, 4pm CDMX. Pick your door:
The live workshop
2 hours with me · you leave with 30 days of content for your business, made and scheduled · you keep materials you can use anytime · the recording is yours forever.
13 seats leftSave my seat →I'll keep you posted
Want updates on new courses and workshops? Leave me your email.
Zero spam. Only things that help.Keep going with these