47 lines
1.8 KiB
Markdown
47 lines
1.8 KiB
Markdown
# 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
|