Experiment with asking Fable to build a video editor for pan.do/ra
  • TypeScript 79.7%
  • Python 13.9%
  • CSS 3.6%
  • HTML 2.7%
  • Shell 0.1%
Find a file
2026-08-03 18:38:53 +05:30
backend allow splitting video and audio tracks 2026-08-01 20:15:28 +05:30
crdt-fixtures allow splitting video and audio tracks 2026-08-01 20:15:28 +05:30
deploy fix one crdt data loss bug, some performance improvements 2026-07-20 02:10:55 +05:30
docs allow seeing details of AI search calls 2026-08-03 18:38:53 +05:30
frontend allow seeing details of AI search calls 2026-08-03 18:38:53 +05:30
.gitignore sync server, browser code to handle syncing multiple clients, permissions for sharing edits to collab 2026-07-18 16:48:24 +05:30
CLAUDE.md fix one crdt data loss bug, some performance improvements 2026-07-20 02:10:55 +05:30
README.md play previews inline in card, update docs and guide 2026-07-19 15:23:31 +05:30

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.

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.