Listing photos from a walkthrough video: 24 stills, 300 s
Pull up to 24 full-size stills from a listing walkthrough with Sume's video frames, free, on clips up to 300 seconds. Staging rules stay with your MLS.

If you shot a walkthrough video of a listing and need still photos from it, Sume's video frames pulls up to 24 stills at the seconds you name, at the clip's own resolution, from a source up to 300 seconds, and the job is unbilled. The stills are frames of your footage; Sume does not alter or stage them.
Whether a frame grab is an acceptable MLS photo is your MLS's call. The NorthstarMLS home page (read 2026-10-02) links a Virtual Stage Best Practice document and states that virtual staging is acceptable as long as alterations affect only personal property (furniture) and not the real estate. The linked PDF would not parse for me, so this post relies only on that sentence.
Why pull stills from video at all?
Agents often have more footage than photographs. A 3 minute walkthrough already covers every room from walking height, and a still taken from it can fill a gap in the gallery: a hallway, the back of a kitchen, a view out of the balcony door.
Two cautions. Motion blur and rolling-shutter skew show up in stills far more than in moving video, so pick moments where the camera paused. Second, listing photo size rules differ between portals. Sume returns the source frame size unless you set max_edge, so check the portal requirement and downscale deliberately.
How do I request the stills?
Import the walkthrough with POST /v1/media-imports, then call POST /v1/video-frames with at[] or fps, not both. at[] takes 1 to 24 values; fps is above 0 and up to 2, expanded to mid-bin samples and capped at 24 frames. Use png when you want lossless frames for inspection; jpeg is the default.
This asks for ten named moments in a 150 second clip, as PNG at the source size:
curl -X POST https://api.sume.com/v1/video-frames \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 12-oak-st-stills" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/12-oak-st.mp4",
"at": [4, 18, 31, 47, 62, 78, 95, 111, 128, 144],
"format": "png"
}'What happens when the walkthrough is long?
The source cap is 300 seconds. A 6 minute video fails with duration_out_of_range. Cut the first half and second half with video trim at $0.02 a job, and run frames on each part. Times in at[] are relative to the file you pass, so after a trim the second part restarts at zero.
A time at or beyond the duration fails as frame_time_out_of_range, with the probed duration in the error. A single instant that cannot be extracted returns a null url without failing the job.
| Item | Limit |
|---|---|
| Source length | 300 seconds |
| Stills per call | 24 |
| Formats | jpeg (default), png |
max_edge | 16 to 2160 (omit for source size) |
| Billing | Unbilled |
What does Sume not do here?
For a video built from still photos instead, see real estate listing video from photos. If an AI edit is involved, read California AB 723 and AI-edited listing photos before publishing.
- It does not stage rooms or edit furniture; this post is about unaltered frames.
- It does not decide what your MLS or portal accepts.
- It does not label a photo for you; add any required label in your listing tool.
- It does not choose the sharp frames; you pick the seconds.
How should I name the stills?
The result lists frames with t, url, width and height. Name each still by room and timestamp in your own gallery notes, since the frames come back as numbered durable image files rather than room labels. Sume does not recognise rooms in this call.
If you want a quick overview before choosing, ask for fps: 0.5 in a first pass to get a contact sheet of about one frame every two seconds, capped at 24, then request exact at values for the keepers.
Keep the original walkthrough file next to the stills. If a portal or MLS later asks where a photo came from, you can show the video and the second it was taken from.
Sources
Related posts
More in Use cases
- Find product moments in a live-commerce replay and trim them out
Run one transcript on a live-selling replay, find the sentences where each product is pitched, then cut each range with video-trim at $0.02 a clip.
- Live replay highlight reel in one render: detach once, no trims
Detach a live replay's audio once ($0.01), then build a 30-second highlight reel in one Timeline render using audio parts and source_in. No per-clip trim jobs.
- Log the exact video model id per shot after Runway model removals
When a vendor retires a video model, a logged model id turns the audit into a query. Record it on every shot, and know what Sume echoes.
- Looping AI video: use the same image as first and last frame
Try a seamless loop on Sume by sending one still as both first_frame and last_frame to Seedance or Kling. Request shape, limits and what to check.
Written by Sume