- TVer Downloader는 일본 티버 스트리밍 플랫폼의 동영상을 다운로드하도록 도와주는 GUI 기반의 프로그램입니다.
- PyQt6 기반의 직관적인 인터페이스와 yt-dlp/FFmpeg 자동 업데이트 등의 기능을 갖추고 있습니다.
- 기본적으로 TVer의 영상 다운로드가 주목적이지만, YouTube의 영상 역시 다운로드가 가능합니다.
- Windows 10 / 11 (x64)
- Python 3.10 이상
- 인터넷 연결 및 일본 VPN 필요
- 런타임 에러가 발생할 경우: Microsoft Visual C++ 재배포 가능 패키지 (x64)
- 최신 yt-dlp 및 FFmpeg 자동 업데이트
- 단일 및 다중 다운로드 (시리즈 URL 자동 분해 지원)
- 파일명 자유 커스터마이징 및 순서 설정 지원
- 화질 선택 (최상 / 1080p / 720p)
- 포맷 변환 MP4 to AVI & MOV 오디오 추출 지원
- 썸네일 클릭 확대, 완료 목록 더블클릭 재생
- 트레이 알림, 항상 위, 진행률 표시 및 로그 강화
- 라이트 / 다크 테마 전환 기능 (기본값 라이트)
- 다운로드 한 영상 및 즐겨찾기 시리즈 목록 자동 백업
- 다운로드 후 폴더 열기 / 시스템 종료 등 후속 작업 지원
- 가볍고 직관적인 UI — 불필요한 기능 최소화, UX 중심 설계
- TVer 영상 URL을 입력 창에 붙여넣기
- 설정 메뉴에서 저장 폴더, 화질, 동시 다운로드 수, 파일명 규칙 등 조정
- 다운로드 시작 버튼 클릭
- 진행률·로그·썸네일로 실시간 상태 확인
- 완료된 목록 더블 클릭으로 영상재생
- 본 프로그램은 개인적인 아카이빙 목적으로만 사용해야 하며, 상업적 이용이나 재배포는 금지됩니다.
- TVer는 일본 내 서비스이므로, 일본 VPN 환경에서만 정상 동작합니다.
- 다운로드한 콘텐츠의 저작권 및 이용 약관을 반드시 준수하세요.
- Windows에서 'PC 보호' 또는 '서명되지 않은 파일' 경고가 표시될 수 있습니다.
이 프로그램은 직접 빌드한 오픈소스 프로젝트로, 악성코드가 없으니 안심하고 실행해도 됩니다. - 업데이트 시 반드시
TVerDownloader.exe파일과_internal폴더를 함께 덮어쓰기 해야 합니다.
- GUI: PyQt6
- 다운로드 엔진: yt-dlp + FFmpeg (자동 최신화 포함)
- 설정 저장: JSON 기반(config/history)
- 안정성: 예외 발생 시 크래시 로그(
TVerDownloader_crash.log) 저장
📦 TVerDownloader
├─ 🐍 TVerDownloader.py — Entry point / main window bootstrap
├─ 📁 src
│ ├─ 🗂️ ui
│ │ └─ 🐍 main_window_ui.py — Build main UI (header, input bar, tabs, tray)
│ ├─ 🧰 core
│ │ ├─ 🐍 download_manager.py — Queue & concurrency orchestrator
│ │ ├─ 🐍 series_parser.py — Series URL parse coordinator (queues → thread)
│ │ ├─ 🐍 utils.py — Config, filename template, helpers (open file, crash log)
│ │ └─ 🐍 updater.py — GitHub releases/latest checker
│ ├─ 💬 dialogs
│ │ ├─ 🐍 dialogs.py — SettingsDialog (일반/파일명/화질/후작업/고급/캐시)
│ │ ├─ 🐍 about_dialog.py — About window (HTML features list)
│ │ ├─ 🐍 bulk_dialog.py — Multi-URL add dialog
│ │ └─ 🐍 series_dialog.py — Episode selection for series (thumb preview)
│ ├─ 🖼️ widgets
│ │ └─ 🐍 widgets.py — Download/History/Favorite item widgets + thumb cache
│ ├─ 🎞️ threads
│ │ ├─ 🐍 setup_thread.py — Auto-setup yt-dlp & FFmpeg
│ │ ├─ 🐍 series_parse_thread.py — Parse series → episode list (skip “予告”)
│ │ ├─ 🐍 download_thread.py — Download + mux + subtitles + progress parsing
│ │ └─ 🐍 conversion_thread.py — Optional format conversion
│ ├─ 🗃️ stores
│ │ ├─ 🐍 history_store.py — urlhistory.json + rolling backups
│ │ └─ 🐍 favorites_store.py — favorites.json + backups
│ ├─ 🎨 theme
│ │ ├─ 🐍 qss.py — Light/Dark QSS builder
│ │ └─ 🐍 icon.py — App icon (Base64 → QIcon)
│ └─ (optional) 📄 __init__.py — If packaging as a module
├─ 🧾 Generated at runtime
│ ├─ 📄 downloader_config.json — User settings
│ ├─ 📄 urlhistory.json — Download history
│ ├─ 📁 thumbnails/ — Cached thumbnails
│ ├─ 📁 historybak/ — History backups
│ ├─ 📁 favoritbak/ — Favorites backups
│ └─ 📄 TVerDownloader_crash.log — Crash logs
└─ ⚙️ External tools (auto-setup)
├─ 📄 yt-dlp(.exe)
└─ 📄 ffmpeg(.exe)
- 버그 제보 및 코드 기여: Issues
- 개발자 응원: YouTube 구독
- 별 ⭐을 눌러주시면 큰 힘이 됩니다!

