The Ultimate Desktop Video Downloader, Real-Time Streamer & AI Subtitle Generator
Stream, download, and automatically transcribe videos from JableTV, MissAV, SupJav, and 30+ other sites — with local & cloud AI subtitle engines.
Download FetchJAV.exe (Windows Direct) · View Latest Release
- About
- Key Features
- Visual Walkthrough
- Quick Start
- Installation
- Usage
- Configuration
- AI Subtitle Pipeline
- Supported Sites
- Technology Stack
- Project Structure
- Testing
- Building from Source
- Troubleshooting
- Contributing
- License
- Disclaimer
- Acknowledgments
- 繁體中文 (Traditional Chinese)
FetchJAV is a feature-rich Python desktop application for downloading, streaming, and subtitle-generating from adult video websites. It is a customized fork of JableTV-MissAV-Downloader-GUI-2026 by ALOS, significantly extended with a modern CustomTkinter UI, an AI-powered subtitle pipeline, a built-in video preview player, cross-site metadata aggregation, Docker/NAS headless deployment, and an automated upstream sync system.
What it does:
- Browse, search, and discover videos across 30+ sites in a unified gallery interface
- Stream videos in real-time before downloading via a built-in HTTP proxy player
- Download videos at high speed with multi-threaded segment-level parallelism
- Automatically generate Japanese, English, and Traditional Chinese subtitles using local ASR and cloud LLM translation
- Maintain persistent download history, view history, and saved video libraries
- Deploy headlessly on NAS/Docker for unattended batch downloading
Author: Developed and maintained by FetchJAV Upstream: Alos21750/JableTV-MissAV-Downloader-GUI-2026
| Feature | Description |
|---|---|
| Multi-Site Unified Browser | Browse JableTV, MissAV, SupJav, and more in a single tab with search, filtering, cover cards, actress links, and multi-select bulk download |
| Real-Time Streaming Preview | Built-in local HTTP streaming proxy handles Range requests, repairs TS/MP4 headers, strips anti-scraping fake headers — watch before you download |
| CC Subtitle Player | In-app subtitle overlay with online search, local .srt/.vtt loading, audio sync, track switching |
| High-Performance Download Manager | Up to 32 simultaneous videos, 1–16 segment workers per video, bandwidth metering, speed limiting, resume/retry |
| AI Subtitle Pipeline | Post-download automatic Japanese audio extraction; local ReazonSpeech/Whisper ASR; optional cloud LLM translation (OpenAI, Claude, DeepSeek, Ollama, Gemini) |
| Persistent History | Download history, view history, and saved videos persist across restarts |
| Modern Dark UI | CustomTkinter Material Design dark theme with accent color customization (Pink, Blue, Violet, Amber, Green), high-DPI support |
| Advanced Proxy | HTTP/HTTPS/SOCKS4/SOCKS5 proxy, Windows system proxy auto-detection, Cloudflare clearance cookie import |
| System Tray | Minimize to Windows system tray for background downloading with pystray notifications |
| Auto-Update | Checks GitHub releases for updates, downloads and applies via batch file |
| Hot Reload | Developer mode watches source files and auto-restarts the app on changes |
| Cross-Site Metadata | Aggregates actress, studio, director, and tag metadata from multiple sites |
| Crash Logging | Global crash logger for Python exceptions and native crashes with user-facing dialog |
| Docker/NAS Deployment | Headless CLI mode via docker_cli.py with Docker Compose support |
| Multi-language | Full i18n in English, Traditional Chinese, Simplified Chinese, and Japanese |
| Clip Import | Clipboard monitoring auto-detects valid URLs; .txt/.csv batch import |
| Online Subtitle Providers | Integration with OpenSubtitles, Podnapisi, SubDL, SubtitleCat, YTS Subtitles |
| Hardcoded Video OCR | Extract burnt-in subtitles directly from video frames into standard .srt subtitles using RapidOCR, Windows Native OCR, and EasyOCR |
| JAV.guru Discovery | Native browsing, actress catalog, uncensored metadata, and high-speed downloading for JAV.guru |
Browse, search, and filter videos across JableTV, MissAV, and SupJav in a single unified interface. Features responsive high-resolution cover cards, actress links, studio details, and multi-selection for bulk downloads.
Watch full streams directly inside FetchJAV before downloading. Built-in local HTTP streaming proxy automatically handles HTTP range requests, repairs segmented TS/MP4 chunks, and strips anti-scraping fake headers on the fly. Includes an integrated Closed Caption (CC) menu with online subtitle search across multiple providers, local .srt/.vtt loading, audio speech sync, and highlighted track switching.
Download multiple videos simultaneously with individual segment worker threads (1–16 workers per video), real-time bandwidth meters, segment progress trackers, and individual retry for interrupted chunks.
Automatically extract Japanese audio and generate .ja.srt, .en.srt, and .zh-TW.srt subtitle files right after downloading — without altering the original MP4 video:
- Local Offline ASR: Integrated ReazonSpeech and Whisper speech recognition running directly on your CPU/GPU with zero cloud dependencies.
- AI Translation Options: Optional integration with OpenAI, Claude, DeepSeek, Ollama, and Gemini API endpoints for precision subtitle translation.
Never lose track of your library. All completed downloads and metadata (actresses, tags, release dates, video codes) are preserved across app restarts with 1-click folder opening and instant re-downloading.
Designed with a sleek CustomTkinter interface supporting high-DPI scaling, dark/light themes, and selectable accent color themes (Pink, Blue, Violet, Amber, Green).
Full support for custom HTTP, HTTPS, SOCKS4, and SOCKS5 proxies, plus automatic synchronization with Windows manual proxy server settings. Built with curl_cffi and a shared SSLContext to eliminate native OpenSSL crash issues.
Minimize FetchJAV to the Windows system tray via pystray to allow uninterrupted background batch downloading, complete with status notifications.
Configure destination folders, default resolution preferences (Highest, 1080p, 720p, 480p, Lowest), multi-language UI selection (English, Traditional Chinese, Simplified Chinese, Japanese), and auto-update checks.
- Download: Get the latest FetchJAV.exe.
- Run: Place it in any writable folder and double-click to launch (no Python or FFmpeg installation required).
- Choose Language: On first launch, pick your language and preferred theme.
- Browse & Download:
- In Browse, choose JableTV, MissAV, or SupJav, search keywords or browse categories.
- Click preview to watch immediately, or select cards to add to the download queue.
- Paste URLs directly or import
.txt/.csvbatches in the Download tab.
Windows Security Note: SmartScreen reputation warnings and Defender Antivirus isolation are different events. Please read Windows Security Guide before filing issues. Verify
SHA256SUMS.txtagainst GitHub provenance.Windows 安全提醒: SmartScreen 信譽提示與 Defender Antivirus 隔離是兩回事。遇到防毒警示請先查閱 Windows 下載與安全驗證說明,使用
SHA256SUMS.txt比對 GitHub 原生建置產物;若備用包也被偵測,請停止並回報,不要直接停用保護。
The simplest way to use FetchJAV. Download the pre-built executable — everything (Python, FFmpeg, dependencies) is bundled.
# Download the latest release
# https://github.com/FetchJAV/FetchJAV_Public/releases/latest/download/FetchJAV.exe
# Place in any writable folder and double-click to run
# No installation requiredRequires Python 3.10+ and Tk (usually included with Python on macOS; may need python3-tk on Linux).
# Clone the repository
git clone https://github.com/FetchJAV/FetchJAV_Public.git
cd FetchJAV
# Create and activate a virtual environment (recommended)
python -m venv .venv
# Windows:
.venv\Scripts\activate
# macOS/Linux:
source .venv/bin/activate
# Install dependencies
python -m pip install -r requirements.txt
# Run the application
python main.pyThe public container image is available at ghcr.io/fetchjav/jabletv:latest for amd64 and arm64 architectures.
# Download a single URL to /downloads folder
docker run --rm -v "/path/to/downloads:/downloads" \
ghcr.io/fetchjav/jabletv:latest "https://jable.tv/videos/example/"
# Multiple URLs
docker run --rm -v "/path/to/downloads:/downloads" \
ghcr.io/fetchjav/jabletv:latest \
"https://jable.tv/videos/1/" "https://missav.ai/abc123/"# Place URLs in a file or pass directly
docker compose run --rm jabletv
# Or pass URLs directly:
docker compose run --rm jabletv "https://jable.tv/videos/example/"| Variable | Description | Default |
|---|---|---|
DOWNLOAD_DIR |
Output directory inside the container | /downloads |
RESOLUTION |
Video resolution preference | highest |
MAX_WORKERS_PER_VIDEO |
Segment worker count per video (1–16) | auto |
URLS |
Space-separated list of URLs | — |
URL |
Single URL | — |
URLS_FILE |
Path to text file with one URL per line | /downloads/urls.txt |
docker build -t fetchjav .
docker run --rm -v "$(pwd)/downloads:/downloads" fetchjav "URL"# Launch the modern CustomTkinter GUI (default)
python main.py
# Launch with a specific URL
python main.py --url "https://jable.tv/videos/example/"
# Launch and download a random recommended video
python main.py --randomGUI Tabs:
| Tab | Description |
|---|---|
| Browse | Unified multi-site browser with search, categories, and cover gallery |
| Download | Paste URLs, import batch files, manage download queue |
| History | View completed downloads with metadata and re-download options |
| Settings | Configure themes, proxy, subtitle, resolution, and more |
Run FetchJAV headlessly without any GUI:
# Download a single URL
python main.py --nogui --url "https://jable.tv/videos/example/" --output "./download"
# Specify worker count
python main.py --nogui --url "https://jable.tv/videos/example/" \
--output "./download" --max-workers-per-video 4
# Download a random video
python main.py --nogui --random --output "./download"CLI Flags:
| Flag | Description | Default |
|---|---|---|
--nogui |
Run in headless/CLI mode (no GUI) | off |
--url URL |
Specific URL to download | — |
--random |
Download a random recommended video | off |
-o, --output DIR |
Output directory | ./download |
--max-workers-per-video N |
Segment workers per video (1–16) | auto |
--hot-reload, -hr, --watch |
Enable dev hot-reload mode | off |
--watch-interval SEC |
File watcher poll interval (seconds) | 1.0 |
# Run via Python directly
python docker_cli.py "https://jable.tv/videos/example/"
# Or via environment variables
URLS="url1 url2" python docker_cli.py
# Or use a URLs file (one URL per line)
URLS_FILE=/downloads/urls.txt python docker_cli.pyFor developers — automatically restart the app when source files change:
# Default 1-second poll interval
python main.py --hot-reload
# Custom poll interval
python main.py --hot-reload --watch-interval 0.5FetchJAV stores all configuration as JSON in:
- Windows:
%APPDATA%/FetchJAV/ - macOS/Linux:
~/.config/FetchJAV/(or equivalent)
| File | Contents |
|---|---|
ui_prefs.json |
Theme, language, resolution, subtitle mode, recognition quality, download concurrency, max workers, proxy settings, saved videos, view history, download history |
cf_overrides.json |
Cloudflare clearance cookies per domain |
download_queue.csv |
Persisted download queue |
| Setting | Values | Default |
|---|---|---|
| Theme | dark, light, system |
dark |
| Language | en, zh (Traditional), zh-Hans (Simplified), ja |
prompted on first launch |
| Resolution | highest, lowest, 1080, 720, 480, 360 |
highest |
| Subtitle Mode | none, ja, en, zh, all |
none |
| Recognition Quality | auto, quality, balanced, fast |
auto |
| Download Concurrency | 1–32 simultaneous videos | 2 |
| Workers Per Video | 1–16 segment workers | min(cpu_count * 2, 16) |
| Proxy Mode | manual, system, direct |
direct |
FetchJAV supports full proxy configuration:
| Protocol | Support |
|---|---|
| HTTP | Yes |
| HTTPS | Yes |
| SOCKS4 / SOCKS4a | Yes |
| SOCKS5 / SOCKS5h | Yes |
| Windows System Proxy Auto-Detection | Yes |
| Cloudflare Clearance Cookie Import | Yes |
MIRRORS = {
'missav': ['missav.ai', 'missav.ws', 'missav123.com', 'missav.live'],
'jable': ['jable.tv', 'fs1.app'],
'supjav': ['supjav.com', 'supjav.net', 'supjav.org'],
'hanime1': ['hanime1.me'],
'hanimetv': ['hanime.tv'],
'tnaflix': ['www.tnaflix.com'],
}FetchJAV includes a comprehensive AI-powered subtitle generation pipeline that runs automatically after video downloads.
Speech recognition runs entirely on your machine with no cloud dependencies:
| Engine | Language | Model | Notes |
|---|---|---|---|
| Whisper (whisper.cpp v1.9.1) | Japanese | Various sizes | Downloaded on first use from GitHub releases |
| ReazonSpeech | Japanese | Custom ASR model | Optional model pack download (Jable_reazonspeech_asr_v1.zip) |
Recognition Quality Modes:
quality— Maximum accuracy, slower processingbalanced— Good balance of speed and accuracyfast— Prioritize speed over accuracyauto— Automatic selection based on system capabilities
Optional cloud AI translation for generating English and Chinese subtitles from Japanese ASR output:
| Provider | Endpoint | Notes |
|---|---|---|
| OpenAI | GPT-4 / GPT-3.5 | Requires API key |
| Anthropic Claude | Claude 3 / 3.5 | Requires API key |
| DeepSeek | DeepSeek Chat | Requires API key |
| Ollama | Local models | No API key needed, runs locally |
| Google Gemini | Gemini Pro | Requires API key |
Local Translation Models (Offline):
- FuguMT (ja→en) — CC BY-SA 4.0
- OPUS-MT (en→zh) — Apache 2.0
- Optional model pack:
Jable_local_translation_v1.zip
FetchJAV can also search and download existing subtitle files from:
| Provider | URL |
|---|---|
| OpenSubtitles | opensubtitles.org |
| Podnapisi | podnapisi.net |
| SubDL | subdl.com |
| SubtitleCat | subtitlecat.com |
| YTS Subtitles | yts-subs.com |
FetchJAV supports 30+ websites through its modular site adapter system:
| Site | Adapter | Notes |
|---|---|---|
| JableTV | SiteJableTV.py |
Primary site, jable.tv, fs1.app |
| MissAV | SiteMissAV.py |
Primary site, multiple mirrors |
| SupJav | SiteSupJav.py |
Multiple mirrors |
| Hanime1 | SiteHanime1.py |
hanime1.me |
| HanimeTV | SiteHanimeTV.py |
hanime.tv |
| TnaFlix | SiteTnaFlix.py |
tnaflix.com |
| 91Porn | Site91Porn.py |
91Porn and variants |
| JavDB | SiteJavDB.py |
JavDB and variants |
| Jable.org | Inherited | Mirror |
| ThisAV | Additional | — |
| PigAV | Additional | — |
| Porn5F | Additional | — |
| 85Tube | Additional | — |
| PornBest | Additional | — |
| HAnime XYZ | Additional | — |
| PornTW | Additional | — |
| PornJP | Additional | — |
| PornHK | Additional | — |
| PornHoHo | Additional | — |
| PornNVR | Additional | — |
| Video01 | Additional | — |
| PornLuLu | Additional | — |
| MIEN321 | Additional | — |
| AApp11 | Additional | — |
| Seselah | Additional | — |
| XJISHI | Additional | — |
- Python 3.10+
- Small JavaScript/Node.js components for HanimeTV extractor (
hanimetv_extractor.mjs)
- CustomTkinter — Modern dark UI (
gui_modern.py, ~11,000 lines) - Tkinter/ttk — Classic fallback GUI (
gui.py) - pystray — Windows system tray integration
| Library | Purpose |
|---|---|
requests |
HTTP client |
curl_cffi |
TLS-fingerprint-resistant HTTP (anti-bot bypass) |
cloudscraper |
Cloudflare bypass |
beautifulsoup4 |
HTML parsing |
m3u8 |
M3U8 HLS playlist parsing |
PySocks |
SOCKS proxy support |
certifi |
CA certificate bundle |
| Library | Purpose |
|---|---|
imageio-ffmpeg |
FFmpeg binary bundling (TS→MP4 remux) |
python-vlc |
VLC-based video preview playback |
Pillow |
Image processing |
pycryptodome |
HLS AES-128 encryption handling |
| Library | Purpose |
|---|---|
whisper.cpp (C++ binary) |
Japanese speech recognition |
| ReazonSpeech | Alternative Japanese ASR |
ctranslate2 4.8.1 |
Local neural machine translation |
sentencepiece |
Tokenizer for translation models |
opencc-python-reimplemented |
Traditional/Simplified Chinese conversion |
numpy 2.5.1 |
Numerical operations for CTranslate2 |
PyYAML 6.0.3 |
Model configuration parsing |
| Tool | Purpose |
|---|---|
PyInstaller |
Building standalone Windows executables |
pytest |
Test framework |
hot_reload.py |
Dev hot-reload framework |
FetchJAV/
├── main.py # Application entry point
├── gui.py # Classic Tkinter GUI (fallback)
├── gui_modern.py # Modern CustomTkinter GUI (~11,000 lines)
├── ui_theme.py # Theme/design system
├── config.py # Configuration, preferences, proxy, history
├── args.py # CLI argument parser
├── browser.py # Browse panel with site adapters
├── subtitle_engine.py # Local ASR + translation engine (~5,300 lines)
├── subtitle_domain.py # Subtitle domain logic
├── llm_translation.py # LLM-based translation (OpenAI, Claude, etc.)
├── translation_settings.py # Translation settings data
├── translation_settings_ui.py # Translation settings UI
├── video_preview.py # In-app video preview player
├── video_identity.py # Video identity/metadata detection
├── metadata_fetcher.py # Cross-site metadata aggregation
├── hot_reload.py # Dev hot-reload framework
├── updater.py # Auto-updater
├── crashlog.py # Global crash logging
├── locales.py # i18n strings (en, zh, zh-Hans, ja)
├── ssl_util.py # Shared SSL adapter
├── site_i18n.py # Site-specific i18n
├── docker_cli.py # Headless Docker/NAS CLI
├── Dockerfile # Docker image definition
├── docker-compose.yml # Docker Compose for NAS
│
├── M3U8Sites/ # Site scraper adapters
│ ├── __init__.py # Site registry, factory, URL validation
│ ├── M3U8Crawler.py # Core M3U8 download engine
│ ├── SiteJableTV.py # JableTV scraper
│ ├── SiteMissAV.py # MissAV scraper
│ ├── SiteSupJav.py # SupJav scraper
│ ├── SiteHanime1.py # Hanime1 scraper
│ ├── SiteHanimeTV.py # HanimeTV scraper
│ ├── SiteTnaFlix.py # TnaFlix scraper
│ ├── Site91Porn.py # 91Porn scraper
│ └── SiteJavDB.py # JavDB scraper
│
├── subtitle/ # FetchJAV subtitle package
│ ├── __init__.py # Exports SubtitleManager, SubtitleTrack, etc.
│ ├── manager.py # Subtitle orchestration
│ ├── models.py # Data models
│ ├── parser.py # SRT/VTT parser
│ ├── cache.py # Subtitle caching
│ ├── sources/ # Subtitle sources
│ │ ├── online.py # Online subtitle search
│ │ ├── local.py # Local file loading
│ │ └── generated.py # AI-generated subtitles
│ └── providers/ # Online subtitle providers
│ ├── base.py # Base provider
│ ├── opensubtitles.py # OpenSubtitles integration
│ ├── podnapisi.py # Podnapisi integration
│ ├── subdl.py # SubDL integration
│ ├── subtitlecat.py # SubtitleCat integration
│ └── ytssubs.py # YTS Subtitles integration
│
├── tests/ # 47 test files (670+ tests)
├── scripts/ # Build & maintenance scripts
├── docs/ # Documentation
├── img/ # Icons, screenshots, favicons
├── dist/ # Pre-built release executables
│ ├── FetchJAV.exe
│ ├── JableTV_Modern.exe
│ ├── release_notes.md
│ └── SHA256SUMS.txt
│
├── requirements.txt # Python dependencies (GUI)
├── requirements-docker.txt # Python dependencies (Docker)
├── LICENSE # Apache License 2.0
├── README.md # This file
├── README.en.md # English-only README
├── WINDOWS_SECURITY.md # Windows security/antivirus guidance
├── THIRD_PARTY_NOTICES.md # Third-party license notices
└── .github/workflows/ # CI/CD
├── windows-build.yml # Windows build pipeline
├── docker-publish.yml # Docker image publishing
└── star-history.yml # Star history chart
FetchJAV includes a comprehensive test suite with 670+ tests across 47 test modules.
# Run all tests
python -m pytest tests -q
# Run specific test modules
python -m pytest tests/test_subtitle_system.py -q
python -m pytest tests/test_subtitle_integration.py -q
python -m pytest tests/test_jable_extract.py -q| Category | Test Files |
|---|---|
| Site Scrapers | test_jable_extract.py, test_missav_parsing.py, test_supjav.py, test_tnaflix.py, test_hanime1.py, test_hanimetv.py |
| Subtitle System | test_subtitle_system.py, test_subtitle_engine.py, test_subtitle_domain.py, test_subtitle_integration.py, test_subtitle_provider_integration.py, test_subtitle_provenance.py |
| Whisper/ASR | test_whisper_quality.py, test_whisper_download_safety.py, test_whisper_diagnostic.py, test_whisper_diagnostic_entrypoints.py, test_reazonspeech_engine.py, test_reazonspeech_pack_builder.py, test_reazonspeech_supply_chain.py |
| Translation | test_llm_translation.py, test_translation_settings.py, test_translation_settings_ui.py, test_translation_pack.py |
| Config/Persistence | test_proxy.py, test_persistence.py, test_cf_override.py, test_resolution_pref.py, test_saved_videos.py, test_worker_limit.py |
| UI/Features | test_ui_theme.py, test_video_preview.py, test_video_identity.py, test_hot_reload.py, test_locales.py, test_site_i18n.py |
| Build/Packaging | test_updater.py, test_docker_cli.py, test_nogui_cli.py, test_pathlen.py |
| Other | test_smalltool_*.py, test_crawler_naming.py |
A manual regression checklist is maintained at docs/REGRESSION_CHECKLIST.md covering:
- GUI functionality (browse, download, settings, themes)
- Subtitle pipeline (ASR, translation, provider search)
- Data safety (persistence, history, queue)
- Packaging (PyInstaller build, Docker build)
FetchJAV uses PyInstaller to create standalone Windows executables.
- Python 3.10+
- All dependencies from
requirements.txt - PyInstaller
# Generate version info
python build_tmp/gen_version.py
# Build the executable (using PyInstaller spec files in build_tmp/)
pyinstaller build_tmp/FetchJAV.spec
# Output: dist/FetchJAV.exe| File | Description |
|---|---|
dist/FetchJAV.exe |
Main GUI executable |
dist/JableTV_Modern.exe |
Same binary, alternate name |
dist/SHA256SUMS.txt |
SHA-256 checksums for verification |
GitHub Actions workflows in .github/workflows/:
windows-build.yml— Automated Windows build pipelinedocker-publish.yml— Docker image publishing to GHCR
| Issue | Solution |
|---|---|
| Windows SmartScreen warning | Right-click → Properties → Unblock, or click "More info" → "Run anyway". See WINDOWS_SECURITY.md |
| Defender Antivirus quarantine | This is different from SmartScreen. Do NOT lower protection settings. Verify SHA256 checksums and report if needed |
| FFmpeg not found | On Windows: bundled via imageio-ffmpeg. On Linux: apt install ffmpeg |
| VLC not found for preview | Install VLC or disable video preview. VLC is optional |
| Whisper model download fails | Check internet connection. Models are downloaded from GitHub releases on first use |
| SSL/TLS errors | FetchJAV uses curl_cffi to avoid native OpenSSL issues. If problems persist, try --nogui mode or check proxy settings |
| Cloudflare blocking | Import Cloudflare clearance cookies via Settings → Network → Cloudflare Override |
| Video not downloading | Check if the site is accessible. Try updating FetchJAV. Some sites may require proxy |
# Whisper diagnostic
JABLE_WHISPER_DIAGNOSTIC_INPUT=file.wav \
JABLE_WHISPER_DIAGNOSTIC_OUTPUT=result.json \
python main.py
# Local translation diagnostic
JABLE_LOCAL_TRANSLATION_DIAGNOSTIC_OUTPUT=result.json python main.py
# LLM translation diagnostic
JABLE_LLM_TRANSLATION_DIAGNOSTIC_OUTPUT=result.json python main.pyIf FetchJAV crashes, a crash_log.txt file is generated beside the executable. Include this file when filing an issue.
Contributions are welcome! When opening a GitHub Issue, please include:
- App version and operating system
- Target website, reproducible URL, and error messages
- If a crash occurred, attach
crash_log.txt - Screenshots if the issue is UI-related
git clone https://github.com/FetchJAV/FetchJAV_Public.git
cd FetchJAV
python -m venv .venv
.venv\Scripts\activate # Windows
pip install -r requirements.txt
python main.py --hot-reload # Auto-restart on file changesFetchJAV maintains an automated sync with the upstream repository. See docs/UPSTREAM_SYNC.md for the detailed 3-way merge workflow and docs/sync/ownership.json for file ownership mapping.
FetchJAV is licensed under the Apache License, Version 2.0 — see LICENSE for details.
FetchJAV bundles or integrates with the following third-party components:
| Component | License |
|---|---|
| ReazonSpeech | Apache 2.0 |
| sherpa-onnx | Apache 2.0 |
| ONNX Runtime | MIT |
| FuguMT (translation model) | CC BY-SA 4.0 |
| OPUS-MT (translation model) | Apache 2.0 |
| CTranslate2 | MIT |
| SentencePiece | Apache 2.0 |
| OpenCC | Apache 2.0 |
| Intel OpenMP Runtime | Intel Simplified Software License |
| NumPy | BSD-3-Clause |
| PyYAML | MIT |
| PyInstaller | GPL-2.0-or-later (with bootloader exception) |
See THIRD_PARTY_NOTICES.md for full license texts.
This tool is provided for personal research and legal backup purposes only. Users are responsible for complying with local laws and the terms of service of any website accessed through this tool. The developers assume no liability for misuse.
- ALOS (Alos21750) — Original author of JableTV-MissAV-Downloader-GUI-2026
- FetchJAV Team — Maintainers and contributors
- All contributors and testers who help improve FetchJAV
- The open-source libraries that make this project possible
See GitHub Releases for the latest version history and release notes.










