MeTube: 셀프 호스팅 YouTube 다운로드 프로그램
(github.com/alexta69)- 
32비트 ARM 빌드 중단
- 새로운 Node 버전이 32비트 ARM을 지원하지 않음
 - 보안 업데이트와 종속성 문제로 64비트 OS로 마이그레이션 필요
 
 - 
MeTube 소개
- youtube-dl의 웹 GUI (yt-dlp 포크 사용)
 - YouTube 및 여러 사이트에서 비디오 다운로드 지원
 
 
Docker로 실행
- 
Docker 명령어
docker run -d -p 8081:8081 -v /path/to/downloads:/downloads ghcr.io/alexta69/metube - 
docker-compose 예제
version: "3" services: metube: image: ghcr.io/alexta69/metube container_name: metube restart: unless-stopped ports: - "8081:8081" volumes: - /path/to/downloads:/downloads 
환경 변수로 설정
- UID: MeTube가 실행될 사용자 ID (기본값: 1000)
 - GID: MeTube가 실행될 그룹 ID (기본값: 1000)
 - UMASK: umask 값 (기본값: 022)
 - 
DEFAULT_THEME: 기본 테마 (
light,dark,auto, 기본값:auto) - 
DOWNLOAD_DIR: 다운로드 저장 경로 (기본값: 
/downloads) - 
AUDIO_DOWNLOAD_DIR: 오디오 전용 다운로드 저장 경로 (기본값: 
DOWNLOAD_DIR) - 
DOWNLOAD_DIRS_INDEXABLE: 다운로드 디렉토리 인덱싱 가능 여부 (기본값: 
false) - 
CUSTOM_DIRS: 사용자 지정 디렉토리 다운로드 활성화 여부 (기본값: 
true) - 
CREATE_CUSTOM_DIRS: 디렉토리 자동 생성 지원 여부 (기본값: 
true) - 
STATE_DIR: 큐 지속성 파일 저장 경로 (기본값: 
/downloads/.metube) - 
TEMP_DIR: 중간 다운로드 파일 저장 경로 (기본값: 
/downloads) - 
DELETE_FILE_ON_TRASHCAN: UI에서 삭제된 파일 서버에서 삭제 여부 (기본값: 
false) - 
URL_PREFIX: 웹 서버의 기본 경로 (기본값: 
/) - PUBLIC_HOST_URL: UI에서 표시되는 다운로드 링크의 기본 URL
 - PUBLIC_HOST_AUDIO_URL: 오디오 다운로드 링크의 기본 URL
 - 
OUTPUT_TEMPLATE: 다운로드 파일 이름 템플릿 (기본값: 
%(title)s.%(ext)s) - 
OUTPUT_TEMPLATE_CHAPTER: 챕터로 나눈 비디오 파일 이름 템플릿 (기본값: 
%(title)s - %(section_number)s %(section_title)s.%(ext)s) - YTDL_OPTIONS: youtube-dl에 전달할 추가 옵션 (JSON 형식)
 - 
YTDL_OPTIONS_FILE: 
YTDL_OPTIONS를 채우기 위한 JSON 파일 경로 
브라우저 쿠키 사용
- 
docker-compose.yml에 추가
volumes: - /path/to/cookies:/cookies environment: - YTDL_OPTIONS={"cookiefile":"/cookies/cookies.txt"} - 
쿠키 추출 확장 프로그램 설치
- Firefox
 - Chrome
 
 
브라우저 확장 프로그램
- Chrome: Google Chrome Webstore에서 설치 가능
 - Firefox: Firefox Addons에서 설치 가능
 
iOS 단축키
- iOS 단축키: Safari에서 URL을 MeTube로 전송
 - 서버 주소 및 포트 입력 필요
 
iOS 호환성
- iOS 비디오 파일 요구 사항: h264 또는 h265 비디오 코덱 및 aac 오디오 코덱 필요
 - MP4 형식 다운로드 시 "Best (iOS)" 옵션 선택 가능
 
북마클릿
- Chrome 북마클릿: 현재 열린 웹페이지를 MeTube로 전송
 - HTTPS 페이지에서 사용 시 HTTPS 역방향 프록시 필요
 
역방향 프록시 뒤에서 실행
- 
NGINX 설정 예제
location /metube/ { proxy_pass http://metube:8081; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; } - 
Apache 설정 예제
<Location /metube/> ProxyPass http://localhost:8081/ retry=0 timeout=30 ProxyPassReverse http://localhost:8081/ </Location> <Location /metube/socket.io> RewriteEngine On RewriteCond %{QUERY_STRING} transport=websocket [NC] RewriteRule /(.*) ws://localhost:8081/socket.io/$1 [P,L] ProxyPass http://localhost:8081/socket.io retry=0 timeout=30 ProxyPassReverse http://localhost:8081/socket.io </Location> - 
Caddy 설정 예제
example.com { route /metube/* { uri strip_prefix metube reverse_proxy metube:8081 } } 
yt-dlp 업데이트
- 자동 야간 빌드: 새로운 yt-dlp 버전이 있으면 자동으로 빌드 및 Docker 이미지 업데이트
 - watchtower 설치 및 설정 권장
 
문제 해결 및 이슈 제출
- MeTube는 yt-dlp의 UI: yt-dlp 관련 문제는 MeTube 프로젝트에 제출하지 않음
 - 
yt-dlp 명령어 직접 사용 권장: 옵션 테스트 후 
YTDL_OPTIONS에 적용 
로컬 빌드 및 실행
- 
필요한 도구: node.js 및 Python 3.11
cd metube/ui npm install node_modules/.bin/ng build cd .. pip3 install pipenv pipenv install pipenv run python3 app/main.py - 
Docker 이미지 로컬 빌드
docker build -t metube . 
개발 노트
- Windows, macOS, Linux에서 작동
 - VSCode에서 서버 실행 시 다운로드 폴더는 사용자의 Downloads 폴더
 
GN⁺의 정리
- MeTube는 youtube-dl의 웹 GUI로, 여러 사이트에서 비디오를 다운로드할 수 있는 기능을 제공함
 - Docker를 사용하여 쉽게 배포 및 설정할 수 있으며, 다양한 환경 변수를 통해 사용자 맞춤 설정이 가능함
 - 브라우저 확장 프로그램과 iOS 단축키를 통해 편리하게 비디오를 다운로드할 수 있음
 - yt-dlp의 최신 버전을 자동으로 업데이트하여 항상 최신 상태를 유지함
 - 유사한 기능을 제공하는 프로젝트로는 JDownloader, Video DownloadHelper 등이 있음
 
Hacker News 의견
- 
Tube Archivist는 기술 채널을 아카이브하고 인덱싱하는 데 유용함
- 고급 전체 텍스트 및 메타데이터 검색 기능을 제공함
 - Alphabet보다 훨씬 나은 검색 기능을 제공함
 
 - 
YouTube TiVo와 같은 기능을 원함
- 자주 시청하는 100개의 채널을 놓치고 싶지 않음
 - 우선순위 피드가 필요함
 - DLNA를 통해 다운로드 및 시청 가능하면 더 좋음
 - YouTube는 사용자가 좋아하는 콘텐츠를 놓치지 않게 하는 데 관심이 없음
 
 - 
yt-dlp를 사용하여 간단한 앱을 만들 생각을 하고 있음
- 서버에 호스팅할 필요가 없다고 생각함
 - 대안이 있는지 궁금함
 
 - 
Jellyfin과 연동되는 인터페이스가 있으면 좋겠음
- YouTube를 검색하고 yt-dlp로 다운로드한 후 광고 없이 Jellyfin을 통해 스트리밍 가능
 
 - 
많은 YouTube 미러링 도구가 있는 것이 의아함
- 비디오를 다운로드/아카이브하는 이유가 궁금함
 - 비디오가 삭제될 경우를 대비해 아카이브하는 것이 좋지만, 개인적으로는 드물게 발생함
 - 비디오를 보고 나면 다시 볼 필요가 없다고 생각함
 
 - 
yt-dlp 기반 서버가 PiHole처럼 간단한 이미저와 프론트엔드 클라이언트 앱으로 포장되면 인기를 끌 수 있을 것 같음
- Raspberry Pi를 구매하고 microSD 카드를 이미지화한 후, 좋아하는 YT 채널을 선택하고 클라이언트 앱을 설치하면 로컬에서 광고 없이 YT 콘텐츠를 이용 가능
 
 - 
TubeSync를 사용 중임
- 간단한 기능과 많은 버그에도 불구하고 충분히 잘 작동함
 - 채널이나 재생목록을 구독하고 비디오를 경로에 다운로드하며, 하루에 한 번 새로운 콘텐츠를 확인함
 - 채널 설정을 위한 UX만 필요함
 - 파일을 저장하고 Plex가 나머지를 처리하게 함
 - 더 나은 옵션이 있는지 궁금함
 
 - 
Cobalt.tools를 사용 중임
- 만족스러움
 
 - 
플레이리스트에 추가한 비디오를 다운로드하여 공유 Plex 서버에 저장함
- 주로 콘서트 비디오와 스케이트 파트를 아카이브함
 
 - 
관련 도구로 Yark: YouTube Archiver with Offline UI가 있음