Skip to content

nsvk13/pressly

Repository files navigation

pressly

Browser-based video and audio compression and format conversion. No uploads, no server — everything runs locally using FFmpeg compiled to WebAssembly.

Drop zone

Settings

What it does

  • Compress video or audio files to a target file size or a specific quality level (CRF)
  • Convert between formats: MP4, WebM, MKV, MOV, AVI, GIF, MP3, AAC, OGG, WAV, FLAC, M4A
  • Downscale resolution: 1080p, 720p, 480p, 360p
  • Strip audio track or set audio bitrate independently
  • Two-pass encoding for accurate target size

Files never leave your machine. FFmpeg WASM loads once from a CDN and is cached by the browser.

Running locally

bun install
bun run dev

Open http://localhost:5173.

Running with Docker

docker compose up --build

Open http://localhost:3000.

Tech stack

  • Vite + React 18 + TypeScript
  • FFmpeg.wasm (@ffmpeg/ffmpeg, @ffmpeg/util) loaded from unpkg CDN
  • Tailwind CSS v4

Notes

SharedArrayBuffer is required for multi-threaded FFmpeg. The dev server and the nginx config both set the necessary Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp headers. If you serve the built files through a different web server, you need to add those headers manually.

Large files (over ~1–2 GB) may hit browser memory limits. If that happens, try splitting the file or lowering the resolution before converting.

About

Pressly for video/audio compression and format conversion that runs entirely in the browser using FFmpeg.wasm.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages