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

+163
View File
@@ -0,0 +1,163 @@
---
id: vc-lib
name: VC-Lib
description: "VC-Lib is a CHINESE Private Torrent Tracker for MUSIC"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://pt.vclib.online/
caps:
categorymappings:
- {id: 408, cat: Other, desc: "其他 - Other"}
- {id: 409, cat: PC/0day, desc: "软件 - Software"}
- {id: 407, cat: PC/Games, desc: "游戏 - Games"}
- {id: 406, cat: PC/0day, desc: "编辑器 - Editors"}
- {id: 403, cat: Other, desc: "声库 - Voicebanks"}
- {id: 402, cat: Audio/Video, desc: "视频 - Videos"}
- {id: 405, cat: Other, desc: "图片 - Images"}
- {id: 404, cat: Audio, desc: "单曲 - Singles"}
- {id: 401, cat: Audio, desc: "专辑 - Albums"}
modes:
search: [q]
music-search: [q]
settings:
- name: cookie
type: text
label: Cookie
- name: info_cookie
type: info_cookie
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: 4
options:
4: created
7: seeders
5: size
1: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_tpp
type: info
label: Results Per Page
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
- name: info_activity
type: info
label: Account Inactivity
default: "If you don't log in to Vclib for 365 days, the system will automatically ban you (not just doing it, you have to actually log in)."
login:
# using cookie method because site does a JS call to API/Challenge via JQuery to load response parm required for takelogin.php
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: index.php
selector: a[href="logout.php"]
search:
paths:
- path: torrents.php
inputs:
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
# 0 incldead, 1 active, 2 dead
incldead: 0
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
# 0 title, 1 descr, 3 uploader, 4 imdburl
search_area: 0
# 0 AND, 1 OR, 2 exact
search_mode: 0
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
notnewword: 1
rows:
selector: table.torrents > tbody > tr:has(a[href*="download.php?id="])
fields:
category:
selector: a[href*="?cat="]
attribute: href
filters:
- name: querystring
args: cat
title_default:
selector: a[href*="details.php?id="]
title:
selector: a[title][href*="details.php?id="]
attribute: title
optional: true
default: "{{ .Result.title_default }}"
details:
selector: a[href*="details.php?id="]
attribute: href
download:
selector: a[href*="download.php?id="]
attribute: href
poster:
selector: img[data-src]
attribute: data-src
date_elapsed:
# time type: time elapsed (default)
selector: td.rowfollow:nth-child(4) > span[title]
attribute: title
optional: true
filters:
- name: append
args: " +08:00" # CST
- name: dateparse
args: "yyyy-MM-dd HH:mm:ss zzz"
date_added:
# time added
selector: td.rowfollow:nth-child(4):not(:has(span))
optional: true
filters:
- name: append
args: " +08:00" # CST
- name: dateparse
args: "yyyy-MM-ddHH:mm:ss zzz"
date:
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
size:
selector: td.rowfollow:nth-child(5)
seeders:
selector: td.rowfollow:nth-child(6)
leechers:
selector: td.rowfollow:nth-child(7)
grabs:
selector: td.rowfollow:nth-child(8)
downloadvolumefactor:
case:
img.pro_free: 0
img.pro_free2up: 0
img.pro_50pctdown: 0.5
img.pro_50pctdown2up: 0.5
img.pro_30pctdown: 0.3
"*": 1
uploadvolumefactor:
case:
img.pro_50pctdown2up: 2
img.pro_free2up: 2
img.pro_2up: 2
"*": 1
minimumratio:
text: 0.8
description:
selector: td.rowfollow:nth-child(2)
remove: a, b, font, img, span
# NexusPHP v1.10.3 2026-08-02 (custom)