Content & Marketing ⏱ 30 min setup ✓ Production tested

How to Turn One Blog Post Into a Week of Content With AI

Writing a blog post takes hours. Reformatting it for LinkedIn takes 30 minutes. Breaking it into tweets takes another 20. Drafting the newsletter version takes 45. By the time you've cross-posted it everywhere, you've spent more time on distribution than you did on the original writing. This guide shows you how to write once and have an AI generate five platform-ready pieces in under two minutes — a LinkedIn post, a Twitter/X thread, an email newsletter, a YouTube description, and a short recap you can use anywhere. Thirty minutes to set up, then it works every time.

What the Pipeline Actually Produces

You drop in a blog post — the full text, pasted into a script — and it generates all five of these:

💼
LinkedIn Post
1,200–1,500 characters. Hook in the first line (no opener, just the insight). 3–5 short paragraphs. Ends with a question or call to engage. No hashtag spam.
🧵
Twitter / X Thread
8–12 tweets. Opens with the core argument. Each tweet is self-contained. Numbered format (1/10, 2/10). Ends with a summary tweet and a link back to the post.
📧
Email Newsletter
500–700 words. Conversational tone. Skimmable headers. Key insight surfaced early. Ends with one clear next step. Works for any list size.
📺
YouTube Description
200–300 words. Keyword-rich first 150 characters (visible before "Show more"). Structured with timestamps if you provide them. Includes a subscribe nudge at the end.
📌
Short Recap
2–3 sentences. The TL;DR. Works as an Instagram caption, a Slack announcement, a Discord post, a pinned tweet, or anywhere you need a quick summary under 300 characters.
Real result

Running this pipeline on 12 consecutive posts over 6 weeks, the LinkedIn and email outputs needed edits about 30% of the time — usually just adjusting the tone or tweaking the hook. The Twitter threads and short recap were usable as-is 90% of the time. Total review time per post: 12 minutes on average, down from 2+ hours.

What You Need

No accounts to connect. No Zapier. No OAuth flow. You run the script, get five text files, paste the content where it needs to go.

Step-by-Step Setup

1

Get your OpenAI API key

Go to platform.openai.com → API Keys → Create new key. Copy it. You'll paste it into the script's config block. If you've never added billing, do that now — add $5 and it'll last you months at this usage level.

2

Create the script file

Make a new folder called content-repurposer anywhere on your computer. Inside it, create a file called repurpose.py and paste the script from the section below. Fill in your API key and your name/brand in the config block at the top. That's the only setup required.

3

Install the one dependency

Open your terminal, navigate to the folder (cd ~/content-repurposer), and run: pip install openai. If you already have it from another project, this is instant. If not, it takes about 10 seconds.

4

Run it on your first post

Paste the full text of your blog post into a file called post.txt in the same folder. Then run: python3 repurpose.py post.txt. In about 20–30 seconds, five files appear in an output/ folder: linkedin.txt, twitter-thread.txt, email-newsletter.txt, youtube-description.txt, and short-recap.txt. Open, review, and publish.

5

Optional: add your voice instructions

In the config block, there's a VOICE_NOTES field. This is where you tell the AI how you write. A sentence or two is enough: "Direct and practical. No corporate speak. Short sentences. First-person." The more specific you are, the less editing the output needs. This is the biggest lever for improving output quality.

The Script

Paste this into repurpose.py. The only things you need to change are in the CONFIG block at the top.

#!/usr/bin/env python3
# repurpose.py
# Usage: python3 repurpose.py your-post.txt
# Outputs: output/linkedin.txt, output/twitter-thread.txt,
#           output/email-newsletter.txt, output/youtube-description.txt,
#           output/short-recap.txt

import sys, os
from pathlib import Path
from openai import OpenAI

# ─── CONFIG ────────────────────────────────────────────────────────────────
OPENAI_API_KEY = "sk-..."                    # Your OpenAI API key
YOUR_NAME      = "Your Name"                 # Used in newsletter sign-off
BRAND_NAME     = "Your Brand / Business"     # Used for context
POST_URL       = "https://yourblog.com/post" # Link back to the original post

# How do you write? Be specific. This shapes every output.
VOICE_NOTES = """
Direct and practical. No jargon. Short sentences. 
First-person. No filler phrases like 'In conclusion' or 'It's important to note'.
"""
# ───────────────────────────────────────────────────────────────────────────

MODEL = "gpt-4o-mini"  # Fast and cheap. Switch to gpt-4o for higher quality.

