Low-code Front-end Design & Development Platform
시각적 빌더와 헤드리스 콘텐츠 모델링을 지원하는 프론트엔드 개발 플랫폼, 정적 사이트와 UI 개발 도구 제공
Premation: macOS·Windows용 무료 오픈소스 모션 에디터
Premation is a free, open-source motion editor for macOS and Windows: an After Effects alternative with a graph editor, 2.5D cameras, rigging and a native GPU engine.
디자인TypeScript · C++GitHub @isroil01온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
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.