I selfhost https://github.com/alexta69/metube
I have it sitting on a URL and I have an iOS share shortcut to throw any URL at it and it downloads the video.
Copy-paste from my ansible setup if you're interested, shouldn't be that hard to convert to docker-compose.
- name: Build metube options separately, avoids inline JSON in metube setup
ansible.builtin.set_fact:
metube_ytdl_options:
postprocessors:
- key: FFmpegEmbedSubtitle
- key: SponsorBlock
categories:
- sponsor
- key: ModifyChapters
remove_sponsor_segments:
- sponsor
subtitleslangs:
- en
- "-live_chat"
verbose: true
writeautomaticsub: true
writesubtitles: true
- name: Create metube container
community.general.docker_container:
container_default_behavior: "no_defaults"
name: metube
image: alexta69/metube:latest
restart_policy: always
env:
UID: "{{ plex_userid }}"
GID: "{{ docker_users_groupid }}"
DELETE_FILE_ON_TRASHCAN: "false"
DOWNLOAD_DIRS_INDEXABLE: "true"
DOWNLOAD_DIR: /downloads
TEMP_DIR: /metube-tmp
STATE_DIR: /config
TZ: "{{ timezone }}"
YTDL_OPTIONS: "{{ metube_ytdl_options | to_json }}"
mounts:
- type: bind
source: /stacks/metube/config
target: /config
read_only: false
- type: volume
source: metube_tmp_location_volume
target: /metube-tmp
- type: volume
source: plex_metube_volume
target: /downloads
labels:
"traefik.enable": "true"
"traefik.http.routers.metube.middlewares": "authelia@docker"
"traefik.http.routers.metube.service": "metube"
"traefik.http.routers.metube-no-auth.rule": "Host(`metube.home.domain.com`) && (PathPrefix(`/favicon`) || PathPrefix(`/add`))"
"traefik.http.routers.metube-no-auth.service": "metube"
"traefik.http.services.metube.loadbalancer.server.port": "8081"
ports: []
dns_servers:
- "{{ docker_network_ipv4_bridge_dns }}" # adguard
networks:
- name: bridge_ipv4