Low-code Front-end Design & Development Platform
Front-end development platform, with a visual builder and headless content modelling capabilities. Static website creation, and UI development tools.
翻譯準備中
Premation is an open-source, AI-native alternative to Adobe After Effects, built for the next generation of creators and developers. join:) https://discord.gg/jCs9tp2W3y
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
An open-source motion editor for the desktop. Compositions, layers, keyframes, a
graph editor, 3D space with cameras and lights, effects, masks and mattes,
per-glyph text animators, mesh rigging, particles, and a deterministic export
pipeline — built on a GPU render engine that runs on WebGPU or WebGL2.
It is modelled on After Effects' Classic 3D workflow: if you know AE, the tools,
the panel layout and most of the keyboard shortcuts are already where you expect
them.檢視完整 README ↗An open-source motion editor for the desktop. Compositions, layers, keyframes, a graph editor, 3D space with cameras and lights, effects, masks and mattes, per-glyph text animators, mesh rigging, particles, and a deterministic export pipeline — built on a GPU render engine that runs on WebGPU or WebGL2.
It is modelled on After Effects' Classic 3D workflow: if you know AE, the tools, the panel layout and most of the keyboard shortcuts are already where you expect them.
Electron + React + TypeScript. Everything renders through one engine, the same engine that exports, so what you see in the viewport is what lands in the file.
License: GNU AGPL v3.0 · Status: pre-1.0, in active development
We're live on Product Hunt — an upvote helps more people find the project:
The same source tree builds two editions, chosen at build time with
VITE_EDITION. This exists because the editor is open source while the hosted
backend service is not.
local (VITE_EDITION=local) | server (default) | |
|---|---|---|
| Accounts / sign-in | none — opens straight into the editor | required |
| Projects | on disk, .motion bundle | cloud, with autosave |
| Assets | on disk, content-addressed | cloud library |
| Export | local ffmpeg | local ffmpeg |
| AI assistant | bring-your-own-key (OS keystore) | via the hosted gateway (BYOK keys stored server-side) |
| Billing / sync / plugin registry | absent | available |
The local edition is the one to build from this repository. It does not
talk to a Motion backend: the API layer refuses those calls, so an offline build
cannot quietly phone home for accounts or cloud projects. The assistant, when
you connect your own provider key, reaches OpenAI / Anthropic / Gemini from the
desktop shell — that is intentional BYOK, not telemetry. The server edition
targets a backend service that is not part of this repository, so its cloud
features will not work without one.
Read the edition as a capability, never as a flag — see
src/core/config/edition.ts.
git clone https://github.com/isroil01/motion-editor.git
cd motion-editor && npm install
Run the desktop app:
npm run electron:dev:local
That compiles the Electron main process, starts Vite, and opens the app. Edits to renderer code hot-reload.
To run just the renderer in a browser tab (faster, but no filesystem, native menus or ffmpeg export):
npm run dev:local
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.
Node.js 20 or newer and npm.
A GPU that supports WebGPU or WebGL2. The engine picks WebGPU when available and falls back to WebGL2; there is no software rasteriser.
ffmpeg, for .mp4 / .mov export only. Everything else — including the
editor itself and webm/GIF/PNG/Lottie export — works without it. The app looks
for ffmpeg in this order:
$FFMPEG_PATHffmpeg on your PATHIf it finds none, mp4 export fails with a message saying exactly that, and nothing else is affected.
Windows, macOS and (since 1.0.2) Linux installers ship from every release: an NSIS installer, two dmgs and an x64 AppImage.
Counts below were taken from the source, not from memory — if you change a registry, this section is expected to drift, so re-check before quoting it.
Compositing and layout
src/core/effects/effects.ts)Animation
Editing footage
3D
docs/3d-layer-model.md)Import
.srt / .vtt in and out, or generated from the composition's
own audio (docs/CAPTIONS.md)Delivery
premation render — render a project from a terminal, with no editor open
(docs/CLI.md)docs/AUTO_REFRAME.md)Engine
mp4, mov, webm, GIF, PNG/JPG sequences, and Lottie/JSON.
Frames are rasterised by the same engine that draws the viewport, streamed to disk one at a time (so peak memory is one frame, not the whole render), and muxed by a local ffmpeg process. A long export leaves the app usable.
A project is a .motion directory bundle, not a single opaque file:
MyProject.motion/
├── manifest.json written last, so a crash can't corrupt the bundle
├── scene.json ├─ separate chunks, content-hashed, so a save
├── animation.json │ writes only what actually changed
├── timeline.json │
├── meta.json ┘
├── assets/ imported media, addressed by SHA-256
└── versions/ local version history, structurally shared
Saving is incremental and version history is local — snapshots share unchanged objects rather than storing full copies, so an animation-only change costs one new object.
The editor contains a complete AI layer: 74 AI tools it can call, an agent loop, a deterministic "caster" pipeline that assembles motion from a hand-authored technique library, and a self-critique pass.
Both editions include it. Keys never enter the renderer:
safeStorage) and makes the
provider call from the main process (electron/aiProxy.ts, including
ai:image for generated imagery).POST /ai/stream / POST /ai/image.aiEnabled() in src/core/config/edition.ts is the surface gate (on in both
editions). aiRunsThroughBackend() picks the transport. Everything else in the
editor still works fully offline when you are not using the assistant.
src/
├── core/ document model, engine glue, commands, export, AI, plugins
│ └── config/ edition + feature flags
├── layout/ panels — timeline, inspector, workspace, effects
├── components/ reusable UI primitives
├── stores/ Zustand state
└── routes/ app shell and routing
packages/
├── scene/ scene graph, transforms, hit-testing
├── animation/ keyframes, easing, evaluation
├── timeline/ timeline model
├── renderer/ GPU render graph (WebGPU + WebGL2)
├── audio/ audio graph
├── workspace/ viewport interaction, gizmos
├── ai-tools/ the tool registry the assistant calls
├── caster/ deterministic generative pipeline
├── technique-library/ hand-authored motion techniques
├── design-system/ look packs and design tokens
├── product-motion/ UI-motion technique packs
└── render-tests/ golden-image harness
electron/ main process, IPC, native integration
Plugins are native SDK plugins that run inside the C++ engine process
(premation-engine), modelled on the After Effects effect API. See
docs/PLUGIN_SDK.md. The earlier JavaScript/WGSL plugin
system is gone (owner decision G2, docs/TS_ENGINE_REMOVAL.md): a project
that used it still opens, without that content.
npm test
Roughly 440 suites and 4,800 tests, and they are fast (under a minute). Also:
npm run typecheck
npm run lint
Golden-image render tests compare real GPU output against committed reference frames:
npm run render-tests
npm run render-tests:update
Only update goldens when you have looked at the diff and can say why the new pixels are correct.
npm run dist:local
Produces an installer in release/ via electron-builder. npm run pack:local
builds an unpacked directory instead, which is much faster for testing.
Contributions are welcome — see CONTRIBUTING.md for how to set up, what the review bar is, and which areas need help. By participating you agree to the Code of Conduct.
Security issues should not be filed as public issues — see SECURITY.md.
Start here: docs/EDITOR_REFERENCE.md — what the
editor does, what it does not, and an honest gap analysis against After Effects.
Its feature counts are derived from the registries by scripts/featureCounts.cjs
and pinned by src/__tests__/docFeatureCounts.test.ts, so they cannot silently
go stale.
Deep dives on individual subsystems:
docs/3d-layer-model.md — the 3D model, and where it
departs from After Effectsdocs/BONE_AND_PUPPET_RIGGING.md — mesh
deformation, the math and the current gapsdocs/ANIMATED_SVG_PIPELINE.md — SVG import,
end to enddocs/AFTER_EFFECTS_IMPORT.md — opening .aep
and .aepx projects: what converts, what does not, and the undocumented
binary format behind itdocs/PLUGIN_SDK.md — the native plugin SDKdocs/MOTION_FORMAT_FREEZE.md — what the
.motion bundle is, the six migrations behind it, and what a 1.0
compatibility promise would actually requiredocs/CLI.md — headless rendering and data-driven batchesdocs/CAPTIONS.md — subtitles in, out, and from speechdocs/AUTO_REFRAME.md — how the crop decides where to
look, and why it jumps at cutsdocs/PICK_WHIP.md — drag-to-link, and how a panel
becomes a drop targetProse drifts faster than code. Where a document and the source disagree, the source is right — and a PR fixing the document is very welcome.
Copyright © Premation contributors.
Licensed under the GNU Affero General Public License v3.0 only. The full text is in LICENSE.
In short: you may use, study, modify and redistribute this software, but derived works must also be licensed under the AGPL and must carry the same source-code offer. Section 13 matters in particular — if you run a modified version as a network service, you must offer its users the corresponding source.
The AGPL covers this repository. It does not cover the separate hosted backend service, which is not distributed here.