Yard sale announcement video: three stills, a voice, 62 cents

Make a yard sale video for a neighborhood group: three item stills, TTS, one Timeline render and burned-in date cues. Endpoint chain and cost, read 2026-10-10.

4 min readSume
All posts

A yard sale video is cheap to make on Sume: three stills from the Image API, one text-to-speech voice-over, one Timeline 1.0 render and one overlay-caption job for the date and address come to about $0.62 (about $0.74 if you also generate a music bed). Nothing in the chain needs a video model.

The reason to avoid a video model here is that a yard sale post is read, not watched. Neighbors need the date, the street and two or three items worth the trip. A still with a held voice-over does that, and the text that matters is burned in by a caption job instead of being drawn by an image model. Prices below come from the Sume pricing code and golden tests (read 2026-10-10).

What is the endpoint chain?

Four calls, none of them long-running. Each is a job you poll or receive by webhook, and every write should carry an Idempotency-Key so a retry does not bill twice.

  • POST /v1/images with google/nano-banana-2.1 once per item: a clean 'for sale' still at the 1K tier. Feed your phone photo as a public HTTPS reference if you want the real item; check GET /v1/images/models for the reference limit.
  • POST /v1/tts-1.0/generate with a 350-character script, timestamps.words: true so the result tells you how long the audio runs.
  • POST /v1/timeline-1.0/render with audio.url from the TTS job and three video[] stills. Starts are 0, 7 and 14 seconds with a 20-second spine.
  • POST /v1/video-captions with cues carrying 'Saturday 9 to 2' and the street, so the text is exact and no speech-to-text runs.

What does it cost?

The caption job is the largest line, and it is a flat fee per job. Timeline is billed per started output minute, so a 20-second video and a 59-second video cost the same.

Yard sale video bill, Sume billable prices (read 2026-10-10)
StepBasisCost
3 item stills3 x $0.10 (Nano Banana 2.1, 1K)$0.30
Voice-over350 characters x $0.0475 per 1,000$0.0166
Timeline render20 s, 1 started minute x $0.10$0.10
Date and address cues1 caption job$0.20
Total$0.6166
Optional music bed1 Lyria 3.5 track via Music Router$0.125

What are the limits?

Timeline needs every URL to be on media.sume.com and lets video coverage stop at most 0.5 seconds before the end of the spine, so take audio.duration_seconds from the last word timing and round up. The first slot must start at 0, and stills hold statically; a motion hint is accepted, ignored and reported as motion_ignored, not a failure.

The caption job reads cues with text, start and end. You can send only one of script_text, words, cues or segments, so choose cues for exact date text. Latin text defaults to the slam style; pick a quieter style if your street name is long. Details are on the Video captions and Timeline 1.0 pages.

Two practical points not in any API: do not put a phone number or a home address in a public post unless you mean to, and re-run only the caption job (not the render) when you change the time, because the clean video does not change. A recaption is $0.20, while a full rebuild is the whole table above.

When does a video model make sense instead?

If one item is the draw, a vintage bike or a piano, add a 5-second image-to-video job. Wan 3.0 at 480p is $0.0625 per second, so the extra clip is $0.3125. Put it in the second slot and keep the same spine. See voice-over on a silent video for the same render pattern, and a 30-second ad with voice, music and captions for a priced reference.

Pre-publish checklist

Before you post, play the render once with sound off. The caption job should carry the date and street on its own, because most neighborhood feeds autoplay muted.

Check that the spine is the length of the voice-over: every video[] start must sit inside it, and the final slot holds until the spine ends. If the voice runs 18.4 seconds, round the spine to 19 and let the last still hold.

  • Set the voice speed with generation_config.speed (0.6 to 1.5) instead of rewriting the script when it runs long.
  • Keep one Idempotency-Key per step so that re-running the script after a crash picks up the finished jobs.
  • Save the three still URLs; next week's sale reuses them with a new date cue.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume