Slideshow API, $0.02 a minute

Turn photos into a narrated video with one API call

Send 1 to 100 image URLs and get back an MP4 with Ken Burns motion, transitions, an AI voiceover, music and word-by-word captions. It costs $0.02 per minute of video, plus $0.05 per 1,000 characters when one of our 40 voices reads your script. A 30-second 1080x1920 slideshow renders in 40 to 45 seconds.

  • 1 to 100 photos
  • 40 English voices
  • 58 transitions

0:00.0 / 0:10.0

images
motion
zoom inpan rightzoom outpan leftzoom in
voiceover
captions
music
optional: { url, volume }

Quick start

Photos and a script in, MP4 out

List your images, write what the voice should say and pick a caption style. Photos share the length of the voiceover unless you time them yourself.

curl "https://api.reelsdk.com/v1/slideshow" \
  -H "Authorization: Bearer $REELSDK_KEY" \
  --json '{
    "images": [
      "https://your.app/seville/river.jpg",
      "https://your.app/seville/plaza.jpg",
      "https://your.app/seville/oranges.jpg",
      "https://your.app/seville/flamenco.jpg",
      "https://your.app/seville/tapas.jpg"
    ],
    "size": "16:9",
    "voiceover": {
      "text": "Three days in Seville. Plaza de España at noon, orange trees under the Giralda, flamenco after dark, and tapas until midnight.",
      "voice": "luna"
    },
    "captions": "karaoke"
  }'
200 OK, finished in 27 s
{
  "job": {
    "id": "job_dhodzdoc9is0j8ht9lgm",
    "op": "slideshow",
    "status": "succeeded",
    "stage": null,
    "created_at": "2026-10-26T09:21:04.318Z",
    "finished_at": "2026-10-26T09:21:31.402Z",
    "outputs": {
      "video": "https://api.reelsdk.com/f/out/job_dhodzdoc9is0j8ht9lgm/video.mp4",
      "transcript": "https://api.reelsdk.com/f/out/job_dhodzdoc9is0j8ht9lgm/transcript.json",
      "srt": "https://api.reelsdk.com/f/out/job_dhodzdoc9is0j8ht9lgm/captions.srt",
      "vtt": "https://api.reelsdk.com/f/out/job_dhodzdoc9is0j8ht9lgm/captions.vtt",
      "ass": "https://api.reelsdk.com/f/out/job_dhodzdoc9is0j8ht9lgm/captions.ass"
    },
    "result": null,
    "duration_s": 10.03,
    "error": null,
    "usage": {
      "output_seconds": 10.03,
      "audio_seconds": 9.52,
      "tts_characters": 126,
      "images": 0
    },
    "poll_url": "https://api.reelsdk.com/v1/jobs/job_dhodzdoc9is0j8ht9lgm"
  }
}

Jobs that outlast the wait answer 202 with a poll_url. Add webhook_url and we POST the finished job to you instead.

Sizes

Any shape your app needs

Vertical for Reels and TikTok, widescreen for YouTube, square or 4:5 for the feed. Pick a ratio or pass your own width and height.

Six photos, 9:16
  • 9:16
    1080x1920 (default)
  • 16:9
    1920x1080
  • 1:1
    1080x1080
  • 4:5
    1080x1350
  • 3:4
    1080x1440
  • 4:3
    1440x1080
Custom size
Any even width and height from 240 to 2160 px, at 24 to 60 fps.
cover
Crops each photo to fill the frame. This is the default.
contain
Shows the whole photo over a blurred, darkened copy of itself.

Transitions

58 transitions, or let us pick

Every xfade transition ffmpeg ships, from 0.1 to 2 seconds long. Without a choice you get a half-second fade.

  • fadedefault
  • fadeblack
  • slideleft
  • slideright
  • slideup
  • slidedown
  • smoothleft
  • smoothright
  • smoothup
  • smoothdown
  • coverleft
  • coverright
  • fadewhite
  • fadegrays
  • fadefast
  • fadeslow
  • dissolve
  • distance
  • pixelize
  • radial
  • wipeleft
  • wiperight
  • wipeup
  • wipedown
  • wipetl
  • wipetr
  • wipebl
  • wipebr
  • circlecrop
  • rectcrop
  • circleclose
  • circleopen
  • horzclose
  • horzopen
  • vertclose
  • vertopen
  • diagbl
  • diagbr
  • diagtl
  • diagtr
  • hlslice
  • hrslice
  • vuslice
  • vdslice
  • hblur
  • squeezeh
  • squeezev
  • zoomin
  • hlwind
  • hrwind
  • vuwind
  • vdwind
  • coverup
  • coverdown
  • revealleft
  • revealright
  • revealup
  • revealdown

Pass random and every cut gets one of the 12 highlighted transitions, never the same one twice in a row. Or pass none for hard cuts.

"transition": { "type": "random", "seconds": 0.6 }

What you control

