ClipMotion is a web animation editor for creating short animated scenes with characters, keyframes, and timeline playback.
- Auth with email/password and Google
- Project dashboard + multi-scene editor
- Character builder (shape, face, limbs)
- Timeline keyframes for transform + parallax depth
- Expression keyframes for face changes over time
- Canvas tools: select, move, rotate, scale, pen-shape drawing
- Prompt-to-scene generation with GPT-backed scene planning and local fallback
- Scene Creator presets (background/middleground/foreground)
- Manual save + autosave with version conflict recovery
- Export to WebM/MP4 (browser support dependent) and project package (
.clipmotion.json) - Export clip trim range (start/end time) before download
- Next.js 16 (App Router + Turbopack)
- React 19 + TypeScript
- Prisma + Auth.js (NextAuth v5 beta)
- Zustand
- PixiJS
- Tailwind CSS 4
- Node.js 20+
- npm 10+
- Install dependencies
npm install- Create env file
cp .env.example .env.local- Generate Prisma client + run migrations
npm run prisma:generate
npx prisma migrate deploy- Start dev server
npm run devOpen http://localhost:3000.
To enable GPT scene generation, set OPENAI_API_KEY in .env.local. You can optionally override the model with OPENAI_SCENE_MODEL.
Use SQLite locally:
npm run dev:localThis uses prisma/schema.local.prisma and creates prisma/dev.local.db.
- Current default Prisma datasource is PostgreSQL (Supabase-friendly).
- Set both
DATABASE_URLandDIRECT_URL(examples in.env.example). - For Supabase:
DATABASE_URLshould use the pooled connection string (pgbouncer=true).DIRECT_URLshould use the direct Postgres connection (used by Prisma migrations).
docker-compose.ymlincludes optional local PostgreSQL, Redis, and MinIO.
npm run dev- Prisma generate + Next devnpm run dev:local- Local SQLite dev (no Supabase)npm run build- Prisma generate + production buildnpm run build:local- Local SQLite buildnpm run start- start production servernpm run lint- ESLintnpm run test- Vitest (run once)npm run test:watch- Vitest watchnpm run prisma:generate- regenerate Prisma clientnpm run prisma:generate:local- generate Prisma client from local SQLite schemanpm run prisma:dbpush:local- push local SQLite schema toprisma/dev.local.db
src/app- routes + API handlerssrc/components- editor UI and dashboard UIsrc/engine- scene graph, keyframes, composition, easingsrc/store- Zustand editor/playback/selection statesrc/hooks- autosave, playback, keyboard shortcutssrc/lib- shared utilities (db, drawing, constants)prisma- schema + migrationstests- unit tests (engine-focused)
V: Select toolM: Move toolR: Rotate toolS: Scale toolP: Pen tool (create custom closed shapes)Ctrl/Cmd + Z: UndoCtrl/Cmd + Shift + Z(orCtrl/Cmd + Y): RedoCtrl/Cmd + S: Save project
- Next.js 16 may warn that
middlewareconvention is deprecated in favor ofproxy. This is currently a warning and does not block build. - If push fails with
Permission denied (publickey), configure SSH key for GitHub and test with:
ssh -T git@github.com