Build a Video to Shorts Pipeline
Step 9 of 9 · About 20 minutes per episode
Render Two Thumbnails, Not Four
One design, two crops, every platform covered. Then the per platform copy and the schedule file that turns a folder of renders into a published week.
A 16:9 and a 1:1 thumbnail, a copy file for human review, and a machine readable schedule.
Making four thumbnails per episode is how a weekly pipeline turns into a weekly chore. One design system, two crops, covers everywhere you post.
| Render | Size | Used by |
|---|---|---|
| 16:9 | 1280 x 720 | The long video platform, plus professional and social feeds |
| 1:1 | 1080 x 1080 | Square feeds, and as a feed alternate |
The design system
- A full bleed frame of the speaker, pulled from the recording itself at a timestamp you choose
- A left to right dark gradient so text stays legible over any frame
- Two headline lines, the second in an accent color, plus a smaller accent line underneath
- A brand tag in the corner
Write pipeline/thumbnails/thumb.py using Pillow.
It renders EXACTLY two thumbnails: 1280x720 and 1080x1080. One design, two
crops. Never four files.
Design:
- Grab a frame from the video at --t seconds, cropped to the --cam region, and
use it full bleed, cover cropped, anchored so the subject stays in frame.
- Sharpen and slightly boost contrast on camera frames.
- Overlay a left to right dark gradient for text legibility.
- Text block on the left: --line1 in white, --line2 in the accent color below
it, then --accent as a smaller gray line, then a brand tag at the bottom.
- Drop shadows behind every text line so it survives a busy frame.
- Support --bg to use a supplied background image instead of a camera frame,
with a lighter gradient in that case since generated images usually already
have negative space.
Usage:
python pipeline/thumbnails/thumb.py work/ep-test.mp4 --t 1612 \
--line1 "AI BUILDS A" --line2 "WEBSITE LIVE" \
--accent "FOR $3 IN AI FEES" --out episodes/<date>/thumbnails
Write both files and print the paths.Per platform copy
Every asset gets copy written against the goal you assigned it in step 3, not against a generic template. The headline is the clip's hook sharpened to eight words or fewer, leading with a number or a tension.
Create skills/openmic-copywriter/SKILL.md and run it.
It writes episodes/<date>/copy.md for human review and
episodes/<date>/schedule.json for the publisher.
Every caption serves exactly ONE goal, matching the split I set in step 1:
[YOUR SPLIT].
Copy rules:
- Headline is the clip's hook sharpened, 8 words or fewer, number or tension
first.
- Caption structure: one line hook restate, then one or two lines of real
substance with an actual number or takeaway from the clip and never anything
vague, then the CTA, then 3 to 5 niche hashtags. No hashtag walls.
- Per platform variants: square and feed formats get the full caption, the
short form vertical platform gets a shorter rawer version with no links,
the video platform gets a title of 60 characters or fewer plus a one line
description, the professional network gets one extra line of context and no
hashtag spam.
- Longform: curiosity title 60 characters or fewer, description with the
premise line, chapter timestamps, and my links.
- Voice: mine. Plain spoken, numbers forward, no corporate filler. Pull actual
phrasing from the transcript.
schedule.json shape, one entry per asset:
{ "file", "type": "short|longform", "goal", "keyword": "WORD or null",
"platforms": [...], "scheduleDate": ISO8601, "copy": { per platform } }
Spread roughly two shorts per day across the week with the longform on its
regular day. Show me copy.md before writing schedule.json.The keyword reel variant
One of the highest converting formats: deliver a complete piece of value, then close with comment a single keyword and I will send you the step by step doc. The doc is generated from the same transcript segment the clip came from, so it costs nothing extra and it genuinely matches what they just watched.
- One unique keyword per asset, one word, all caps
- The lead magnet is written alongside the caption and stored with the episode
- Automation replies to the comment and sends the link, then tags the contact for follow up
- This works on the platforms that permit automated replies. Elsewhere the same clip ends with a link in bio instead
copy.md end to end and confirm every caption names one goal and contains one real number.Questions
Why not make a custom thumbnail per platform?
Because it triples the work for a difference nobody notices. One design cropped two ways covers every placement, and consistency across platforms is worth more than per platform optimisation at this scale.
What do I publish with?
Whatever scheduler you already pay for. The schedule file is deliberately plain JSON so it can drive any of them. Do not add a tool to your stack for this step until the pipeline is running weekly and you know what it actually needs.
I finished all nine steps. What now?
Run it end to end on one real recording before you automate anything. Once a full week has gone out and you have watched what performed, then wire the folder watcher that kicks the chain off automatically. Automating a pipeline you have not validated just produces bad output faster.
Talk it through
Stuck on this step?
Free 30 minutes. Bring the error, the transcript, or the clip that will not pass the gate, and we will work through it.