Skip to content

Preview Videxo runs jobs, accepts uploads up to 100 MB, serves output downloads and sends signed webhooks. Sign in with email, GitHub or a passkey. Payments are not connected yet, so credit packs and paid plans cannot be bought. Read the quickstart

A JSON2Video alternative. Scenes become parts.

JSON2Video builds videos from scenes, with an editor, saved templates and generated voices. Videxo does a narrower job: clips, stills and title cards in sequence, with text, overlays, your subtitles and music, as JSON in your code.

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"
}'

Side by side

Videxo and JSON2Video. Checked on Nov 7, 2026.

Videxo and JSON2Video, as their own pages describe them on Nov 7, 2026
TopicVidexoJSON2Video
Before the first jobAn API key as a Bearer token. No bucket, role or queue to create.An API key in the x-api-key header.
How a video is describedJSON: named inputs and an output whose parts play in order. Or the ffmpeg command you already run. Checked before the job is created.A movie in JSON: scenes that play in order, each with its elements, and elements that overlay every scene.
What a video is built fromVideo clips, still images and title cards in sequence, with up to 8 text layers and 4 overlays on an output, subtitles from your SRT or WebVTT file, and music.Image, video, text, HTML, component, audio, audiogram, voice and subtitles elements, layered by their order or a z-index.
Visual editorNone. You write JSON or an ffmpeg command.A browser editor where every property is a form field, with a live preview and a timeline with one row per scene.
Saved templatesNone. The JSON body stays in your code.Saved templates with {{variables}}, rendered by id; created in the editor or with POST /v2/templates.
Generated mediaNone. Every picture and sound is a file you send.Voiceovers from text through Azure or ElevenLabs, and subtitles transcribed from the audio. Generated images are not documented.
Output formatsVideo as MP4, MOV, WebM, MKV or TS, audio files, JPG, PNG and GIF.MP4 up to 4K, with a JPEG or PNG thumbnail.
Where outputs goStored for your plan’s retention, 7 days to 30 days, with signed download links that last up to an hour.Stored for 7 days, then deleted. Exports go to a webhook, FTP, SFTP, email or a saved Amazon S3 destination.
When a job endsA webhook URL per job or endpoints on your account, signed in the Standard Webhooks format and retried for about a day.A webhook destination under exports, retried twice at most. Its docs say webhooks are not signed.
AI assistants (MCP)An MCP server that checks, runs and waits for jobs with your API key.A hosted MCP server and a local one through its CLI: render, check status, validate a movie, manage templates and media.
CompanyBEO TECHNOLOGY sp. z o.o., Poland, in the European Union.JSON2Video; its terms apply the laws of Spain. A legal entity is not documented on its terms or privacy pages.
  • Videxo

    Before the first job
    An API key as a Bearer token. No bucket, role or queue to create.
    How a video is described
    JSON: named inputs and an output whose parts play in order. Or the ffmpeg command you already run. Checked before the job is created.
    What a video is built from
    Video clips, still images and title cards in sequence, with up to 8 text layers and 4 overlays on an output, subtitles from your SRT or WebVTT file, and music.
    Visual editor
    None. You write JSON or an ffmpeg command.
    Saved templates
    None. The JSON body stays in your code.
    Generated media
    None. Every picture and sound is a file you send.
    Output formats
    Video as MP4, MOV, WebM, MKV or TS, audio files, JPG, PNG and GIF.
    Where outputs go
    Stored for your plan’s retention, 7 days to 30 days, with signed download links that last up to an hour.
    When a job ends
    A webhook URL per job or endpoints on your account, signed in the Standard Webhooks format and retried for about a day.
    AI assistants (MCP)
    An MCP server that checks, runs and waits for jobs with your API key.
    Company
    BEO TECHNOLOGY sp. z o.o., Poland, in the European Union.
  • JSON2Video

    Before the first job
    An API key in the x-api-key header.
    How a video is described
    A movie in JSON: scenes that play in order, each with its elements, and elements that overlay every scene.
    What a video is built from
    Image, video, text, HTML, component, audio, audiogram, voice and subtitles elements, layered by their order or a z-index.
    Visual editor
    A browser editor where every property is a form field, with a live preview and a timeline with one row per scene.
    Saved templates
    Saved templates with {{variables}}, rendered by id; created in the editor or with POST /v2/templates.
    Generated media
    Voiceovers from text through Azure or ElevenLabs, and subtitles transcribed from the audio. Generated images are not documented.
    Output formats
    MP4 up to 4K, with a JPEG or PNG thumbnail.
    Where outputs go
    Stored for 7 days, then deleted. Exports go to a webhook, FTP, SFTP, email or a saved Amazon S3 destination.
    When a job ends
    A webhook destination under exports, retried twice at most. Its docs say webhooks are not signed.
    AI assistants (MCP)
    A hosted MCP server and a local one through its CLI: render, check status, validate a movie, manage templates and media.
    Company
    JSON2Video; its terms apply the laws of Spain. A legal entity is not documented on its terms or privacy pages.

JSON2Video, as its own pages said on Nov 7, 2026: Home Quickstart Movie Scene JSON syntax Voice Subtitles Image Editor interface Visual editor Create a movie Movie status Create a template File retention Webhooks MCP server Slideshow example Docs home Terms of use Privacy policy

