Skip to content

Repository files navigation

Motionity

Web-based motion graphics editor — keyframing, masking, filters, text animations. A free alternative to After Effects and Canva, running entirely in the browser.

DemoLicenseDownloads


Created by Alyssa X · maintained by Kawa

Fork of the original Motionity, with bug fixes, vendored (offline-capable) assets, desktop builds and a hardened container image.


How to run

Docker (recommended for self-hosting)

docker compose up -d # http://localhost:8080

Or without compose:

docker run --rm -p 8080:8080 git.azuze.fr/kawa/motionity:latest

Build the image yourself:

docker build -t motionity:latest .# ~86 MB on disk
docker build --build-arg WITH_FFMPEG=0 .# -23 MB, no MP4/GIF export

Runtime is static-web-server on Alpine — no Node, no shell, runs as UID 65534, read_only filesystem.

Windows app

Grab the installer or the portable build from Releases:

FileWhat it is
Motionity Setup <ver>.exeNSIS installer, per-user, choosable install dir
Motionity-<ver>-x64.exePortable, no install

Build from source (on Windows):

npm install
npm run dist:win # -> dist/

Linux app

From Releases: Motionity-<ver>-x86_64.AppImage or the .flatpak.

chmod +x Motionity-*.AppImage && ./Motionity-*.AppImage # needs libfuse2
flatpak install ./Motionity-*.flatpak # or this

Build from source (on Linux or WSL2):

npm install
npm run dist:appimage # AppImage only
npm run dist:flatpak # Flatpak only
npm run dist:linux # both

From source — web

npm install
npm run vendor # downloads third-party assets into src/vendor/ (~24 MB)
npm start # http://127.0.0.1:8080
HOST=0.0.0.0 PORT=3000 npm start # bind elsewhere

From source — desktop

npm install
npm run vendor
npm run dev # Electron

In a VS Code terminal, ELECTRON_RUN_AS_NODE=1 breaks this. Unset it: $env:ELECTRON_RUN_AS_NODE=$null; npm run dev

Two things to know

  • npm run vendor is mandatory for every non-Docker target. Without it the page loads but every script 404s. The Docker build runs it inside the image.
  • Secure context required. WebCodecs (fast export) and IndexedDB (project saving) only exist on http://localhost or HTTPS. Over plain HTTP on a LAN address they silently disappear: export falls back to slow real-time capture, projects stop saving. Anything beyond localhost needs TLS — deploy/Caddyfile is the shortest path.

Full packaging details, WSL notes and troubleshooting: PACKAGING.md.


Dependencies

Everything is vendored at build time — no CDN is contacted at runtime.

Editor core

LibraryRole
Fabric.jscanvas object model, selection, transforms
anime.jskeyframe animation engine
lottie-webLottie / Bodymovin playback
ffmpeg.wasmMP4 / GIF export (single-threaded core)
webm-writer-jsWEBM muxing for the WebCodecs exporter

UI

LibraryRole
jQueryDOM plumbing
Pickrcolor picker
Selection.jstimeline box-selection
Sortablelayer reordering
jquery-nice-selectstyled <select>
range-slidertimeline / property sliders (vendored, no upstream banner)
LocalbaseIndexedDB project storage
webfontloaderGoogle Fonts loading
InterUI typeface

Build & runtime

PackageRole
Electrondesktop shell
electron-builderNSIS / AppImage / Flatpak packaging
static-web-servercontainer HTTP server

scripts/server.cjs (the npm start server) has zero dependencies — Node 18+ builtins only.

Still online by design

Google Fonts (font picker), Pixabay (image/video/audio search), Unsplash (empty-state samples). All three degrade quietly when offline; the editor itself starts and exports without a network.


License

MIT — same as upstream.

About

This is a fork of the original project aiming to fix issues and add features. Mirror of the Gitea repo : https://git.azuze.fr/kawa/Motionity.git

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages