Render Engine · Public Beta

Render your videos
without a phone.

The ExpoCut Render Engine is a single-binary command-line tool that takes the same projects and .ectpl templates the mobile app produces and renders them — pixel-for-pixel identical — on macOS, Windows, and Linux. Build batch pipelines, automate from a script, run on a server, render 4K on hardware your phone could never touch.

ExpoCut Render Engine inputs and outputs The engine takes a project.json or .ectpl template on the left, runs the render command in a terminal in the middle showing a progress bar, and emits four output formats on the right: an MP4 file, an HLS playlist, a PNG frame sequence, and a live MJPEG preview stream. Inputs project.json { "fps": 30, "duration": 8000, "layers": [ … ] } template.ectpl { "slots": [ … ] } Project & templates Render Engine expocut-engine $ expocut-engine \ mp4 project.json \ --out promo.mp4 › compositing layers … › encoding H.264 … frame 234 / 300 · 78% macOS · Windows · Linux Outputs MP4 HLS Frames Live Four formats, one binary

What you get

One small executable. Six commands. Identical output to the mobile app — because the engine reads the same project JSON the app writes when you tap Export Project, and the same .ectpl templates you save from the gallery.

Same project, same pixels

Export a project from your phone, drop the JSON onto your laptop, run one command — you get the finished MP4 with every layer, effect, transition, mask, animation, and lower-third intact.

Templates on the command line

Apply a .ectpl template and fill its slots from a JSON file, a CSV, or a database. The engine inflates the template and renders the finished video — perfect for bulk product cuts, real-estate listings, or AI-generated reels.

MP4, HLS, frame sequences

Render straight to MP4 for upload, an HLS playlist for streaming, a folder of PNG / JPEG frames for downstream pipelines, or a single frame at any timestamp for thumbnails.

Deterministic by design

Same project + same engine version = byte-identical pixels every time. Safe for CI, snapshot tests, and reproducible automation. No hidden randomness, no GPU vendor drift.

Live preview server

Spin up a tiny HTTP server that streams the rendered timeline as MJPEG — point a browser, an OBS source, or your AI agent at http://localhost:8787 and watch the engine paint in real time.

Scriptable from anywhere

It is a normal CLI. Drive it from a shell, a Python script, a Node task, a Makefile, GitHub Actions, or an AI agent over the MCP server. Exit codes are honest; stderr is structured.

Install on your operating system

The engine is distributed as a single self-contained executable. Pick your platform, drop the binary on your PATH, and you are done. To produce MP4 / HLS or to read source video files you also need ffmpeg on your PATH — install it once from your package manager, and the engine uses it automatically.

macOS

Apple Silicon (M-series) and Intel. Install ffmpeg with Homebrew, then drop the engine on your PATH.

# 1. install ffmpeg once
brew install ffmpeg

# 2. install the engine
curl -L https://expocut.com/download/expocut-engine-macos.tgz \
  | tar -xz -C /usr/local/bin
chmod +x /usr/local/bin/expocut-engine

# 3. verify
expocut-engine --version

Windows

Windows 10, 11, and Server 2019+. Use winget for ffmpeg, then add the engine folder to PATH.

:: 1. install ffmpeg once
winget install Gyan.FFmpeg

:: 2. download & unzip the engine
curl -L -o engine.zip https://expocut.com/download/expocut-engine-windows.zip
tar -xf engine.zip -C "%ProgramFiles%\ExpoCut"

:: 3. add to PATH, then in a new shell
expocut-engine.exe --version

Linux

x86_64 and arm64, glibc-based distros. Install ffmpeg with your package manager, then drop the binary in ~/.local/bin.

# 1. install ffmpeg once (Debian / Ubuntu)
sudo apt-get install -y ffmpeg

# 2. install the engine
curl -L https://expocut.com/download/expocut-engine-linux.tgz \
  | tar -xz -C ~/.local/bin
chmod +x ~/.local/bin/expocut-engine

# 3. verify
expocut-engine --version

Heads up. The engine ships as a single executable with no installer, no system services, and no background daemon. Delete the file and it is gone. It runs entirely on your machine and never phones home.

The commands

Six commands cover the whole workflow — from "I exported a project on my phone" to "I have an MP4." Type expocut-engine --help for the live reference.

CommandWhat it does
importTake a mobile-app project export (the file you get from Export Project) and convert it to canonical engine JSON. Optional — every other command also accepts the engine JSON directly.
renderThe umbrella command. Reads a project JSON and renders to the format you ask for. render mp4 …, render hls …, render sequence …, render frame … are all sub-modes.
mp4Render the whole timeline to a single .mp4 file. The most common command.
hlsRender to an HLS playlist (.m3u8 + segmented .ts files) ready for streaming.
sequenceRender every frame as a numbered PNG or JPEG in a folder — perfect for VFX hand-off, thumbnails, or feeding another pipeline.
frameRender a single frame at a specific timestamp. Great for thumbnails, posters, social cards.
serveStart a local HTTP server that streams the live preview as MJPEG so you can watch the render in a browser or feed it to OBS.

