Skip to content
 
 

Repository files navigation

Reframe

Free, open-source video editor that runs entirely in your browser.

No login. No uploads. No ads. 100% private.

GitHub Stars

GitHub Forks

GitHub Issues

Next.js TypeScript FFmpeg.wasm License GSSoC 2026 CI

Try it now → · Report a Bug · Request a Feature


What is Reframe?

Reframe is a browser-based video editor — everything happens on your device. Your videos are never sent to any server. No account needed. No fees. Just open and edit.

Built for everyone — whether you're a creator resizing videos for social media, or just someone who wants to quickly trim and convert without installing bulky software.

Features

  • Instant Resizing — 11 preset formats (Reels, TikTok, YouTube, Instagram, etc.) + custom dimensions
  • Flexible Framing — Fit (letterbox) or Fill (crop) to your target aspect ratio
  • Precise Trimming — Cut start and end times with real-time duration validation
  • Rotation — 0°, 90°, 180°, 270° rotation support
  • Audio Control — Keep or mute audio independently
  • Speed Control — 0.25x to 4x playback speed with smooth audio adjustment
  • Quality Settings — CRF slider for quality vs. file size trade-offs
  • Smooth UX — Lottie animations, live export progress, instant download

Everything stays on your device. No servers. No tracking. No login.


Getting Started

Prerequisites

  • Bun (recommended) or Node.js 18+

Installation

git clone https://github.com/magic-peach/reframe.git
cd reframe
bun install

Development

bun run dev

Open http://localhost:3000 — component changes reflect instantly with Next.js Fast Refresh, so you usually do not need to restart the dev server. For FFmpeg reload notes and debugging tools, see the Development Tips.

Production Build

bun run build

Outputs a static site to out/ — deploy to Vercel, Netlify, GitHub Pages, or any static host.


Deploying

Reframe is a fully static app. Deploy the out/ folder anywhere:

Platform Command
Vercel Connect your fork at vercel.com/new
Netlify Connect your fork at netlify.com
GitHub Pages Push out/ to gh-pages branch
Cloudflare Pages Connect your fork in the Cloudflare dashboard

Deploying to Netlify

  1. Push your fork to GitHub
  2. Open Netlify and import the repository
  3. Configure:
    • Build command: bun run build
    • Publish directory: out
  4. Deploy the site

Note: FFmpeg browser features may require proper CORS headers depending on hosting setup.

Deploying to GitHub Pages

Build the static export:

bun run build

The production files will be generated in the out/ directory.

You can deploy the out/ folder using:

  • GitHub Pages
  • gh-pages branch
  • GitHub Actions workflow

How It Works

  1. Load Video → User selects a file → App detects resolution and duration
  2. Build Recipe → User adjusts presets, framing, trim, speed → Creates EditRecipe
  3. Export → Click Export → FFmpeg WASM loads from CDN (~30 MB, cached after first use) → Filtergraph runs locally → File downloads
  4. Done → Your edited video is ready. Nothing was uploaded anywhere.

Architecture

graph TD
    A["UI Layer · Next.js Components"] --> B["VideoEditor · FileUpload · PresetSelector · FramingControl · TrimControl"]
    A --> C["AudioSpeedControl · RotateControl · ExportSettings"]
    B --> D["useVideoEditor Hook · State Management"]
    C --> D
    D --> E["ffmpeg.ts · Lazy-loads WASM, builds filter chains"]
    E --> F["FFmpeg.wasm · Single-threaded core via CDN · ~30MB"]
    F --> G["Video Pipeline: trim → rotate → scale/crop → speed"]
    G --> I["Output: MP4 or WebM · Blob URL → Download"]
Loading

Key Files

File Purpose
src/components/VideoEditor.tsx Root component; layout, state orchestration
src/hooks/useVideoEditor.ts State management (file, recipe, export status)
src/lib/ffmpeg.ts FFmpeg wrapper; lazy-loads WASM, builds filter chains
src/lib/presets.ts 11 preset definitions (9:16, 16:9, 4:5, etc.)
src/lib/types.ts TypeScript types for EditRecipe, ExportResult, etc.
src/components/*.tsx Individual control panels (Trim, Rotate, Speed, Quality)

Tech Stack

Layer Tech
Framework Next.js 15 (App Router, static export)
Language TypeScript 5
Styling Tailwind CSS v3
Icons Lucide React
Animations Lottie Web
Video Processing FFmpeg.wasm (single-threaded)
Fonts Bebas Neue · Syne · DM Sans

Supported Browsers

Browser Support Notes
Chrome 90+ ✅ Full Recommended
Firefox 89+ ✅ Full
Safari 15+ ✅ Full
Edge 90+ ✅ Full
Mobile Chrome ✅ Full
Mobile Safari ⚠️ Partial Large files may be slow

Reframe requires WebAssembly (WASM) support to process videos in the browser.


Contributing

⭐ Star this repo — it helps more people find Reframe!

Reframe is an open-source project and we welcome contributions of all kinds — from fixing a typo in the README to implementing a brand new feature. Every contribution matters.


🌸 GirlScript Summer of Code 2026

Reframe is an official project in GirlScript Summer of Code (GSSoC) 2026! We have 300+ open issues across all difficulty levels — from beginner-friendly tasks to advanced features.

If you're a GSSoC participant, add the gssoc'26 label to any issue you want to work on, and mention your GitHub username in a comment to claim it.

Find issues to work on:

Level Label Description
🟢 Beginner good first issue Small, well-defined tasks — perfect if this is your first open source contribution
🟡 Intermediate enhancement Feature improvements and UX enhancements
🔴 Advanced feature New features requiring deeper understanding of FFmpeg/WASM
🔵 Any Level documentation Docs, guides, and README improvements
Any Level accessibility Making Reframe usable for everyone

→ Browse all GSSoC'26 issues


How to Contribute

  1. Find an issue — Browse open issues or pick one from the table above
  2. Comment on the issue — Say you'd like to work on it so we don't duplicate effort
  3. Fork the repo — Click the Fork button at the top right
  4. Create a branchgit checkout -b feat/your-feature-name
  5. Make your changes — Code, test, and commit
  6. Open a Pull Request — Reference the issue number in your PR description
  7. Get reviewed — We'll review and merge your contribution!

See CONTRIBUTING.md for the full guide including development setup, code style, and PR checklist.


Contributors

Thank you to everyone who has contributed to Reframe! 🎉

Contributors


Privacy

Reframe processes all videos 100% client-side. Your video files are never uploaded to any server. You can even use Reframe offline (after first load). The source code is fully open for inspection.


License

MIT License — See LICENSE for details.


If Reframe saved you time, please ⭐ star the repo — it helps others discover it!

Made with ❤️ for everyone who just wants to edit a video without the hassle.

About

Free, open-source video editor that runs in your browser. No login, no uploads, no ads.

Resources

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages