nntmux / newznab-tmux
A Usenet Indexer
Installs: 144
Dependents: 0
Suggesters: 0
Security: 0
Stars: 253
Watchers: 20
Forks: 59
Open Issues: 0
Type:project
pkg:composer/nntmux/newznab-tmux
Requires
- php: ^8.3
- ext-bcmath: *
- ext-ctype: *
- ext-curl: *
- ext-exif: *
- ext-fileinfo: *
- ext-filter: *
- ext-gd: *
- ext-hash: *
- ext-iconv: *
- ext-intl: *
- ext-json: *
- ext-libxml: *
- ext-mbstring: *
- ext-mysqlnd: *
- ext-openssl: *
- ext-pcre: *
- ext-pdo: *
- ext-pdo_mysql: *
- ext-session: *
- ext-simplexml: *
- ext-sockets: *
- ext-sodium: *
- ext-spl: *
- ext-xmlwriter: *
- ext-zlib: *
- aharen/omdbapi: ^2.1
- anhskohbo/no-captcha: ^3.7.0
- b3rs3rk/steamfront: dev-master
- bacon/bacon-qr-code: ^3.0
- bhuvidya/laravel-countries: ^12.0
- canihavesomecoffee/thetvdbapi: ^2.0
- creativeorange/gravatar: ^1.0
- dariusiii/php-itunes-api: ^1.0
- dariusiii/rarinfo: ^2.7
- dariusiii/tmdb-laravel: ^12.0.2
- dariusiii/tv-maze-php-api: ^2.0.0
- dborsatto/php-giantbomb: ^2.2
- divineomega/php-cli-progress-bar: ^2.1
- fakerphp/faker: ^1.23
- genealabs/laravel-caffeine: ^12.0
- geoip2/geoip2: ^3.1
- google/recaptcha: ^1.3
- guzzlehttp/guzzle: ^7.9
- imdbphp/imdbphp: ^8.3
- intervention/image: ^3.11
- jrean/laravel-user-verification: ^13.0
- kevinlebrun/colors.php: ^1.0
- laravel/framework: ^12.4
- laravel/horizon: ^5.31
- laravel/pulse: ^1.4
- laravel/sanctum: ^4.0
- laravel/scout: ^10.13
- laravel/telescope: ^5.5
- laravel/tinker: ^2.10.1
- laravel/ui: ^4.6
- laravelcollective/html: ^6.4
- league/climate: ^3.10
- leventcz/laravel-top: ^1.2
- livewire/livewire: ^3.6
- livewire/volt: ^1.6
- mailerlite/laravel-elasticsearch: ^11.2
- manticoresoftware/manticoresearch-php: ^4.0.0
- marcreichel/igdb-laravel: ^5.2
- mhor/php-mediainfo: ^5.6
- monicahq/laravel-cloudflare: ^4.0
- monolog/monolog: ^3.8
- mtownsend/xml-to-array: ^2.0
- nesbot/carbon: ^3.8
- pear/net_nntp: ^2.0
- php-ffmpeg/php-ffmpeg: ^1.3
- php-http/guzzle7-adapter: ^1.1
- php-http/message: ^1.16
- pragmarx/google2fa-laravel: ^2.3
- predis/predis: ^v3.0.0
- propaganistas/laravel-disposable-email: ^2.4
- riari/laravel-forum: ^7.0
- sentry/sentry-laravel: ^4.13
- smarty/smarty: ^4.3
- spatie/async: ^1.7
- spatie/laravel-directory-cleanup: ^1.10
- spatie/laravel-fractal: ^6.3
- spatie/laravel-ignition: ^2.9
- spatie/laravel-image-optimizer: ^1.8
- spatie/laravel-permission: ^6.16
- sspat/es-query-sanitizer: ^1.0
- stechstudio/laravel-zipstream: ^5.4
- stevebauman/location: ^7.5
- symfony/http-client: ^7.0
- symfony/postmark-mailer: ^7.0
- symfony/process: ^7.0
- vlucas/phpdotenv: ^5.6
- voku/simple_html_dom: ^4.8
- ytake/laravel-smarty: ^12.0
Requires (Dev)
- barryvdh/laravel-ide-helper: ^3.5
- beyondcode/laravel-dump-server: ^2.1
- captainhook/captainhook: ^5.4
- captainhook/plugin-composer: ^5.2
- driftingly/rector-laravel: ^2.0
- ergebnis/composer-normalize: ^2.30
- friendsofphp/php-cs-fixer: ^3.70
- jubeki/laravel-code-style: ^2.0
- larastan/larastan: ^3.2
- laravel/pint: ^1.13
- laravel/sail: ^1.41
- mockery/mockery: ^1.6
- nunomaduro/collision: ^8.6
- php-coveralls/php-coveralls: ^2.4
- phpunit/phpunit: ^12.1.0
- rector/rector: ^2.0
Suggests
- ext-gd: to use GD library based image processing.
- ext-imagick: to use Imagick based image processing.
- ext-xdebug: For developement work
- dev-master
- 4.1
- 4.0
- 3.0.1
- 3.0.0
- 2.2.0
- 2.1.0
- 2.0.0
- v1.9.0
- v1.8.1
- v1.8.0
- v1.7.5
- v1.7.0
- v1.6.0
- v1.5.1
- v1.5.0
- v1.4.0.1
- v1.3.0
- v1.2.1
- v1.2
- v1.1
- v1.0.19
- v1.0.18
- v1.0.17.2
- v1.0.17.1
- v1.0.17
- v1.0.16
- v1.0.15
- v1.0.13
- v1.0.12
- v1.0.11
- v1.0.10
- v1.0.9.2
- v1.0.9.1
- v1.0.9
- v1.0.8
- v1.0.6.2
- v1.0.6.1
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- v0.9.0.3
- v0.9.0.2
- v0.9.0.1
- v0.9.0
- v0.8.5
- v0.8.3
- v0.8.2
- v0.8.1
- v0.8.0.1
- v0.8.0
- v0.7.1.2
- v0.7.1.1
- v0.7.1.0
- v0.7.0.0
- v0.6.1.4
- v0.6.1.3
- v0.6.1.2
- v0.6.1.1
- v0.6.1.0
- dev-blade_template
This package is auto-updated.
Last update: 2026-01-07 13:51:58 UTC
README
NNTmux
NNTmux is a modern Usenet indexer built on Laravel, designed for high performance and scalability. It automatically scans Usenet, collects headers, and organizes them into searchable releases. The project is actively maintained and features multi-threaded processing, advanced search, and a web-based front-end with API access.
This project is a fork of newznab plus and nZEDb, with significant improvements:
- Multi-threaded processing (header retrieval, release creation, post-processing)
- Advanced search (name, subject, category, post-date)
- Intelligent local caching of metadata (TMDB, TVDB, TVMaze, Trakt, IMDB)
- Tmux engine for thread, database, and performance monitoring
- Image and video sample support
- Modern frontend stack: Vite, Tailwind CSS, Vue 3
- Full-text search via Elasticsearch or ManticoreSearch
- Dockerized development via Laravel Sail
- RESTful API compatible with newznab standard
Table of Contents
- Prerequisites
- Installation
- Configuration
- Database Setup
- Search Engines
- Console Commands
- IRC Pre Channels
- TV & Movie Processing
- API
- Docker & Development
- Troubleshooting
- Contributing
- License
Prerequisites
- System administration experience (Linux recommended)
- PHP 8.3+ with extensions: curl, json, pdo_mysql, openssl, mbstring, xml, zip, gd, intl, pcntl
- MariaDB 10.6+ or MySQL 8+ (PostgreSQL not supported)
- Composer 2.x
- Node.js 18+ and npm for frontend assets
- nginx or Apache web server
- Optional: tmux (for multi-threaded processing)
- Optional: unrar, 7zip, ffmpeg, mediainfo (for post-processing)
Recommended Hardware
| Scale | RAM | CPU | Disk |
|---|---|---|---|
| Small (<1M releases) | 16GB | 4 cores | 100GB SSD |
| Medium (1-10M releases) | 32GB | 8 cores | 250GB SSD |
| Large (10M+ releases) | 64GB+ | 16+ cores | 500GB+ NVMe |
Installation
Quick Start
-
Clone the repository:
git clone https://github.com/NNTmux/newznab-tmux.git cd newznab-tmux -
Install PHP dependencies:
composer install --no-dev --optimize-autoloader
-
Copy and configure environment:
cp .env.example .env php artisan key:generate
-
Configure your
.envfile (see Configuration) -
Run database migrations:
php artisan migrate
-
Install frontend assets:
npm install npm run build
-
Set permissions:
chmod -R 775 storage bootstrap/cache chown -R www-data:www-data storage bootstrap/cache
For detailed installation instructions, see the Ubuntu Install Guide.
Configuration
Essential .env Settings
# Application APP_NAME=NNTmux APP_ENV=production APP_DEBUG=false APP_URL=https://your-domain.com # Database DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=nntmux DB_USERNAME=nntmux DB_PASSWORD=your_secure_password # Usenet Server NNTP_SERVER=news.your-provider.com NNTP_PORT=563 NNTP_SSLENABLED=true NNTP_USERNAME=your_username NNTP_PASSWORD=your_password # API Keys (obtain from respective services) TMDB_API_KEY=your_tmdb_key TVDB_API_KEY=your_tvdb_key TVMAZE_API_KEY= # Optional, no key required for basic usage TRAKT_CLIENT_ID=your_trakt_client_id TRAKT_CLIENT_SECRET=your_trakt_secret OMDB_API_KEY=your_omdb_key FANART_API_KEY=your_fanart_key GIANTBOMB_API_KEY=your_giantbomb_key # Search Engine (choose one) SEARCH_ENGINE=manticore # Options: manticore, elasticsearch MANTICORE_HOST=127.0.0.1 MANTICORE_PORT=9308 # Or for Elasticsearch: # ELASTICSEARCH_HOST=127.0.0.1 # ELASTICSEARCH_PORT=9200 # IRC Pre Scraping (optional) SCRAPE_IRC_SERVER=irc.synirc.net SCRAPE_IRC_PORT=6697 SCRAPE_IRC_TLS=true SCRAPE_IRC_USERNAME=YourUniqueNick
Queue Configuration
NNTmux uses Laravel's queue system for background processing:
QUEUE_CONNECTION=redis REDIS_HOST=127.0.0.1 REDIS_PORT=6379
For high-volume processing, consider using Laravel Horizon.
Database Setup
Initial Setup
# Run migrations php artisan migrate # Seed initial data (categories, groups, etc.) php artisan db:seed
Database Tuning
For large-scale indexing, proper database tuning is critical. Key settings:
# /etc/mysql/mariadb.conf.d/99-nntmux.cnf [mysqld] innodb_buffer_pool_size = 8G # 50-70% of available RAM innodb_log_file_size = 1G innodb_flush_log_at_trx_commit = 2 innodb_flush_method = O_DIRECT query_cache_type = 0 query_cache_size = 0 max_connections = 500 tmp_table_size = 256M max_heap_table_size = 256M
Use mysqltuner.pl for recommendations:
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl perl mysqltuner.pl
Collation Migration
For proper Unicode support (emojis, special characters):
php artisan nntmux:convert-collation utf8mb4_unicode_ci
Search Engines
NNTmux supports two full-text search engines:
ManticoreSearch (Recommended)
# Install ManticoreSearch wget https://repo.manticoresearch.com/manticore-repo.noarch.deb sudo dpkg -i manticore-repo.noarch.deb sudo apt update sudo apt install manticore # Configure in .env SEARCH_ENGINE=manticore MANTICORE_HOST=127.0.0.1 MANTICORE_PORT=9308 # Build indexes php artisan nntmux:index-manticore
Elasticsearch
# Install Elasticsearch wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list sudo apt update && sudo apt install elasticsearch # Configure in .env SEARCH_ENGINE=elasticsearch ELASTICSEARCH_HOST=127.0.0.1 ELASTICSEARCH_PORT=9200 # Build indexes php artisan nntmux:index-elasticsearch
Console Commands
NNTmux provides numerous Artisan commands for management and maintenance.
Release Processing
# Start the tmux processing engine php artisan tmux:start # Stop tmux processing php artisan tmux:stop # Process releases manually php artisan nntmux:process-releases # Update release names php artisan nntmux:update-releases
TV & Movie Processing
# Reprocess unmatched TV releases php artisan nntmux:reprocess-tv # Refresh TV episodes for a specific show php artisan tv:refresh-episodes --video-id=12345 # Refresh all shows with missing seasons php artisan tv:refresh-episodes --missing-seasons # Search by title and refresh php artisan tv:refresh-episodes --title="Show Name" # Delete existing and re-fetch from specific provider php artisan tv:refresh-episodes --video-id=12345 --provider=tmdb --delete-existing # Dry run to preview changes php artisan tv:refresh-episodes --missing-seasons --dry-run
Database Maintenance
# Optimize tables php artisan nntmux:optimize-tables # Clean old releases php artisan nntmux:cleanup --days=365 # Purge Laravel Pulse data (if using Pulse) php artisan pulse:purge # Clear application caches php artisan cache:clear php artisan config:clear php artisan view:clear php artisan route:clear
User Management
# Create admin user php artisan nntmux:create-admin # Reset user password php artisan nntmux:reset-password --email=user@example.com
IRC Pre Channels
NNTmux can scrape IRC pre channels for early release information.
Active IRC Networks
| Network | Server | Ports | SSL |
|---|---|---|---|
| SynIRC | irc.synirc.net | 6667, 6697, 7001 | Yes |
| p2p-net | irc.p2p-net.eu | 6697, 7000 | Yes |
| lillesky | irc.lillesky.org | 6667, 7000 | Yes |
| Abjects | irc.abjects.net | 6667, 6697 | Yes |
Configuration
SCRAPE_IRC_SERVER=irc.synirc.net SCRAPE_IRC_PORT=6697 SCRAPE_IRC_TLS=true SCRAPE_IRC_USERNAME=YourUniqueNickname SCRAPE_IRC_REALNAME=Your Name SCRAPE_IRC_CHANNELS=#PreNNTmux,#nZEDbPRE
PreDB API Alternatives
Instead of or in addition to IRC, you can use PreDB APIs:
- predb.ovh - Public API with RSS feeds:
https://predb.ovh/api/v1/ - predb.net - Comprehensive API:
https://predb.net/api-documentation/ - predb.me - Public PreDB with search
- predb.live - NFO database included
TV & Movie Processing
NNTmux fetches metadata from multiple sources with fallback support.
Provider Priority
- TMDB (The Movie Database) - Primary for movies and TV
- TVDB (TheTVDB) - Fallback for TV shows
- TVMaze - Additional TV metadata
- Trakt - User ratings and additional data
- OMDB/IMDB - Movie ratings and legacy data
Episode Matching
The TV processing pipeline automatically:
- Matches releases to shows by name
- Downloads episode information for matched shows
- Detects and fetches missing seasons when processing new releases
If episodes aren't matching properly:
# Check what video ID a show has php artisan tinker >>> DB::table('videos')->where('title', 'like', '%Show Name%')->get(['id', 'title', 'tmdb']); # Refresh episodes for that show php artisan tv:refresh-episodes --video-id=<ID>
API
NNTmux provides a newznab-compatible API for integration with download clients and media managers (Sonarr, Radarr, etc.).
Endpoints
GET /api?t=caps # Server capabilities
GET /api?t=search&q= # Search releases
GET /api?t=tvsearch # TV search
GET /api?t=movie # Movie search
GET /api?t=music # Music search
GET /api?t=book # Book search
GET /api?t=details&id= # Release details
GET /api?t=getnzb&id= # Download NZB
API Keys
Users obtain API keys from their profile page. Configure per-user rate limits in the admin panel.
For detailed API documentation, see the NNTmux API v2 Wiki.
Docker & Development
Laravel Sail (Docker)
# Start containers ./vendor/bin/sail up -d # Run artisan commands ./vendor/bin/sail artisan migrate # Stop containers ./vendor/bin/sail down
Frontend Development
# Install dependencies npm install # Development with hot reload npm run dev # Production build npm run build
Code Style
# PHP formatting (Laravel Pint) ./vendor/bin/pint # JavaScript/Vue linting npm run lint
Troubleshooting
Common Issues
Releases not being created:
# Check for errors in logs tail -f storage/logs/laravel.log # Verify NNTP connection php artisan nntmux:test-nntp # Check group status php artisan tinker >>> DB::table('usenet_groups')->where('active', 1)->count();
TV/Movie not matching:
# Reprocess specific release php artisan nntmux:reprocess-release --id=12345 # Check API keys php artisan nntmux:test-apis
High disk usage from Laravel Pulse:
# Check Pulse table sizes mysql -e "SELECT table_name, ROUND(data_length/1024/1024, 2) as 'Size (MB)' FROM information_schema.tables WHERE table_schema='nntmux' AND table_name LIKE 'pulse%';" # Purge old data php artisan pulse:purge
Permission issues:
# Fix ownership sudo chown -R www-data:www-data storage bootstrap/cache # Fix permissions sudo chmod -R 775 storage bootstrap/cache
Logs
- Application logs:
storage/logs/laravel.log - Tmux logs:
misc/update/tmux/logs/ - nginx logs:
/var/log/nginx/ - PHP-FPM logs:
/var/log/php-fpm/
Contributing
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
Development Setup
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Make your changes
- Run tests:
php artisan test - Submit a pull request
Support
- Discord: Join our server
- GitHub Issues: Report bugs
- Wiki: Documentation
License
NNTmux is open-source software licensed under the GPL v3. External libraries include their own licenses in their respective folders.