Skip to Content
Getting startedInstalling Premation

Installing Premation

There are two ways in: the prebuilt desktop installer, and building from source. Most people want the installer. Build from source if you are on a platform whose installer has not shipped yet, or if you intend to change the code.

Check System requirements first — the GPU is the part that decides whether this works.

Two editions

One source tree builds two editions, chosen at build time with the VITE_EDITION environment variable. The split exists because the editor is open source (AGPL-3.0-only ) while the hosted backend it can talk to is not.

local (VITE_EDITION=local)server (default)
Accounts / sign-inNone — opens straight into the editorRequired
ProjectsOn disk, as a .motion bundleCloud, with autosave
AssetsOn disk, content-addressedCloud library
Version historyLocal, structurally sharedLocal and server-side
ExportLocal ffmpegLocal ffmpeg
Editing, compositing, 3D, rigging, effectsIdenticalIdentical
AI assistantNot includedIncluded, on your own provider key
PluginsNot included — no panel, no host, no registryThe platform and its registry
Billing and syncAbsentAvailable
Opening a project that uses pluginsOpens, edits and saves losslessly — plugin content is inert but intactRuns

The local edition is the one to build from the repository. It makes no network requests at all — the API layer refuses to send, so an offline build cannot quietly phone home. The server edition targets a backend service that is not part of the repository, so its cloud features sit on a sign-in screen without one.

In the codebase, read the edition as a capability, never as a flag: aiEnabled(), pluginsEnabled(), pluginRegistryEnabled(), cloudProjectsEnabled(), billingEnabled() and friends in src/core/config/edition.ts say why a surface is gated. isLocalEdition() only says where that happens to be true today.

pluginsEnabled() and pluginRegistryEnabled() are separate on purpose: the first asks whether the feature exists at all, the second whether the marketplace may be reached. A local build fails both.

The desktop installer

Builds are published on GitHub Releases , next to the source they were built from.

PlatformRelease assetStatus
Windows 10 / 11 · x64Premation-Setup-Windows.exeAvailable
macOS · Apple silicon / IntelPremation-macOS-arm64.dmg / Premation-macOS-x64.dmgAvailable
Linux · x64Premation.AppImageComing soon

Download from the Premation site or straight from the releases page, run the installer, and launch. There is nothing else to configure for the editor itself.

The download buttons point at releases/latest/download/<asset>, so they always fetch the newest published release rather than a pinned version.

The installers are unsigned during the beta, and that has a different consequence on each platform.

On Windows, SmartScreen warns you the first time — choose More info → Run anyway — and automatic updates work normally.

On macOS, Gatekeeper blocks the app until you open it once with right-click ▸ Open, and automatic updates are switched off, so each new version is a manual download.

Updates & macOS setup walks through both, and explains why. All of it goes away once the builds are signed — no reinstall needed.

Building from source

Get the code and its dependencies

git clone https://github.com/isroil01/motion-editor.git
cd motion-editor && npm install

You need Node.js 20 or newer and npm.

Run the desktop app with hot reload

npm run electron:dev:local

This is the real app. It compiles the Electron main process, starts Vite on localhost:5173, waits for it, and launches Electron. Renderer edits hot-reload.

Or run the renderer in a browser

npm run dev:local

Faster to iterate on the UI, but it is not the full product: no native menus, no local file access, no MP4 or ProRes export, and no proxy generation.

Both :local scripts set VITE_EDITION=local. Dropping the suffix (npm run electron:dev) builds the server edition, which will sit on a sign-in screen unless you point it at a backend you run yourself.

Every script, and what it does

CommandWhat it does
npm run electron:dev:localVite + the Electron shell, both watching — local edition
npm run dev:localRenderer only, in your browser — local edition
npm run build:localTypecheck (tsc -b) and build the renderer bundle
npm run electron:build:localBuild the renderer + compile electron/
npm run pack:localUnpacked desktop build — fast, for testing packaging
npm run dist:localInstaller for the current platform, into release/
npm testThe full Jest suite (~6,250 tests across ~525 suites)
npm run typechecktsc --noEmit
npm run lintESLint
npm run render-testsPixel-compare renders against reference frames
npm run render-tests:updateRe-bless golden frames after an intended pixel change

Every one of these has a suffix-free twin (npm run dev, npm run dist, …) that builds the server edition instead.

Only re-bless a golden frame when you have looked at the diff and can say why the new pixels are correct. git status on the references directory before you commit — an unreviewed reference change hides a regression.

Installing ffmpeg

Optional, and only for video export. Without it you keep PNG/JPEG sequence, still frame, Lottie and project export; with it you additionally get MP4, WebM, GIF and ProRes.

Using winget:

winget install Gyan.FFmpeg

Or download a build, unzip it, and add the bin folder to your PATH.

Verify with ffmpeg -version. If you would rather point at a specific build, set FFMPEG_PATH to the executable and Premation will use that in preference to anything on your PATH.

The companion server

The server edition talks to a companion NestJS service (motion-back, a separate repository, not open source) for:

  • sign-in and accounts,
  • cloud project storage, sync and billing,
  • the AI assistant’s model calls,
  • the hosted plugin registry.

The editor expects it on port 4000.

In the local edition none of that is present — those surfaces are absent rather than broken, which is what makes the build genuinely offline. You keep everything else, including every export format. If you only want the editor, build local and skip the server entirely.

Read electron-builder.yml before you distribute a build of your own. As committed it requires a sibling ../motion-back checkout and copies that project’s .env into the installer — a file that holds database credentials and API keys. Remove the extraResources entry and configure the server at first run instead.

Bundling ffmpeg into your own build

To make video export work without a system ffmpeg, bundle the binary:

electron-builder.yml
extraResources: - from: <path-to-folder-containing>/ffmpeg # ffmpeg or ffmpeg.exe to: ffmpeg

electron/main.ts checks <resources>/ffmpeg before falling back to PATH. Note that ffmpeg’s own licence terms — LGPL or GPL, depending on the build — travel with the binary.

Next

Last updated on