Your first render in three steps

From a phone-exported project to a finished MP4 in less than a minute.

  1. Export a project from the mobile app

    In ExpoCut, open any project, tap the menu, and choose Export Project. You get a small JSON file — call it my-promo.json. Send it to your computer however you usually do (AirDrop, email, cloud drive).

  2. Convert it to engine JSON (optional)

    The engine accepts the mobile export directly, but if you want a clean canonical form for source control, run:

    expocut-engine import my-promo.json --out project.json
  3. Render to MP4

    One command. The engine reads the project, paints every frame, and asks ffmpeg to mux the result into a standard H.264 MP4.

    expocut-engine mp4 project.json --out my-promo.mp4

    That is it. Open my-promo.mp4 in any player. Pixel-for-pixel the same video you would have got from the phone — just faster, in 4K if you ask for it, and without filling your phone's storage.

Common workflows

A few patterns most ExpoCut users land on within their first week.

Bulk-render a template from a CSV

Design a .ectpl template once in the mobile app — for example a Just Listed real-estate promo — then fill it for every row of a spreadsheet on your laptop. Each render is independent, so you can parallelize with your shell's xargs -P or a build tool.

# listings.csv: address, photo_1, photo_2, photo_3, agent_name, agent_logo

while IFS=, read address p1 p2 p3 agent logo; do
  expocut-engine mp4 templates/just-listed.ectpl \
    --slot title="$address" \
    --slot media_1="$p1" --slot media_2="$p2" --slot media_3="$p3" \
    --slot agent_name="$agent" --slot logo="$logo" \
    --out "out/$address.mp4"
done < listings.csv

Generate a thumbnail at a specific timestamp

For social cards, email previews, or YouTube posters. The engine takes an exact millisecond and paints just that one frame.

expocut-engine frame project.json --at 2500ms --out thumb.png

Stream the render live in a browser

Great for previewing changes while you tweak a template, or for plugging the canvas into OBS as a virtual camera. The engine paints frames on demand and ships them as a low-latency MJPEG stream.

expocut-engine serve project.json --port 8787
# open http://localhost:8787 in any browser

Wire it into CI

Because the engine is deterministic, you can commit a project JSON and a reference frame to your repo, then assert in CI that any change still produces the same pixels. Use --exit-code on a frame diff to fail the build on regressions. Examples for GitHub Actions, GitLab CI, and CircleCI live in the automation guide.

Everything the engine renders

The engine ships with the same compositor the mobile app uses, so every layer kind, every animation, and every effect that works in the app works here too.

Every layer kind

Video, image, audio, text (with per-glyph entrances — wave, rise, scatter, typewriter), shapes, lower thirds with accent shapes and staggered reveals, gradients, collages, captions, progress bars, and Lottie animations with mattes, gradients, trim paths, and animated morphs.

The full effect catalogue

Masks (geometric, freeform, rotated, sub-rect), chroma key, color filters (the same 3D LUT pipeline the app uses, including vignette, grain, and a per-channel mixer), transitions (fade, dissolve, slides, wipes — all with custom easing).

Keyframes & motion

Linear, ease-in / ease-out, ease-in-out, hold, and cubic-bezier curves. Position, scale, rotation, opacity, and per-layer animation tracks. Plus the engine honours every entrance / exit animation the mobile app defines.

Audio & voiceover

Multiple audio layers, per-layer volume keyframes, and the voiceover script that .ectpl templates carry are all included in the muxed MP4 / HLS output.

FAQ

Will the engine ever drift from what the mobile app produces?

No. The engine and the app share their compositor contract through a versioned project JSON schema, and every release runs a pixel-parity test suite against reference frames from the mobile app. When the schema changes the engine ships the new behaviour in the same release the app does.

Can I render a video on a headless server?

Yes. The engine has no GUI dependency. It runs on Linux without an X display, inside Docker, in GitHub Actions, on AWS Lambda (within the function size limit), and on any modern build server. The MP4 / HLS path needs ffmpeg on the box; the PNG / JPEG / raw path does not.

Is the rendering hardware-accelerated?

By default the engine renders on the CPU — that is what makes it deterministic and portable. An optional accelerator path can engage the GPU for the heavy per-pixel work (mask / filter / transition / chroma bakes for image and video layers) when one is available, and falls back to the CPU automatically otherwise.

Can my AI assistant drive the engine for me?

Yes — that is exactly what the new automation guide is about. Combine the engine with ExpoCut's in-app MCP server and an assistant can design a video on your phone, export it, render it on your laptop, and re-render it for every row of a spreadsheet — all without you switching apps.

Where can I get help?

Read the automation guide for end-to-end recipes, the .ectpl format specification for the full schema, caps and agent doctrine (machine-readable at spec.json), the .ectpl guide for a gentler introduction, or email [email protected]. Bugs and feature requests go to the in-app reporter, which is mirrored on the public bugs page.

Render on your terms.

Free plan available. Single binary. No accounts, no upload, no surprises.