Update README: fix wrong UI paths, fix publisher config nesting, remove nonexistent CLI commands, add nginx note
This commit is contained in:
@@ -2,17 +2,17 @@
|
||||
|
||||
A Nostr-native Torznab indexer. Subscribes to NIP-35 torrent events on the Nostr relay network and serves them through the Torznab API that Sonarr, Radarr, Lidarr, Readarr, and Prowlarr already speak.
|
||||
|
||||
**Same slot as Jackett or Prowlarr** — middleware between Nostr and the *arr automation stack. Not a frontend, not a relay, not a downloader.
|
||||
Fills the same slot as Jackett or Prowlarr — it sits between Nostr and your *arr apps. Not a frontend, not a relay, not a downloader.
|
||||
|
||||
## What it does
|
||||
|
||||
- Connects to Nostr relays and indexes kind 2003 (NIP-35) torrent events into a local SQLite database
|
||||
- Serves indexed content as a Torznab API endpoint for *arr apps
|
||||
- Enriches metadata via TMDB (movies and TV shows get proper IDs for *arr matching)
|
||||
- Filters publishers using Web of Trust (WoT) — trust scores derived from your Nostr follow graph, with manual vouch/block/mute controls
|
||||
- Publishes torrents back to Nostr from a connected **qBittorrent** or **Deluge** instance
|
||||
- Fetches publisher profiles (kind 0) so you see names and avatars instead of raw pubkeys
|
||||
- Web UI at `/ui` — dashboard, indexed content browser, publisher management, publish queue, settings
|
||||
- Connects to Nostr relays and indexes torrent posts into a local SQLite database
|
||||
- Serves that content through the Torznab API for Sonarr, Radarr, etc.
|
||||
- Enriches metadata via TMDB so movies and TV shows match properly in *arr apps
|
||||
- Scores publishers based on who you follow on Nostr, with manual block controls
|
||||
- Watches qBittorrent or Deluge for finished downloads and posts them to Nostr automatically
|
||||
- Fetches publisher profiles so you see names and avatars instead of raw pubkeys
|
||||
- Web UI at `/ui` — dashboard, content browser, publisher management, publish queue, settings
|
||||
|
||||
## Quick start
|
||||
|
||||
@@ -51,81 +51,82 @@ sudo journalctl -u kindexr -f
|
||||
|
||||
```sh
|
||||
curl http://localhost:9117/health
|
||||
# {"status":"ok","version":"...","db_ok":true,"relays_configured":10,"relays_connected":10,"uptime_seconds":0}
|
||||
# {"status":"ok","version":"0.1.0","db_ok":true,"relays_configured":7,"relays_connected":7,"uptime_seconds":12}
|
||||
```
|
||||
|
||||
### Add to Sonarr/Radarr
|
||||
### Add to Sonarr / Radarr / Prowlarr
|
||||
|
||||
Add kindexr as a Torznab indexer:
|
||||
|
||||
- URL: `http://127.0.0.1:9117` (or your public URL behind nginx)
|
||||
- API key: generate at `/ui/settings` or with `kindexr-cli apikey create --label sonarr`
|
||||
- URL: `http://127.0.0.1:9117` (or your public URL if behind nginx)
|
||||
- API key: generate one at `/ui/settings` or run `kindexr-cli apikey create --label sonarr`
|
||||
|
||||
## Publishing to Nostr
|
||||
|
||||
kindexr can publish torrents back to the Nostr network as kind 2003 events. Two torrent clients are supported:
|
||||
|
||||
### Deluge
|
||||
|
||||
Enable the Deluge poller in config or via the Settings UI. kindexr connects to the Deluge Web UI JSON-RPC API, polls for completed torrents, and publishes them. Set a label filter (e.g. `publish-nostr`) to only publish specific torrents, or leave labels empty to publish everything completed.
|
||||
|
||||
```yaml
|
||||
publisher:
|
||||
enabled: true
|
||||
nsec: "nsec1..."
|
||||
deluge:
|
||||
enabled: true
|
||||
url: "http://127.0.0.1:8112"
|
||||
password: "your-deluge-web-password"
|
||||
poll_interval_secs: 60
|
||||
labels: ["publish-nostr"] # empty = all completed
|
||||
```
|
||||
kindexr can watch a torrent client for finished downloads and post them to Nostr automatically.
|
||||
|
||||
### qBittorrent
|
||||
|
||||
```yaml
|
||||
publisher:
|
||||
enabled: true
|
||||
nsec: "nsec1..."
|
||||
identity:
|
||||
nsec: "nsec1..."
|
||||
qbittorrent:
|
||||
url: "http://127.0.0.1:8080"
|
||||
username: "admin"
|
||||
password: "adminadmin"
|
||||
password: "yourpassword"
|
||||
poll_interval_secs: 60
|
||||
categories: ["publish-nostr"]
|
||||
categories: ["publish-nostr"] # empty = publish everything that finishes
|
||||
```
|
||||
|
||||
### Deluge
|
||||
|
||||
Enable the Web UI plugin in Deluge preferences and log in at least once in a browser to set a password. Then:
|
||||
|
||||
```yaml
|
||||
publisher:
|
||||
enabled: true
|
||||
identity:
|
||||
nsec: "nsec1..."
|
||||
deluge:
|
||||
enabled: true
|
||||
url: "http://127.0.0.1:8112"
|
||||
password: "yourpassword"
|
||||
poll_interval_secs: 60
|
||||
labels: ["publish-nostr"] # empty = publish everything that finishes
|
||||
```
|
||||
|
||||
### Manual publish
|
||||
|
||||
Drop .torrent files into the publish queue via CLI:
|
||||
|
||||
```sh
|
||||
kindexr-cli publish --from /path/to/torrents/
|
||||
kindexr-cli publish --from /path/to/file.torrent
|
||||
kindexr-cli publish --from /path/to/directory/ # scans for all .torrent files
|
||||
```
|
||||
|
||||
## CLI
|
||||
|
||||
```sh
|
||||
# API key management
|
||||
# API keys
|
||||
kindexr-cli apikey create --label sonarr
|
||||
kindexr-cli apikey list
|
||||
|
||||
# Publisher identity
|
||||
kindexr-cli identity init # generate a fresh keypair
|
||||
kindexr-cli identity init --nsec <nsec1...> # import existing key
|
||||
kindexr-cli identity info
|
||||
# Publisher identity (needed for publishing to Nostr)
|
||||
kindexr-cli identity init # generate a fresh keypair
|
||||
kindexr-cli identity init --nsec nsec1... # import an existing key
|
||||
kindexr-cli identity info # show the current key
|
||||
|
||||
# Enqueue torrent files for publishing
|
||||
kindexr-cli publish --from /path/to/torrents/
|
||||
# Publishers
|
||||
kindexr-cli publisher list
|
||||
kindexr-cli publisher block <pubkey>
|
||||
kindexr-cli publisher unblock <pubkey>
|
||||
kindexr-cli publisher trust <pubkey> --score 0.8
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
See `deploy/kindexr.example.yaml` for a fully commented configuration reference.
|
||||
See `deploy/kindexr.example.yaml` for the full reference.
|
||||
|
||||
Config is loaded in order: **defaults → YAML file → environment variables** (`KINDEXR_` prefix) → **Settings UI** (stored in SQLite, applied at startup).
|
||||
|
||||
Example env override:
|
||||
Config loads in order: **defaults → YAML file → environment variables → Settings UI**. Environment variables use the `KINDEXR_` prefix with `_` as the separator:
|
||||
|
||||
```sh
|
||||
KINDEXR_LOGGING_LEVEL=debug kindexr --config /etc/kindexr/config.yaml
|
||||
@@ -135,29 +136,25 @@ KINDEXR_LOGGING_LEVEL=debug kindexr --config /etc/kindexr/config.yaml
|
||||
|
||||
Available at `http://localhost:9117/ui`:
|
||||
|
||||
| Page | Path | What it shows |
|
||||
| Page | Path | Description |
|
||||
|---|---|---|
|
||||
| Dashboard | `/ui` | Relay status, ingest stats, publish queue |
|
||||
| Content | `/ui/content` | Browsable index of indexed torrents |
|
||||
| Publishers | `/ui/publishers` | Publisher list with WoT trust levels |
|
||||
| Queue | `/ui/queue` | Publish queue and history |
|
||||
| Settings | `/ui/settings` | All config options, API key management |
|
||||
| Dashboard | `/ui` | Relay connection status, stats, recently indexed |
|
||||
| Content | `/ui/indexed` | Browse and search all indexed torrents |
|
||||
| Publishers | `/ui/publishers` | Publisher list with trust scores, block controls |
|
||||
| Published | `/ui/published` | Posts you've published and the pending queue |
|
||||
| Settings | `/ui/settings` | All config, API key management |
|
||||
|
||||
## Nginx
|
||||
|
||||
For public access put kindexr behind nginx. See `deploy/nginx.conf.example` for a ready-to-use config with TLS.
|
||||
|
||||
## Development
|
||||
|
||||
```sh
|
||||
just test # cargo test
|
||||
just check # cargo clippy + fmt check
|
||||
just build # cargo build --release
|
||||
```
|
||||
|
||||
For a local dev run without installing:
|
||||
|
||||
```sh
|
||||
cp deploy/kindexr.example.yaml kindexr.dev.yaml
|
||||
# edit kindexr.dev.yaml
|
||||
./target/release/kindexr --config kindexr.dev.yaml
|
||||
# UI at http://localhost:9117/ui
|
||||
just test # cargo test
|
||||
just check # clippy + fmt check
|
||||
just dev # run with kindexr.dev.yaml and RUST_LOG=info
|
||||
```
|
||||
|
||||
## Architecture
|
||||
|
||||
Reference in New Issue
Block a user