Javinizer Go is a metadata scraper and file organizer for Japanese Adult Videos (JAV), with CLI, TUI, API, and a web UI.
| Feature | What it does | Why it helps |
|---|---|---|
| Multi-source scraping | Pulls metadata from R18.dev, DMM/Fanza, and optional sources. | Better match quality and fewer missing fields. |
| Smart file organization | Renames and organizes files/folders using templates. | Keeps large libraries consistent and searchable. |
| Dry-run safety | Shows a full preview before making any changes. | Reduces risk when processing many files. |
| NFO generation | Creates Kodi/Plex-compatible NFO metadata files. | Improves media center indexing and display quality. |
| Media downloads | Downloads cover, poster, fanart, trailer, and actress images. | Produces complete, polished library entries. |
| Multiple interfaces | Use CLI, interactive TUI, or API + web UI. | Lets you choose fast automation or manual review. |
| Scraper | Enabled by default (config.yaml.example) |
Language options | Notes |
|---|---|---|---|
dmm |
Yes | N/A | Supports optional browser mode for JS-rendered pages. |
r18dev |
Yes | en, ja |
JSON API scraper with rate-limit handling options. |
libredmm |
Yes | N/A | Community mirror source. |
mgstage |
No | N/A | Usually requires age-verification cookie (adc=1). |
javlibrary |
No | en, ja, cn, tw |
Can use FlareSolverr for Cloudflare challenges. |
javdb |
No | N/A | Can use FlareSolverr; proxy-friendly setup. |
javbus |
No | ja |
Japanese mode in example config. |
jav321 |
No | N/A | Alternative index source. |
tokyohot |
No | ja |
Tokyo-Hot specific source. |
aventertainment |
No | en |
Supports bonus screenshot scraping option. |
dlgetchu |
No | N/A | DLsite/Getchu-related source. |
caribbeancom |
No | ja |
Caribbeancom-specific source. |
fc2 |
No | N/A | FC2 source. |
The easiest way to get started is with Docker:
# 1) Create data directory and download config
mkdir -p ./javinizer-data
curl -o ./javinizer-data/config.yaml \
https://raw.githubusercontent.com/javinizer/javinizer-go/main/configs/config.yaml.example
# 2) Edit config.yaml with your settings (scrapers, output paths, etc.)
# 3) Run container
docker run --rm \
-p 8080:8080 \
-v "$(pwd)/javinizer-data:/javinizer" \
-v "/path/to/your/media:/media" \
ghcr.io/javinizer/javinizer-go:latest
Open http://localhost:8080 to access the web UI.
Notes:
/path/to/your/media with the path to your JAV libraryv0.1.2-alpha) for reproducible deploymentslatest tracks the most recent releaseFor a more complete setup with optional FlareSolverr support:
# 1) Download example files
curl -o docker-compose.yml \
https://raw.githubusercontent.com/javinizer/javinizer-go/main/docker-compose.yml.example
curl -o .env \
https://raw.githubusercontent.com/javinizer/javinizer-go/main/.env.example
# 2) Edit .env to configure paths and settings
# MEDIA_PATH=/path/to/your/jav-library
# TZ=America/New_York
# 3) Start services
docker-compose up -d
The docker-compose.yml.example includes:
See Docker Deployment Guide for complete documentation.
Download pre-compiled binaries from GitHub Releases:
Available platforms:
linux-amd64 - Linux x86_64linux-arm64 - Linux ARM64 (e.g., Raspberry Pi)darwin-amd64 - macOS Inteldarwin-arm64 - macOS Apple Silicondarwin-universal - macOS Universal (Intel + Apple Silicon)windows-amd64 - Windows x86_64Installation:
# Example for Linux amd64
wget https://github.com/javinizer/javinizer-go/releases/download/v0.1.2-alpha/javinizer-linux-amd64.tar.gz
tar -xzf javinizer-linux-amd64.tar.gz
sudo mv javinizer /usr/local/bin/
javinizer version
Note: Prebuilt binaries include CLI, TUI, API server, and embedded web UI.
Requires Go 1.25+ and CGO (for SQLite support). For embedded web UI builds, Node.js 20+ is also required.
go install github.com/javinizer/javinizer-go/cmd/javinizer@latest
# Or clone and build manually (single binary with embedded web UI)
git clone https://github.com/javinizer/javinizer-go.git
cd javinizer-go
make build
./bin/javinizer version
The make build target now builds the frontend bundle and embeds it into the Go binary.
Browse and scrape files interactively with real-time progress:
javinizer tui ~/Videos
See TUI Guide for keyboard shortcuts and workflows.
Scan, scrape metadata, and organize files using templates:
# Dry-run mode (preview changes without modifying files)
javinizer sort ~/Videos --dry-run
# Actually organize files
javinizer sort ~/Videos
Scrape metadata for a specific JAV ID:
javinizer scrape IPX-535
javinizer scrape SSIS-123 --force # Force refresh cached metadata
Re-scrape and update metadata for already organized files:
javinizer update ~/Videos/IPX-535
javinizer update ~/Videos --dry-run # Preview updates for entire library
Add custom tags to movies (appears in NFO files):
javinizer tag add IPX-535 "favorite" "4K"
javinizer tag list IPX-535
javinizer tag remove IPX-535 "favorite"
View and modify genre replacement rules:
javinizer genre list
javinizer genre add "Creampie" "Cream Pie" # Replace "Creampie" with "Cream Pie"
javinizer genre remove "Creampie"
View and rollback file organization operations:
javinizer history list
javinizer history rollback <operation-id>
Display configuration, scrapers, and database status:
javinizer info
javinizer info --scrapers # List enabled scrapers
javinizer info --config # Show current configuration
web Alias)Start the unified server (recommended via web alias):
javinizer web
# Equivalent legacy command
javinizer api
# Custom port
PORT=9000 javinizer web
# With flags
javinizer web --host 0.0.0.0 --port 8081
javinizer api and javinizer web invoke the same backend server command, but they represent different usage intents:
javinizer api for backend/API-focused workflows and frontend development (npm run dev hot reload).javinizer web when you want the embedded browser UI entrypoint from the Go binary.What this server provides:
GET / - Embedded Web UI (single-binary distribution)GET /api/v1/... - REST API endpointsGET /ws/progress - WebSocket progress streamGET /docs - Scalar API docs UIGET /swagger/index.html - Swagger UIThe web application provides a modern interface for managing your JAV library.
Availability:
localhost:8080localhost:8080How to access:
# Using Docker (recommended)
docker run -p 8080:8080 -v ./data:/javinizer ghcr.io/javinizer/javinizer-go:latest
# Open http://localhost:8080
Pages:
API Documentation:
See API Reference for endpoint documentation.
To build and use the web UI with a local installation:
Option 1: Production build (single binary with embedded UI)
# Build binary (includes web bundle)
make build
# Start API/web server
javinizer web
# Open http://localhost:8080
Option 2: Development mode (hot reload)
# Terminal 1: Start backend API server
javinizer api
# Terminal 2: Start frontend dev server with hot reload
make web-dev
# Open http://localhost:5174 (proxies API calls to :8080)
The development server provides:
See web/frontend/README.md for more details.
Docker deployments support environment variable overrides:
| Variable | Description | Default | Example |
|---|---|---|---|
JAVINIZER_CONFIG |
Path to config file | /javinizer/config.yaml |
/custom/config.yaml |
JAVINIZER_DB |
Path to SQLite database | /javinizer/javinizer.db |
/custom/db.db |
JAVINIZER_LOG_DIR |
Log file directory | /javinizer/logs |
/custom/logs |
LOG_LEVEL |
Logging verbosity | info |
debug, warn, error |
UMASK |
File permission mask | 002 |
022 (owner-only write) |
TZ |
Timezone for logs | UTC |
America/New_York |
PORT |
API server port | 8080 |
9000 |
Example:
docker run --rm \
-e LOG_LEVEL=debug \
-e TZ=Asia/Tokyo \
-p 9000:8080 \
-v "$(pwd)/data:/javinizer" \
-v "/media/jav:/media" \
ghcr.io/javinizer/javinizer-go:latest
See .env.example for Docker Compose configuration.
Javinizer uses a YAML configuration file to control scrapers, output templates, and behavior.
Key configuration sections:
Documentation:
Initialize config:
javinizer init # Creates default config.yaml in current directory
This project is a Go recreation of the original Javinizer.
MIT License - see LICENSE file for details.