Blog to video AI: turn each new post into a video
Blog to video AI turns an article into a narrated video. Automate it: send each new post's text to a video agent with a spend cap and a post key.

Blog to video AI turns an article into a short video: a script drawn from the post, read as a voiceover over visuals. To automate it, send each new post's text to a video agent when the post goes live, give the run a spend cap and a key tied to that post, and take the finished video from a webhook instead of waiting on it.
The Sume details below come from the Agent Completions, Create a run and Best practices docs, read on 2026-09-27.
What should the video run receive from each post?
The post's own text: its title and body, in the run's input, so the video is made from exactly the words you published. On an Agent Completion, Sume writes input whole to a file in the run's workspace and treats it as data, never as instructions; the prompt carries only a pointer to it. Your instruction then says what to make from that data.
Keep the article out of the instruction. On a Format run, input takes up to 2 MiB and is never truncated, while only about the first 4,000 characters of instruction reach the run as prompt text.
How do I start one video per new post?
Call Sume from whatever already knows a post went live: your CMS's publish event, a step in your deploy, or a job that checks your feed for new posts. While you are still tuning the brief, use an Agent Completion, which runs the Sume agent on an instruction you send each time. generation_spend_cap_usd is required and has no default; size it from the rates on API pricing.
Derive the Idempotency-Key from the post, such as its slug plus a version you bump when you want a new cut. Replaying a key returns the original receipt with idempotency_hit: true instead of a second paid run, and reusing it with a different payload returns 409 idempotency_conflict.
| Part of the job | Field | What the docs say |
|---|---|---|
| The article's title and body | input | Written whole to a file; data, never instructions |
| What to make from it | instruction or messages | Send exactly one of the two, never both |
| The post's identity | Idempotency-Key header | A replay returns the original receipt; a different payload is 409 idempotency_conflict |
| The spending limit | generation_spend_cap_usd | Required, with no default |
| Where the result goes | communication.webhook_url | A public HTTPS URL that gets one signed POST when the run completes or fails |
curl -sS -X POST "https://api.sume.com/v1/agent/completions" \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: blog-video-friday-deploys-v1" \
-d '{
"instruction": "Make a vertical 9:16 video with a voiceover from the article in the input. Use only facts from the article.",
"input": {
"title": "Why we deploy on Fridays",
"body": "Full article text goes here."
},
"generation_spend_cap_usd": 10,
"communication": { "webhook_url": "https://example.com/hooks/sume" }
}'How do I get the finished video?
With a webhook: Sume sends one signed POST to communication.webhook_url when the run completes or fails. A completed run fills output with the agent's closing text in output.text and any generated media in output.videos, plus artifacts. Media URLs are durable media.sume.com HTTPS URLs, so you can store the video link next to the post.
Without a webhook, poll GET /v1/agent-runs/{run_id} until next_action stops being poll_status.
When should the brief become a Format?
Once every post should get the same treatment. A Format is a saved recipe: ask the Agent in the Agents chat to save the brief, then call it by handle and slug with only the post in input. The docs draw the split this way: prefer a Format when you have a saved recipe, because it owns the tooling, spend gates and house style while your client only sends the brief; use Agent Completions when there is no saved Format yet or the brief changes every time. What is a Sume Format? covers the call.
What does this setup not do?
If you would rather build the video from parts yourself, the faceless video API post assembles narration, B-roll and music step by step. The agent route has these limits:
- It doesn't watch your blog. In this setup each run starts from an API call you make, so your publish hook or feed check is the trigger.
- Attachments are images only.
input_imageis the only attachment type today, so send the article as text ininput, not as a PDF. - No streaming. The create call returns
202with a receipt you poll or take by webhook; streaming and a synchronous response are not available yet. - No follow-up turns. Every completion runs in a fresh thread, and continuing a prior thread is not available yet, so a new cut is a new run.
Sources
Related posts
More in Use cases
- How to change the background of a photo with AI
Give an AI image model your photo and a prompt that names the new background, or cut the subject out first. How to do both with the Sume API.
- Generate music for a video with AI, then fit it to the cut
To generate music for a video with AI, describe the cut in a music brief, send a still from it, ask for its length, then fit the track to the video.
- Hook variations for UGC ads: swap the hook, reuse the body
Make UGC ad hook variations by changing only the opening: one Timeline render per hook over the same body clips and voice, checked free first.
- How long should an ad be? Video ad lengths by platform
There is no single right length: each platform publishes its own. YouTube bumpers are 6 s, and Facebook plays in-stream ads of 15 s or less in full.
Written by Sume