Real estate photo to video AI: a listing tour from photos
Turn listing photos into a video tour with AI: animate each photo as a clip's first frame, join the clips in room order, and check every frame.

To turn real estate photos into a video with AI, make each listing photo the first frame of a short image-to-video clip and describe one camera move in the prompt, such as a slow push-in or a pan. Join the clips in room order with transitions and a music bed, add the address and price as on-screen text, and compare every clip with its photo before you post it.
The photo sets only the first frame; the model generates every frame after it. The Sume facts below come from Video generation, Timeline 1.0, and Video captions, read on 2026-09-27.
How do I turn one listing photo into a moving clip?
Put the photo's URL in frame_images on POST /v1/videos, with frame_type: "first_frame". The image must be reachable over public HTTPS. The docs advise prompts that include motion, camera angles, lighting, and scene composition, so give each room one move: a slow push-in toward the windows, a pan across the kitchen, a pull-back from the front door.
Make one clip per room. Most models stop at 15 seconds per clip; seedance-2.5 and wan-3.0 go to 30. A model takes a first frame when its supported_frame_images on GET /v1/videos/models lists first_frame. The call answers 202 with a job id and a polling_url; poll it until status is completed.
curl -X POST https://api.sume.com/v1/videos \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: listing-living-room-001" \
-d '{
"model": "seedance-2",
"prompt": "Slow push-in across the living room toward the windows, steady camera, soft daylight",
"frame_images": [
{
"type": "image_url",
"image_url": { "url": "https://example.com/listing/living-room.jpg" },
"frame_type": "first_frame"
}
],
"aspect_ratio": "16:9",
"duration": 5
}'How do I join the clips into one tour?
Sume mirrors each finished clip to a Sume-owned media.sume.com URL, which the job's result at GET /v1/jobs/{id}/result carries. Timeline 1.0 takes only your own workspace's media.sume.com URLs. List the clips in video[] in room order: each slot has a start and a duration, the first starts at 0, and each later slot can open with a transition (fade, dissolve, wipeleft, wiperight, slideup, or slidedown) of up to 1 second.
For a music-only tour, set audio.mode to "silence" with the tour's length in audio.duration_seconds, and add a soundtrack. With silence, the bed is the whole track, so the API reference says to set its gain_db to 0. The bed must be Sume-hosted too, such as a Music Router track (which BGM catalog tracks qualify). The output is 1080×1920 unless you set output; use 1920×1080 for a horizontal tour.
The movement has to come from the generated clips. A still on a Timeline is a static hold (its motion field is ignored), so a Timeline of stills makes a slideshow, not a tour.
curl -X POST https://api.sume.com/v1/timeline-1.0/render \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: listing-tour-001" \
-d '{
"audio": { "mode": "silence", "duration_seconds": 15 },
"soundtrack": {
"url": "https://media.sume.com/artifacts/artf_demo/music.mp3",
"gain_db": 0,
"loop": true,
"fade_out_seconds": 2
},
"output": { "width": 1920, "height": 1080 },
"video": [
{ "source_url": "https://media.sume.com/artifacts/artf_demo/exterior.mp4", "start": 0, "duration": 5 },
{ "source_url": "https://media.sume.com/artifacts/artf_demo/living-room.mp4", "start": 5, "duration": 5,
"transition": { "type": "dissolve", "duration": 0.5 } },
{ "source_url": "https://media.sume.com/artifacts/artf_demo/kitchen.mp4", "start": 10, "duration": 5,
"transition": { "type": "dissolve", "duration": 0.5 } }
]
}'How do I add the address and price?
Burn them onto the finished tour with POST /v1/video-captions and cues. Each cue has text, start, and end in seconds, and cues skip speech-to-text, so a tour with no voice works. Send the tour's media.sume.com URL as video_url.
Today the caption job refuses a source longer than 60 seconds, so keep the captioned tour to a minute. A caption job is a fixed amount for videos up to 60 seconds; confirm it in GET /v1/catalog. Placing and styling the lines is covered in how to add text over a video.
Will the AI video show the property accurately?
Not by itself. Your photo sets only the first frame, and the model generates every frame after it, so a clip can show fixtures, finishes, views, or proportions the home doesn't have, and a move that reveals space outside the photo has to invent it. Treat each clip as an illustration and check it:
- Pull stills with
POST /v1/video-framesat the times you name inat[]. It takes a Sume-hosted clip and is unbilled. - Compare each still with its photo: fixtures, windows, views, finishes, and the size of the room.
- Regenerate or drop any clip that changes the room, and keep the original photos as the listing's record.
What does a listing video cost, and what are the limits?
Each step is a separate job with its own price. Video models are billed at the provider's list price × 1.25; each model's rates are its pricing_skus on GET /v1/videos/models.
| Step | Endpoint | Limits | Price |
|---|---|---|---|
| One clip per photo | POST /v1/videos | Up to 15 s on most models; seedance-2.5 4–30 s, wan-3.0 2–30 s | Per model, in pricing_skus |
| The tour | POST /v1/timeline-1.0/render | 1–200 slots, 1–1,800 s, even edges from 256 to 2,160 px | Listed at $0.10 per output minute |
| Address and price | POST /v1/video-captions | Source up to 60 s today | Fixed per job; see GET /v1/catalog |
| Frame check | POST /v1/video-frames | One Sume-hosted clip per job | Unbilled |
Sources
Related posts
More in Use cases
- Slideshow with voiceover: time each slide to its sentence
Make a slideshow with voiceover by holding each slide for its narration line. With Sume, TTS sentence timings become the slide slots in one render.
- Storyboard to video AI: turn each frame into a shot
Turn a storyboard into video one frame at a time: render sketches into stills, animate each as a clip's first frame, then join the clips in order.
- Text to speech recording for e-learning: one file per slide
Record e-learning narration with text to speech: one audio file per slide, the same voice each time, MP3 or WAV, and redo only the slide that changed.
- Text to speech for language learning: slow sentence audio
Make language-learning audio with text to speech: set the target language, slow the voice to 0.6×, and get one clip per sentence with word timings.
Written by Sume