kv-download/README.md

3.5 KiB

KV-Download (Media Roller)

A mobile friendly tool for downloading videos from social media. The backend is a Golang server that will take a URL (YouTube, Reddit, Twitter, TikTok, Instagram, etc), download the video file, and return a URL to directly download the video. The video will be transcoded to produce a single mp4 file.

This is built on yt-dlp. yt-dlp will auto update every 12 hours to make sure it's running the latest nightly build.

Note: This was written to run on a home network and should not be exposed to public traffic. There's no auth.

Screenshot 1

Screenshot 2

Running

Make sure you have yt-dlp and FFmpeg installed then pull the repo and run:

./run.sh

Or for docker locally:

./docker-build.sh
./docker-run.sh

Docker Image

The Docker image is available from the Forgejo container registry:

docker pull git.khoavo.myds.me/vndangkhoa/kv-download:v1

Build Your Own Image

docker build -t git.khoavo.myds.me/vndangkhoa/kv-download:v1 --platform linux/amd64 .
docker push git.khoavo.myds.me/vndangkhoa/kv-download:v1

Deploy on Synology NAS

  1. SSH into your Synology NAS

  2. Create a project directory and copy the docker-compose.yml there

  3. Run:

cd /path/to/project
docker compose up -d

Method 2: Synology Container Manager (Docker GUI)

  1. Open Container Manager in DSM

  2. Go to RegistryAdd → enter:

    • Server: git.khoavo.myds.me
    • Username: vndangkhoa
    • Password: Thieugia19
  3. Search for vndangkhoa/kv-download and download the v1 tag

  4. Go to Image → select kv-downloadCreate Container

  5. Configure the container:

    • Container Name: kv-download
    • Port Settings: Local 9292 → Container 9292
    • Volume Settings:
      • Add folder: /volume2/docker/kv-download/download → Mount path /download
    • Environment Variables:
      • MR_DOWNLOAD_DIR = /download
      • TZ = Asia/Ho_Chi_Minh
    • Restart Policy: Always restart the container
  6. Click Done to start the container

Method 3: Docker CLI

docker run -d \
  --name kv-download \
  --restart unless-stopped \
  -p 9292:9292 \
  -v ./download:/download \
  -e MR_DOWNLOAD_DIR=/download \
  -e TZ=Asia/Ho_Chi_Minh \
  git.khoavo.myds.me/vndangkhoa/kv-download:v1

Docker Environment Variables

  • MR_DOWNLOAD_DIR where videos are saved. Defaults to /download
  • MR_PROXY will pass the value to yt-dlp with the --proxy argument. Defaults to empty

File Structure

After downloading videos, files are organized as follows:

download/
├── <hash>/
│   └── <video-id>.mp4        # Video files
└── json/
    └── <video-id>.info.json   # Metadata files (separate folder)

API

To download a video directly, use the API endpoint:

/api/download?url=SOME_URL

Create a bookmarklet, allowing one click downloads (From a PC):

javascript:(location.href="http://127.0.0.1:9292/fetch?url="+encodeURIComponent(location.href));

Integrating with mobile

After you have your server up, install this shortcut. Update the endpoint to your server address by editing the shortcut before running it.

https://www.icloud.com/shortcuts/d3b05b78eb434496ab28dd91e1c79615

Unraid

media-roller is available in Unraid and can be found on the "Apps" tab by searching its name.