Javinizer Go is a modern, high-performance metadata scraper and file organizer for Japanese Adult Videos (JAV). This guide will help you get started quickly.
- Feature Overview
- Prerequisites
- Installation
- Initial Setup
- Your First Scrape
- Your First Sort Operation
- Next Steps
- R18.dev scraper (fast JSON API)
- DMM/Fanza scraper (HTML parsing + browser mode)
- Additional optional scrapers (JavDB, JavLibrary, LibreDMM, and more)
- Configurable metadata priority and aggregation
- Database caching for fast repeat lookups
- Automatic JAV ID detection from filenames
- Template-based folder/file naming
- Nested subfolder hierarchies
- Move/copy operations with conflict handling
- Dry-run preview mode
- Kodi/Plex-compatible NFO generation
- Actress database support (including Japanese names)
- Genre replacement system
- Download support for cover, poster, fanart, trailer, and actress images
- CLI commands
- Interactive TUI workflow
- API server + web frontend
- Operating System: Linux, macOS, or Windows
- Go: Version 1.25 or higher (if building from source)
- Disk Space: ~50MB for the binary, additional space for database and downloaded media
- Internet Connection: Required for scraping metadata
- Video Files: JAV files with recognizable IDs in the filename (e.g.,
IPX-535.mp4)
-
Download the latest release for your platform from the Releases page
-
Extract the archive:
# Linux/macOS tar -xzf javinizer-go-linux-amd64.tar.gz # Windows (use your preferred extraction tool)
-
Move the binary to your PATH:
# Linux/macOS sudo mv javinizer /usr/local/bin/ # Windows: Add the directory to your PATH environment variable
-
Verify installation:
javinizer --help
-
Clone the repository:
git clone https://github.com/javinizer/javinizer-go.git cd javinizer-go -
Build the binary:
go build -o bin/javinizer ./cmd/javinizer
-
Run the binary:
./bin/javinizer --help
Run the initialization command to create the configuration file and database:
javinizer initThis will:
- Create
configs/config.yamlwith default settings - Create
data/directory for the database - Initialize SQLite database at
data/javinizer.db
Expected output:
Initializing Javinizer...
✅ Created data directory: data
✅ Initialized database: data/javinizer.db
✅ Saved configuration: configs/config.yaml
🎉 Initialization complete!
Next steps:
- Run 'javinizer scrape IPX-535' to test scraping
- Run 'javinizer info' to view configuration
Check that everything is set up correctly:
javinizer infoYou should see output showing:
- Config file location
- Database type and location
- Enabled scrapers
- Priority settings
Start the API/Web server:
javinizer webThen open http://localhost:8080 and create your default username/password.
Notes:
- Credentials are stored in
auth.credentials.jsonnext to yourconfig.yaml. - API and WebSocket endpoints require login after setup.
- To reset credentials later, stop server, delete
auth.credentials.json, and restart.
Let's test the scraper by fetching metadata for a movie:
javinizer scrape IPX-535Expected output:
Scraping metadata for: IPX-535
📡 Scraping from r18dev...
✅ r18dev scraped successfully
📡 Scraping from dmm...
✅ dmm scraped successfully
🎬 Movie: IPX-535
Title: [Example Title]
Studio: Idea Pocket
Release Date: 2020-09-13
Runtime: 120 minutes
Actresses: [Actress Names]
Genres: [Genre List]
💾 Saved to database
The metadata is now cached in your local database. Subsequent scrapes of the same ID will be instant!
- Multi-Source Scraping: Javinizer queried both R18.dev and DMM for metadata
- Aggregation: Data from both sources was combined based on priority settings
- Database Caching: Results were saved to SQLite for fast future access
- Genre Replacement: Any configured genre replacements were applied
Now let's organize some video files. First, set up a test directory:
# Create a test directory
mkdir -p ~/javinizer-test
cd ~/javinizer-test
# Create a test video file (or copy a real one)
touch "IPX-535 Beautiful Day.mp4"Always start with a dry run to preview what will happen:
javinizer sort ~/javinizer-test --dry-runExpected output:
📁 Scanning: /Users/you/javinizer-test
Found 1 video file(s)
🔍 Matching files...
✅ Matched: IPX-535 Beautiful Day.mp4 → IPX-535
📡 Scraping metadata...
✅ IPX-535 (cached)
📝 Planning file organization...
Plan for: IPX-535 Beautiful Day.mp4
Source: /Users/you/javinizer-test/IPX-535 Beautiful Day.mp4
Target: /Users/you/javinizer-test/IPX-535 [Idea Pocket] - Beautiful Day (2020)/IPX-535.mp4
NFO: /Users/you/javinizer-test/IPX-535 [Idea Pocket] - Beautiful Day (2020)/IPX-535.nfo
Media: 5 files (cover, poster, 3 screenshots)
Files organized: 1 (dry-run)
💡 Run without --dry-run to apply changes
If the plan looks good, run it for real:
javinizer sort ~/javinizer-testThis will:
- ✅ Create organized folder structure
- ✅ Move/copy video files with clean names
- ✅ Generate Kodi-compatible NFO files
- ✅ Download cover images and screenshots
- ✅ Download actress thumbnails
# Organize files recursively in subdirectories
javinizer sort ~/Videos --recursive
# Move files instead of copying
javinizer sort ~/Videos --move
# Specify output destination
javinizer sort ~/Videos --dest ~/Organized
# Skip NFO generation
javinizer sort ~/Videos --nfo=false
# Skip media downloads
javinizer sort ~/Videos --download=false
# Combine options
javinizer sort ~/Videos --recursive --move --dest ~/OrganizedNow that you have the basics working, explore these topics:
- Configure Priority: Choose which scraper to prefer for each field
- Template System: Customize folder and file naming formats
- Genre Management: Replace genre names to match your preferences
- CLI Reference: Complete command documentation
- Database Schema: Direct database queries and management
- Troubleshooting: Common issues and solutions
- Always use
--dry-runfirst to preview changes before applying them - Keep the database - it caches metadata for instant lookups
- Backup your config -
configs/config.yamlcontains all your customizations - Use descriptive filenames - Include the JAV ID for accurate matching
- Check genre replacements - Run
javinizer genre listto see active replacements
Problem: Default API server port (8080) conflicts with another service.
Solution:
# Option 1: Use a different port
PORT=3000 javinizer web
# Option 2: Change in config.yaml
server:
port: 3000
# Option 3: For Docker users, set HOST_PORT in .env
HOST_PORT=3000Problem: Binary lacks execute permission.
Solution:
chmod +x javinizerProblem: Insufficient permissions to read/write files.
Solutions:
- Check directory permissions:
ls -la /path/to/videos - Fix permissions:
chmod 755 /path/to/videos - Run with appropriate user privileges
- For Docker: Ensure
PUID/PGIDmatch your host user (check withid -uandid -g)
Problem: "Config file not found" or "Database not initialized" errors.
Solution:
# Initialize configuration and database
javinizer init
# Or restore from backup
cp backup/config.yaml configs/
cp backup/javinizer.db data/Problem: Container cannot access mounted volumes.
Solution:
# Get your host user IDs
id -u # Shows your UID
id -g # Shows your GID
# Set in .env file
PUID=1000 # Replace with your UID
PGID=1000 # Replace with your GIDOn Unraid, common values are PUID=99 and PGID=100.
Problem: Certain scrapers (e.g., MGStage) require authentication cookies.
Solution:
# Add required cookies in config.yaml
scrapers:
mgstage:
enabled: true
cookies:
adc: "1" # Age verification cookieFor detailed troubleshooting, see the Troubleshooting Guide.
- Built-in Help:
javinizer <command> --help - Configuration Info:
javinizer info - Troubleshooting Guide: 10-troubleshooting.md
- GitHub Issues: Report bugs or request features
Next: Configuration Guide