- TypeScript 79.7%
- Python 13.9%
- CSS 3.6%
- HTML 2.7%
- Shell 0.1%
| backend | ||
| crdt-fixtures | ||
| deploy | ||
| docs | ||
| frontend | ||
| .gitignore | ||
| CLAUDE.md | ||
| README.md | ||
fabled-editor
A video editing platform over Pan.do/ra archives (pad.ma, indiancine.ma, 0xdb.org).
Search across archives, pull clips onto a multi-track timeline, add transitions, effects and text layers, preview the cut live in the browser, then export client-side with WebCodecs.
Editing is real-time collaborative: the timeline is a CRDT synced over a websocket, so several people can edit at once, see each other's playheads, and talk in a per-project chat.
- Edits are stored as a renderer-neutral JSON format: docs/timeline-format.md
- Architecture and API contracts: docs/architecture.md
- Real-time collaboration: docs/realtime-collab.md
- AI editing assistant: docs/agent.md
- Pan.do/ra API notes: docs/pandora-api.md
- Deploying the sync service: deploy/SYNC-SETUP.md
Stack
backend/— Django + DRF: auth, project storage, media proxy (for archives without CORS).backend/sync/is a separate ASGI service (uvicorn) hosting the CRDT rooms.frontend/— React + Vite + TypeScript: search, timeline editor, canvas/WebAudio preview compositor, WebCodecs export.
Development
# backend
cd backend
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
.venv/bin/python manage.py migrate
.venv/bin/python manage.py runserver # :8000 (pick another port if Docker holds 8000)
# sync service (separate terminal) — the editor needs this to open any project
.venv/bin/python -m uvicorn sync.app:app --host 127.0.0.1 --port 8102
# frontend
cd frontend
npm install
npm run dev # :5173, proxies /api → :8000 and /sync → :8102
# (FABLED_API=http://127.0.0.1:8000 to override)
Or single-server: npm run build in frontend/, then Django serves the SPA at / — the
sync service still runs alongside it.
Requires: Python 3.12+, Node 20+ to build. Running the test suite needs Node 22.12+ — older Node cannot load jsdom, and the component suites would silently skip; the suite now refuses to run rather than reporting a false green.