Get started
PostClip — Blog Post to 60s Vertical Shorts Video

PostClip — Blog Post to 60s Vertical Shorts Video

Give it a blog post or article and it writes a script with a hook and 5 to 8 beats. Two local Python scripts do the rest: edge-tts voices each sentence, then Pillow and ffmpeg combine a Ken Burns background (your image or a gradient), keyword-highlight captions and a progress bar into a 1080x1920 video. In our sample, an 870-character Korean article became a 48.3-second video. No API key needed; with BGM, sidechain ducking is automatic.
#Video#Social Media#Marketing
Rating
More ratings needed
Sold
0
How to use
Download

PostClip — Blog Post to 60s Vertical Shorts Video

hero_en.webp before_after_en.webp

Short description

Give it a blog post or article text and it writes a script with one hook line and 5 to 8 beats.
Two local Python scripts do the rest. edge-tts synthesizes the voice sentence by sentence, then
Pillow and ffmpeg combine a Ken Burns background (your image or an auto-generated gradient),
keyword-highlight captions and a story-style progress bar into a 1080x1920 mp4 of 60 seconds or
less. No API key needed, and if you add BGM, sidechain ducking is applied automatically.

Categories

Video / Social Media / Marketing

Tags

article to video, shorts maker, text to speech video, vertical video, blog to reels

Suggested price

USD $7 (one-time download)

Details

After you publish a post, the short is always a separate job

After writing a blog post you think "this should be a short too," but writing a script,
recording, finding a background, adding captions and encoding take longer than writing the post.
PostClip wraps that back end into a local pipeline. The agent reads the source and writes one
short script JSON, and two Python scripts handle everything from speech synthesis to the final
mp4 encode. No cloud API, no subscription.

Pipeline

Source (text/URL)
  → (optional) fetch.py extracts the article body from a URL
  → agent writes the hook + beats script JSON
  → tts.py: per-sentence speech with edge-tts + caption timing
  → render.py: background (Ken Burns/gradient) + kinetic captions + progress bar
             → (optional) BGM sidechain ducking
             → loudnorm 2-pass normalization → H.264 High + AAC 48k + faststart
  → out/final.mp4 (1080x1920, ≤60 s)

Actual commands

uv run scripts/fetch.py "https://example.com/article" --out article.txt   # only for URLs
uv run scripts/tts.py my_script.json --outdir out/audio
uv run scripts/render.py out/audio/timing.json --outdir out --bgm bgm.mp3

What's included

The download contains these files.

File Role
SKILL.md Full usage procedure
scripts/fetch.py URL → article text extraction (trafilatura, optional)
scripts/tts.py edge-tts speech synthesis + sentence/caption timing
scripts/render.py Ken Burns background, kinetic captions, progress bar, BGM ducking, loudnorm, final encode
guides/script-template.md Script JSON schema + writing tips
guides/licensing.md Notes on edge-tts, BGM and image licensing

3 usage examples

  1. Personal blog post → Instagram Reels: after writing an informational post (sleep, personal
    finance, productivity), pull the 5 or 6 key points as beats, make a vertical video and post it
    to Reels or Shorts.
  2. Internal notices and release notes → internal video: turn text-only release notes into a
    30 to 40 second summary video and share it on Slack. It uses only synthetic voices, not real
    people's voices, so there is no impersonation issue.
  3. News curation channel → summary shorts: use fetch.py to pull only the article body from a
    URL, and the agent rewrites the script around objective facts for a summary short.

What you need

  • uv, ffmpeg (the default Homebrew build is enough), internet connection (for edge-tts)
  • Korean font: found automatically on macOS and Windows. On Linux, install Noto Sans CJK
  • (optional) For BGM, prepare a royalty-free audio file yourself
  • (optional) For a background image, prepare a local image whose copyright you have checked

This skill must not be used to impersonate real people, make deepfakes, or deceive. The
synthetic voice and auto-generated backgrounds are for general content production.

Recommended / not recommended

Recommended when

  • You want to turn informational blog posts, newsletters or internal docs into short vertical
    videos quickly
  • You want to finish locally without API keys or subscriptions
  • You make shorts with keyword-highlight captions and a progress bar on a regular basis

Not recommended when

  • Broadcast content that needs exact word-level lip sync and caption timing (with Korean TTS,
    captions are approximate within sentence boundaries; see the FAQ below)
  • You plan to post in bulk to an ad-monetized channel and need a commercial TTS license
    (edge-tts is an unofficial endpoint; read guides/licensing.md)
  • The goal is to imitate a real person's voice or face (prohibited)

FAQ

Q1. Does it really need no API key at all?
Yes. TTS (edge-tts), image backgrounds (generated by Pillow or a local image) and captions
(Pillow) all use local, free paths. Only the script writing is done as text by the agent
(Claude, etc.), and the scripts do not call any LLM API.

Q2. Do captions match every single word and mouth movement?
No. edge-tts does not provide word-level timestamps (WordBoundary) for Korean voices (verified).
Sentence boundaries match exactly, and the 2 to 3 word caption chunks inside a sentence are
approximated in proportion to character count. It feels natural, but it is not a perfect word
timestamp.

Q3. What happens if it goes over 60 seconds?
When you run tts.py, the expected total length is printed to stderr, with a warning if it goes
over 60 seconds. It does not trim automatically, so shorten the beat sentences or raise rate
(speaking speed) and run it again.

Q4. Does it work without BGM?
Yes. Leave out the --bgm option and the final video uses narration only. With BGM, a sidechain
compressor lowers the BGM volume automatically while the narration plays.

Q5. The captions have shadows and outlines. Is that ffmpeg drawtext?
No. Homebrew ffmpeg 9.x has no drawtext or subtitles (libass) filter (verified). All text is
drawn by Pillow as transparent PNGs and composited with the ffmpeg overlay filter. The progress
bar is drawn with Pillow for the same reason (we verified that time-based animation with ffmpeg
drawbox does not work correctly in this build).

Purchase notes

After downloading, unzip the package/ folder as is and follow the procedure in SKILL.md. If
uv and ffmpeg are installed, it works with no extra setup.


Real output example (sample text: "Why you stay tired no matter how much you sleep," an article
of about 870 Korean characters on sleep habits → 48.3-second vertical short)

The background photos in the example are public NASA Image Library photos (public domain), and the text was written by us as an example. The actual result video includes edge-tts narration.


External APIs

Microsoft Edge TTS