A powerful open-source canvas editor for building live streaming rooms and video editing experiences.
δΈζζζ‘£ | English
| Feature | Description |
|---|---|
| πΌοΈ Static Image Elements | Background, sticker, and product image rendering via react-konva |
| π Avatar with Mask | Digital human elements with circular clip mask, draggable & resizable |
| π¬ Bubble Text | Inline double-click editing with Konva Group + Text overlay |
| β¨ APNG Animation | Frame-by-frame APNG playback using apng-js + Konva.Animation |
| π Seamless Carousel | Canvas 2D + requestAnimationFrame infinite scroll (H/V configurable) |
| π΄ Slideshow | Multi-image switching with easeInOut slide transition |
| π§ Transformer Controls | 8-anchor drag / scale / rotate with keepRatio |
| π Timeline Ruler | Canvas 2D ruler with frame/second/minute unit auto-switching |
| π Theme Toggle | Mantine light/dark theme with custom brand color |
| π€ Image Export | Export canvas as DataURL or Blob via Konva Stage |
| Layer | Technology |
|---|---|
| Frontend Framework | React 18 + TypeScript |
| Build Tool | Vite 5 |
| UI Component Library | Mantine 7 (light/dark theme support) |
| Canvas Rendering | Konva + react-konva |
| State Management | Zustand + Immer |
| Data Fetching | TanStack Query v5 |
| Backend Framework | NestJS 10 |
| Database | MongoDB + Mongoose |
| API Documentation | Swagger (/api/docs) |
| Package Manager | npm Workspaces (Monorepo) |
canvas-studio/
βββ apps/
β βββ web/ # React frontend
β β βββ src/
β β βββ components/
β β β βββ CanvasPlayer/ # Adaptive canvas container + Konva Stage
β β β βββ CanvasElements/ # All element type components
β β β βββ Timeline/ # Timeline ruler
β β β βββ ElementMenu/ # Asset panel
β β β βββ Layout/ # AppLayout + theme toggle
β β βββ pages/
β β β βββ home/ # Homepage
β β β βββ editor/ # Video editor (timeline mode)
β β β βββ live/ # Live room (real-time editing)
β β βββ store/
β β βββ editorStore.ts # Video editor state
β β βββ liveStore.ts # Live room state
β βββ server/ # NestJS backend
β βββ src/
β βββ canvas/ # Canvas CRUD API
β βββ project/ # Project CRUD API
β βββ app.module.ts
βββ packages/
βββ canvas-core/ # Shared types + utilities
βββ src/
βββ types.ts
βββ utils/
βββ element.ts # Position / scale / orientation utils
βββ timeline.ts # Timeline ruler drawing
βββ canvas.ts # Konva image export
- Node.js >= 18
- MongoDB (local or Atlas)
git clone https://github.com/rosendolu/canvas-studio.git
cd canvas-studio
npm install# Start both frontend and backend
npm run dev
# Frontend only β http://localhost:5173
npm run dev:web
# Backend only β http://localhost:3000
npm run dev:serverCreate apps/server/.env:
MONGODB_URI=mongodb://localhost:27017/canvas-studio
PORT=3000Once the server is running, visit: http://localhost:3000/api/docs
| Method | Path | Description |
|---|---|---|
POST |
/api/canvas |
Create canvas |
GET |
/api/canvas |
List canvases |
GET |
/api/canvas/:id |
Get single canvas |
PATCH |
/api/canvas/:id |
Update canvas info |
PUT |
/api/canvas/:id/pages |
Save live room state |
PUT |
/api/canvas/:id/track |
Save editor track state |
POST |
/api/canvas/:id/duplicate |
Duplicate canvas |
DELETE |
/api/canvas/:id |
Delete canvas |
| Method | Path | Description |
|---|---|---|
POST |
/api/project |
Create project |
GET |
/api/project |
List projects |
PATCH |
/api/project/:id |
Update project |
DELETE |
/api/project/:id |
Delete project |
This software is licensed under a Commercial License.
Free for personal and non-commercial use only.
Commercial use requires a paid license. See LICENSE for details.
For licensing inquiries or commercial use, please contact the repository owner via GitHub.