From 1049da9730619d942a7cf5b81ac8e3506641f2e7 Mon Sep 17 00:00:00 2001 From: enki Date: Wed, 20 May 2026 16:34:56 -0700 Subject: [PATCH] Update README: fix wrong UI paths, fix publisher config nesting, remove nonexistent CLI commands, add nginx note --- README.md | 125 ++++++++++++++++++++++++++---------------------------- 1 file changed, 61 insertions(+), 64 deletions(-) diff --git a/README.md b/README.md index f7a433b..afe31e8 100644 --- a/README.md +++ b/README.md @@ -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 # 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 +kindexr-cli publisher unblock +kindexr-cli publisher trust --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