NZB → SABnzbd: een Chrome extensie gebouwd met AI

· 4 min lezen

Sinds kort draait er een SABnzbd instance in mijn homelab. Een prima tool om NZB-bestanden te verwerken en te downloaden via Usenet. Maar er zat een kneep: elke keer als ik op een website een NZB-link zag, moest ik die downloaden, het bestand opslaan, naar SABnzbd navigeren en het uploaden. Niet wereldschokkend veel werk, maar wel vervelend als je het meerdere keren per dag doet.

Dus bedacht ik: een Chrome extensie die dat overneemt. Klik op een NZB-link → automatisch naar SABnzbd. Het enige wat ik hoefde te doen, was het aan Claude Code uitleggen — en de extensie was in één prompt geschreven.

Het idee

De meeste NZB-sites gebruiken herkenbare URL-patronen:

  • ?page=getnzb
  • ?action=display
  • .nzb in het pad
  • /getnzb/ in het pad

Het plan was simpel: een content script dat alle klikken op links onderschept, checkt of de URL op een NZB-link lijkt, en hem dan via de SABnzbd API naar de downloader stuurt.

De prompt aan Claude Code:

“Kan ik een Chrome extensie maken dat als ik op een .nzb link klik met bijvoorbeeld als url https://clubnzb.com/?page=getnzb&action=display&messageid=... dat de url dan op mijn sabnzbd api wordt gepost”

Het antwoord was: bouwen maar. Binnen een minuut had ik de volledige extensie — manifest, content script, background worker, en een nette popup voor de instellingen.

Hoe de extensie werkt

Content script (content.js)

Zodra je een pagina bezoekt, draait er een content script mee die alle klikken onderschept:

const NZB_PATTERNS = [
  /[?&]action=display/i,
  /[?&]page=getnzb/i,
  /\.nzb(\?|$)/i,
  /\/getnzb\//i,
  /\/download.*nzb/i,
  /nzb.*download/i
];

Zodra er een klik op een NZB-link wordt gedetecteerd:

  1. De standaard navigatie wordt gestopt (e.preventDefault())
  2. Er verschijnt een toast-melding op de pagina: “⏳ NZB wordt verstuurd naar SABnzbd…”
  3. De URL wordt naar de background worker gestuurd

Background worker (background.js)

De service worker pakt de URL op en bouwt een SABnzbd API call:

const params = new URLSearchParams({
  output: "json",
  apikey: sabApiKey,
  mode: "addurl",
  name: nzbUrl,
  cat: category
});

const apiUrl = `${host}/api?${params.toString()}`;
const response = await fetch(apiUrl);

Geen tussenstappen, geen bestanden downloaden, geen uploads. De NZB-url wordt direct naar de API gestuurd en in de wachtrij gezet.

De popup is een simpel formulier met drie velden:

VeldUitleg
SABnzbd HostHet adres van je SABnzbd-server (bijv. http://192.168.1.10:8080)
API-sleutelJe SABnzbd API key
CategorieOptioneel: een categorie voor downloads

Er zit ook een “Test verbinding” knop die checkt of de API bereikbaar is en de juiste versie teruggeeft.

SABnzbd configureren met een API key

Voordat de extensie kan werken, heeft SABnzbd een API key nodig. Die is makkelijk te genereren.

Op de server, via de terminal:

# Genereer een nieuwe API key en pas de config aan
NEW_API_KEY=$(python3 -c "import hashlib,os; print(hashlib.md5(os.urandom(32)).hexdigest())")
sed -i "s/api_key = .*/api_key = $NEW_API_KEY/" /config/sabnzbd.ini

# Herstart SABnzbd
docker restart sabnzbd

Deze stap is eenmalig. Zodra de nieuwe key werkt, kun je die in de extensie invullen bij API-sleutel. De “Test verbinding” knop vertelt je of het werkt.

Installatie

  1. Open Chrome en ga naar chrome://extensions/
  2. Zet “Ontwikkelaarsmodus” aan (rechtsboven)
  3. Klik op “Uitgepakte extensie laden”
  4. Selecteer de map nzb-sabnzbd-extension
  5. Klik op het extensie-icoon in de toolbar, vul je SABnzbd-host en API key in
  6. “Test verbinding” en daarna “Opslaan”

In de praktijk

Het werkt precies zoals gehoopt. Ik ben op een NZB-site, zie een download die ik wil hebben, klik op de link — en hoppa, binnen een seconde verschijnt de melding “✅ Toegevoegd aan SABnzbd!”. Geen bestandjes wegslepen, geen omwegen.

De grootste winst zit hem in de drempelverlaging. Doordat het zo makkelijk is, download ik vaker. En doordat het geautomatiseerd is, vergeet ik nooit meer een NZB toe te voegen.

Zelf gebruiken?

De extensie is open source en staat op mijn Forgejo. Clone hem, laad hem in Chrome, en je bent klaar:

git clone https://git.eddydevink.nl/eddy/nzb-sabnzbd-extension.git

Of download de bronbestanden en volg de installatie-instructies hierboven. Het enige wat je nodig hebt is een SABnzbd instance met een API key — en die heb je waarschijnlijk al als je dit leest.