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.

5 min readSume
All posts

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.

From Agent Completions and Run webhooks, read 2026-09-27.
Part of the jobFieldWhat the docs say
The article's title and bodyinputWritten whole to a file; data, never instructions
What to make from itinstruction or messagesSend exactly one of the two, never both
The post's identityIdempotency-Key headerA replay returns the original receipt; a different payload is 409 idempotency_conflict
The spending limitgeneration_spend_cap_usdRequired, with no default
Where the result goescommunication.webhook_urlA 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_image is the only attachment type today, so send the article as text in input, not as a PDF.
  • No streaming. The create call returns 202 with 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

All Use cases posts

Written by Sume