Add a Readarr mock instance to the demo

Adds darkalex17/readarr-mock, built from ghcr.io/pennydreadful/bookshelf:softcover
(the maintained Readarr continuation; the LinuxServer image is discontinued and
its metadata endpoint no longer resolves). The captured config carries 6 authors,
327 books, 39 book files, 4 tags, 7 indexers, 193 history rows and one root
folder at /books, with minimal EPUBs under mock-htpc/books so the files show as
imported.

Prowlarr now registers Readarr as a synced application, so its config is
recaptured and the prowlarr-mock image must be rebuilt and pushed alongside.

The compose file, managarr config, justfile recipes and README gain the fourth
instance. The demo script needs no change; it fetches the compose file and
config from main at run time.

Requires a Managarr release with Readarr support, since the demo script runs
the published darkalex17/managarr image against these files.
This commit is contained in:
Dark-Alex-17 committed 2026-09-21 17:12:10 -06:00
1 parent e5fd6817e0
commit f3ad44f7d7
483 files changed
+55515 -15966

No files matched your search

@@ -0,0 +1,109 @@
---
id: retrotoon
name: RetroToon
description: "RetroToon is a Private Torrent Tracker for ANIMATED MOVIES / TV"
language: en-US
type: private
encoding: UTF-8
links:
- https://www.retrotoon.world/
caps:
categorymappings:
# from https://www.retrotoon.world/torznab.php?t=caps
- {id: 2000, cat: Movies, desc: "Movies"}
- {id: 3000, cat: Audio, desc: "Audio"}
- {id: 3030, cat: Audio, desc: "Soundtrack"}
- {id: 5000, cat: TV, desc: "TV"}
- {id: 5070, cat: TV/Anime, desc: "TV/Anime"}
- {id: 5080, cat: TV/Documentary, desc: "TV/Documentary"}
- {id: 7000, cat: Books, desc: "Books"}
- {id: 7030, cat: Books/Comics, desc: "Comics"}
- {id: 8000, cat: TV/Anime, desc: "Adult Animation"}
- {id: 100008, cat: TV/Anime, desc: "Adult Animation"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
book-search: [q]
music-search: [q]
settings:
- name: apikey
type: text
label: API Key
- name: info_key
type: info
label: About your API Key
default: "You can find your API Key by accessing the <a href=\"https://www.retrotoon.world/prowlarr.php\" target=\"_blank\">RetroToon Prowlarr & Torznab integration</a> page and scrolling down to the <b>Your Passkey</b> section. (Passkey is the same as the APIkey)."
login:
# returns "401 Unauthorized, check your credentials" if apikey is invalid
path: torznab.php
method: get
inputs:
apikey: "{{ .Config.apikey }}"
t: search
limit: 1
search:
paths:
- path: torznab.php
response:
type: xml
inputs:
apikey: "{{ .Config.apikey }}"
t: "{{ .Query.Type }}"
q: "{{ .Keywords }}"
cat: "{{ join .Categories \",\" }}"
season: "{{ .Query.Season }}"
ep: "{{ .Query.Ep }}"
limit: 100
rows:
selector: rss > channel > item
fields:
category:
selector: "[name=category]"
attribute: value
title:
selector: title
details:
selector: link
download:
selector: enclosure
attribute: url
date:
# Thu, 15 Jan 2026 16:24:34 +0000
selector: pubDate
filters:
- name: dateparse
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
size:
selector: "[name=size]"
attribute: value
imdbid:
selector: "[name=imdbid]"
attribute: value
seeders:
selector: "[name=seeders]"
attribute: value
leechers:
selector: "[name=leechers]"
attribute: value
grabs:
selector: "[name=grabs]"
attribute: value
downloadvolumefactor:
selector: "[name=downloadvolumefactor]"
attribute: value
uploadvolumefactor:
selector: "[name=uploadvolumefactor]"
attribute: value
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# torznab xml