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.

Live workflowdrafts, never auto-postsone engine, many brandsHTML, Chrome and ffmpeg

The demo

Content factory · this week's batch

🗂 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

A recreation of the alert I get when the batch is ready. It all stays in draft: the final OK is mine.

The system

Signal
A verified factwith a real source, no fluff
Brief
Copywriterhook, beats and format
Editorgate: can send the copy back
Render
HTML + Chromethe browser is the designer
ffmpegbuilds the reels, zero credits
Whispertranscribes for the subtitles
Quality control
Head of designgate: stops an ugly piece even if it's done
Draft
Publerposts and reels, one account per brand
TypefullyX threads and LinkedIn carousels

The 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.

  1. 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 profile
    BRAND 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.
  2. 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 signal
    Take 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.
  3. 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.
  4. 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.
  5. 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.

  6. 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.

byTHELAB School opened its first workshop

The Escuelita is no longer a waitlist: it's a live workshop

Content creation with AI. Thursday, July 16, 4pm CDMX. Pick your door:

I want in now

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 →
Still exploring?

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