All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 1m10s
- Nieuw core/categories.py: zeventien categorieen, elk met naam (nl/en), kleur en pictogram. Kleuren zijn middentonen die in licht en donker leesbaar zijn; de interface gebruikt ze als tekstkleur op een doorzichtige variant. - Alle 96 apps ingedeeld via metadata.categories. Een app mag in meerdere categorieen zitten; 39 apps doen dat (Frigate onder domotica en media, Immich onder fotos en opslag, Kavita onder media en documenten). - Apps uit externe repos geven geen categorieen op; die worden afgeleid uit tags en omschrijving, zodat ook zij een kleur en een plek in het filter krijgen. - App store: gekleurde categoriebalk met aantallen, klikbare badges per app, werkt naast het bestaande zoekveld en de tagfilters. - Stackslijst: dezelfde balk met alleen de categorieen die je draait, gekleurde rand per kaart en klikbare badges. - Nieuw /api/categories geeft de definities met kleur, zodat interface en backend dezelfde kleur voor dezelfde categorie gebruiken. /api/stacks geeft de categorieen mee; een stack van voor deze versie valt terug op "overig" in plaats van kleurloos te blijven. - Tests: elke app heeft geldige categorieen, kleuren zijn uniek, en er staat geen categorie in het filter zonder apps. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C7oLCRYzY5ixJ5Sv8Y8EFb
429 lines
11 KiB
JSON
429 lines
11 KiB
JSON
{
|
|
"kind": "compose",
|
|
"metadata": {
|
|
"name": "ARR-stack",
|
|
"description": "Media-automatisering met een schakelaar per onderdeel: Sonarr, Radarr, Lidarr, Readarr, Whisparr, Prowlarr, Jackett, Bazarr, FlareSolverr, qBittorrent, SABnzbd, NZBGet, Gluetun (VPN), Jellyseerr, Recyclarr, Unpackerr, Tdarr, Autobrr, Maintainerr en Huntarr.",
|
|
"tags": [
|
|
"media",
|
|
"automatisering",
|
|
"films",
|
|
"series",
|
|
"downloaden"
|
|
],
|
|
"icon": {
|
|
"provider": "selfhst",
|
|
"id": "sonarr"
|
|
},
|
|
"version": {
|
|
"name": "latest"
|
|
},
|
|
"categories": [
|
|
"media",
|
|
"downloaden"
|
|
]
|
|
},
|
|
"variables": [
|
|
{
|
|
"title": "Algemeen",
|
|
"items": [
|
|
{
|
|
"name": "service_name",
|
|
"type": "str",
|
|
"title": "Naam van de stack",
|
|
"default": "arr",
|
|
"required": true,
|
|
"description": "Wordt het voorvoegsel van elke container, bv. arr-sonarr"
|
|
},
|
|
{
|
|
"name": "data_dir",
|
|
"type": "str",
|
|
"title": "Configuratiemap",
|
|
"default": "/opt/serverup/appdata",
|
|
"required": true
|
|
},
|
|
{
|
|
"name": "media_dir",
|
|
"type": "str",
|
|
"title": "Mediamap",
|
|
"default": "/mnt/media",
|
|
"required": true,
|
|
"description": "Hier komen films/, series/, muziek/ en boeken/ onder te staan"
|
|
},
|
|
{
|
|
"name": "downloads_dir",
|
|
"type": "str",
|
|
"title": "Downloadmap",
|
|
"default": "/mnt/downloads",
|
|
"required": true,
|
|
"description": "Zet deze op hetzelfde bestandssysteem als de mediamap, anders kopieert elke download in plaats van te verplaatsen",
|
|
"help": "Zet deze map op hetzelfde bestandssysteem als je mediamap. Staan ze op verschillende schijven of volumes, dan kopieert elke voltooide download in plaats van te verplaatsen: traag, en je hebt alles tijdelijk dubbel."
|
|
},
|
|
{
|
|
"name": "timezone",
|
|
"type": "str",
|
|
"title": "Tijdzone",
|
|
"default": "Europe/Amsterdam",
|
|
"required": true
|
|
},
|
|
{
|
|
"name": "puid",
|
|
"type": "int",
|
|
"title": "Gebruikers-ID (PUID)",
|
|
"default": 1000,
|
|
"required": true,
|
|
"description": "`id -u` op je host; bepaalt de eigenaar van bestanden",
|
|
"help": "Het gebruikersnummer waaronder de containers draaien. Klopt dit niet met de eigenaar van je mediamap, dan kunnen de apps er niet in schrijven. Vind het met `id -u` op je server."
|
|
},
|
|
{
|
|
"name": "pgid",
|
|
"type": "int",
|
|
"title": "Groeps-ID (PGID)",
|
|
"default": 1000,
|
|
"required": true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"title": "Sonarr — series",
|
|
"items": [
|
|
{
|
|
"name": "port_sonarr",
|
|
"type": "int",
|
|
"title": "Poort",
|
|
"default": 8989,
|
|
"required": true
|
|
}
|
|
],
|
|
"toggle": "enable_sonarr",
|
|
"toggle_default": true,
|
|
"description": "Zoekt, downloadt en hernoemt series"
|
|
},
|
|
{
|
|
"title": "Radarr — films",
|
|
"items": [
|
|
{
|
|
"name": "port_radarr",
|
|
"type": "int",
|
|
"title": "Poort",
|
|
"default": 7878,
|
|
"required": true
|
|
}
|
|
],
|
|
"toggle": "enable_radarr",
|
|
"toggle_default": true,
|
|
"description": "Zoekt, downloadt en hernoemt films"
|
|
},
|
|
{
|
|
"title": "Lidarr — muziek",
|
|
"items": [
|
|
{
|
|
"name": "port_lidarr",
|
|
"type": "int",
|
|
"title": "Poort",
|
|
"default": 8686,
|
|
"required": true
|
|
}
|
|
],
|
|
"toggle": "enable_lidarr",
|
|
"toggle_default": false
|
|
},
|
|
{
|
|
"title": "Readarr — boeken",
|
|
"items": [
|
|
{
|
|
"name": "port_readarr",
|
|
"type": "int",
|
|
"title": "Poort",
|
|
"default": 8787,
|
|
"required": true
|
|
}
|
|
],
|
|
"toggle": "enable_readarr",
|
|
"toggle_default": false,
|
|
"description": "Let op: de ontwikkeling van Readarr is stilgelegd; het draait nog wel"
|
|
},
|
|
{
|
|
"title": "Whisparr — volwassenen",
|
|
"items": [
|
|
{
|
|
"name": "port_whisparr",
|
|
"type": "int",
|
|
"title": "Poort",
|
|
"default": 6969,
|
|
"required": true
|
|
}
|
|
],
|
|
"toggle": "enable_whisparr",
|
|
"toggle_default": false
|
|
},
|
|
{
|
|
"title": "Prowlarr — indexerbeheer",
|
|
"items": [
|
|
{
|
|
"name": "port_prowlarr",
|
|
"type": "int",
|
|
"title": "Poort",
|
|
"default": 9696,
|
|
"required": true
|
|
}
|
|
],
|
|
"toggle": "enable_prowlarr",
|
|
"toggle_default": true,
|
|
"description": "Beheert je indexers centraal en duwt ze naar de andere *arr-apps"
|
|
},
|
|
{
|
|
"title": "Jackett — indexerproxy",
|
|
"items": [
|
|
{
|
|
"name": "port_jackett",
|
|
"type": "int",
|
|
"title": "Poort",
|
|
"default": 9117,
|
|
"required": true
|
|
}
|
|
],
|
|
"toggle": "enable_jackett",
|
|
"toggle_default": false,
|
|
"description": "Ouder alternatief voor Prowlarr; meestal heb je er maar één nodig"
|
|
},
|
|
{
|
|
"title": "FlareSolverr — Cloudflare omzeilen",
|
|
"items": [
|
|
{
|
|
"name": "port_flaresolverr",
|
|
"type": "int",
|
|
"title": "Poort",
|
|
"default": 8191,
|
|
"required": true
|
|
}
|
|
],
|
|
"toggle": "enable_flaresolverr",
|
|
"toggle_default": false,
|
|
"description": "Nodig voor indexers die achter een Cloudflare-controle zitten"
|
|
},
|
|
{
|
|
"title": "Bazarr — ondertitels",
|
|
"items": [
|
|
{
|
|
"name": "port_bazarr",
|
|
"type": "int",
|
|
"title": "Poort",
|
|
"default": 6767,
|
|
"required": true
|
|
}
|
|
],
|
|
"toggle": "enable_bazarr",
|
|
"toggle_default": true
|
|
},
|
|
{
|
|
"title": "qBittorrent — torrents",
|
|
"items": [
|
|
{
|
|
"name": "port_qbittorrent",
|
|
"type": "int",
|
|
"title": "Webinterface",
|
|
"default": 8097,
|
|
"required": true
|
|
},
|
|
{
|
|
"name": "port_qbittorrent_tcp",
|
|
"type": "int",
|
|
"title": "Inkomende poort",
|
|
"default": 6881,
|
|
"required": true
|
|
}
|
|
],
|
|
"toggle": "enable_qbittorrent",
|
|
"toggle_default": true,
|
|
"description": "Torrentclient met webinterface"
|
|
},
|
|
{
|
|
"title": "SABnzbd — usenet",
|
|
"items": [
|
|
{
|
|
"name": "port_sabnzbd",
|
|
"type": "int",
|
|
"title": "Poort",
|
|
"default": 8098,
|
|
"required": true
|
|
}
|
|
],
|
|
"toggle": "enable_sabnzbd",
|
|
"toggle_default": false
|
|
},
|
|
{
|
|
"title": "NZBGet — usenet (lichter)",
|
|
"items": [
|
|
{
|
|
"name": "port_nzbget",
|
|
"type": "int",
|
|
"title": "Poort",
|
|
"default": 6789,
|
|
"required": true
|
|
}
|
|
],
|
|
"toggle": "enable_nzbget",
|
|
"toggle_default": false,
|
|
"description": "Zuiniger alternatief voor SABnzbd"
|
|
},
|
|
{
|
|
"title": "Gluetun — VPN voor de downloadclient",
|
|
"items": [
|
|
{
|
|
"name": "vpn_provider",
|
|
"type": "str",
|
|
"title": "VPN-aanbieder",
|
|
"default": "mullvad",
|
|
"required": true,
|
|
"description": "Bijvoorbeeld mullvad, nordvpn, protonvpn of surfshark"
|
|
},
|
|
{
|
|
"name": "vpn_type",
|
|
"type": "enum",
|
|
"title": "Protocol",
|
|
"default": "wireguard",
|
|
"required": true,
|
|
"config": {
|
|
"options": [
|
|
"wireguard",
|
|
"openvpn"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"name": "wireguard_private_key",
|
|
"type": "str",
|
|
"title": "WireGuard privésleutel",
|
|
"default": "",
|
|
"required": false,
|
|
"config": {
|
|
"placeholder": "alleen bij wireguard"
|
|
}
|
|
},
|
|
{
|
|
"name": "wireguard_addresses",
|
|
"type": "str",
|
|
"title": "WireGuard adressen",
|
|
"default": "",
|
|
"required": false,
|
|
"config": {
|
|
"placeholder": "10.64.0.2/32"
|
|
}
|
|
},
|
|
{
|
|
"name": "openvpn_user",
|
|
"type": "str",
|
|
"title": "OpenVPN gebruiker",
|
|
"default": "",
|
|
"required": false
|
|
},
|
|
{
|
|
"name": "openvpn_password",
|
|
"type": "str",
|
|
"title": "OpenVPN wachtwoord",
|
|
"default": "",
|
|
"required": false
|
|
}
|
|
],
|
|
"toggle": "enable_gluetun",
|
|
"toggle_default": false,
|
|
"description": "Leidt al je downloadverkeer door een VPN. De downloadclients delen dan het netwerk van deze container, dus hun poorten komen hier te liggen."
|
|
},
|
|
{
|
|
"title": "Jellyseerr — verzoeken",
|
|
"items": [
|
|
{
|
|
"name": "port_jellyseerr",
|
|
"type": "int",
|
|
"title": "Poort",
|
|
"default": 5055,
|
|
"required": true
|
|
}
|
|
],
|
|
"toggle": "enable_jellyseerr",
|
|
"toggle_default": true,
|
|
"description": "Laat huisgenoten films en series aanvragen"
|
|
},
|
|
{
|
|
"title": "Recyclarr — TRaSH-instellingen",
|
|
"items": [],
|
|
"toggle": "enable_recyclarr",
|
|
"toggle_default": false,
|
|
"description": "Synchroniseert kwaliteitsprofielen uit de TRaSH-gidsen naar Sonarr en Radarr"
|
|
},
|
|
{
|
|
"title": "Unpackerr — archieven uitpakken",
|
|
"items": [],
|
|
"toggle": "enable_unpackerr",
|
|
"toggle_default": false,
|
|
"description": "Pakt gedownloade rar-archieven automatisch uit"
|
|
},
|
|
{
|
|
"title": "Tdarr — hercoderen",
|
|
"items": [
|
|
{
|
|
"name": "port_tdarr",
|
|
"type": "int",
|
|
"title": "Webinterface",
|
|
"default": 8265,
|
|
"required": true
|
|
},
|
|
{
|
|
"name": "port_tdarr_server",
|
|
"type": "int",
|
|
"title": "Serverpoort",
|
|
"default": 8266,
|
|
"required": true
|
|
}
|
|
],
|
|
"toggle": "enable_tdarr",
|
|
"toggle_default": false,
|
|
"description": "Zet je bibliotheek om naar een zuiniger formaat"
|
|
},
|
|
{
|
|
"title": "Autobrr — automatisch grijpen",
|
|
"items": [
|
|
{
|
|
"name": "port_autobrr",
|
|
"type": "int",
|
|
"title": "Poort",
|
|
"default": 7474,
|
|
"required": true
|
|
}
|
|
],
|
|
"toggle": "enable_autobrr",
|
|
"toggle_default": false,
|
|
"description": "Reageert direct op aankondigingen in plaats van periodiek te zoeken"
|
|
},
|
|
{
|
|
"title": "Maintainerr — opruimen",
|
|
"items": [
|
|
{
|
|
"name": "port_maintainerr",
|
|
"type": "int",
|
|
"title": "Poort",
|
|
"default": 6246,
|
|
"required": true
|
|
}
|
|
],
|
|
"toggle": "enable_maintainerr",
|
|
"toggle_default": false,
|
|
"description": "Ruimt media op volgens regels die je zelf instelt"
|
|
},
|
|
{
|
|
"title": "Huntarr — gaten opvullen",
|
|
"items": [
|
|
{
|
|
"name": "port_huntarr",
|
|
"type": "int",
|
|
"title": "Poort",
|
|
"default": 9705,
|
|
"required": true
|
|
}
|
|
],
|
|
"toggle": "enable_huntarr",
|
|
"toggle_default": false,
|
|
"description": "Zoekt gericht naar ontbrekende en te verbeteren afleveringen"
|
|
}
|
|
]
|
|
}
|