Files
Dark-Alex-17 f3ad44f7d7 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.
2026-09-21 17:12:10 -06:00

157 lines
4.2 KiB
YAML

---
id: memphis
name: Memphis
description: "Memphis is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
language: fr-FR
type: private
encoding: UTF-8
links:
- https://memphis.fit/
caps:
categorymappings:
# from https://memphis.fit/api/torznab?t=caps&apikey=YOUR-PASSKEY
- {id: 2000, cat: Movies, desc: "Movies"}
- {id: 2030, cat: Movies/SD, desc: "Movies SD"}
- {id: 2040, cat: Movies/HD, desc: "Movies HD"}
- {id: 2045, cat: Movies/UHD, desc: "Movies UHD"}
- {id: 5000, cat: TV, desc: "TV"}
- {id: 5030, cat: TV/SD, desc: "TV SD"}
- {id: 5040, cat: TV/HD, desc: "TV HD"}
- {id: 5045, cat: TV/UHD, desc: "TV UHD"}
- {id: 5060, cat: TV/Sport, desc: "TV Sport"}
- {id: 5070, cat: TV/Anime, desc: "TV Anime"}
- {id: 5060, cat: TV/Sport, desc: "Sport"}
- {id: 4050, cat: PC/Games, desc: "PC/Games"}
- {id: 7020, cat: Books/EBook, desc: "Books/Ebook"}
- {id: 3000, cat: Audio, desc: "Audio"}
- {id: 4000, cat: PC, desc: "PC"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: passkey
type: text
label: PassKey
- name: info_key
type: info
label: About your PassKey
default: "You can find the API PassKey Key by accessing the <a href=\"https://memphis.fit/?view=member-api\" target=\"_blank\">Memphis API</a> page and scrolling down to the <b>Cross-seed</b> section."
- name: multilang
type: checkbox
label: Replace MULTi by another language in release name
default: false
- name: multilanguage
type: select
label: Replace MULTi by this language
default: FRENCH
options:
FRENCH: FRENCH
MULTi.FRENCH: MULTi.FRENCH
ENGLISH: ENGLISH
MULTi.ENGLISH: MULTi.ENGLISH
VOSTFR: VOSTFR
MULTi.VOSTFR: MULTi.VOSTFR
- name: vostfr
type: checkbox
label: Replace VOSTFR and SUBFRENCH with ENGLISH
default: false
login:
path: api/torznab
method: get
inputs:
t: search
apikey: "{{ .Config.passkey }}"
limit: 1
error:
- selector: error
message:
selector: error[description]
attribute: description
search:
paths:
# docs at https://memphis.fit/?view=member-api
- path: api/torznab
response:
type: xml
inputs:
apikey: "{{ .Config.passkey }}"
t: "{{ if .Keywords }}{{ .Query.Type }}{{ else }}search{{ end }}"
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_phase1:
selector: title
title_vostfr:
text: "{{ .Result.title_phase1 }}"
filters:
- name: re_replace
args: ["(?i)\\b(vostfr|subfrench)\\b", "ENGLISH"]
title_phase2:
text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
title_multilang:
text: "{{ .Result.title_phase2 }}"
filters:
- name: re_replace
args: ["(?i)\\b(MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR|VF2|VFF|VFQ|VOQ|VFI|VOF)))\\b", "{{ .Config.multilanguage }}"]
title:
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
details:
selector: comments
filters:
- name: htmldecode
download:
selector: enclosure
attribute: url
tmdbid:
selector: comments
filters:
- name: regexp
args: media=tmdb.+?(\d+)
date:
# e.g. Tue, 31 Mar 2026 20:06:13 +0100
selector: pubDate
filters:
- name: dateparse
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
size:
selector: "[name=size]"
attribute: value
seeders:
selector: "[name=seeders]"
attribute: value
leechers:
selector: "[name=peers]"
attribute: value
grabs:
selector: "[name=grabs]"
attribute: value
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
minimumratio:
text: 1.0
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# torznab xml