This repository is organized as a TypeScript monorepo for building an on-screen graphics editor and renderer pipeline.
From the repo root:
npm install— install all workspace dependencies.npm run dev:web— run the local web UI server inapps/web(open http://localhost:3000 in Chrome).npm run typecheck— run type checks across all workspaces.npm run build— build every workspace package/app.
For a server-free local experience:
run-local.html— open this file directly in Chrome for a no-server local video editor (template picker, video upload preview, draggable text layers, add-layer-at-playhead controls (including per-field quick-add buttons) with on-entry animations, timeline visibility windows, scenes, and JSON export; nonpm installrequired).
You can also run package-specific scripts:
npm --workspace @onscreen/core run buildnpm --workspace @onscreen/renderer run buildnpm --workspace @onscreen/template-library run buildnpm --workspace @onscreen/core run testnpm --workspace @onscreen/renderer run testnpm --workspace @onscreen/template-library run test
Golden snapshot update flow for renderer fixtures is documented in docs/testing-golden-fixtures.md.
-
apps/web- Editor user interface, including timeline, canvas, and template picker.
- Consumes domain models from
@onscreen/core. - Loads predefined templates from
@onscreen/template-library.
-
packages/core- Shared TypeScript interfaces and domain logic.
- Defines project model types such as
Project,Track,Clip,OverlayElement,AnimationKeyframe, andTemplateDefinition.
-
packages/renderer- Deterministic rendering/export pipeline.
- Accepts
Projectdata and produces reproducible encoded output.
-
packages/template-library- Predefined template formats for rankings, scoreboards, and listicles.
- Exposes reusable
TemplateDefinitionpresets for the editor.
-
Upload
- Users upload source media in
apps/web. - The editor creates clip records (
Clip) and attaches them to timeline tracks (Track) inside a project (Project).
- Users upload source media in
-
Edit
- In the timeline/canvas UI, users trim clips, add overlays (
OverlayElement), and adjust animation keyframes (AnimationKeyframe). - Users can pick a preset from
packages/template-libraryto seed tracks, overlays, and placeholder content viaTemplateDefinition. - Edits persist as normalized
Projectstate defined bypackages/core.
- In the timeline/canvas UI, users trim clips, add overlays (
-
Export
- The finalized
Projectis passed topackages/renderer. - Renderer resolves tracks/clips/overlays deterministically and exports a video file with stable output behavior.
- The finalized