A slideshow with crossfades and music
{
"comment": "Photo slideshow with crossfades and background music",
"resolution": "full-hd",
"quality": "high",
"scenes": [
{
"duration": 4,
"transition": {
"style": "fade",
"duration": 1
},
"elements": [
{
"type": "image",
"src": "https://cdn.json2video.com/assets/samples/slideshow-01.jpg",
"zoom": 1
}
]
},
{
"duration": 4,
"transition": {
"style": "fade",
"duration": 1
},
"elements": [
{
"type": "image",
"src": "https://cdn.json2video.com/assets/samples/slideshow-02.jpg",
"zoom": 1
}
]
},
{
"duration": 4,
"transition": {
"style": "fade",
"duration": 1
},
"elements": [
{
"type": "image",
"src": "https://cdn.json2video.com/assets/samples/slideshow-03.jpg",
"zoom": 1
}
]
},
{
"duration": 4,
"elements": [
{
"type": "image",
"src": "https://cdn.json2video.com/assets/samples/slideshow-04.jpg",
"zoom": 1
}
]
}
],
"elements": [
{
"type": "audio",
"src": "https://cdn.json2video.com/assets/audios/uplifting-cinematic.mp3",
"fade-out": 2,
"volume": 0.6
}
]
} Slideshow example , read on Nov 7, 2026.
{
"images": [
"https://example.com/slideshow-01.jpg",
{
"source": "https://example.com/slideshow-02.jpg",
"transition": {
"type": "fade",
"duration": 1
}
},
{
"source": "https://example.com/slideshow-03.jpg",
"transition": {
"type": "fade",
"duration": 1
}
},
"https://example.com/slideshow-04.jpg"
],
"duration": 4,
"motion": "zoom-in",
"resize": {
"width": 1920,
"height": 1080
},
"extra_inputs": {
"music": "https://example.com/music.mp3"
},
"audio": {
"input": "music",
"volume": 0.6
},
"filename": "slideshow.mp4"
} curl "$VIDEXO_API_URL/v1/slideshow" \
-H "Authorization: Bearer $VIDEXO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"images": [
"https://example.com/slideshow-01.jpg",
{
"source": "https://example.com/slideshow-02.jpg",
"transition": {
"type": "fade",
"duration": 1
}
},
{
"source": "https://example.com/slideshow-03.jpg",
"transition": {
"type": "fade",
"duration": 1
}
},
"https://example.com/slideshow-04.jpg"
],
"duration": 4,
"motion": "zoom-in",
"resize": {
"width": 1920,
"height": 1080
},
"extra_inputs": {
"music": "https://example.com/music.mp3"
},
"audio": {
"input": "music",
"volume": 0.6
},
"filename": "slideshow.mp4"
}' const response = await fetch(`${process.env.VIDEXO_API_URL}/v1/slideshow`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VIDEXO_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"images": [
"https://example.com/slideshow-01.jpg",
{
"source": "https://example.com/slideshow-02.jpg",
"transition": {
"type": "fade",
"duration": 1
}
},
{
"source": "https://example.com/slideshow-03.jpg",
"transition": {
"type": "fade",
"duration": 1
}
},
"https://example.com/slideshow-04.jpg"
],
"duration": 4,
"motion": "zoom-in",
"resize": {
"width": 1920,
"height": 1080
},
"extra_inputs": {
"music": "https://example.com/music.mp3"
},
"audio": {
"input": "music",
"volume": 0.6
},
"filename": "slideshow.mp4"
}),
});
const job = await response.json(); ffmpeg \
-i https://example.com/slideshow-01.jpg \
-i https://example.com/slideshow-02.jpg \
-i https://example.com/slideshow-03.jpg \
-i https://example.com/slideshow-04.jpg \
-i https://example.com/music.mp3 \
-filter_complex "[0:v]fps=30:start_time=0:round=up,trim=end_frame=1,scale=3840:2160:force_original_aspect_ratio=increase,crop=3840:2160,zoompan=z=1+0.2*on/119:x=(iw-iw/zoom)/2:y=(ih-ih/zoom)/2:d=120:s=1920x1080:fps=30,setsar=1,format=yuv420p[o0c0v];[1:v]fps=30:start_time=0:round=up,trim=end_frame=1,scale=3840:2160:force_original_aspect_ratio=increase,crop=3840:2160,zoompan=z=1+0.2*on/119:x=(iw-iw/zoom)/2:y=(ih-ih/zoom)/2:d=120:s=1920x1080:fps=30,setsar=1,format=yuv420p[o0c1v];[2:v]fps=30:start_time=0:round=up,trim=end_frame=1,scale=3840:2160:force_original_aspect_ratio=increase,crop=3840:2160,zoompan=z=1+0.2*on/119:x=(iw-iw/zoom)/2:y=(ih-ih/zoom)/2:d=120:s=1920x1080:fps=30,setsar=1,format=yuv420p[o0c2v];[3:v]fps=30:start_time=0:round=up,trim=end_frame=1,scale=3840:2160:force_original_aspect_ratio=increase,crop=3840:2160,zoompan=z=1+0.2*on/119:x=(iw-iw/zoom)/2:y=(ih-ih/zoom)/2:d=120:s=1920x1080:fps=30,setsar=1,format=yuv420p[o0c3v];[o0c2v][o0c3v]concat=n=2:v=1:a=0[o0j2r];[o0j2r]fps=30[o0j2v];[o0c0v][o0c1v]xfade=transition=fade:duration=1:offset=3[o0x0v];[o0x0v][o0j2v]xfade=transition=fade:duration=1:offset=6[o0cv]" \
-map "[o0cv]" \
-c:v libx264 -preset veryfast -crf 23 -pix_fmt yuv420p \
-map 4:a:0 \
-af volume=0.6,apad \
-c:a aac -b:a 128k -shortest -movflags +faststart \
slideshow.mp4 POST /v1/slideshow makes slideshow.mp4: 14 seconds at 1920 by 1080, four photos zooming in slowly, fading into the second and third, over the music.
zoom: 1becomesmotion: "zoom-in": one of six fixed motions, not a percentage.- A fade out on the music alone has no equivalent here:
fadeon an output fades picture and sound together. - JSON2Video ignores a transition on the first scene, as its docs say, so the transitions here go into the second and third photos.