Before you read on

What Videxo does not have. Said plainly.

Videxo runs each job as ffmpeg over the files you send. A timeline and an editor are a different product, and this API is not one.

  • No timeline. There are no tracks and no clips placed at set times. Parts play one after another, with text and up to 4 overlays on top.
  • No visual editor. You write JSON or an ffmpeg command. There is no editor to design in, none to embed in your app and no picture preview before a job runs.
  • No hosted templates. We store no template to render by id. The JSON body stays in your code, and your code fills in the values.
  • No generated media. No voices, no images and no captions from speech. Every picture and sound is a file you send, and subtitles come from your SRT or WebVTT file.
  • No keyframes. Text fades in and out, stills have six fixed motions, and parts cross with transitions from a fixed list. Nothing moves along a path you set.
  • No HTML layers. A web page cannot be a layer in a video.
  • No no-code connectors. There is no Zapier, Make or n8n module of ours. A tool that can send an HTTP request can call the API.
  • Always a file in. A job reads at least one input, so a video from text alone is refused.

Moving over

What each part is called here. One request per job.

Every job returns the ffmpeg command it ran, so you can compare the output with what you have today, one job at a time.

Every output type and option
JSON2Video concepts and what they are in Videxo
JSON2VideoVidexo
MovieA job with a video output: POST /v1/jobs
Scenes in orderParts in concat: clips, still images or title cards
Scene with a background-color and textA title card: color, duration and text
Image element with zoom or panAn image part with motion, or POST /v1/slideshow
Scene transitiontransition on the part: a type from the list and a duration
Text elementA text layer on the output or on a part
Subtitles element with a captions filesubtitles, reading an SRT or WebVTT input
Audio element across the movieaudio.input, or audio.mix under the clips’ sound
Image or video element over the movieoverlays: position, width, opacity, start and end
Webhook destination in exportswebhook_url, signed in the Standard Webhooks format
GET /v2/movies?project={id}GET /v1/jobs/{id}: state and progress
template and variablesNo equivalent: your code builds the body

Request by request

Their JSON, then ours. And what does not carry.

Each request on the left is from the JSON2Video docs. Each one on the right compiles with the same code the API runs, every time this site is built, and its last tab shows the ffmpeg command.

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"
}

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: 1 becomes motion: "zoom-in": one of six fixed motions, not a percentage.
  • A fade out on the music alone has no equivalent here: fade on 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.

A saved template with a variable

{
  "template": "your-template-id",
  "variables": {
    "headline": "Hello"
  }
}

Create a movie , read on Nov 7, 2026.

{
  "inputs": {
    "clip": "https://example.com/clip.mp4"
  },
  "outputs": [
    {
      "type": "video",
      "filename": "hello.mp4",
      "resize": {
        "width": 1920,
        "height": 1080
      },
      "concat": [
        {
          "color": "#4392F1",
          "duration": 4,
          "text": [
            {
              "text": "Hello",
              "font": "inter-bold",
              "size": 96
            }
          ]
        },
        {
          "input": "clip"
        }
      ]
    }
  ]
}

POST /v1/jobs makes hello.mp4: 4 seconds of title, silent, then the clip with its sound, at 1920 by 1080.

  • Videxo stores no template. The whole body lives in your code, and your code puts the value in; the title and clip here stand in for what a saved template would hold.

Honestly

When JSON2Video fits better. Pick it then.

  • You want a voiceover generated from text, or subtitles transcribed from the sound, in the same render.
  • People who do not write code design the videos, in an editor, as saved templates.
  • Your flows run in Make, n8n or Zapier.
  • Your scenes use HTML, components or audiograms.

Questions, answered.

What happens to my JSON2Video templates?

They do not move over as templates. Rebuild each one as a JSON body in your code, with a function that fills in what its variables filled in. What the JSON cannot express stays with JSON2Video.

What are the limits?

On Pay as you go a job runs up to 10 min of ffmpeg with inputs up to 1 GB; on Scale up to 60 min with inputs up to 10 GB. Uploads from apps and browsers go up to 100 MB.

Which ffmpeg and which codecs?

ffmpeg 6.1.1, with H.264, H.265, VP8, VP9 and AV1 video, and AAC, MP3, Opus, FLAC and WAV audio, among others. The command rules list every option, filter and format a command can use.

Can I send my own ffmpeg command?

Yes. POST /v1/jobs takes input URLs, output names and an ffmpeg command that names files by alias. It is checked before the job exists; a refused command answers with a code for each problem and costs nothing.

How long are the files kept?

Outputs stay for your plan’s retention. Each download link is signed and lasts up to one hour; read the job again for a fresh one, or delete the files sooner with DELETE /v1/jobs/{id}/files.

How do I know a webhook came from you?

Each delivery is signed with your account’s secret in the Standard Webhooks format. Verify it with the standardwebhooks library or a few lines of code; the docs show both.

Who runs Videxo?

BEO TECHNOLOGY sp. z o.o., a limited company in Poland, in the European Union. Write to hello@videxo.io.

Run your first job. Free, no card.