NZB → SABnzbd: een Chrome extensie gebouwd met AI
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.nzbin 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:
- De standaard navigatie wordt gestopt (
e.preventDefault()) - Er verschijnt een toast-melding op de pagina: “⏳ NZB wordt verstuurd naar SABnzbd…”
- 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.
Popup (popup.html + popup.js)
De popup is een simpel formulier met drie velden:
| Veld | Uitleg |
|---|---|
| SABnzbd Host | Het adres van je SABnzbd-server (bijv. http://192.168.1.10:8080) |
| API-sleutel | Je SABnzbd API key |
| Categorie | Optioneel: 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
- Open Chrome en ga naar
chrome://extensions/ - Zet “Ontwikkelaarsmodus” aan (rechtsboven)
- Klik op “Uitgepakte extensie laden”
- Selecteer de map
nzb-sabnzbd-extension - Klik op het extensie-icoon in de toolbar, vul je SABnzbd-host en API key in
- “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.