PROMPTS = {
    "linkedin": f"""
You are a content writer for {BRAND_NAME}. Your writing style: {VOICE_NOTES}

Write a LinkedIn post based on the blog post below.

Rules:
- 1,200–1,500 characters total
- Start directly with the core insight — no "Excited to share" or greeting
- 3–5 short paragraphs with line breaks between them
- End with ONE question to encourage comments
- No more than 3 relevant hashtags at the very end
- Do NOT include the title as a header
""",
    "twitter-thread": f"""
You are a content writer for {BRAND_NAME}. Your writing style: {VOICE_NOTES}

Write a Twitter/X thread based on the blog post below.

Rules:
- 10–12 tweets
- Each tweet ≤280 characters
- Number them: 1/ 2/ etc.
- Tweet 1: hook — the boldest, most shareable claim from the post
- Tweets 2–9: one clear point per tweet; self-contained (readable out of context)
- Tweet 10: summary tweet that recaps the whole thread in 2 sentences
- Final tweet: "Full post: {POST_URL}"
- Separate each tweet with a blank line
""",
    "email-newsletter": f"""
You are a content writer for {BRAND_NAME}. Your writing style: {VOICE_NOTES}

Write an email newsletter edition based on the blog post below.

Rules:
- 500–700 words
- Subject line on the first line, preceded by "Subject: "
- Short intro paragraph (2–3 sentences) — why this matters right now
- 3–4 skimmable sections with short bolded headers
- Conversational tone — written to a single reader, not a crowd
- End with one clear action or next step
- Sign off as {YOUR_NAME}
""",
    "youtube-description": f"""
You are a content writer for {BRAND_NAME}. Your writing style: {VOICE_NOTES}

Write a YouTube video description based on the blog post below. 
Assume the video covers the same content as the post.

Rules:
- 200–300 words total
- First 150 characters: most compelling hook/summary (this is what shows before "Show more")
- Second paragraph: what viewers will learn (3–5 bullet points)
- Third paragraph: brief about the channel / {BRAND_NAME}
- End with: "Read the full post: {POST_URL}"
- Include 5–8 relevant search keywords naturally in the text
""",
    "short-recap": f"""
You are a content writer for {BRAND_NAME}. Your writing style: {VOICE_NOTES}

Write a short recap of the blog post below.

Rules:
- 2–3 sentences maximum
- ≤280 characters total
- Must work standalone — no "In this post..." setup
- Capture the single most useful or surprising insight
- Works as an Instagram caption, Slack message, or pinned tweet
"""
}

def repurpose(post_text: str, output_dir: Path) -> None:
    client = OpenAI(api_key=OPENAI_API_KEY)
    output_dir.mkdir(parents=True, exist_ok=True)

    for format_name, system_prompt in PROMPTS.items():
        print(f"  Generating {format_name}...", end=" ", flush=True)
        response = client.chat.completions.create(
            model=MODEL,
            messages=[
                {"role": "system", "content": system_prompt.strip()},
                {"role": "user",   "content": f"Here is the blog post:\n\n{post_text}"}
            ],
            temperature=0.7,
        )
        content = response.choices[0].message.content.strip()
        out_file = output_dir / f"{format_name}.txt"
        out_file.write_text(content, encoding="utf-8")
        print("done.")

    print(f"\n✓ All outputs saved to: {output_dir}/")
    print("  linkedin.txt")
    print("  twitter-thread.txt")
    print("  email-newsletter.txt")
    print("  youtube-description.txt")
    print("  short-recap.txt")

def main():
    if len(sys.argv) < 2:
        print("Usage: python3 repurpose.py your-post.txt")
        print("       python3 repurpose.py  (will prompt for file path)")
        sys.exit(1)

    post_file = Path(sys.argv[1])
    if not post_file.exists():
        print(f"File not found: {post_file}")
        sys.exit(1)

    post_text = post_file.read_text(encoding="utf-8").strip()
    if len(post_text) < 100:
        print("Post seems very short. Make sure you pasted the full text.")
        sys.exit(1)

    # Output folder named after the input file (without extension)
    output_dir = Path("output") / post_file.stem

    print(f"\nRepurposing: {post_file.name}")
    print(f"Word count: ~{len(post_text.split())} words")
    print(f"Output folder: {output_dir}/\n")

    repurpose(post_text, output_dir)

if __name__ == "__main__":
    main()

What the Output Looks Like

Here's an example using a 900-word post about time management. This is what came out with no editing:

LinkedIn output (excerpt)

The most dangerous productivity advice is "do your most important task first."

It sounds right. It's in every book. But it assumes you have the energy to actually do your most important task at 8am — and most people don't.

Here's what actually works: identify your peak energy window first, then slot your hardest work there. For most people, that's mid-morning or early afternoon, not 6am. The "eat the frog" advice accidentally trained a generation of people to schedule their hardest work during their worst hours.

Three questions to find your actual peak window: When do you naturally stop checking your phone? When does time disappear when you're working? When do your best ideas happen unprompted?

Schedule your real work there. Everything else fills the gaps.

When did you figure out your best work window? Did it surprise you?

