* Handle database recreation errors better
* Handle different db usernames
* Improve shutdown
* Don't run startup problem detection in main thread
* Fix stats calculation with h2 2
* Fix unit tests
* Disable some tests not yet fixed (if ever)
* Use SCRIPT TO to backup database as it verifies integrity
* Only delete backups if a newer successful one exists
* Fix error while analysing log file for OOM errors
* Fix CSRF
* Log Spring stuff on INFO
* Add features for v5 to changelog
* Don't try to remove windows tray icon cause it results in a hang
* Fix notification history pagination
* Fix shutdown behavior, prevent misleading error messages
* Remove javax.annotation and .activation
* Fix baseConfig.yml
* First step to native build
Compile runs, executable can be started, but has errors. More work needed.
* First step to native build
RUns under windows, HtmlUnit error, great progress!
* Instantiate indexers and downloaders directly to make it work with native
BeanFactory.createBean and .autowireBean do not work
* Disable javascript in OpenPortChecker to fix charset error in native
* Test Github Actions
* Test Github Actions
* Test Github Actions
* Test Github Actions
* Adapt wrappers to support native images
* Update wrapper build to use docker containers
clean folder structure
Use v2 binaries for native support
* Add build scripts, remove circleCi
* Native build github actions
* Don't write yaml, use in-memory db in native build mode
* Upload native image artifact
* Test self-hosted runner
* Build on all three OSes
* Build on all three OSes
* Build on all three OSes
* Build macos
* Build windows
* Build windows and macos
* user proper paths for uploading artifacts
* user proper paths for uploading artifacts
* user proper paths for uploading artifacts
* All three native images are built and uploaded
But linux native not runnable under WSL, trying ubuntu 20.04
* Build static binary for linux
* Make wrapper and update manager support both 4.x and 5.x, native and generic
* Try building static image again
* Commit wrapper binaries to LFS
* Move files back to include folders
* Adapt build-and-release.cmd to shell script
* Prepare release via actions, add generic release
* Prepare release via actions, add generic release
* Update other package to 3.0.0
* Delete old docker files
* Support dry run in release plugin and github action
* Always use github token in release if available
* Fix PhantomJS compile error, disable actions on push
* release needs build
* Show file structure on runner
* Build on self-hosted windows runner
* Disable graalvm watchdog so hopefully the windows build completes
* Build on push, update dependencies
* Build on windows
* Determine release type from existance of files instead of json
* Check version of executables before releasing
* Scripts for test docker containers
* Show system tray via wrapper, make main process headless
* Native hints
* Migrate JUnit 4 to 5
* Fix auth error when no internal api key was provided
* Move integration tests
* First step to system tests
* Run system tests on github actions
* Run system tests on github actions
* Delete tests using old mockwebserver, use mockserver in system test
* Delete tests using old mockwebserver, use mockserver in system test
* Disable native image build to get to working systemtest faster
* Specifically download coreLinux
* Upload and download docker images
* Save images in separate step
* Fix docker port mapping syntax, keep docker images for one day only
* Fix docker daemon syntax
* Check out repo before running tests
* Move config validation to separate classes
* Start moving config classes to separate module
* Finish moving config classes to separate module
* Initialize test instance with sensible data
* Push and use docker images using ghcr
* Use custom health check for hydra docker container
* Disable CSRF, use debug level for log file
* Tests for debug infos
* Use ${{ github.workspace }}
* Use temp folder for hydradocker data
* Write simple downloader web tests
* Use /tmp as data folder
* Test download of zipped NZBs
* Build shared module before running tests
* Load joptsimple resource bundle
* Improve error page
* Log spring security on debug level
* Build new native image
* Use new image
* USe new reflect-config.json. Do I have to do this every time?
* Reenable native build
* Add reflection marker for native hints
* Ensure all relevant classes have a reflection marker
* Call TMDB api directly instead of using library
* Use correct URL in mocked newznab results when in pipeline
* Fix session error in IndexerUniquenessScoreSaver
* Clean up code after migration to Java 17
* Backup tests
* Remove spring profile from core dockerfile so that it can hopefully be loaded from env
* GOOD STATE: Build native before doing tests
Image is built, Two tests fail, but most succeed, yay
* Test configuration of external tools
* Run unit tests, upload test reports
* Fix test being OS dependent (oops)
* Fix test being OS dependent (oops)
* Fix another OS dependent test, try other test report action
* Create system test report
* Try controlling native build by using "skipnativebuild" in the commit message
* Controlling native build by using "skipnativebuild" in the commit message works, yay
* Prepare entity TOs
* Merge shared config and mapping modules
* Merge shared entities and mapping modules
* First simple test for history
* Clean install for native image build
* Commit missing files
* More tests for search history
* Disable repo.spring.io because central repos should be preferred
* Test download history
* Remove repo.spring.io repo
* Upload settings.xml for debugging
* Try custom settings.xml to prevent using repo.spring.io
skipnativebuild
* Remove settings.xml stuff, try running *arr dockers directly
skipnativebuild
* Fix sonar host
* Don't skip prepareArtifacts as other jobs depend on it
* Run all containers manually
skipnativebuild
* Set spring profiles in test env again
skipnativebuild
* SEMI_GOOD_STEP USe custom docker network in system test
Communication between containers works, still bytecode error and BackupData#getBackupFile not working
skipnativebuild
* Remove lazy loading in SearchResultEntity, use TransactionTemplate in IndexerUniquenessScoreSaver.java
* Remove lazy loading in IndexerApiAccessEntity.java
* Make entities final to perhaps prevent lazy loading?
* Remove ToStringSerializer for entity IDs
* Support TVMAZE ID in search history
* Remove names from docker run commands
* Try using docker host network
* Try systemtest network again
skipnativebuild
* Print build version and timestamp at startup
* GOOD_STEP Run mockserver first so core can access it
Only two failing tests remain
* Print version and timestamp even if in docker
* Use mapped volume for black hole
* YESSSS GREEN PIPELINE Use a category for *arr which is supported by a configured indexer
* Add stats test, is kinda flakey
* Remove integration tests
* Install java in docker container for db migration
* First step to migration test
* Remove migration module from mvn call
* Generate custom assertions for mapping module
* Add caps check test
* Add media info test
* Add news test
* Add notifications test
* Reenable migration test, perhaps it works now?
* Add missing assertion files
* Try different docker sock, add unmarshaller resource bundle
* Don't trim stacktraces in maven, log unparsable indexer output
* Use hopefully correct migration tmp folder, create it before using
* Use different md to html renderer
* Make caps inherit XML
* Fix news test, create /tmp/data/v1MigrationDataFolder in action
* Try different temp folder
skipnativebuild
* Print version earlier
* Run migration docker directly
* Print version differently
* Wait for healthy containers
* Print version and timestamp from properties
* Wait for healthy containers
* Use latest docker image when skipping nativebuild
skipnativebuild
* Give containers a bit of time
skipnativebuild
* Use docker-compose
skipnativebuild
* Try java from path if executable not found
* Try to get more current artifact
* ALL GREEN YAAAAAAY Build image in first job if configured, then just use latest in system test
* Precheck that wrapper executables are newer than source files
* Run all for core and migration, respectively
* Remove discord bot, publish via maven plugin when releasing
* Use container name in external hydra url
* Move database migration to spring component
* Use SLF4J in system tests
skipnativebuild
* Use 5076 on container
skipnativebuild
* ONE LEFT Wait a bit between file mod date changes
Only blackhole test not working anymore
* Use name of test component (core, v1Migration) in black hole folder
* Log properties and docker mounts
skipnativebuild
* ALL GREEN WITH two test runs Mount blackhole folder for core
skipnativebuild
* Check changes files to decide if native image is built
* Check changes files to decide if mock server is built
* Send build decision messages to notice
* Use changelog.yaml instead of .json
* Fix startup of wrapper without internal api key
* Use new wrapperHashes2.json
* Write messages for discord and wiki
* Ensure database integrity before creating backup
* Show warning to user if automatic backup has failed
* Show better error message when user triggered backup creation failed
* Shoe proper error message when debug infos creation / download failed
* Update wrapper hashes
* Add loadtest, cache OKHTTP clients
* Improve performance of search result parsing by getting rid of regex
* Compress native image binary
* Update release script
* Update release script
* Check for environment variables in release script
* Check for untracked files or uncommitted changes in release script
* git ignore token files
* Read tokens from files
* Color output for release script
* Remove call from release script (only needed on windows)
* Call maven in batch mode
* Build shared module first
* Change compiled modules in release script
* Ask me to run mvn in windows
* Try building on self hosted runner again
* Run on all self-hosted
* Run on all self-hosted
* Run on all self-hosted
* Run on all self-hosted
* Translate build script to powershell
* Make maven quiet
* Escape -d options in maven
* Check exit code differently
* Ignore afile.txt
* Escape -D
* Allow "wet run" without release
* Add missing changelog.yaml
* Prepare for release
* Don't build shared in buildCore.cmd
* Wait for linux version after check of others
* Disable commit for test
* Build core from main folder
* Copy windows build artifacts to include folder
* Make wrapper open browser if main process can't
* Delete release shell script
* Fix build in system-test.yml
* Update changelog
* Update some libraries, ignore snakeyaml exploit in snyk
* Remove system test data
* Update to Spring Boot 3.0.2
* Differentiate versions of spring boot and devtools
* Set githubReleasesUrl directly
|
||
|---|---|---|
| .github | ||
| .idea | ||
| .run | ||
| core | ||
| docker | ||
| misc | ||
| other | ||
| releases | ||
| shared | ||
| tests | ||
| _config.yml | ||
| .editorconfig | ||
| .gitattributes | ||
| .gitignore | ||
| .snyk | ||
| blockedVersions.json | ||
| buildCore.cmd | ||
| changelog.md | ||
| LICENSE | ||
| nativeNotes.md | ||
| news.json | ||
| pom.xml | ||
| readme.md | ||
NZBHydra 2 is a meta search for newznab indexers and torznab trackers. It provides easy access to newznab indexers and many torznab trackers via Jackett. You can search all your indexers and trackers from one place and use it as an indexer source for tools like Sonarr, Radarr, Lidarr or CouchPotato.
Major Features
- Searches Anizb, BinSearch, NZBIndex and any newznab compatible indexers. Merges all results, filters them by a number of configurable restrictions, recognizes duplicates and returns them all in one place
- Add results to NZBGet or SABnzbd
- Support for all relevant media IDs (IMDB, TMDB, TVDB, TVRage, TVMaze) and conversion between them
- Query generation, meaning a query will be generated if only a media ID is provided in the search and the indexer doesn't support the ID or if no results were found
- Compatible with Sonarr, Radarr, NZBGet, SABnzbd, nzb360, CouchPotato, Mylar, LL, Sick Beard, Jackett/Cardigann, Watcher, etc.
- Search and download history and extensive stats. E.g. indexer response times, download shares, NZB age, etc.
- Authentication and multi-user support
- Automatic update of NZB download status by querying configured downloaders
- RSS support with configurable cache times
- Torrent support:
- For GUI searches, allowing you to download torrents to a blackhole folder
- A separate Torznab compatible endpoint for API requests, allowing you to merge multiple trackers
- Extensive configurability
- Save torrents in a black hole folder; Torznab API endpoint
- Migration of database and settings from v1
See some screenshots.
Honest recommendation: If you don't understand what any or most of that means this might not be for you. The program is designed to be very configurable and can be a bit intimidating at first. If you're just starting with usenet and its automation tools you might want to wait a bit until you use this. That being said, although there are a lot of options you'll likely never need most of them. I (the developer) use only half of the stuff that NZBHydra can do.
How to Run
Download the latest release of NZBHydra 2 for your platform. Extract it anywhere (the zip does not include a base directory) and start using the appropriate way:
- On Windows (x64) you can either start
NZBHydra2.exewhich will add a tray icon (give it some time) orNZBHydra2 Console.exewhich will open a console window.- Note: Do not use the folders
C:\Program FilesorC:\Program Files (x86).
- Note: Do not use the folders
- On Linux (x64) start
nzbhydra2.- You may need to
chmod +xit first. - If you get an error about missing libraries, install libfreetype6.
- You may need to
- On any other OS or architecture or as a fallback:
- You need to install Java 17 (not lower, not higher).
- Download the generic asset. This contains python scripts and java libraries. Run either wrapper file (Python 2.7 / 3.x respectively). This should work basically everwhere.
- The Java executable is expected to be in the PATH. If it's not and you can't/won't put it there then you need to provide the full path using the
--javaparamater.
- Docker: You can choose between images by LinuxServer.io, hotio and binhex's or the one by LinuxServer.io.
After a while your browser should open to http://127.0.0.1:5076.
Install as a Service
Please see the wiki.
Stuff you should know
- Without a "proper" indexer that supports media ID based searches (anything unlike Binsearch, NZBINdex, Anizb, etc) automation tools like Sonarr or Radarr will not work properly
- Hydra queries indexers for the latest 100 results for a given search query and aggregates them on the GUI. That means that even if you sort the results by, say, the name then older results not yet loaded may be missing. You will never know if a certain result is available unless you click the "Load more / Load all" buttons. This may require many API hits and take some time. I recommend using queries that are specific enough to return less than 100 results.
Disclaimer
Bugs may/do exist. Don't run it on the machine where the nuclear launch codes are stored.
Development and how you can help
Generally testing and any bug reports are very welcome.
The backend is written in Java and uses Spring Boot with an H2 file database. Maven is used for dependency management and build.
Project structure:
core: The main code for the projectother: contains artifacts not needed during runtime and a proxy-patched version of SocksLibreleases: is self explanatoryshared: is shared code between modulestests: contains integration tests
The frontend uses AngularJS 1.x, Bower for dependency management and gulp for build.
If you plan on doing any frontend work (JS, CSS, HTML): Please contact me first and don't just create a PR for changes on the merged CSS / JS files.
Please send merge requests to the develop branch!
Contact
I prefer "public" communication either via Reddit or Discord.
Otherwise send me an email at theotherp@posteo.net or a PM at https://www.reddit.com/user/TheOtherP
Donate
You're welcome to donate:
- Bitcoin via 1LPCUF9eKEXi58nHbxTbJyfxCJkcCXKzvm
- Regular money via PayPal to theotherp@posteo.net
- Via GitHub sponsors which involves a recurring donation similar to Patreon.
Thanks
To Jetbrains for kindly providing me a license for IntelliJ - I can't imagine developing without it
To ej-technologies for providing me a license for their great java profiler JProfiler
To all testers, bug reporters, donators, all around awesome people; especially judhat2 for beta testing and loads of helpful feedback. Thanks to all the folk on reddit for helping out.
License
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.