# MergeDrop A self-hosted, drag-and-drop **video merger**. Drop clips → reorder → click **Merge & Build MP4** → download a single ready-to-share file. ## Why this exists Most "merge video" tools are bloated desktop apps, paid SaaS, or sketchy converter sites that re-upload your footage to who-knows-where. MergeDrop is the opposite: - 100% self-hosted, runs in a single container on your Runtipi - No accounts, no telemetry, no third-party upload caps - Mixed formats / resolutions / framerates → normalized to a clean **1080p30 h.264 + AAC** MP4 ## Features - Drag-and-drop upload, drag-to-reorder, drag-to-remove - Live ffmpeg progress (percentage + tail of stderr) per merge job - In-browser preview of the merged result, then one-click download - Built-in janitor — old outputs are auto-deleted after a configurable retention window ## Supported inputs `mp4`, `mov`, `mkv`, `avi`, `webm`, `m4v`, `flv`, `wmv`, `mpg/mpeg` (mixed codecs and dimensions are normalized via two-pass ffmpeg pipeline). ## Output presets `1080p` (default), `720p`, `4K`, `vertical 9:16`, `square 1:1` — selectable per job from the UI. ## Configuration | Setting | Default | Description | | --- | --- | --- | | Max files per merge | `20` | Hard cap per job | | Max per-file size | `2 GiB` | Per-upload limit (bytes) | | Output retention | `24h` | Janitor sweeps merged MP4s older than this | ## Volumes (persistent) - `${APP_DATA_DIR}/data/uploads` — staged source clips - `${APP_DATA_DIR}/data/outputs` — merged MP4 results - `${APP_DATA_DIR}/data/thumbs` — generated upload thumbnails ## Tech stack - Backend: FastAPI + `ffmpeg` subprocess (async, streamed progress) - Frontend: React 19 + Tailwind + `@dnd-kit` + `react-dropzone` - Single container, single port, no database