#productivity #timemanagement #deepwork

Twitter thread (first 3 tweets)
1/ The "eat the frog" productivity advice is hurting your output. Here's why — and what to do instead. 🧵
2/ The advice: do your most important task first thing in the morning. The problem: most people's peak cognitive energy doesn't hit at 7am. You're scheduling hard work during your worst hours.
3/ Peak energy windows are individual. For most people it's 9:30–11:30am or 2–4pm. The morning slot works for early risers, not everyone. If "do it first" isn't working for you, it's not a willpower problem.

... 7 more tweets

Short recap

"Eat the frog" schedules your hardest work during your worst hours. Find your actual peak energy window — usually mid-morning or early afternoon — and protect that time for real work. Everything else fills the gaps."

The key to quality

The single biggest factor in output quality is your VOICE_NOTES setting. With a blank voice note, the output is generic but usable. With a specific voice note — even just three sentences about how you write — the output needs much less editing. Spend 5 minutes writing your voice description once. You get it back every run.

Adjusting for Different Post Types

Listicle posts ("7 ways to...")

These work especially well for Twitter threads — each item in your list becomes a tweet. The LinkedIn output tends to pick the best 2–3 items and build a stronger argument around them rather than listing all seven, which is usually the right call for that platform.

Opinion or perspective pieces

These produce the strongest LinkedIn output because the model has a clear thesis to open with. The Twitter thread sometimes needs a light edit on the hook tweet to make it punchy enough — you'll know immediately if it landed or not.

How-to or tutorial posts

The email newsletter format shines here because it can follow your step structure naturally. The YouTube description is also very strong for how-to content because it can bullet out the steps clearly. The LinkedIn output sometimes needs the most editing for tutorials — "step 1, step 2" formatting doesn't read well on that platform.

Long posts (2,000+ words)

The script handles them fine, but the outputs may feel like they're trying to cover too much ground. For long posts, consider splitting into sections and running each section separately, then combining the outputs. Or add a line to your prompt: "Focus on the section about [topic X] — treat that as the main argument."

Building It Into Your Workflow

The fastest workflow: when you finish writing a post, immediately drop it into post.txt and run the script before you close your laptop. The output files sit in your output folder. When you're ready to post on LinkedIn on Tuesday, open linkedin.txt, give it a 5-minute read, and publish. No reformatting, no staring at a blank box wondering what angle to take.

If you publish on a schedule, you can batch this: write 4 posts on Sunday afternoon, run the script on each, and have 20 pieces of platform-ready content queued up for the week. Then spend Monday morning reviewing them and scheduling them in Buffer or Publer.

The model is gpt-4o-mini by default — fast and very cheap. If you want higher quality outputs (especially for LinkedIn, where the writing bar is higher), change MODEL = "gpt-4o-mini" to MODEL = "gpt-4o". The cost goes from $0.002 to about $0.04 per post. Still under a nickel.

Common Mistakes

Mistake 1: Publishing without reading

The AI doesn't know what happened last week in your industry, your personal story, or the specific client you're thinking of when you write a post. The output is a strong starting point, not a finished product. Read every piece before you post it. The review takes 5 minutes. Skipping it and posting something off-brand is 100% on you.

Mistake 2: Leaving VOICE_NOTES blank

The default output without voice notes is technically correct but tonally bland. The model writes in a kind of generic "professional content creator" voice that doesn't sound like anyone. Fill in your voice description before your first real run. You only do it once.

Mistake 3: Running this on a rough draft

The AI repurposes what you give it. If the source post is unfocused, the outputs will be too. This tool works best on a polished post with a clear thesis. If your draft is still messy, finish the post first, then run the script.

Mistake 4: Using the email output without personalizing the intro

The newsletter output is good, but the intro paragraph is always generic — it doesn't know what was happening in your life, your business, or your industry last week. Add one personal sentence at the top before you send it. Something brief: "This week I shipped X, which got me thinking about Y." That one sentence does more for open rates and replies than anything the AI writes.

The Math

Setup time

~30 minutes (one-time)

Cost per post

~$0.002 (gpt-4o-mini) / ~$0.04 (gpt-4o)

Time saved per post

1.5–2 hours of manual reformatting

Review time

~12 minutes across all 5 outputs

If you publish twice a week, you're saving 3–4 hours weekly. That's a full workday back every month. At $9/month for Library access, this pays for itself the first time you use it.

Get the complete content repurposing kit

Library members get the extended version: prompt variants for 8 post types (listicle, opinion, tutorial, case study, interview, announcement, thread-first, and long-form essay), a Buffer/Publer scheduling integration that auto-queues posts after generation, and voice profile templates for 12 common writing styles to drop in as a starting point.

Get Library Access — $9/mo →

30-day money-back guarantee. Cancel anytime.

← Back to the Library