reelsdk vs Shotstack
A Shotstack alternative that renders slideshows and captions for $0.02 a minute
Shotstack is a timeline editing API: you describe tracks and clips in JSON and pay $0.20 a minute pay as you go, or $0.05 to $0.16 a minute on plans from $39 to $499 a month. reelsdk renders slideshows and word-by-word captions for $0.02 per output minute with no subscription, a complete faceless short for $0.25, and raw ffmpeg 8.1 jobs for $0.01 per compute minute.
- reelsdk slideshows and captions$0.02
- Shotstack Volume, $499 a month$0.05
- Shotstack Scale, $199 a month$0.10
- Shotstack Pro, $99 a month$0.13
- Shotstack Starter, $39 a month$0.16
- Shotstack pay as you go$0.20
Shotstack plan price divided by the minutes it includes, checked October 2026. reelsdk has no plans and no minimum.
Which one to pick
Pick reelsdk if
- You render slideshows, captioned clips or faceless shorts and would rather pay $0.02 a minute than $0.05 to $0.20
- You want one call per job (
/v1/slideshow,/v1/captions,/v1/shorts) instead of laying out tracks and clips - You want signed webhooks, or a request that simply waits up to 300 s and hands back the mp4
Pick Shotstack if
- You compose real edits: several tracks, overlays, text, transitions and merge-field templates
- You need 4K output or a visual template editor for people who don't write code
- You want a free, watermarked sandbox to build against
Price per minute
Shotstack and reelsdk, price per minute
We divided each Shotstack plan by the minutes it includes. Shotstack bills every rendered minute the same way whatever the edit; reelsdk prices by job type, so a slideshow or captioned clip is $0.02 per output minute, a finished faceless short is a flat $0.25 or $0.35, and raw ffmpeg is $0.01 per compute minute.
| Plan | Price | Minutes | Per minute |
|---|---|---|---|
| Shotstack pay as you go | $10 one-off | 50, valid 12 months | $0.20 |
| Shotstack Starter | $39 a month | 250 | $0.156 |
| Shotstack Pro | $99 a month | 750 | $0.132 |
| Shotstack Scale | $199 a month | 2,000 | $0.0995 |
| Shotstack Volume | $499 a month | 10,000 | $0.0499 |
| reelsdk slideshows and captions | Per job | No minimum | $0.02 per output minute |
| reelsdk faceless short | Per job | Up to 60 s or 90 s | $0.25 or $0.35 a short |
| reelsdk raw ffmpeg | Per job | No minimum | $0.01 per compute minute |
Shotstack plan minutes roll over for 3 months and pay-as-you-go minutes last 12. reelsdk voiceovers on slideshows add $0.05 per 1,000 characters, and the first $1 is free. Prices from Shotstack pricing, checked October 2026.
Head to head
reelsdk and Shotstack, feature by feature
| reelsdk | Shotstack | |
|---|---|---|
| Pricing model | Pay per job, no subscription, first $1 free | Monthly plans from $39 with included minutes, or $10 for 50 pay-as-you-go minutes |
| How you describe a video | One call per job type: /v1/slideshow, /v1/captions, /v1/shorts or /v1/ffmpeg | One Edit JSON: a timeline of tracks and clips, an output block and an optional callback |
| Word-by-word captions | Burned in with the bold, karaoke or minimal preset or your own style, plus srt, vtt and ass files | Rich caption asset with word timing from alias:// transcription; karaoke, highlight, bounce, pop, slide and typewriter |
| Caption languages | Auto-detected or set with language, transcribed by Whisper large-v3-turbo | 99 languages |
| Faceless short from a topic | POST /v1/shorts: script, AI images in 8 styles, voice, music and captions in one job | No single call; generate speech, images or video as assets with credits, then build the timeline |
| Raw ffmpeg | POST /v1/ffmpeg with ffmpeg 8.1 arguments, $0.01 per compute minute | Not offered |
| Largest output | 2160 px per side, so 1080x1920 for 9:16 | 3840x2160 in any shape, 4K on Pro and up |
| Getting the result | The create call waits up to 300 s and returns the finished job, or 202 with a poll URL | 201 with a render id; poll GET /render/{id} or wait for the callback |
| Webhooks | Signed with HMAC-SHA256 in Reel-Signature, 3 attempts | Unsigned, retried up to 10 times with back-off |
| Input limits | 500 MB per file, 1 GB per job, media up to 15 minutes | 5 GB per source file, 10 GB source plus output |
| Throughput | 3 concurrent jobs and 500 jobs a day per key | 300 edit requests per 60 s in production, 150 in sandbox |
| File hosting | Download links for 7 days | Permanent CDN hosting by default, or push to S3, Google Drive, Vimeo and more |
| Getting a key | Self-serve sign-up, first $1 free | Self-serve signup, watermarked sandbox renders |
Be honest
Where Shotstack is the better choice
Real multi-track editing
A Shotstack edit is a timeline: tracks of clips placed by
startandlength, with text, HTML and luma assets, overlays, transitions and motion effects likezoomIn. If your video is an edit rather than a slideshow, a captioned clip or a short, that model fits and ours doesn't; on reelsdk you would write the filtergraph yourself on/v1/ffmpeg.4K and templates for non-developers
Pro ($99 a month) and up render at up to 3840x2160, and Shotstack Studio templates with merge fields let someone change text and media without touching JSON. reelsdk slideshows stop at 2160 px per side and there is no visual editor.
Hosting and delivery
Every Shotstack render lands on its CDN by default and stays there, and an edit can also push the file to S3, Google Drive, Vimeo and other destinations. reelsdk links expire after 7 days, so you copy the mp4 to your own storage when the job finishes.
Migration
Moving a render from Shotstack
A Shotstack slideshow is a timeline with one image clip per slide, a soundtrack and an output block, followed by a poll or a callback for the URL. On reelsdk it is one POST /v1/slideshow with the image URLs; the request waits for the render (up to 120 s here) and answers with the finished job, or with 202 and a poll_url if it takes longer.
Shotstack today
curl -X POST https://api.shotstack.io/edit/v1/render \
-H "x-api-key: $SHOTSTACK_KEY" \
-H "Content-Type: application/json" \
-d '{
"timeline": {
"soundtrack": { "src": "https://example.com/music.mp3", "volume": 0.3 },
"tracks": [{
"clips": [
{
"asset": { "type": "image", "src": "https://example.com/1.jpg" },
"start": 0, "length": 4, "effect": "zoomIn",
"transition": { "in": "fade", "out": "fade" }
},
{
"asset": { "type": "image", "src": "https://example.com/2.jpg" },
"start": 4, "length": 4, "effect": "zoomIn",
"transition": { "in": "fade", "out": "fade" }
},
{
"asset": { "type": "image", "src": "https://example.com/3.jpg" },
"start": 8, "length": 4, "effect": "zoomIn",
"transition": { "in": "fade", "out": "fade" }
}
]
}]
},
"output": { "format": "mp4", "resolution": "1080", "aspectRatio": "9:16" },
"callback": "https://your.app/hooks/shotstack"
}'
# 201 { "response": { "id": "..." } }, then poll until status is "done"
curl https://api.shotstack.io/edit/v1/render/$RENDER_ID \
-H "x-api-key: $SHOTSTACK_KEY"
The same render on reelsdk
curl -X POST "https://api.reelsdk.com/v1/slideshow?wait=120" \
-H "Authorization: Bearer $REELSDK_KEY" \
-H "Content-Type: application/json" \
-d '{
"images": [
"https://example.com/1.jpg",
"https://example.com/2.jpg",
"https://example.com/3.jpg"
],
"size": "9:16",
"seconds_per_image": 4,
"motion": "kenburns",
"transition": "fade",
"music": { "url": "https://example.com/music.mp3", "volume": 0.3 },
"webhook_url": "https://your.app/hooks/reelsdk"
}'
# 200 { "job": { "status": "succeeded", "outputs": { "video": "https://..." } } }
# Still rendering after 120 s? You get 202 and a poll_url instead.
Field by field
| Shotstack | reelsdk |
|---|---|
clips[].asset.src (image) | images[]: URLs, or { url, seconds } per slide |
clips[].length | seconds_per_image, or seconds on one image |
clips[].effect: zoomIn | motion: kenburns |
clips[].transition: fade | transition: fade, one of 60, or random |
timeline.soundtrack | music: { url, volume } |
output.resolution + aspectRatio | size: 9:16 (1080x1920) or WIDTHxHEIGHT |
callback | webhook_url, signed with Reel-Signature |
GET /edit/v1/render/{id} | GET /v1/jobs/{id}, or ?wait= on the create call |
| Rich caption asset | captions: karaoke with a voiceover, or POST /v1/captions for an existing video |
FAQ
reelsdk vs Shotstack, answered
How much cheaper is reelsdk than Shotstack per minute?
Shotstack charges $0.20 a minute pay as you go ($10 for 50 minutes) and $0.0499 to $0.156 a minute on plans from $39 to $499 a month. reelsdk charges $0.02 per output minute for slideshows and captions with no subscription, so a 30-second captioned clip costs one cent. A complete faceless short is $0.25 up to 60 seconds, and raw ffmpeg is $0.01 per compute minute.
Can Shotstack make a faceless short from a topic?
Not in one call. Shotstack can generate speech, images, video and music from prompts as timeline assets, paid in credits, but you write the script and lay out the tracks yourself. reelsdk POST /v1/shorts takes a topic or a script and returns a finished short in about 100 seconds: script, AI images in 8 visual styles, voiceover, word-by-word captions and music, in 6 languages, for $0.25 up to 60 seconds or $0.35 up to 90.
How do webhooks differ between Shotstack and reelsdk?
Shotstack posts an unsigned callback and retries up to 10 times with back-off, so you confirm a render by fetching its status. reelsdk signs every webhook with HMAC-SHA256 in the Reel-Signature header, keyed with your whsec_ secret and timestamped so you can reject anything older than 300 seconds, and makes 3 attempts. You can also skip webhooks: the create call waits up to 300 seconds for the finished job.
How long are rendered videos kept?
Shotstack hosts every render on its CDN by default and keeps it there; only the url in the render status response expires after 24 hours. reelsdk download links, including the srt, vtt and ass files from captions jobs, last 7 days, so copy anything you want to keep to your own storage.
Other comparisons
Ready to build?
Ship video from your app today
Your first $1 of renders is free, and one key covers every endpoint.
