trimmr is a free, private, and secure open-source editor for animated media and video—your files never leave your computer. Edit trims and captions in seconds, then export or convert to other video file formats (WebM, MP4, and more) from the same workflow, with no upload and no account, totally for free!
Live app: trimmr.xyz · Workflow guides: trimmr.xyz/workflows/
The first shipping workflow is intentionally narrow:
- Choose an animated asset or video from your computer.
- Trim the in and out points.
- Adjust playback speed.
- Add a text overlay.
- Export a clean result.
- Free core editor; no account required.
- Private and secure: processing stays on the user’s device; files are not uploaded to our servers.
- Fast repeated utility workflows before creative-suite breadth.
- Zero install (open the app and go).
apps/web: React + Vite browser app and hosted shellpackages/shared: shared types, utility helpers, analytics event schemaspackages/editor-core: project model, commands, undo/redopackages/media-engine: import metadata, export helpers, draft persistencepackages/ui: reusable editor UI primitives
Use the pinned Node version:
nvm use
npm install
npm run devnpm run typecheck: checks the app and all shared packagesnpm run lint: lints app code, package code, and root configsnpm run test:coverage: runs unit and integration tests with enforced coverage thresholdsnpm run test:e2e: runs Playwright (desktop + emulated mobile Chrome and mobile Safari). Install browsers once:npx playwright installnpm run test:e2e:desktop: runschrome-desktopandfirefox-desktop(same desktop specs exceptmobile-export; Firefox uses a Playwright export hook when the download event is missing)npm run test:e2e:firefox:playwright test --project=firefox-desktoponlynpm run test:e2e:mobile:mobile-overflow+mobile-exportspecs only (includes a bounded WebM export that fails if export hangs)npm run telemetry:failures:query -- [days] [limit]: prints a PostHog HogQL query for top media failure signaturesnpm run seo:sitemap: regeneratesapps/web/public/sitemap.xmlwith<lastmod>from file datesnpm run seo:check: regenerates the sitemap, then validates SEO tags for all static pagesnpm run check: runs the full quality gate locally
Coverage is enforced at >=95% for statements, branches, functions, and lines across the application-specific logic layer:
- timeline helpers in
packages/shared/src/timeline.ts - editor state and command logic in
packages/editor-core/src/index.ts - keyboard shortcut behavior in
apps/web/src/hooks/useKeyboardShortcuts.ts - preview/render mapping logic in
apps/web/src/lib/renderProjectFrame.ts
Integration-heavy surfaces and UI wrapper components are still tested, but they are not the primary coverage gate.
This repository currently contains:
- the product spec and delivery checklist
- the monorepo scaffold
- an editor prototype for import, trim, caption, draft persistence, and export (on-device processing)
- starter unit and browser smoke tests
- improve animated image decoding beyond metadata-only fallback paths
- add image and sticker overlays