Sign inSign up

cailurus/mr-banana

By cailurus

•Updated 7 months ago

Download from Jable.tv and scrape local videos with Web UI

Image
Web servers
1

2.5K

cailurus/mr-banana repository overview

⁠Mr. Banana

Mr. Banana Logo

Download from Jable.tv & scrape local video libraries with a Web UI

GitHub Release License Docker Pulls Docker Image Size GitHub Stars

Install Userscript Docker Ready Python 3.10+

中文文档⁠


⁠Features

  • Video Download — Concurrent HLS download from Jable.tv with Cloudflare bypass, automatic segment merge via FFmpeg
  • Metadata Scraping — Scan local folders, fetch metadata from multiple sources (JavDB, JavBus, DMM, JavTrailers, ThePornDB), generate Kodi-compatible NFO files and artwork
  • Web UI — React-based interface for batch download, scraping, subscription management, and library browsing
  • Subscription Tracking — Monitor magnet link updates on JavDB with optional Telegram notifications
  • CLI — Command-line interface for scripted downloads
  • Browser Userscripts — Tampermonkey extensions for one-click download/subscribe on JavDB and Jable

⁠Architecture

Frontend (React / Vite)
    ↓  REST /api/* + WebSocket /ws
API Layer (FastAPI)
    ↓
Managers (Download / Scrape / Subscription)
    ↓
Core Library
    ├── Downloader → JableExtractor → HLS
    ├── Scraper → Crawlers (JavDB, JavBus, DMM, ...) → NFO Writer
    └── Utils (config, history, network, browser, translate)
docker run -d \
  --name mr-banana \
  -p 8000:8000 \
  -v /your/config:/config \
  -v /your/media:/data \
  -e ALLOWED_BROWSE_ROOTS="/data" \
  cailurus/mr-banana:latest

Open http://localhost:8000⁠ in your browser.

⁠Volume Mounts
Container PathDescriptionExample Host Path
/configConfig, database, logs (persisted across updates)/volume/mrbanana/config
/dataMedia files (videos, downloads)/volume/data

Files stored in /config:

  • config.json — Application settings
  • mr_banana_subscription.db — Subscription database
  • logs/ — Application logs
⁠Docker Compose
services:
  mr-banana:
    image: cailurus/mr-banana:latest
    container_name: mr-banana
    ports:
      - "8000:8000"
    volumes:
      - /your/config:/config
      - /your/media:/data
    environment:
      - ALLOWED_BROWSE_ROOTS=/data
    restart: unless-stopped

⁠Local Development

⁠Prerequisites
  • Python 3.10+
  • Node.js 18+
  • FFmpeg
  • patchright + Chromium (patchright install chromium on first run)
⁠Setup
git clone https://github.com/cailurus/MrBanana.git
cd MrBanana
python3 -m venv .venv && source .venv/bin/activate
make py-install    # Install Python dependencies
make web-install   # Install Node dependencies
⁠Development
make dev           # FastAPI :8000 + Vite :5173 with hot reload
make test          # Run tests
make test-quick    # Run tests (quiet output)
⁠Production Build
make fe            # Build frontend → ./static
make serve         # FastAPI serves ./static on :8000

⁠CLI Usage

python -m mr_banana.cli --url <VIDEO_URL> --output_dir <OUT_DIR>
FlagDescription
--urlJable.tv video URL (required)
--output_dirOutput folder
--formatFilename format — supports {id} and {title}
-vVerbose logging

⁠Browser Userscript

  1. Install Tampermonkey⁠
  2. Click to install: mrbanana-helper.user.js⁠
  3. Configure your Mr. Banana server address in Tampermonkey settings

Supported sites:

  • JavDB — "Subscribe to Mr. Banana" button on detail pages
  • Jable — "Download to Mr. Banana" button on video pages

⁠Environment Variables

NameDescriptionDefault
LOG_LEVELLog levelINFO
MR_BANANA_LOG_LEVELOverride log levelINFO
MR_BANANA_CONFIG_DIRConfig directory/config (Docker)
ALLOWED_BROWSE_ROOTSDirectories browsable in Web UI/data
CORS_ORIGINSCORS allowed origins*

⁠License

MIT License⁠

Tag summary

Content type

Image

Digest

sha256:3189f3762…

Size

351.3 MB

Last updated

7 months ago

docker pull cailurus/mr-banana