A Windows desktop application for searching Prowlarr indexers with Everything integration for duplicate detection and batch downloads.
Built with PySide6 (Qt for Python).
- Features
- User Guide
- Requirements
- Installation
- Usage
- Configuration
- Everything Integration
- Keyboard Shortcuts
- Menus
- Project Structure
- Architecture
- Development
- Troubleshooting
- Legal Disclaimer
- Multi-indexer search - query all your Prowlarr indexers at once, filter by indexer and category
- Duplicate detection - automatically checks results against Everything to find files you already have on disk
- Batch downloads - download individual results, selected rows, or everything visible with one click
- Bookmarks - save frequently used search queries for quick access
- Quality parsing - displays resolution, source, codec, and HDR info extracted from release titles
- Keyboard-driven - full keyboard navigation with single-key shortcuts for common actions
- Custom commands - bind F2/F3/F4 to your own scripts with
{title}and{video}placeholders - Paginated results - navigate through large result sets page by page or load all pages at once
Start with the user guide for first-run setup, Prowlarr connection details, Everything integration, daily search workflows, and troubleshooting.
- Windows (10 or later)
- Python 3.13+
- Prowlarr instance with API access
- Everything (optional) - for duplicate detection via SDK or HTTP server
python scripts\windows\setup_env.pyCreates the .venv by running uv sync --locked (falls back to uv sync if no lockfile).
Manual alternative for development:
uv sync --group devOn first launch, a setup wizard prompts for your Prowlarr host and API credentials (API key in Prowlarr under Settings > General).
pyw scripts\windows\run_app_gui.pywLaunches the GUI without a console window. Auto-bootstraps the .venv via setup_env.py if not yet created.
python scripts\windows\run_app.pyRuns via hatch run python -m prowlarr_ui. Requires hatch in PATH.
python -m prowlarr_ui
:: or, after installation:
prowlarr-ui- Enter a search query and press Enter
- Select indexers and categories from the tree views on the left
- Results appear in the center table, color-grouped by title
- Press Space to download a result and advance to the next row
- Gray rows = already on disk (detected by Everything)
Runtime config and UI preferences share one QSettings INI store:
- Backend:
QSettings(IniFormat, UserScope, "ThreepSoftwz", "prowlarr_ui") - Default INI path:
%APPDATA%\ThreepSoftwz\prowlarr_ui.ini - Default non-INI data path (logs, download history, SDK cache):
%LOCALAPPDATA%\ThreepSoftwz\prowlarr_ui\ - OV01 env overrides:
CONFIG_DIRoverrides the QSettings INI rootDATA_DIRoverrides the non-INI data root
- Secrets are still stored in the same config store (plaintext) and can be overridden by env vars:
PROWLARR_UI_API_KEYPROWLARR_UI_HTTP_BASIC_AUTH_PASSWORD
| Setting | Default | Description |
|---|---|---|
everything_integration_method |
"sdk" |
"sdk", "http", or "none" |
title_match_chars |
42 |
Characters used for title grouping and color coding |
everything_search_chars |
42 |
Characters used for Everything prefix search |
web_search_url |
"https://...google..." |
URL template with {query} placeholder |
api_timeout |
300 |
API request timeout in seconds |
api_retries |
2 |
Retry attempts on connection errors / 5xx |
prowlarr_page_size |
100 |
Results per page from Prowlarr API |
everything_recheck_delay |
6000 |
Delay (ms) before rechecking Everything after download |
everything_max_results |
5 |
Max Everything matches shown in tooltip |
everything_batch_size |
10 |
Results per UI update batch during Everything check |
Bind scripts to F2, F3, F4 in runtime settings:
custom_command_F2 = 'my_script.bat "{title}" "{video}"'
custom_command_F3 = 'explorer /select,"{video}"'
custom_command_F4 = 'notepad "{title}"'Placeholders: {title} = release title, {video} = video file path from Everything (empty if not found).
Persistent keys are namespaced:
config/...for service/runtime configprefs/...for non-visual user preferences (history, bookmarks, selected filters)ui/...for view state (splitter, hidden columns, column widths, toggles)
Everything is a Windows file search engine. This app uses it to detect which releases you already have on disk.
SDK mode (default): The app auto-downloads Everything64.dll from voidtools on first run. Requires Everything to be running.
HTTP mode: Uses Everything's built-in HTTP server. Enable it in Everything: Tools > Options > HTTP Server.
None: Disable Everything integration entirely if you don't need duplicate detection.
These work when the results table is focused:
| Key | Action |
|---|---|
| Space | Download current row, advance to next |
| S | Launch Everything search for the title |
| C | Copy release title to clipboard |
| G | Open web search for the title |
| P | Play video file found by Everything |
| Tab | Jump to next title group |
| Shift+Tab | Jump to previous title group |
| Ctrl+A | Select all visible rows |
| Ctrl+F | Find in table |
| F1 | Show help |
| F2 / F3 / F4 | Run custom commands (configurable) |
File - Exit the application (Ctrl+Q, Alt+X).
View:
- Show Log - Open the log window to view application messages
- Download History - View the log of previously downloaded items
- Select Best per Group - Highlight the best result in each title group (by seeders, fallback to size)
- Reset Sorting - Restore default sort order (Title ASC, Indexer DESC, Age ASC)
- Fit Columns - Resize visible columns to fit their contents
- Reset View - Reset column widths, splitter position, and sort order to defaults
Bookmarks - Save and recall frequently used search queries:
- Add Bookmark - Save the current search query
- Delete Bookmark - Remove a saved bookmark
- Sort Bookmarks - Sort all bookmarks alphabetically
- Saved bookmarks appear as individual menu items for one-click re-search
Tools - Edit .ini File (opens the QSettings INI in your default editor).
Help - Show the in-app help dialog (F1).
prowlarr-ui/
|-- pyproject.toml
|-- uv.lock
|-- src/
| `-- prowlarr_ui/
| |-- __main__.py # Module entrypoint for python -m prowlarr_ui
| |-- app.py # Main entry point and UI (MainWindow)
| |-- api/
| | |-- prowlarr_client.py # Prowlarr REST API client
| | `-- everything_search.py # Everything SDK/HTTP integration
| |-- workers/
| | |-- search_worker.py # Background search thread
| | |-- everything_worker.py # Background Everything check thread
| | `-- download_worker.py # Download queue processor
| |-- ui/
| | |-- widgets.py # Custom table widget for numeric sorting
| | |-- log_window.py # Detachable log viewer window
| | `-- help_text.py # Help dialog content
| `-- utils/
| `-- config.py # Typed QSettings config load/save
|-- scripts/
| `-- windows/
| |-- setup_env.py # Create/verify .venv via uv sync
| |-- run_app.py # Launch app via hatch run
| |-- run_app_gui.pyw # Launch GUI without console window
| `-- run_tests.py # Run tests via hatch run test
|-- docs/
| |-- README.md
| |-- user-guide.md
| `-- architecture.md # Threading and ownership model
|-- tests/
| |-- unit/ # Unit/regression tests
| |-- ui/ # pytest-qt UI tests
| `-- integration/ # Live/manual integration checks
| `-- test_integrations.py # Prowlarr + Everything connectivity script
`-- CONTRIBUTING.md # Contribution and tooling workflow
src/layout withprowlarr_uipackage.MainWindow(app.py) is the composition root.- Background operations use dedicated worker threads (
QThread-based):search_worker— Prowlarr API search.everything_worker— Everything SDK/HTTP duplicate checks.download_worker— Download queue processor.
api/contains external service integrations (Prowlarr REST, Everything SDK/HTTP).utils/contains app-specific config management.- Shared runtime/logging/quality/formatter helpers are provided by
threep_commons.
- Build backend: Hatchling (
pyproject.toml) - Canonical package/import path:
prowlarr_ui - Dependency source of truth:
pyproject.toml - Resolver/installer backend: uv
- Lockfile:
uv.lock - Run commands:
python -m prowlarr_uiprowlarr-ui(installed console script)
| Package | Purpose |
|---|---|
| PySide6 >= 6.5.0 | Qt GUI framework |
| requests >= 2.31.0 | HTTP client for Prowlarr API |
| colorama >= 0.4.6 | Colored test output |
| Script | Description |
|---|---|
python scripts\windows\setup_env.py |
Create/verify .venv via uv sync --locked |
pyw scripts\windows\run_app_gui.pyw |
Launch GUI without console window (auto-bootstraps venv) |
python scripts\windows\run_app.py |
Launch app via hatch run (requires hatch in PATH) |
python scripts\windows\run_tests.py |
Run test suite via hatch run test |
Run the integration tests to verify your Prowlarr and Everything connections:
python tests\integration\test_integrations.pyRun the automated headless UI tests (mocked, no live Prowlarr/Everything required):
hatch run testRun CI-equivalent quality gates locally:
hatch run lint:check
hatch run lint:fmt
hatch run lint:types
hatch run lint:deps
hatch run lint:deadcode
hatch run lint:complexity
hatch run lint:policy
hatch run test-cov
hatch run package-standaloneOptional local autofix pass:
hatch run lint:fixuv lock
uv lock --check- Verify the URL includes
http://orhttps:// - Verify the API key is valid (Prowlarr > Settings > General > API Key)
- Confirm Prowlarr is reachable from this machine
- Ensure Everything is running (SDK mode requires the Everything process)
- For HTTP mode, enable the HTTP server in Everything: Tools > Options > HTTP Server
- Check
everything_integration_methodin settings ("sdk","http", or"none")
- On first run, the setup wizard should prompt for credentials
- Use Tools > Edit .ini File to manually edit the config
THIS SOFTWARE IS PROVIDED "AS IS" AND "AS AVAILABLE," WITHOUT WARRANTIES OF ANY KIND, WHETHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, ACCURACY, OR QUIET ENJOYMENT. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE AUTHORS, CONTRIBUTORS, MAINTAINERS, DISTRIBUTORS, AND AFFILIATED PARTIES SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE DAMAGES, OR FOR ANY LOSS OF DATA, PROFITS, GOODWILL, BUSINESS OPPORTUNITY, OR SERVICE INTERRUPTION, ARISING OUT OF OR RELATING TO THE USE OF, OR INABILITY TO USE, THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THIS SOFTWARE HAS BEEN DEVELOPED, IN WHOLE OR IN PART, BY "INTELLIGENT TOOLS"; ACCORDINGLY, OUTPUTS MAY CONTAIN ERRORS OR OMISSIONS, AND YOU ASSUME FULL RESPONSIBILITY FOR INDEPENDENT VALIDATION, TESTING, LEGAL COMPLIANCE, AND SAFE OPERATION PRIOR TO ANY RELIANCE OR DEPLOYMENT.