The parts of a video editor your app actually needs

  • Ken Burns motion

    Slow zooms and pans are on by default and change direction from photo to photo. Set motion to none for still slides.

  • Voiceover from text or audio

    Send up to 10,000 characters and pick one of 40 English Deepgram Aura-2 voices, or pass the URL of a recording you already have.

  • Music that ducks under the voice

    Add a music URL and we loop it to length, fade it out, dip it under the voiceover and level the final mix to -14 LUFS.

  • Captions in the same render

    Burn word-by-word captions of the voiceover with bold, karaoke, minimal or your own style, and get the transcript, SRT and VTT back too.

  • Timing that fits the story

    Give any photo its own seconds (0.5 to 60), set seconds_per_image for all of them, or let the photos share the length of the voiceover.

  • Draft, standard or high

    Pick quality to trade render time for detail. Every MP4 is H.264 and starts playing before it finishes downloading.

Specs

Slideshow API specs

reelsdk slideshow API specifications
EndpointPOST /v1/slideshow
Photos1 to 100 image URLs, JPG, PNG, WebP, AVIF or GIF, up to 100 megapixels and 500 MB each, 1 GB per job
Size9:16 (1080x1920, default), 16:9, 1:1, 4:5, 3:4, 4:3, or any even width and height from 240 to 2160 px
Frame rate24 to 60 fps, 30 by default
LengthUp to 15 minutes; 0.5 to 60 seconds per photo, 3 by default without a voiceover
Fitcover (crop to fill, default) or contain (whole photo over a blurred copy)
Transitionsfade (0.5 s, default), 57 other xfade transitions, random or none, 0.1 to 2 s long
VoiceoverAudio URL, or up to 10,000 characters read by one of 40 English voices
MusicAny audio URL, looped with a 1 s fade-out and ducked under the voice, volume 0.2 by default
Captionsbold, karaoke, minimal or a style object; needs a voiceover
Video outH.264 MP4, AAC 192 kbit/s, loudness -14 LUFS, fast start for streaming
Files returnedvideo.mp4, plus transcript.json, captions.srt, captions.vtt and captions.ass when captioned
Render time40 to 45 seconds for a 30-second 1080x1920 slideshow with 6 photos, voiceover, music and captions
Price$0.02 per output minute, plus $0.05 per 1,000 voiceover characters

Pricing

$0.02 a minute, voice by the character

You pay for the length of the video you get back. Motion, transitions, music and captions cost nothing extra.

$0.02per output minute

A voiceover from your text adds $0.05 per 1,000 characters, about 50 seconds of narration.

Prepaid credit with no subscription, and your first $1 of renders is free.

100 minutes of 1080p video at list price, checked October 2026
Provider and planPer minute100 minutes
reelsdkPay as you go, slideshows and captions$0.02/min$2.00
ShotstackPay as you go, $10 for 50 minutes$0.20/min$20.00
ShotstackStarter, $39 a month for 250 minutes$0.16/min$16.00
JSON2VideoProfessional, $49.95 a month for 200 minutes$0.25/min$25.00
CreatomateEssential, $54 a month, 1080p at 25 fps$0.84/min$84.00

Use cases

What builders make with it

  1. 01

    Listing videos for real estate

    Turn property photos into a vertical or widescreen walkthrough, narrated from the listing description.

  2. 02

    Trip and event recaps

    Let users pick their photos and a song and hand back a finished recap, with no timeline editor to build.

  3. 03

    Product videos from catalog shots

    Combine product images with a short script and karaoke captions into an MP4 that plays right in the browser.

  4. 04

    Memories and photo dumps

    Generate weekly or yearly recap reels inside a Supabase, Lovable or bolt app with one background call.

FAQ

Slideshow API questions

How much does the slideshow API cost?

$0.02 per minute of finished video. If we generate the voiceover from your text, add $0.05 per 1,000 characters, which is about 50 seconds of narration. There's no subscription or minimum, you work from prepaid credit, and your first $1 of renders is free.

How fast does a slideshow render?

A 30-second 1080x1920 slideshow with 6 photos, an AI voiceover, music and captions takes 40 to 45 seconds end to end. The machine that renders it is ready in about 2 seconds, and draft quality renders faster still.

How do I get the finished video back?

The create call waits up to 60 seconds and returns the finished job, or up to 300 seconds with ?wait=. Longer jobs answer 202 with a poll_url, or you pass a webhook_url and we POST the result, signed with HMAC-SHA256, with 3 delivery attempts. Files stay downloadable for 7 days.

Which voices and languages can narrate?

Text voiceovers use Deepgram Aura-2 with 40 English voices, luna by default. For other languages, record or generate the audio elsewhere and pass its URL as the voiceover; captions are transcribed from whatever audio you send.

What are the limits?

1 to 100 photos per slideshow, each up to 100 megapixels and 500 MB, with 1 GB of input per job and up to 15 minutes of video. Each key runs 3 jobs at once and up to 500 jobs a day.

Can I call it from Lovable, bolt, Supabase or n8n?

Yes. It's one HTTPS request with a JSON body, so it works from a Supabase Edge Function, a Cloudflare Worker, a Vercel function, a Lovable or bolt app, or an n8n HTTP Request node, with nothing to install.

Ready to build?

Render your first slideshow free

Sign up and create an API key in a minute. Your first $1 of renders is on us, then it's $0.02 a minute.

Moonlit lake with a lit cabin under the mountains