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,216 @@
---
id: 0dayfiles-api
name: 0DayFiles (API)
description: "0DayFiles is a Private Torrent Tracker for 0DAY / GENERAL"
language: en-US
type: private
encoding: UTF-8
links:
- https://0dayfiles.net/
caps:
categorymappings:
- {id: 9, cat: Movies/SD, desc: "Movies/480p"}
- {id: 10, cat: Movies/UHD, desc: "Movies/4K"}
- {id: 11, cat: Movies/BluRay, desc: "Movies/Bluray"}
- {id: 12, cat: Movies/BluRay, desc: "Movies/Bluray-Full"}
- {id: 13, cat: Movies/SD, desc: "Movies/Cam"}
- {id: 14, cat: Movies/DVD, desc: "Movies/DVD-R"}
- {id: 17, cat: Movies, desc: "Movies/Packs"}
- {id: 18, cat: Movies/HD, desc: "Movies/x264"}
- {id: 19, cat: Movies/HD, desc: "Movies/x265"}
- {id: 20, cat: Movies/SD, desc: "Movies/XviD"}
- {id: 21, cat: TV/SD, desc: "TV/480p"}
- {id: 22, cat: TV/UHD, desc: "TV/4K"}
- {id: 23, cat: TV/HD, desc: "TV/Bluray"}
- {id: 25, cat: TV/SD, desc: "TV/DVD-Rip"}
- {id: 26, cat: TV/Other, desc: "TV/Mobile"}
- {id: 28, cat: TV, desc: "TV/Packs"}
- {id: 29, cat: TV/SD, desc: "TV/SD/x264"}
- {id: 30, cat: TV/HD, desc: "TV/x264"}
- {id: 31, cat: TV/HD, desc: "TV/x265"}
- {id: 32, cat: TV/SD, desc: "TV/XviD"}
- {id: 33, cat: Console, desc: "Nintendo"}
- {id: 34, cat: PC/Games, desc: "PC/Games"}
- {id: 38, cat: Audio, desc: "Music/Audio"}
- {id: 39, cat: Audio/Lossless, desc: "Music/Flac"}
- {id: 41, cat: Audio, desc: "Music/Packs"}
- {id: 42, cat: Audio/Video, desc: "Music/Video"}
- {id: 43, cat: TV/Anime, desc: "Anime"}
- {id: 44, cat: Audio/Audiobook, desc: "Audio Books"}
- {id: 46, cat: Books, desc: "Books"}
- {id: 48, cat: TV/Documentary, desc: "Documentary"}
- {id: 49, cat: Other, desc: "Educational"}
- {id: 51, cat: PC/Mac, desc: "Mac"}
- {id: 1, cat: PC/0day, desc: "Software"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://0dayfiles.net/\" target=\"_blank\">0DayFiles</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: re_replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
minimumratio:
text: 1.0
minimumseedtime:
# 7 days (as seconds = 7 x 24 x 60 x 60)
text: 604800
# json UNIT3D 9.2.0
@@ -0,0 +1,183 @@
---
id: 3dvault-api
name: 3D Vault (API)
description: "3D Vault is a Private Torrent Tracker for 3D MOVIES"
language: en-US
type: private
encoding: UTF-8
links:
- https://3dvault.org/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movie"}
- {id: 2, cat: TV, desc: "TV Show"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://3dvault.org/\" target=\"_blank\">3D Vault</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: re_replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
minimumratio:
text: 1.0
minimumseedtime:
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
# json UNIT3D 9.2.0
@@ -0,0 +1,175 @@
---
id: abnormal-api
name: Abnormal (API)
description: "ABNormal (ABN) is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
language: fr-FR
type: private
encoding: UTF-8
requestDelay: 2.1
links:
- https://abn.lol/
legacylinks:
- https://abnormal.ws
caps:
categorymappings:
- {id: 1, cat: TV, desc: "Series"}
- {id: 2, cat: Movies, desc: "Movies"}
- {id: 3, cat: TV/Documentary, desc: "Documentaries"}
- {id: 4, cat: TV/Anime, desc: "Anime"}
- {id: 5, cat: PC/Games, desc: "Games"}
- {id: 6, cat: PC, desc: "Applications"}
- {id: 7, cat: Books/EBook, desc: "Ebooks"}
- {id: 9, cat: TV, desc: "Emissions"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
book-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find your API key on your <a href=\"https://abn.lol/User/Parameters\" target=\"_blank\">Parameters</a> page. The API key is read-only and never expires."
- name: apiurl
label: API URL
type: text
default: api.abn.lol
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- 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
- name: sort
type: select
label: Sort requested from site
default: Created
options:
Created: created
Seeders: seeders
Size: size
ReleaseName: title
- name: type
type: select
label: Order requested from site
default: DESC
options:
DESC: desc
ASC: asc
- name: info_activity
type: info
label: Account Inactivity
default: "Accounts are automatically deactivated after 4 months of inactivity (no connection to the site)."
login:
path: "https://{{ .Config.apiurl }}/api/Release/Search?name=test&resultByPage=1"
method: get
error:
- selector: :root:contains("Unauthorized")
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
search:
paths:
- path: "https://{{ .Config.apiurl }}/api/Release/Search"
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
$raw: "{{ range .Categories }}categoryId={{.}}&{{end}}"
name: "{{ .Keywords }}"
resultByPage: 100
sort: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
freeleech: "{{ if .Config.freeleech }}true{{ else }}{{ end }}"
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: $
fields:
category:
selector: categoryId
title_phase1:
selector: name
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)))\\b", "{{ .Config.multilanguage }}"]
title:
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
_id:
selector: id
details:
# api returns https://api.abn.lol/api/Release/671444 which is not valid for browsing
text: "{{ .Config.sitelink }}Torrent/Details?ReleaseId={{ .Result._id }}"
download:
selector: downloadUrl
infohash:
selector: infoHash
date:
# created": "2026-03-07T06:59:22.137408" is returned by Newtonsoft.Json.Linq as 03/07/2026 06:59:22
selector: created
filters:
- name: append
args: " +00:01" # CET
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: completed
downloadvolumefactor:
selector: freeleech
case:
False: 1 # not free
True: 0 # freeleech
uploadvolumefactor:
text: 1
minimumratio:
text: 1.0
minimumseedtime:
# 4 days (as seconds = 4 x 24 x 60 x 60)
text: 345600
# JSON
+105
View File
@@ -0,0 +1,105 @@
---
id: anibt
name: Anibt
description: Anibt is a CHINESE Public aggregate indexer for ANIME"
language: zh-CN
type: public
encoding: UTF-8
links:
- https://anibt.net/
caps:
categorymappings:
- {id: anime, cat: TV/Anime, desc: "Anime", default: true}
- {id: manga, cat: Books/Comics, desc: "Manga", default: false}
- {id: music, cat: Audio/Lossless, desc: "Music", default: false}
- {id: raw, cat: TV/Anime, desc: "Raw", default: false}
- {id: stage, cat: Audio/Video, desc: "Stage", default: false}
modes:
search: [q]
tv-search: [q, season, ep]
music-search: [q]
book-search: [q]
settings:
- name: sort
type: select
label: Sort requested from site
default: publishedAt
options:
publishedAt: created
fileSize: size
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
search:
paths:
- path: rss/magnets.xml
categories: [anime]
response:
type: xml
- path: rss/other/manga.xml
categories: [manga]
response:
type: xml
- path: rss/other/music.xml
categories: [music]
response:
type: xml
- path: rss/other/raw.xml
categories: [raw]
response:
type: xml
- path: rss/other/stage.xml
categories: [stage]
response:
type: xml
inputs:
# defaults (e.g. limit=100) cause redirects if used in URL
q: "{{ .Keywords }}"
sortField: "{{ re_replace .Config.sort \"publishedAt\" \"\" }}"
sortOrder: "{{ re_replace .Config.type \"desc\" \"\" }}"
rows:
selector: rss > channel > item
fields:
title:
selector: title
description:
selector: animeTitle
details:
selector: link
download:
selector: enclosure
attribute: url
date:
# Sat, 18 Jul 2026 07:33:19 +0800
selector: pubDate
filters:
- name: dateparse
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
category_default:
selector: type
category:
selector: category
optional: true
default: "{{ .Result.category_default }}"
size:
selector: fileSize
seeders:
text: 1
leechers:
text: 1
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# torznab xml
@@ -0,0 +1,207 @@
---
id: animebybelka
name: Anime by Belka
description: "Anime by Belka (Аниме от Белки) is a RUSSIAN Semi-Private Torrent Tracker for ANIME"
language: ru-RU
type: semi-private
encoding: UTF-8
links:
- https://anibelka.com/
caps:
categorymappings:
# - {id: 1, cat: TV/Anime, desc: "Трекер"}
# - {id: 31, cat: TV/Anime, desc: "Аниме архив"}
- {id: 32, cat: TV/Anime, desc: "Аниме универсальные"}
- {id: 33, cat: TV/Anime, desc: "Аниме с озвучкой"}
- {id: 34, cat: TV/Anime, desc: "Аниме с субтитрами"}
- {id: 36, cat: Movies/Other, desc: "Полнометражки"}
- {id: 37, cat: TV/Anime, desc: "Аниме для PSP"}
- {id: 39, cat: TV/Anime, desc: "Сэмплы"}
- {id: 7, cat: Audio, desc: "Аудио"}
- {id: 8, cat: Books/Comics, desc: "Манга"}
- {id: 21, cat: Other, desc: "Изображения аниме"}
- {id: 9, cat: Other, desc: "Япония"}
# - {id: 17, cat: Other, desc: "Информация"}
# - {id: 40, cat: Other, desc: "Аниме онлайн"}
# - {id: 41, cat: Other, desc: "Галерея Японии"}
# - {id: 42, cat: Other, desc: "Фанфики по аниме"}
# - {id: 43, cat: Other, desc: "Отзывы, просьбы, предложения, техника"}
- {id: 52, cat: TV/Anime, desc: "Альтернативные части"}
# - {id: 49, cat: Other, desc: "Форум"}
# - {id: 50, cat: Other, desc: "Аниме. Форум. Обсуждение"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: cookie
type: text
label: Cookie
- name: info_cookie
type: info_cookie
- name: useragent
type: text
label: User-Agent
- name: info_useragent
type: info_useragent
- name: stripcyrillic
type: checkbox
label: Strip Cyrillic Letters
default: false
- name: addrussiantotitle
type: checkbox
label: Add RUS to end of all titles to improve language detection by Sonarr and Radarr. Will cause English-only results to be misidentified.
default: false
- name: sort
type: select
label: Sort requested from site
default: t
options:
t: created
ts: seeders
sz: size
i: title
- name: type
type: select
label: Order requested from site
default: d
options:
d: desc
a: asc
login:
# using cookie method because site returns SQL error on first access
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: /
selector: a[href^="./ucp.php?mode=logout&sid="]
search:
paths:
# https://anibelka.com/search.php?tracker_search=torrent&keywords=nyan&terms=all&author=&fid%5B%5D=31&sc=1&sf=titleonly&sk=t&sd=d&sr=topics&st=0&ch=300&t=0
- path: search.php
inputs:
$raw: "{{ range .Categories }}&fid[]={{.}}{{end}}"
tracker_search: "{{ if .Keywords }}torrent{{ else }}tracker{{ end }}"
keywords: "{{ if .Keywords }}{{ .Keywords }}{{ else }}{{ .Today.Year }}{{ end }}"
terms: all
sc: 1
sf: titleonly
sr: topics
sk: "{{ .Config.sort }}"
sd: "{{ .Config.type }}"
st: 0
ch: 300
t: 0
headers:
User-Agent: ["{{ .Config.useragent }}"]
keywordsfilters:
# strip season and/or ep
- name: re_replace
args: ["(?i)\\b(?:[SE]\\d{1,4}){1,2}\\b\\s?", ""]
rows:
selector: tr:has(a[href^="./download/file.php?id="])
fields:
category:
selector: a[href^="./viewforum.php?f="]
attribute: href
filters:
- name: querystring
args: f
title:
selector: a.topictitle
filters:
- name: re_replace
args: ["(\\([\\p{IsCyrillic}\\W]+\\))|(^[\\p{IsCyrillic}\\W\\d]+\\/ )|([\\p{IsCyrillic} \\-]+,+)|([\\p{IsCyrillic}]+)", "{{ if .Config.stripcyrillic }}{{ else }}$1$2$3$4{{ end }}"]
- name: append
args: "{{ if .Config.addrussiantotitle }} RUS{{ else }}{{ end }}"
details:
selector: a.topictitle
attribute: href
download:
selector: a[href^="./download/file.php?id="]
attribute: href
size:
selector: p b
filters:
- name: replace
args: ["ТБ", "TB"]
- name: replace
args: ["ГБ", "GB"]
- name: replace
args: ["МБ", "MB"]
- name: replace
args: ["КБ", "KB"]
seeders:
selector: span.seed
leechers:
selector: span.leech
grabs:
selector: span.complet
optional: true
date_today:
# Сегодня, 09:09
# Вчера, 22:47
selector: td:nth-last-child(1) p:contains("Сегодня"), td:nth-last-child(1) p:contains("Вчера")
optional: true
filters:
- name: replace
args: ["Сегодня", "Today"]
- name: replace
args: ["Вчера", "Yesterday"]
- name: fuzzytime
date_year:
# 12 янв 2019, 11:26
selector: td:nth-last-child(1) p:not(:contains("Сегодня")), td:nth-last-child(1) p:not(:contains("Вчера"))
# auto adjusted by site account profile
optional: true
filters:
- name: replace
args: ["янв", "Jan"]
- name: replace
args: ["фев", "Feb"]
- name: replace
args: ["мар", "Mar"]
- name: replace
args: ["апр", "Apr"]
- name: replace
args: ["май", "May"]
- name: replace
args: ["июн", "Jun"]
- name: replace
args: ["июл", "Jul"]
- name: replace
args: ["авг", "Aug"]
- name: replace
args: ["сен", "Sep"]
- name: replace
args: ["окт", "Oct"]
- name: replace
args: ["ноя", "Nov"]
- name: replace
args: ["дек", "Dec"]
- name: append
args: " +03:00" # MSK
- name: dateparse
args: "dd MMM yyyy, HH:mm zzz"
date:
text: "{{ if or .Result.date_today .Result.date_year }}{{ or .Result.date_today .Result.date_year }}{{ else }}now{{ end }}"
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
description:
selector: td:nth-last-child(5)
remove: a, b, p, span
# ppkBB3cker v.2 (phpBB)
@@ -0,0 +1,164 @@
---
id: animetosho-xyz
name: Anime Tosho
description: "Anime Tosho is a Semi-Private Torrent Tracker for ANIME"
language: en-US
type: semi-private
encoding: UTF-8
links:
- https://animetosho.xyz/
caps:
categorymappings:
- {id: Anime, cat: TV/Anime, desc: "Anime"}
# all results are currently returned as both 5070 & 2020
# # from https://feed.animetosho.xyz/api/torznab?t=caps&apikey=YOUR-API-KEY
# - {id: 5070, cat: TV/Anime, desc: "Anime (TV)"}
# - {id: 2020, cat: Movies/Other, desc: "Anime (Movies)"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: apikey
type: text
label: API Key
- name: info_key
type: info
label: About your API key
default: "You can find or generate a new API Key by accessing the <a href=\"https://animetosho.xyz/profile\" target=\"_blank\">Anime Tosho profile</a> page."
- name: apiurl
label: API URL
type: text
default: feed.animetosho.xyz
- name: sonarr_compatibility
type: checkbox
label: Improve Sonarr compatibility by trying to add Season information into Release Titles
default: false
- name: strip_s01
type: checkbox
label: Remove first season keywords (S1/S01/Season 1), as some results do not include this for first/single season releases
default: false
- name: radarr_compatibility
type: checkbox
label: Improve Radarr compatibility by removing year information from keywords and adding it to Release Titles
default: false
login:
# returns "401 Unauthorized, check your credentials" if apikey is invalid
path: "https://{{ .Config.apiurl }}/api/torznab"
method: get
inputs:
apikey: "{{ .Config.apikey }}"
t: search
limit: 1
search:
paths:
- path: "https://{{ .Config.apiurl }}/api/torznab"
response:
type: xml
inputs:
apikey: "{{ .Config.apikey }}"
t: "{{ if .Keywords }}{{ .Query.Type }}{{ else }}search{{ end }}"
q: "{{ .Keywords }}"
# all results are currently returned as both 5070 & 2020
# cat: "{{ join .Categories \",\" }}"
season: "{{ .Query.Season }}"
ep: "{{ .Query.Ep }}"
limit: 100
keywordsfilters:
- name: re_replace
args: [" *\\b((?:19|20)\\d{2})\\b", "{{ if .Config.radarr_compatibility }}{{ else }} $1{{ end }}"]
- name: re_replace
args: ["(?i) *\\b(S(?:0|eason *)?1)\\b", "{{ if .Config.strip_s01 }}{{ else }} $1{{ end }}"]
rows:
selector: rss > channel > item
fields:
category:
text: Anime
title_keyword_year:
text: "{{ .Query.Keywords }}"
filters:
- name: regexp
args: "\\b((19|20)\\d{2})\\b"
title_default:
selector: title
filters:
- name: re_replace
args: ["^(\\[.+?\\] ?)?(\\[.+?\\] ?)?(.+?)(\\[)", "$1$2$3{{ if and (.Config.radarr_compatibility) (.Result.title_keyword_year) }} {{ .Result.title_keyword_year }} $4{{ else }}$4{{ end }}"]
title_has_season:
text: "{{ .Result.title_default }}"
filters:
- name: regexp
args: "(?i)(S\\d{1,3}([Ev]\\d+)?)"
- name: append
args: "NULL"
title_has_episode:
text: "{{ .Result.title_default }}"
filters:
- name: regexp
args: "\\b(.+? - ?)(\\d+([-v]\\d+)?) ([\\[\\(])\\b"
- name: append
args: "NULL"
title_has_movie_ova:
text: "{{ .Result.title_default }}"
filters:
- name: regexp
args: "(?i)(?<![A-Za-z0-9])(Movies?|OVA|OAV)(?![A-Za-z0-9])"
- name: re_replace
args: ["(?i)(Movies?|OVA|OAV)", "YES"]
title_optional:
text: "{{ .Result.title_default }}"
filters:
- name: re_replace
args: ["^(\\[.+?].+?)\\s*(?<![\\]\\)])((?:\\[|\\(| - ).+)", "{{ if and (ne .Result.title_has_movie_ova \"YES\") (and (eq .Result.title_has_season \"NULL\") (eq .Result.title_has_episode \"NULL\")) }}$1 S01 $2{{ else }}$1 $2{{ end }}"]
title_live_action:
text: "{{ .Result.title_optional }}"
filters:
# Insert S01 after year for Live Action titles without season/episode info
# e.g. Hotel.del.Luna.2019.1080p... -> Hotel.del.Luna.2019.S01.1080p...
- name: re_replace
args: ["^(.+?)([\\. ])((?:19|20)\\d{2})([\\. ])(.+)$", "{{ if and (eq .Result.title_has_season \"NULL\") (eq .Result.title_has_episode \"NULL\") }}$1$2$3$4S01$4$5{{ else }}$1$2$3$4$5{{ end }}"]
# Insert S01 before resolution for Live Action titles without year or season info
# e.g. Hotel Del Luna 720p HDTV... -> Hotel Del Luna S01 720p HDTV...
- name: re_replace
args: ["^(?!.*(?:19|20)\\d{2})(.+?)([\\. ])((?:480|720|1080|2160)[pi])(.*)$", "{{ if and (eq .Result.title_has_season \"NULL\") (eq .Result.title_has_episode \"NULL\") }}$1$2S01$2$3$4{{ else }}$1$2$3$4{{ end }}"]
title:
text: "{{ if .Config.sonarr_compatibility }}{{ .Result.title_live_action }}{{ else }}{{ .Result.title_default }}{{ end }}"
details:
selector: link
download:
selector: enclosure
attribute: url
infohash:
selector: "[name=infohash]"
attribute: value
date:
# Sun, 18 Jan 2026 04:05:41 +0000
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=leechers]"
attribute: value
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
description:
selector: title
# torznab xml
@@ -0,0 +1,134 @@
---
id: bluetorrents
name: BlueTorrents
description: "BlueTorrents is a Private Torrent Tracker for MOVIES / TV / MUSIC / GENERAL"
language: en-US
type: private
encoding: UTF-8
links:
- https://bluetorrents.com/
caps:
categorymappings:
# from https://bluetorrents.com/api/external?apikey=YOUR-API-KEY&t=caps
- {id: 2000, cat: Movies, desc: "Movies"}
- {id: 5000, cat: TV, desc: "TV Shows"}
- {id: 1000, cat: Console, desc: "Games"}
- {id: 3000, cat: Audio, desc: "Music"}
- {id: 4000, cat: PC/0day, desc: "Apps"}
- {id: 6000, cat: XXX, desc: "XXX"}
- {id: 8000, cat: Other, desc: "Other"}
- {id: 7000, cat: Books, desc: "Books"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, tmdbid]
music-search: [q]
book-search: [q]
allowtvsearchimdb: true
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://bluetorrents.com/settings\" target=\"_blank\">BlueTorrents Settings</a> page, and scrolling down to the <b>API keys</b> section."
- name: info_3x
type: info
label: Including 3X
default: "IF you want to see 3x torrents access your <a href=\"https://bluetorrents.com/settings\" target=\"_blank\">BlueTorrents Settings</a> page and tick the <b>Show NSFW content</b> checkbox."
- name: info_activity
type: info
label: Account Inactivity
default: "Accounts with no activity for 90+ days may be disabled."
login:
path: api/external
method: get
inputs:
t: search
apikey: "{{ .Config.apikey }}"
limit: 1
error:
- selector: error
message:
selector: error[description]
attribute: description
search:
paths:
- path: api/external
response:
type: xml
inputs:
apikey: "{{ .Config.apikey }}"
t: "{{ if .Query.TMDBID }}movie{{ else }}{{ end }}{{ if or .Query.Season .Query.Ep }}tvsearch{{ else }}{{ end }}{{ if or .Query.IMDBID .Query.TMDBID .Query.Season .Query.Ep }}{{ else }}search{{ end }}"
q: "{{ .Keywords }}"
cat: "{{ join .Categories \",\" }}"
season: "{{ .Query.Season }}"
ep: "{{ .Query.Ep }}"
imdbid: "{{ .Query.IMDBID }}"
tmdbid: "{{ .Query.TMDBID }}"
limit: 100
keywordsfilters:
# replace spaces between words with percent wildcard
- name: re_replace
args: ["\\W+", "%"]
rows:
selector: rss > channel > item
fields:
category:
selector: "[name=category]"
attribute: value
title:
selector: title
details:
selector: link
download:
selector: enclosure
attribute: url
infohash:
selector: "[name=infohash]"
attribute: value
imdbid:
selector: "[name=imdbid]"
attribute: value
tmdbid:
selector: "[name=tmdbid]"
attribute: value
date:
# Sun, 08 Feb 2026 03:32:24 -0800
selector: pubDate
filters:
- name: dateparse
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
size:
selector: size
seeders:
selector: "[name=seeders]"
attribute: value
leechers:
selector: "[name=peers]"
attribute: value
grabs:
selector: "[name=grabs]"
attribute: value
downloadvolumefactor:
selector: "[name=downloadvolumefactor]"
attribute: value
uploadvolumefactor:
selector: "[name=uploadvolumefactor]"
attribute: value
minimumratio:
text: 1.0
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# torznab xml
@@ -0,0 +1,168 @@
---
id: crazyspirits-api
name: CrazySpirits (API)
description: "Crazy Spirits is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
language: fr-FR
type: private
encoding: UTF-8
requestDelay: 5
links:
- https://crazyspirits.com/
legacylinks:
- https://www.crazyspirits.ca/
- https://www.crazyspirits.com/
caps:
categorymappings:
# from https://crazyspirits.com/feed.php?t=caps&apikey=YOUR-PASSKEY
- {id: 2000, cat: Movies, desc: "Movies"}
- {id: 2010, cat: Movies/Foreign, desc: "Movies/Foreign"}
- {id: 2020, cat: Movies/Other, desc: "Movies/Other"}
- {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: 3000, cat: Audio, desc: "Audio"}
- {id: 3010, cat: Audio/MP3, desc: "Audio/MP3"}
- {id: 3040, cat: Audio/Lossless, desc: "Audio/Lossless"}
- {id: 4000, cat: PC, desc: "PC"}
- {id: 4010, cat: PC/0day, desc: "PC/0day"}
- {id: 4030, cat: PC/Games, desc: "PC/Games"}
- {id: 8000, cat: Other, desc: "Other"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q, imdbid]
music-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 by accessing <a href=\"https://crazyspirits.com/apps.php\" target=\"_blank\">CrazySpirits apps</a> page and scrolling down to <b>Votre API Key (Passkey)</b>."
- 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: feed.php
method: get
inputs:
t: search
apikey: "{{ .Config.passkey }}"
limit: 1
error:
- selector: error
message:
selector: error[description]
attribute: description
search:
paths:
# docs at https://crazyspirits.com/apps.php
- path: feed.php
response:
type: xml
inputs:
apikey: "{{ .Config.passkey }}"
t: "{{ .Query.Type }}"
q: "{{ .Keywords }}"
cat: "{{ join .Categories \",\" }}"
season: "{{ .Query.Season }}"
ep: "{{ .Query.Ep }}"
imdbid: "{{ .Query.IMDBID }}"
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
download:
selector: enclosure
attribute: url
infohash:
selector: "[name=infohash]"
attribute: value
imdbid:
selector: "[name=imdbid]"
attribute: value
tmdbid:
selector: "[name=tmdbid]"
attribute: value
tvdbid:
selector: "[name=tvdbid]"
attribute: value
date:
# 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:
selector: "[name=downloadvolumefactor]"
attribute: value
uploadvolumefactor:
selector: "[name=uploadvolumefactor]"
attribute: value
minimumratio:
text: 1.0
minimumseedtime:
# 2 day (as seconds = 2 x 24 x 60 x 60)
text: 172800
# torznab xml
@@ -0,0 +1,155 @@
---
id: crnaberza2fa
name: CrnaBerza2FA
description: "CrnaBerza is a BALKAN Private Torrent Tracker for MOVIES / TV / GENERAL. This indexer uses cookie login for 2FA."
language: sr-SP
type: private
encoding: UTF-8
links:
- https://www.crnaberza.com/
legacylinks:
- http://www.crnaberza.com/
caps:
categorymappings:
- {id: 64, cat: Movies/HD, desc: "HD Boxset"}
- {id: 80, cat: TV, desc: "Paketi"}
- {id: 62, cat: TV/SD, desc: "SD Boxset"}
- {id: 58, cat: Audio/Lossless, desc: "Lossless/Domaće"}
- {id: 5, cat: Audio/MP3, desc: "MP3/Domaća"}
- {id: 83, cat: Movies/BluRay, desc: "Film/BluRay Domaće"}
- {id: 84, cat: Movies/BluRay, desc: "Film/Digitalno Restaurisani"}
- {id: 52, cat: Movies/DVD, desc: "Film/DVD Domaće"}
- {id: 73, cat: Movies/HD, desc: "Film/HD Domaće"}
- {id: 29, cat: Movies/SD, desc: "Film/SD Domaće"}
- {id: 79, cat: PC/Mobile-Android, desc: "Android"}
- {id: 61, cat: Movies/HD, desc: "HD Mešano"}
- {id: 50, cat: PC/Games, desc: "Igre"}
- {id: 44, cat: Books, desc: "Knjige"}
- {id: 46, cat: Audio, desc: "Koncerti"}
- {id: 49, cat: PC, desc: "Programi"}
- {id: 38, cat: TV/Sport, desc: "Sport"}
- {id: 39, cat: Audio/Video, desc: "Spotovi DVD"}
- {id: 45, cat: Books/Comics, desc: "Stripovi"}
- {id: 28, cat: Other, desc: "Svastara"}
- {id: 78, cat: TV/Other, desc: "TV/ostalo"}
- {id: 59, cat: Audio/Lossless, desc: "Lossless/Strano"}
- {id: 57, cat: Audio/MP3, desc: "MP3/Strano"}
- {id: 65, cat: Movies/3D, desc: "3D Film"}
- {id: 82, cat: Movies/UHD, desc: "4K video"}
- {id: 37, cat: Movies, desc: "Deca"}
- {id: 43, cat: TV/Documentary, desc: "Dokumentarci"}
- {id: 20, cat: Movies/DVD, desc: "Film/DVD Strano"}
- {id: 48, cat: Movies/HD, desc: "Film/HD Strano"}
- {id: 54, cat: Movies/SD, desc: "Film/SD Strano"}
- {id: 75, cat: TV/HD, desc: "TV/HD Domaće"}
- {id: 30, cat: TV/SD, desc: "TV/SD Domaće"}
- {id: 77, cat: TV/HD, desc: "TV/HD Strano"}
- {id: 34, cat: TV/SD, desc: "TV/SD Strano"}
- {id: 60, cat: XXX, desc: "XXX/Domace"}
- {id: 63, cat: XXX, desc: "XXX/Strano"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: cookie
type: text
label: Cookie
- name: info_cookie
type: info_cookie
- name: info
type: info
label: Results Per Page
default: For best results, change the 'Torrenata po stranici' setting to 50 on your 'Torrenti' from the 'Podešavanja naloga' menu on the CrnaBerza webpage.
- name: freeleech
type: checkbox
label: Filter freeleech only
default: false
- name: sort2
type: select
label: Sort requested from site
default: added
options:
added: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
# using cookie method because login page can present second page for 2FA when enabled
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: /
selector: a[href*="wp-login.php?action=logout"]
search:
paths:
# https://uat.crnaberza.net/t/?category[]=83&category[]=84&category[]=52&category[]=73&category[]=29&search=
- path: t/
inputs:
$raw: "{{ range .Categories }}category[]={{.}}&{{end}}"
search: "{{ .Keywords }}"
sort: "{{ .Config.sort2 }}"
dir: "{{ .Config.type }}"
# does not support searching imdbid and does not return imdb links
rows:
selector: "table.min-w-full > tbody > tr:has(a[href*=\"/download/\"]){{ if .Config.freeleech }}:has(span.text-green-300:contains(\"Free Leech\")){{ else }}{{ end }}"
fields:
categorydesc:
selector: td:nth-of-type(1) img
attribute: alt
title:
selector: a[href*="/td/"]
details:
selector: a[href*="/td/"]
attribute: href
download:
selector: a[href*="/download/"]
attribute: href
date:
# Jan 25 2026<br>05:59 PM
selector: td:nth-of-type(4)
# auto adjusted by site account profile
filters:
- name: dateparse
args: "MMM d yyyy hh:mm tt"
size:
selector: td:nth-of-type(6)
seeders:
selector: td:nth-of-type(7)
leechers:
selector: td:nth-of-type(8)
downloadvolumefactor:
case:
"span.text-green-300:contains(\"Free Leech\")": 0
"span.text-blue-300:contains(\"½ Download\")": 0.5
"*": 1
uploadvolumefactor:
case:
"span.text-purple-300:contains(\"x5 Upload\")": 5
"span.text-purple-300:contains(\"x4 Upload\")": 4
"span.text-purple-300:contains(\"x3 Upload\")": 3
"span.text-purple-300:contains(\"x2 Upload\")": 2
"*": 1
minimumratio:
text: 1.0
minimumseedtime:
# 7 day (as seconds = 7 x 24 x 60 x 60)
text: 604800
# WordPress 6.9.4
@@ -0,0 +1,155 @@
---
id: cyclingarchiveclub
name: CyclingArchiveClub
description: "CyclingArchiveClub is a Private tracker for Professional road and Cyclocross racing VIDEOS"
language: en-US
type: private
encoding: UTF-8
links:
- https://cyclingarchive.club/
caps:
categorymappings:
- {id: 25, cat: TV, desc: "BMX"}
- {id: 28, cat: TV, desc: "Cross"}
- {id: 21, cat: TV/Documentary, desc: "Documentary"}
- {id: 24, cat: TV, desc: "MTB"}
- {id: 26, cat: TV, desc: "Real Life Video"}
- {id: 22, cat: TV, desc: "Road"}
- {id: 23, cat: TV, desc: "Track"}
- {id: 27, cat: TV, desc: "Triathlon"}
modes:
search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: added
options:
added: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: DESC
options:
DESC: desc
ASC: asc
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:contains("Login failed")
message:
selector: td.text
test:
path: index.php
selector: a[href$="logout.php"]
download:
selectors:
# https://cyclingarchive.club/download.php?12345&a-title-goes-here-2026.torrent
- selector: a[href*="download.php?"]
attribute: href
search:
paths:
- path: browse.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
# 0 name, 1 descr, 2 both, 3 uploader
_by: 0
# 0 all formats, 10 FullHD, 11 720p, 3 SD, 6 Documents, 8 Subtitles, 9 x265, 2 ts raw streams, 1 DVD, 4 Old HD, 12 4K
format: 0
# 0 active & dead, 1 only active, 2 only dead
incldead: 0
# 0 all, 2 English, 6 Other, etc.
language: 0
freebrowse: "{{ if .Config.freeleech }}Free{{ else }}{{ end }}"
sort: "{{ .Config.sort }}"
d: "{{ .Config.type }}"
rows:
selector: table[width="95%"] > tbody > tr.trhover
dateheaders:
selector: ":has(td.ui-widget-header:contains(\"Torrents added\") > b)"
filters:
- name: replace
args: ["Torrents added ", ""]
- name: dateparse
args: "dddd dd MMM yyyy"
fields:
category:
selector: a[href*="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
_type:
selector: a[href*="browse.php?cat="]
attribute: title
_language:
selector: td:nth-child(2) img
attribute: title
_format:
selector: td:nth-child(3) img
attribute: title
title:
selector: a[href*="details.php?hit="]
details:
selector: a[href*="details.php?hit="]
attribute: href
filters:
- name: replace
args: ["hit=1&", ""]
download:
selector: a[href*="details.php?hit="]
attribute: href
filters:
- name: replace
args: ["hit=1&", ""]
files:
selector: td:nth-child(6)
size:
selector: td:nth-child(9)
filters:
- name: regexp
args: ^(.*?)B
- name: append
args: B
grabs:
selector: td:nth-child(9) > b
seeders:
selector: td:nth-child(10)
leechers:
selector: td:nth-child(11)
description:
text: " {{ .Result._type }} {{ .Result._language }} {{ .Result._format }}"
downloadvolumefactor:
case:
span:contains("Free"): 0
"*": 1
uploadvolumefactor:
text: 1
# TBdev (custom)
@@ -0,0 +1,149 @@
---
id: czteam-api
name: CZTeam (API)
description: "CZTeam (CZT) is a ROMANIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
language: ro-RO
type: private
encoding: UTF-8
links:
- https://czteam.me/
caps:
categorymappings:
- {id: 1, cat: XXX, desc: "XxX"}
- {id: 4, cat: PC/ISO, desc: "Games/PC ISO"}
- {id: 5, cat: TV/HD, desc: "TvEps/HD"}
- {id: 6, cat: Audio, desc: "Music/Audio"}
- {id: 7, cat: TV, desc: "TvEps"}
- {id: 9, cat: PC/Mobile-Other, desc: "Mobile"}
- {id: 12, cat: Console, desc: "Games/Consoles"}
- {id: 19, cat: Movies/SD, desc: "Movies/XviD"}
- {id: 20, cat: Movies/DVD, desc: "Movies/DVD-R"}
- {id: 21, cat: PC/Games, desc: "Games/PC Rips"}
- {id: 22, cat: PC, desc: "Software"}
- {id: 23, cat: TV/Anime, desc: "Anime"}
- {id: 24, cat: Other, desc: "Images"}
- {id: 25, cat: Books, desc: "Docs"}
- {id: 28, cat: Movies/DVD, desc: "Movies/DVD-RO"}
- {id: 29, cat: Movies/HD, desc: "Movies/HD"}
- {id: 30, cat: Audio/Video, desc: "Music/MVID"}
- {id: 31, cat: PC/Mac, desc: "MAC"}
- {id: 32, cat: TV/Sport, desc: "Sports"}
- {id: 33, cat: Movies/HD, desc: "Movies/HDTV-RO"}
- {id: 34, cat: TV/HD, desc: "TvEps/HD-RO"}
- {id: 35, cat: Audio/Lossless, desc: "Music/Lossless"}
- {id: 36, cat: Movies/BluRay, desc: "Full BluRay-RO"}
- {id: 37, cat: Movies/3D, desc: "Movies/3D"}
- {id: 38, cat: Movies, desc: "Movies-RO"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
music-search: [q]
book-search: [q]
settings:
- name: passkey
type: text
label: Passkey
- name: info_passkey
type: info
label: About your Passkey
default: "Find your passkey by accessing your <a href=\"https://czteam.me/my.php\" target=\"_blank\">CZTeam profile</a> and scrolling down to the Passkey section."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
login:
# Validate the credentials by hitting the cheapest endpoint that requires
# them. /api.php?action=latest-torrents&limit=1 returns 200 + JSON when the
# passkey is right and 401/403 otherwise.
path: api.php
method: get
inputs:
action: latest-torrents
passkey: "{{ .Config.passkey }}"
limit: 1
error:
- selector: ":root:contains(\"error\")"
search:
paths:
- path: api.php
response:
type: json
noResultsMessage: ""
inputs:
action: search-torrents
passkey: "{{ .Config.passkey }}"
type: "{{ if .Query.IMDBID }}imdb{{ else }}name{{ end }}"
query: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
name: "{{ if .Query.IMDBID }}{{ .Keywords }}{{ else }}{{ end }}"
season: "{{ .Query.Season }}"
episode: "{{ .Query.Ep }}"
category: "{{ range .Categories }}{{.}},{{end}}"
freeleech: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
limit: 100
# 1 name, 2 desc, 3 both, 4 genre
tip: 1
rows:
selector: $
fields:
title:
selector: name
details:
selector: url
download:
selector: download_link
category:
selector: category_id
imdbid:
selector: imdb
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
files:
selector: files
size:
selector: size
date:
# api.php returns "2026-05-09 18:57:50" (server time, Europe/Bucharest)
selector: upload_date
filters:
- name: append
args: " +03:00" # EEST (Bucharest, summer)
- name: dateparse
args: "yyyy-MM-dd HH:mm:ss zzz"
downloadvolumefactor:
# api returns 0=false, 1=true
selector: freeleech
case:
0: 1 # not free
1: 0 # freeleech
uploadvolumefactor:
# api returns 0=false, 1=true
selector: doubleup
case:
0: 1 # not double
1: 2 # double upload
genre:
selector: tags
_internal:
selector: internal
case:
0: "{{ .False }}"
1: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# json czteam-api 2026-05-09
@@ -0,0 +1,198 @@
---
id: danishbits-api
name: DanishBits (API)
description: "DanishBits is a Private Torrent Tracker for MOVIES / TV / GENERAL"
language: en-US
type: private
encoding: UTF-8
links:
- https://danishbits.me/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Audio/Audiobook, desc: "Lydbog (Audiobook)"}
- {id: 9, cat: XXX, desc: "XXX"}
- {id: 4, cat: Audio/Other, desc: "Podcast"}
- {id: 5, cat: Audio, desc: "Musik"}
- {id: 6, cat: Console, desc: "Spil (Games)"}
- {id: 7, cat: PC, desc: "Apps"}
- {id: 8, cat: Books/EBook, desc: "Ebooks"}
- {id: 10, cat: Books/Mags, desc: "Blade & Magasiner (Mags)"}
- {id: 11, cat: Other, desc: "Billeder (Pictures)"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://danishbits.me/\" target=\"_blank\">DanishBits</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Action og eventyr)", "Action_og_eventyr"]
- name: re_replace
args: ["(?i)(Sci-fi og Fantasy)", "Sci-fi_og_Fantasy"]
- name: re_replace
args: ["(?i)(TV film)", "TV_film"]
- name: replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
minimumratio:
text: 1.0
minimumseedtime:
# 7 days (as seconds = 7 x 24 x 60 x 60)
text: 604800
# json UNIT3D 9.2.0
@@ -0,0 +1,185 @@
---
id: daxiangjiao
name: DaXiangJiao (大香蕉)
description: "DaXiangJiao (大香蕉) is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://pt.daxiangjiao.org/
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "Movies/电影", default: true}
- {id: 402, cat: TV, desc: "TV Series/电视剧", default: true}
- {id: 403, cat: TV, desc: "TV Shows/综艺", default: true}
- {id: 404, cat: TV/Documentary, desc: "Documentaries/纪录片", default: true}
- {id: 405, cat: TV/Other, desc: "Animations/动漫&动画", default: true}
- {id: 406, cat: Audio/Video, desc: "Music Videos/音乐MV", default: true}
- {id: 407, cat: TV/Sport, desc: "Sports/赛事", default: true}
- {id: 408, cat: Audio, desc: "HQ Audio/音轨", default: true}
- {id: 409, cat: Other/Misc, desc: "Misc/其他", default: true}
- {id: 410, cat: Movies/Foreign, desc: "Japan and South Korea/日韩", default: false}
- {id: 411, cat: TV, desc: "Domestic/国产", default: false}
- {id: 412, cat: TV/Foreign, desc: "Europe and America/欧美", default: false}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-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: "Cherish your user account. Inactive accounts would be deleted based on the following rules:<ol><li>Veteran User or above would never be deleted.</li><li>Elite User or above would never be deleted if parked (at User CP).</li><li>Parked accounts would be deleted if users have not logged in for more than 400 days in a row.</li><li>Unparked accounts would be deleted if users have not logged in for more than 150 days in a row.</li><li>Accounts with both uploaded and downloaded amount being 0 would be deleted if users have not logged in for more than 100 days in a row.</li></ol>"
login:
# using cookie method because of #15893
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: index.php
selector: a[href="logout.php"]
search:
paths:
- path: torrents.php
categories: [401, 402, 403, 404, 405, 406, 407, 409]
- path: special.php
categories: [410, 411, 412]
inputs:
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
# 0: include dead, 1: alive, 2: dead
incldead: 0
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
# 0: title, 1: description, 3: uploader, 4: imdburl (4 does not appear to work)
search_area: 0
# 0: AND, 2: exact
search_mode: 0
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
# Support in NexusPHP so bots don't pollute trending searches:
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
# Users can change the "Time display type" in their tracker preferences:
date_elapsed:
# time type: time elapsed (default)
selector: td: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: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:nth-child(5)
optional: true
default: 512MB
seeders:
selector: td:nth-child(6)
optional: true
default: 0
leechers:
selector: td:nth-child(7)
optional: true
default: 0
grabs:
selector: td:nth-child(8)
optional: true
default: 0
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
description:
selector: td:nth-child(2)
remove: a, b, font, img, span
# global MR is 0.8 but torrents must be seeded for 1 days regardless of ratio
# minimumratio:
# text: 0.8
minimumseedtime:
# 1 days (as seconds = 24 x 60 x 60)
text: 86400
# NexusPHP v1.10.2 2026-04-11
@@ -0,0 +1,174 @@
---
id: depthstudio
name: Depth Studio
description: "Depth Studio is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://dstudio.me/
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "电影-Movies"}
- {id: 402, cat: TV, desc: "电视剧-TV Series"}
- {id: 403, cat: TV, desc: "综艺-TV Shows"}
- {id: 404, cat: TV/Documentary, desc: "纪录片-Documentaries"}
- {id: 405, cat: TV/Anime, desc: "动漫-Animes"}
- {id: 406, cat: Audio/Video, desc: "演唱会-Music Videos"}
- {id: 407, cat: TV/Sport, desc: "体育节目-Sports"}
- {id: 408, cat: Audio, desc: "音乐-Music"}
- {id: 409, cat: Other, desc: "其他-Other"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, doubanid]
movie-search: [q, imdbid, doubanid]
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: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 100 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 60 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 60 consecutive days.</li></ol>"
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: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
# 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: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
# 0 AND, 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
imdbid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="imdb.com/title/tt"]
attribute: href
doubanid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="movie.douban.com/subject/"]
attribute: href
date_elapsed:
# time type: time elapsed (default)
selector: td: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: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:nth-child(5)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
grabs:
selector: td: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
minimumseedtime:
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
description:
selector: td:nth-child(2)
remove: a, b, font, img, span
# NexusPHP v1.10.2 2026-04-11
@@ -0,0 +1,175 @@
---
id: draupnirr
replaces:
- yggrasil
name: Draupnirr
description: "Draupnirr (Yggrasil) is a FRENCH Semi-Private Torrent Tracker for MOVIES / TV / GENERAL"
language: fr-FR
type: semi-private
encoding: UTF-8
requestDelay: 0.5 # 120 requests per minute per API key
links:
- https://draupnirr.xyz/
legacylinks:
- https://yggrasil.xyz/
caps:
categorymappings:
# from https://draupnirr.xyz/torznab/api?t=caps&apikey=YOUR-API-KEY
- {id: 1000, cat: Console, desc: "Consoles"}
- {id: 2000, cat: Movies, desc: "Films"}
- {id: 2030, cat: Movies/SD, desc: "Films SD"}
- {id: 2040, cat: Movies/HD, desc: "Films HD"}
- {id: 2045, cat: Movies/UHD, desc: "Films UHD"}
- {id: 3000, cat: Audio, desc: "Musique"}
- {id: 3030, cat: Audio/Audiobook, desc: "Livres audio"}
- {id: 3040, cat: Audio/Lossless, desc: "Musique lossless"}
- {id: 4000, cat: PC, desc: "Logiciels"}
- {id: 4030, cat: PC/Mac, desc: "Logiciels macOS"}
- {id: 4040, cat: PC/Mobile-Other, desc: "Logiciels mobiles"}
- {id: 4050, cat: PC/Games, desc: "Jeux"}
- {id: 5000, cat: TV, desc: "Séries"}
- {id: 5030, cat: TV/SD, desc: "Séries SD"}
- {id: 5040, cat: TV/HD, desc: "Séries HD"}
- {id: 5045, cat: TV/UHD, desc: "Séries UHD"}
- {id: 5060, cat: TV/Sport, desc: "Sport"}
- {id: 5070, cat: TV/Anime, desc: "Animation"}
- {id: 7000, cat: Books, desc: "Livres"}
- {id: 7010, cat: Books/Mags, desc: "Presse"}
- {id: 7020, cat: Books/EBook, desc: "eBooks"}
- {id: 7030, cat: Books/Comics, desc: "BD / Comics"}
- {id: 8000, cat: Other, desc: "Autres"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
allowrawsearch: true
settings:
- name: apikey
type: text
label: API Key
- name: info_key
type: info
label: About your API key
default: "Your API key is your personal announce key. You can find it on your <b>Profil › Paramètres</b> page on the site."
- 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:
# invalid apikey returns HTTP 200 with a Torznab <error code="100"/> document
path: torznab/api
method: get
inputs:
apikey: "{{ .Config.apikey }}"
t: caps
error:
- selector: error[code]
message:
selector: error[code]
attribute: description
search:
paths:
- path: torznab/api
response:
type: xml
inputs:
apikey: "{{ .Config.apikey }}"
t: "{{ .Query.Type }}"
# .Keywords already carries the SxxEyy episode string for tv searches
q: "{{ .Keywords }}"
cat: "{{ join .Categories \",\" }}"
imdbid: "{{ .Query.IMDBID }}"
tmdbid: "{{ .Query.TMDBID }}"
limit: 100
rows:
selector: rss > channel > item
fields:
# first category attr is the most precise standard id (2045, 5040, ...)
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
download:
selector: enclosure
attribute: url
imdbid:
selector: "[name=imdb]"
attribute: value
tmdbid:
selector: "[name=tmdbid]"
attribute: value
date:
# Tue, 02 Jun 2026 19:24:18 +0000
selector: pubDate
filters:
- name: dateparse
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
size:
selector: size
files:
selector: files
grabs:
selector: grabs
seeders:
selector: "[name=seeders]"
attribute: value
leechers:
selector: "[name=leechers]"
attribute: value
downloadvolumefactor:
selector: "[name=downloadvolumefactor]"
attribute: value
uploadvolumefactor:
selector: "[name=uploadvolumefactor]"
attribute: value
minimumseedtime:
selector: "[name=minimumseedtime]"
attribute: value
minimumratio:
# only present while the ratio-enforcement flag is active on the site
selector: "[name=minimumratio]"
attribute: value
optional: true
# torznab xml
@@ -0,0 +1,192 @@
---
id: dreadvault-api
name: DreadVault (API)
description: "DreadVault is a Private Torrent Tracker for HORROR MOVIES / TV"
language: en-US
type: private
encoding: UTF-8
links:
- https://dreadvault.org/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movie"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Books, desc: "eBook"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
book-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://dreadvault.org/\" target=\"_blank\">DreadVault</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_activity
type: info
label: Account Activity
default: "All new members must generate some activity within the first 90 days of joining. Activity includes uploading, downloading, or cross-seeding. Members failing to meet these requirements may be automatically disabled."
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: re_replace
args: ["(?i)(TV Movie)", "TV_Movie"]
- name: replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
# global MR is 0.7 but torrents must be seeded for 5 days regardless of ratio
# minimumratio:
# text: 0.7
minimumseedtime:
# 5 days (as seconds = 5 x 24 x 60 x 60)
text: 432000
# json UNIT3D 9.2.0
@@ -0,0 +1,152 @@
---
id: ds-reloaded
name: DS-Reloaded
description: "DS-Reloaded (DS.R) is a GERMAN Private Torrent Tracker for MOVIES / TV / GENERAL"
language: de-DE
type: private
encoding: UTF-8
links:
- https://ds-reloaded.com/
legacylinks:
- https://dark-shadow.ml/
- https://projekt.dark-shadow.me/
- https://dark-shadow.me/
caps:
categorymappings:
- {id: 32, cat: Movies/HD, desc: "Filme > HD"}
- {id: 28, cat: Movies/SD, desc: "Filme > SD"}
- {id: 114, cat: Movies/UHD, desc: "Filme > UHD"}
- {id: 140, cat: Movies/BluRay, desc: "Filme > BluRay"}
- {id: 138, cat: Movies, desc: "Filme > Pack's"}
- {id: 147, cat: Movies/HD, desc: "Filme > h266/x266"}
- {id: 150, cat: Movies/Foreign, desc: "Filme > International"}
- {id: 57, cat: TV/HD, desc: "Serien > HD"}
- {id: 60, cat: TV/SD, desc: "Serien > SD"}
- {id: 139, cat: TV/UHD, desc: "Serien > UHD"}
- {id: 59, cat: TV, desc: "Serien > Pack's"}
- {id: 110, cat: Audio/MP3, desc: "Audio > MP3"}
- {id: 48, cat: Audio/Lossless, desc: "Audio > Flac"}
- {id: 52, cat: Audio, desc: "Audio > Pack"}
- {id: 63, cat: Audio/Audiobook, desc: "Audio > Hörbuch"}
- {id: 120, cat: Audio/Video, desc: "Audio > Videos"}
- {id: 12, cat: PC/0day, desc: "Apps > Windows"}
- {id: 125, cat: PC/Mac, desc: "Apps > Mac-OSX"}
- {id: 11, cat: PC/Mobile-Other, desc: "Apps > Mobil"}
- {id: 141, cat: PC/ISO, desc: "Apps > Other"}
- {id: 15, cat: TV/Documentary, desc: "Doku > SD"}
- {id: 14, cat: TV/Documentary, desc: "Doku > HD"}
- {id: 148, cat: TV/Documentary, desc: "Doku > UHD"}
- {id: 123, cat: TV/Documentary, desc: "Doku > Pack's"}
- {id: 17, cat: PC/Games, desc: "Spiel > PC"}
- {id: 24, cat: Console, desc: "Spiel > Konsole"}
- {id: 126, cat: Console/Other, desc: "Spiel > Mobil"}
- {id: 121, cat: Console, desc: "Spiel > Wimmelbild"}
- {id: 151, cat: TV/Sport, desc: "Sport > UHD"}
- {id: 61, cat: TV/Sport, desc: "Sport > HD"}
- {id: 62, cat: TV/Sport, desc: "Sport > SD"}
- {id: 96, cat: Books/Mags, desc: "ePaper > Zeitungen"}
- {id: 136, cat: Books/EBook, desc: "ePaper > E-Book"}
- {id: 137, cat: Books/Comics, desc: "ePaper > Comics"}
- {id: 143, cat: XXX/x264, desc: "XXX > HD / SD"}
- {id: 149, cat: XXX/Other, desc: "XXX > Magazine"}
- {id: 75, cat: XXX/Pack, desc: "XXX > Pack's"}
- {id: 142, cat: XXX/ImageSet, desc: "XXX > Pic's"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: info_password
type: info
label: About Password Expiry
default: "DS.R has an <b>8 week Password Expiry</b> regime. So if the Indexer has stopped working then the first thing you should do is check if your password has expired by login in at <a href=\"https://ds-reloaded.com/login.php\" target=\"_blank\">DS-Reloaded</a>, and if necessary use the <b>Passwort anfordern</b> (<i>Request password</i>) button to renew it."
- name: cookie
type: text
label: Cookie
- name: info_cookie
type: info_cookie
- name: onlyupload
type: checkbox
label: Search OnlyUpload
default: false
- name: info_free
type: info
label: About OnlyUpload at DS.R
default: "OnlyUpload are torrents where download is not counted but upload is. Good for building your Ratio up. (On the Jackett dashboard search results these are tagged as Freeleech)."
- name: info_activity
type: info
label: Account Inactivity
default: "Inactive accounts will be deactivated after 7 weeks and deleted after another 3 weeks."
login:
# using cookie method because login page can present second page for a challenge eg. 9+2=?
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: index.php
selector: a[href="logout.php"]
search:
paths:
# https://ds-reloaded.com/selection.php?ajax=true&search=&page=1&free=yes&c32=1&c28=1
- path: selection.php
response:
type: json
inputs:
ajax: true
search: "{{ .Keywords }}"
page: 1
# all=active+inactive, yes=active, no=inactive (the default is all, which ajax simply drops the parm)
# visible: all
# all=all+onlyup, yes=onlyup, no=without onlyup (the default is all, which ajax simply drops the parm)
free: "{{ if .Config.onlyupload }}yes{{ else }}{{ end }}"
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
rows:
selector: items
fields:
category:
selector: category_id
title:
selector: name
_id:
selector: id
details:
text: "details.php?id={{ .Result._id }}"
download:
selector: download_link
poster:
selector: cover
size:
selector: size
date:
# 25.12.2024 16:02
selector: added
filters:
- name: append
args: " +01:00" # CET
- name: dateparse
args: "dd.MM.yyyy HH:mm zzz"
seeders:
selector: seeders
leechers:
selector: leechers
_onlyup:
selector: free_button:contains(Only Upload)
optional: true
downloadvolumefactor:
text: "{{ if .Result._onlyup }}0{{ else }}1{{ end }}"
uploadvolumefactor:
text: 1
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# THX JSON
+156
View File
@@ -0,0 +1,156 @@
---
id: funfile
name: FunFile
description: "FunFile is a Private Torrent Tracker for MOVIES / TV / GENERAL"
language: en-US
type: private
encoding: UTF-8
links:
- https://www.funfile.org/
caps:
categorymappings:
- {id: 45, cat: Other, desc: "0Day"}
- {id: 44, cat: TV/Anime, desc: "Anime"}
- {id: 22, cat: PC, desc: "Applications"}
- {id: 43, cat: Audio/Audiobook, desc: "Audio Books"}
- {id: 27, cat: Books/EBook, desc: "Ebook"}
- {id: 4, cat: PC/Games, desc: "Games"}
- {id: 40, cat: Other/Misc, desc: "Miscellaneous"}
- {id: 19, cat: Movies, desc: "Movies"}
- {id: 6, cat: Audio, desc: "Music"}
- {id: 31, cat: PC/Mobile-Other, desc: "Portable"}
- {id: 49, cat: Other, desc: "Tutorials"}
- {id: 7, cat: TV, desc: "TV"}
- {id: 48, cat: XXX/Other, desc: "XXX 0Day"}
- {id: 46, cat: XXX, desc: "XXX Movies"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, genre]
movie-search: [q, imdbid, genre]
music-search: [q]
book-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: info_activity
type: info
label: Account Inactivity
default: "User accounts that are inactive for more than 42 days (ie haven't logged into the site) and NOT PARKED are automatically AND irretrievably deleted. Those with Donor VIP status are immune to the 42 day purging up to 1 year."
- name: info_results
type: info
label: Results Per Page
default: "For best results, change the 'Torrents per page' setting to 100 in your profile."
login:
path: login.php
method: form
form: form[name="login"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
returnto: ""
login: Login
captcha:
type: image
selector: img#captcha
input: captcha_code
error:
- selector: td.mf_content:has(h1:contains("Captcha Error"))
- selector: td.mf_content:contains("Incorrect Captcha")
- selector: td.mf_content:contains("Login failed")
- selector: td.mf_content:contains("Access denied")
- selector: td.mf_content:contains("remaining tries")
- selector: td.mf_content:contains("Security code")
- selector: td.mf_content:contains("Wrong Code")
test:
path: index.php
selector: a[href*="logout.php"]
search:
paths:
- path: browse.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ if .Query.Genre }}{{ .Query.Genre }} {{ else }}{{ end }}{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
cat: 0
incldead: "{{ if .Config.freeleech }}3{{ else }}1{{ end }}"
showspam: 1
s_title: "{{ if or .Query.IMDBID .Query.Genre }}{{ else }}1{{ end }}"
s_desc: "{{ if .Query.IMDBID }}1{{ else }}{{ end }}"
s_tag: "{{ if .Query.Genre }}1{{ else }}{{ end }}"
rows:
selector: "table.mainframe table[cellpadding=\"2\"] > tbody > tr:has(a[href^=\"download.php\"]), table.mainframe table[cellpadding=\"2\"] > tbody > tr[id^=\"ka\"]"
after: 1
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a[href^="details.php?id="]
attribute: title
details:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["&hit=1", ""]
download:
selector: a[href^="download.php"]
attribute: href
files:
selector: td.row3:nth-child(4)
date:
selector: td.row3:nth-child(6)
filters:
- name: timeago
size:
selector: td.row3:nth-child(8)
grabs:
selector: td.row3:nth-child(9)
seeders:
selector: td.row3:nth-child(10)
leechers:
selector: td.row3:nth-child(11)
uploadvolumefactor:
selector: td.row2 table tr:nth-child(3) td:nth-child(1)
optional: true
default: 1
filters:
- name: replace
args: ["X", ""]
downloadvolumefactor:
selector: td.row2 table tr:nth-child(3) td:nth-child(2)
optional: true
default: 1
filters:
- name: replace
args: ["X", ""]
genre:
selector: td.row2 span[style="float:left"]
filters:
- name: validate
args: "action, adventure, animation, biography, comedy, crime, documentary, drama, family, fantasy, game-show, history, home_&_garden, home_and_garden, horror, music, musical, mystery, news, reality, reality-tv, romance, sci-fi, science-fiction, short, sport, talk-show, thriller, travel, war, western"
description:
text: "{{ .Result.genre }}"
minimumratio:
text: 1.0
minimumseedtime:
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
# TBDev
@@ -0,0 +1,213 @@
---
id: funzone-api
name: funZone (API)
description: "funZone is a ROMANIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
language: ro-RO
type: private
encoding: UTF-8
links:
- https://myfunzone.org/
caps:
categorymappings:
- {id: 3, cat: Movies/HD, desc: "Movies HD-RO"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 1, cat: Movies, desc: "Movies HD"}
- {id: 4, cat: PC/Games, desc: "Games PC"}
- {id: 5, cat: Audio, desc: "Music"}
- {id: 23, cat: Movies/UHD, desc: "Movies UHD-RO"}
- {id: 6, cat: PC, desc: "Software"}
- {id: 7, cat: TV/Anime, desc: "Anime"}
- {id: 8, cat: TV/Documentary, desc: "Documentaries"}
- {id: 9, cat: TV/Sport, desc: "Sport"}
- {id: 10, cat: Console, desc: "Games Console"}
- {id: 11, cat: Movies, desc: "Movies Romanian"}
- {id: 12, cat: Movies/Other, desc: "Cartoons"}
- {id: 32, cat: Movies/Other, desc: "Cartoons RO"}
- {id: 17, cat: XXX, desc: "XXX"}
- {id: 18, cat: PC/Games, desc: "Classic Games"}
- {id: 24, cat: Audio, desc: "Music/Packs"}
- {id: 19, cat: Audio/Video, desc: "Videos"}
- {id: 25, cat: TV, desc: "TV/Packs"}
- {id: 20, cat: Movies/SD, desc: "Movies SD-RO"}
- {id: 27, cat: Other, desc: "Pics/Wallpapers"}
- {id: 21, cat: Books, desc: "EBooks"}
- {id: 28, cat: PC, desc: "Software/Packs"}
- {id: 22, cat: Movies, desc: "Classic Movies"}
- {id: 29, cat: Movies/UHD, desc: "Movies UHD"}
- {id: 30, cat: TV, desc: "Shows"}
- {id: 31, cat: Audio/Audiobook, desc: "AudioBooks"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://myfunzone.org/\" target=\"_blank\">funZone</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: re_replace
args: ["(?i)(TV Movie)", "TV_Movie"]
- name: replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
# global MR is 0.5 but torrents must be seeded for 3 days regardless of ratio
# minimumratio:
# text: 0.5
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# json UNIT3D 9.2.0
@@ -0,0 +1,246 @@
---
id: g3minitr4ck3r-api
name: G3MINI TR4CK3R (API)
description: "G3MINI TR4CK3R is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
language: fr-FR
type: private
encoding: UTF-8
links:
- https://gemini-tracker.org/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Films"}
- {id: 2, cat: TV, desc: "Séries"}
- {id: 10, cat: TV/Sport, desc: "Sports"}
- {id: 13, cat: Movies/Other, desc: "Documentaires - Film"}
- {id: 14, cat: TV/Documentary, desc: "Documentaires - Series"}
- {id: 15, cat: TV, desc: "Documentaires - Émission TV"}
- {id: 3, cat: PC/Games, desc: "Jeux PC"}
- {id: 7, cat: Movies, desc: "Films Animation Japonaise"}
- {id: 6, cat: TV/Anime, desc: "Animes"}
- {id: 8, cat: Books/Comics, desc: "Bandes dessinées"}
- {id: 11, cat: Books/Comics, desc: "Mangas"}
- {id: 9, cat: Books/Mags, desc: "Magazines"}
- {id: 12, cat: Books/EBook, desc: "Livres"}
- {id: 16, cat: Audio/Audiobook, desc: "Livres - Audios"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
book-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://gemini-tracker.org/\" target=\"_blank\">G3MINI TR4CK3R</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: use_fl_tokens
type: checkbox
label: Use Freeleech Tokens automatically
default: true
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- 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
- name: vfq
type: checkbox
label: Replace VFQ with FRENCH
default: false
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title_phase1:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
title_vfq:
text: "{{ .Result.title_phase1 }}"
filters:
- name: re_replace
args: ["(?i)\\b(VFQ)\\b", "FRENCH"]
title_phase2:
text: "{{ if .Config.vfq }}{{ .Result.title_vfq }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
title_vostfr:
text: "{{ .Result.title_phase2 }}"
filters:
- name: re_replace
args: ["(?i)\\b(vostfr|subfrench)\\b", "ENGLISH"]
title_phase3:
text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
title_multilang:
text: "{{ .Result.title_phase3 }}"
filters:
- name: re_replace
args: ["(?i)\\b(MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR)))\\b", "{{ .Config.multilanguage }}"]
title:
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase3 }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
filters:
- name: append
args: "{{ if .Config.use_fl_tokens }}?use_token=1{{ else }}{{ end }}"
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
# global MR is 0.75 but torrents must be seeded for 2 days regardless of ratio
# minimumratio:
# text: 0.75
minimumseedtime:
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
# json UNIT3D 9.2.0 (custom)
@@ -0,0 +1,287 @@
---
id: hdforever2fa
name: HD-Forever2FA
description: "HD-Forever (HD-F) is a FRENCH Private Torrent Tracker for HD MOVIES. This indexer uses cookie login for 2FA."
language: fr-FR
type: private
encoding: UTF-8
links:
- https://hdf.world/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Film"}
- {id: 2, cat: Movies, desc: "Film d'animation"}
- {id: 3, cat: Movies, desc: "Spectacle"}
- {id: 4, cat: Movies, desc: "Concert"}
- {id: 5, cat: TV, desc: "Série"}
- {id: 6, cat: TV/Anime, desc: "Série d'animation"}
- {id: 7, cat: Movies, desc: "Documentaire"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid]
movie-search: [q, imdbid, tmdbid]
allowtvsearchimdb: true
settings:
- name: cookie
type: text
label: Cookie
- name: info_cookie
type: info_cookie
- name: info
type: info
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: usetoken
type: checkbox
label: Always try to use the FreeLeech Token
default: false
- name: info_token
type: info
label: About the Freeleech token
default: If you <b>do not</b> have any <i>Freeleech tokens</i> then do not tick this box.</br>Attempting a token download when you have no tokens will generate an <b>error</b>.
- 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
- name: sort
type: select
label: Sort requested from site
default: time
options:
time: created
seeders: seeders
size: size
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_radarr
type: info
label: About Radarr
default: The HD-F web site cannot find movies if you use the release year in a title search. When you define your Radarr Indexer remember to tick the <i>Remove year from search string</i> checkbox.
- name: info_release_name
type: info
label: About release names
default: For more stable release names, enable <b>Afficher les noms de fichiers</b> in your HD-F profile settings.
login:
# using cookie method because login page can present second page for 2FA when enabled
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: torrents.php
selector: a[href^="logout.php?auth="]
search:
# https://hdf.world/torrents.php?searchstr=Un+Singe+en+hiver+1962&freetorrent=1&order_by=time&order_way=desc&action=advanced&searchsubmit=1
paths:
- path: torrents.php
inputs:
$raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
searchstr: "{{ .Keywords }}"
order_by: "{{ .Config.sort }}"
order_way: "{{ .Config.type }}"
action: advanced
searchsubmit: 1
# 1 freeleech, 2 neutral, 3 both, 0 normal
freetorrent: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
tmdbid: "{{ .Query.TMDBID }}"
imdbid: "{{ .Query.IMDBID }}"
rows:
selector: table#torrent_table > tbody > tr.torrent:has(a[href^="torrents.php?action=download&"])
fields:
category:
selector: td.cats_col
case:
div.cats_film: 1
div[class*="cats_filmd"]: 2
div.cats_spectacle: 3
div.cats_concert: 4
div.cats_série: 5
div[class*="cats_séried"]: 6
div.cats_documentaire: 7
details:
selector: a[href^="torrents.php?id="]
attribute: href
download_regular:
selector: a[href^="torrents.php?action=download&"]
attribute: href
download_usetoken:
selector: a[href^="torrents.php?action=download&"]
attribute: href
filters:
- name: append
args: "&usetoken=1"
download:
text: "{{ if .Config.usetoken }}{{ .Result.download_usetoken }}{{ else }}{{ .Result.download_regular }}{{ end }}"
_release_group:
selector: span.team_name
optional: true
filters:
- name: trim
poster:
selector: div.group_image img
attribute: src
imdbid:
selector: a[href*="imdb.com/title/tt"]
attribute: href
tmdbid:
selector: a[href*="themoviedb.org/movie/"], a[href*="themoviedb.org/tv/"]
attribute: href
date:
selector: span.time
filters:
- name: replace
args: ["Il y a ", ""]
- name: replace
args: ["heures", "hours"]
- name: replace
args: ["heure", "hour"]
- name: replace
args: ["jours", "days"]
- name: replace
args: ["jour", "day"]
- name: replace
args: ["semaines", "weeks"]
- name: replace
args: ["semaine", "week"]
- name: replace
args: ["mois", "months"]
- name: replace
args: ["ans", "years"]
- name: replace
args: ["an", "year"]
- name: append
args: " ago"
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
downloadvolumefactor:
case:
"div.torrent_info .tl_free": 0
"div.torrent_info .tl_notice[title*=\"Freeleech\"]": 0 # Global freeleech enabled
"div.torrent_info .tl_notice[title=\"-75%\"]": 0.75
"div.torrent_info .tl_notice[title=\"-50%\"]": 0.50
"div.torrent_info .tl_notice[title=\"-25%\"]": 0.25 # for this site this is the count ratio, which is 25% of the total torrent size. (I.E. it's 75% free)
"*": 1
uploadvolumefactor:
text: 1
title_torrent_filename:
selector: div.torrent_filename_row
optional: true
filters:
- name: trim
title_parsed:
selector: div.group_info
remove: span.team_name, span:has(a[href^="torrents.php?action=download"]), div.tags, div.vote_controls, div.stats-content, .add_bookmark, img, .tl_free, .tl_notice, .torrent_filename_row
filters:
- name: replace
args: ["\n", " "]
- name: re_replace
args: ["\\[(?:Concert|Film|Film d'animation|Spectacle|Série|Série d'animation|Documentaire)\\]", ""]
- name: replace
args: ["Blu-ray Original", "Complete.BluRay"]
- name: replace
args: ["Blu-ray Remux", "Remux"]
- name: replace
args: ["Blu-ray Rip", "BluRay.Rip"]
- name: replace
args: ["mHD", "mHD.BluRay.Rip"]
- name: re_replace
args: ["(?:\\]|\\/\\s)DC", ".Directors.Cut"]
- name: re_replace
args: ["(?:\\]|\\/\\s)VL", ".Extended"]
- name: re_replace
args: ["(?:\\]|\\/\\s)RM", ".Remastered"]
- name: re_replace
args: ["(?:\\]|\\/\\s)UC", ".Uncut"]
- name: re_replace
args: ["(?:\\]|\\/\\s)UR", ".Unrated"]
- name: re_replace
args: ["(?:\\]|\\/\\s)ES", ".Special.Edition"]
- name: re_replace
args: ["(?:\\]|\\/\\s)Crit", ".Criterion"]
- name: re_replace
args: ["(?:\\/ )?(?:Remplaçable|Complété|Bonus|Note Modo|[2-9]+ème partie|\\b(?:Cust(?:_sub)?|WAC|BFI|MUET)\\b)(?: \\/)?", ""]
- name: trim
- name: re_replace
args: ["[\\[\\]\\/\\s?.,:'!]+", "."]
- name: trim
args: "."
- name: re_replace
args: ["(?i)\\.VFF\\.VFQ\\.(?:MULTI|StFR(?:\\.MULTI)?|VO(?:\\.StFR)?)", ".MULTI.VF2"]
- name: re_replace
args: ["(?i)\\.VFF\\.(?:MULTI|StFR(?:\\.MULTI)?|VO(?:\\.StFR)?)", ".MULTI.VFF"]
- name: re_replace
args: ["(?i)\\.VFQ\\.(?:MULTI|StFR(?:\\.MULTI)?|VO(?:\\.StFR)?)", ".MULTI.VFQ"]
- name: re_replace
args: ["(?i)\\.VOQ\\.(?:MULTI|StFR(?:\\.MULTI)?|VO(?:\\.StFR)?)", ".MULTI.VOQ"]
- name: re_replace
args: ["(?i)\\.VFI\\.(?:MULTI|StFR(?:\\.MULTI)?|VO(?:\\.StFR)?)", ".MULTI.VFI"]
- name: re_replace
args: ["(?i)\\.VOF\\.(?:MULTI|StFR(?:\\.MULTI)?|VO(?:\\.StFR)?)", ".MULTI.VOF"]
- name: re_replace
args: ["(?i)\\.(?:VO\\.)?StFR", ".VOSTFR"]
- name: append
args: "{{ if .Result._release_group }}-{{ .Result._release_group }}{{ else }}{{ end }}"
title_phase1:
text: "{{ if .Result.title_torrent_filename }}{{ .Result.title_torrent_filename }}{{ else }}{{ .Result.title_parsed }}{{ end }}"
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 }}"
description:
selector: div.group_info
filters:
- name: replace
args: ["\n", " "]
- name: re_replace
args: ["\\s+", " "]
# global MR is 0.6 but torrents must be seeded for 3 days regardless of ratio
# minimumratio:
# text: 0.6
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# Gazelle
@@ -0,0 +1,188 @@
---
id: hdspacecookie
name: HD-SpaceCookie
description: "HD-Space (HDS) is a Private Torrent Tracker for HD MOVIES / TV. This uses the cookie method for access"
language: en-US
type: private
encoding: UTF-8
links:
- https://hd-space.org/
caps:
categorymappings:
- {id: 15, cat: Movies/BluRay, desc: "Movie / Blu-ray"}
- {id: 40, cat: Movies/HD, desc: "Movie / Remux"}
- {id: 18, cat: Movies/HD, desc: "Movie / 720p"}
- {id: 19, cat: Movies/HD, desc: "Movie / 1080p"}
- {id: 46, cat: Movies/UHD, desc: "Movie / 2160p"}
- {id: 21, cat: TV/HD, desc: "TV Show / 720p HDTV"}
- {id: 22, cat: TV/HD, desc: "TV Show / 1080p HDTV"}
- {id: 45, cat: TV/UHD, desc: "TV Show / 2160p HDTV"}
- {id: 24, cat: TV/Documentary, desc: "Documentary / 720p"}
- {id: 25, cat: TV/Documentary, desc: "Documentary / 1080p"}
- {id: 47, cat: TV/Documentary, desc: "Documentary / 2160p"}
- {id: 27, cat: TV/Anime, desc: "Animation / 720p"}
- {id: 28, cat: TV/Anime, desc: "Animation / 1080p"}
- {id: 48, cat: TV/Anime, desc: "Animation / 2160p"}
- {id: 30, cat: Audio/Lossless, desc: "Music / HQ Audio"}
- {id: 31, cat: Audio/Video, desc: "Music / Videos"}
- {id: 33, cat: XXX, desc: "XXX / 720p"}
- {id: 34, cat: XXX, desc: "XXX / 1080p"}
- {id: 49, cat: XXX, desc: "XXX / 2160p"}
- {id: 36, cat: Movies/Other, desc: "Trailers"}
- {id: 37, cat: PC, desc: "Software"}
- {id: 38, cat: Other, desc: "Others"}
- {id: 41, cat: Movies/UHD, desc: "Movie / 4K UHD"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
music-search: [q]
settings:
- name: cookie
type: text
label: Cookie
- name: info_cookie
type: info_cookie
- name: freeleech
type: checkbox
label: Filter freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: 3
options:
3: created
5: seeders
4: size
2: title
- name: type
type: select
label: Order requested from site
default: 2
options:
2: desc
1: asc
login:
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: index.php
selector: a[href="logout.php"]
search:
paths:
# https://hd-space.org/index.php?page=torrents&search=&active=0&options=0&category=15;18;19
- path: index.php
inputs:
page: torrents
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBIDShort }}{{ else }}{{ .Keywords }}{{ end }}"
category: "{{ if .Categories }}{{ range .Categories }}{{.}};{{end}}{{ else }}0{{ end }}"
# 0 default, 1 genre, 2 imdb, 3 uploader
options: "{{ if .Query.IMDBID }}2{{ else }}0{{ end }}"
# 0 all, 1 activeonly, 2 deadonly
active: 0
order: "{{ .Config.sort }}"
by: "{{ .Config.type }}"
rows:
selector: "table.lista[width=\"100%\"] > tbody > style ~ tr{{ if .Config.freeleech }}:has(img[src=\"gold/gold.png\"]){{ else }}{{ end }}, table.lista[width=\"100%\"] > tbody > style ~ tr{{ if .Config.freeleech }}:has(img[src=\"images/sf.png\"]){{ else }}{{ end }}"
fields:
category:
selector: td a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
# change broken/missing cat 0 to Others
- name: re_replace
args: ["\\b0\\b", "38"]
title_default:
selector: td a[href^="index.php?page=torrent-details"]
filters:
- name: htmldecode
title:
selector: a[href^="download.php?id="]
attribute: href
filters:
- name: querystring
args: f
- name: htmldecode
- name: htmldecode # double usage is intentional
- name: replace
args: [".torrent", ""]
- name: trim
optional: true
default: "{{ .Result.title_default }}"
details:
selector: td a[href^="index.php?page=torrent-details"]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
poster:
selector: td a[href^="index.php?page=torrent-details"]
attribute: onmouseover
filters:
- name: regexp
args: src=\./(.+?)\s
imdbid:
selector: td a[href^="index.php?page=torrent-details"]
attribute: onmouseover
filters:
- name: regexp
args: /(\d{8}).jpg
date_day:
# Today at 09:17:08
# Yesterday at 17:11:03
selector: td:nth-child(5):contains("day")
# auto adjusted by site account profile
optional: true
filters:
- name: re_replace
args: ["[ ]at|[//\xa0\\s,]+", " "]
date_year:
# January 30, 2024, 20:23:21
selector: td:nth-child(5):not(:contains("day"))
# auto adjusted by site account profile
optional: true
filters:
- name: re_replace
args: ["[//\xa0\\s,]+", " "]
- name: dateparse
args: "MMMM dd yyyy HH:mm:ss"
date:
text: "{{ if or .Result.date_day .Result.date_year }}{{ or .Result.date_day .Result.date_year }}{{ else }}now{{ end }}"
size:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
grabs:
selector: td:nth-child(10)
genre:
selector: td:nth-child(2)
remove: a
description:
text: "{{ .Result.genre }}"
downloadvolumefactor:
case:
img[src="images/sf.png"]: 0 # side freeleech
img[src="gold/gold.png"]: 0
img[src="gold/silver.png"]: 0.5
"*": 1
uploadvolumefactor:
text: 1
minimumratio:
text: 1.0
minimumseedtime:
# 1 day (as seconds = 1 x 24 x 60 x 60)
text: 86400
# xbtit
+182
View File
@@ -0,0 +1,182 @@
---
id: herobit
replaces:
- carphunter
name: HeroBit
description: "HeroBit is a HUNGARIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
language: hu-HU
type: private
encoding: UTF-8
requestDelay: 2
links:
- https://herobit.info/
legacylinks:
- https://carp-hunter.hu/
caps:
# dont forget to update the path categories in the search block
categorymappings:
- {id: 1, cat: Movies/SD, desc: "Film/Cam/Eng", default: true}
- {id: 2, cat: Movies/SD, desc: "Film/Cam/Hun", default: true}
- {id: 8, cat: Movies/DVD, desc: "Film/DVD/Eng", default: true}
- {id: 7, cat: Movies/DVD, desc: "Film/DVD/Hun", default: true}
- {id: 18, cat: Movies/HD, desc: "Film/HD/Eng", default: true}
- {id: 17, cat: Movies/HD, desc: "Film/HD/Hun", default: true}
- {id: 4, cat: Movies/SD, desc: "Film/SD/Eng", default: true}
- {id: 3, cat: Movies/SD, desc: "Film/SD/Hun", default: true}
- {id: 23, cat: Audio/Audiobook, desc: "Hangoskönyv", default: true}
- {id: 19, cat: PC/Games, desc: "Játék/ISO", default: true}
- {id: 20, cat: PC/Games, desc: "Játék/RIP", default: true}
- {id: 24, cat: Other, desc: "Képek", default: true}
- {id: 21, cat: Books, desc: "Könyv/Eng", default: true}
- {id: 22, cat: Books, desc: "Könyv/Hun", default: true}
- {id: 35, cat: TV/Anime, desc: "Mese/Eng", default: true}
- {id: 36, cat: TV/Anime, desc: "Mese/Hun", default: true}
- {id: 25, cat: PC/Mobile-Other, desc: "Mobil", default: true}
- {id: 30, cat: PC/ISO, desc: "Programok/ISO", default: true}
- {id: 31, cat: PC/0day, desc: "Programok/RIP", default: true}
- {id: 33, cat: TV/SD, desc: "Sorozat/Eng", default: true}
- {id: 43, cat: TV/HD, desc: "Sorozat/HD/Eng", default: true}
- {id: 42, cat: TV/HD, desc: "Sorozat/HD/Hun", default: true}
- {id: 32, cat: TV/SD, desc: "Sorozat/Hun", default: true}
- {id: 29, cat: Audio/Lossless, desc: "Zene/FLAC/Eng", default: true}
- {id: 28, cat: Audio/Lossless, desc: "Zene/FLAC/Hun", default: true}
- {id: 27, cat: Audio/MP3, desc: "Zene/MP3/Eng", default: true}
- {id: 26, cat: Audio/MP3, desc: "Zene/MP3/Hun", default: true}
- {id: 41, cat: XXX/DVD, desc: "XXX/DVD", default: false}
- {id: 34, cat: XXX/SD, desc: "XXX/Filmek", default: false}
- {id: 40, cat: XXX/x264, desc: "XXX/HD", default: false}
- {id: 39, cat: XXX/ImageSet, desc: "XXX/Képek", default: false}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
music-search: [q]
book-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
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_settings
type: info
label: Settings Requirement
default: This indexer only supports the direct datasheet link option.<br>Navigate to the web site account <b>Beállítások (Settings)</b>, change the <b>Torrent lista viselkedése (The behavior of the Torrent List)</b> option to <b>Közvetlen adatlap link (Direct datasheet link)</b>, and click <b>Mentés (Save)</b>. Selecting <i>Lenyíló részletek (Dropdown Details)</i> will return no results.
- name: info_tpp
type: info
label: Results Per Page
default: For best results, change the <b>Torrent oldalanként</b> <i>Torrents per page:</i> setting to <b>100</b> on your account profile. The default is <i>35</i>.
login:
# using cookie method because login page has embedded Google reCAPTCHA and 2FA support
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: index.php
selector: a[href^="logout.php?k="]
search:
paths:
- path: browse.php
categories: [1, 2, 8, 7, 18, 17, 4, 3, 23, 19, 20, 24, 21, 22, 35, 36, 25, 30, 31, 33, 43, 42, 32, 29, 28, 27, 26]
- path: browse.php
categories: [41, 34, 40, 39]
inputs:
xxx: 1
inputs:
$raw: "{{ range .Categories }}cat[]={{.}}&{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
# 0 both, 1 onlyactive, 2 onlydead, 3 onlyfree, 4 x2 torrents, 5 mytorrents, 6 waiting for seeds
type: "{{ if .Config.freeleech }}3{{ else }}0{{ end }}"
sort: "{{ .Config.sort }}"
order: "{{ .Config.type }}"
# does not support imdbid searches
# can support genre searching but you need to know the id, eg &genre2=1 for Comedy (id is 2)
rows:
selector: tr.torrent-row
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a[href*="details.php?id="]
details:
selector: a[href*="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
poster:
selector: a[href^="download.php?id="] button
attribute: data-poster
imdbid:
selector: a[href*="imdb.com/title/tt"]
attribute: href
date:
selector: div.torrent-date > strong
filters:
- name: replace
args: ["\u00a0", " "]
- name: append
args: " +01:00" # CET
- name: dateparse
args: "yyyy-MM-dd HH:mm:ss zzz"
size:
selector: div.torrent-size-box
grabs:
selector: td:nth-last-child(4)
seeders:
selector: td:nth-last-child(3)
leechers:
selector: td:nth-last-child(2)
genre:
selector: div.torrent-meta-line > span:nth-child(2)
attribute: title
description:
case:
img[src="/pic/yes.png"]: "Verified: {{ .Result.genre }}"
img[src="/pic/nincs.png"]: "Unverified: {{ .Result.genre }}"
downloadvolumefactor:
case:
span:contains("x0"): 0
"*": 1
uploadvolumefactor:
case:
span:contains("x2"): 2
span:contains("x4"): 4
"*": 1
minimumratio:
text: 1.0
minimumseedtime:
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
# engine n/a
+162
View File
@@ -0,0 +1,162 @@
---
id: lp-bits
name: LP-Bits 2.0
description: LP-Bits 2.0 is a Private Torrent Tracker for Linkin Park Music Releases."
language: en-US
type: private
encoding: UTF-8
links:
- https://lp-bits.com/
caps:
categorymappings:
- {id: 409, cat: Audio/Video, desc: "Video Audience Shot"}
- {id: 404, cat: Audio/Video, desc: "Documentaries \ Misc"}
- {id: 406, cat: Audio/Video, desc: "Music Videos"}
- {id: 407, cat: Audio, desc: "Audio Professional"}
- {id: 408, cat: Audio/Video, desc: "Pro Shot Video"}
- {id: 410, cat: Audio, desc: "Audio Audience Shot"}
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: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 100 consecutive days.</li></ol>"
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:
selector: a[title][href^="details.php?id="]
attribute: title
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
filters:
- name: replace
args: ["pic/imdb_pic/nophoto.gif", ""]
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)
optional: true
default: 512MB
seeders:
selector: td.rowfollow:nth-child(6)
optional: true
default: 0
leechers:
selector: td.rowfollow:nth-child(7)
optional: true
default: 0
grabs:
selector: td.rowfollow:nth-child(8)
optional: true
default: 0
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
# NexusPHP v1.10.2 2026-04-11 (custom)
@@ -0,0 +1,190 @@
---
id: luminarr-api
name: Luminarr (API)
description: "Luminarr is a Private Torrent Tracker for MOVIES / TV"
language: en-US
type: private
encoding: UTF-8
links:
- https://luminarr.me/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://luminarr.me/\" target=\"_blank\">luminarr.me</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_activity
type: info
label: Account Inactivity
default: "<ul><li>To avoid your account being disabled, you must login at least once every 3 months (90 days). Accounts will be pruned three months after deactivation for inactivity.</li><li> Luminarr is a sharing community, not a collection service. You must actively participate by uploading or downloading content within 30 days of account creation. Accounts that show no activity within this period may be pruned.</li></ul>"
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: re_replace
args: ["(?i)(TV Movie)", "TV_Movie"]
- name: replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
# global MR is 0.6 but torrents must be seeded for 3 days regardless of ratio
# minimumratio:
# text: 0.6
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# json UNIT3D 9.2.0
+156
View File
@@ -0,0 +1,156 @@
---
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
@@ -0,0 +1,193 @@
---
id: midnightscene
name: MidnightScene
description: "MidnightScene is a Private Torrent Tracker for MOVIES / TV / GENERAL"
language: en-US
type: private
encoding: UTF-8
links:
- https://midnightscene.cc/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Audio, desc: "Music"}
- {id: 4, cat: Console, desc: "Games"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://midnightscene.cc/\" target=\"_blank\">MidnightScene</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_activity
type: info
label: Account Inactivity
default: "Members must log into the site at minimum every 90 days or their account will be disabled for inactivity."
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: re_replace
args: ["(?i)(TV Movie)", "TV_Movie"]
- name: replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
# global MR is 0.4 but torrents must be seeded for 2 days regardless of ratio
# minimumratio:
# text: 0.4
minimumseedtime:
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
# json UNIT3D 9.2.0
@@ -0,0 +1,197 @@
---
id: milnueve-api
name: Milnueve (API)
description: "Milnueve is a SPANISH Private Torrent Tracker for MOVIES / TV / GENERAL"
language: es-ES
type: private
encoding: UTF-8
links:
- https://tracker.milnueve.cc/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Películas"}
- {id: 2, cat: TV, desc: "Series"}
- {id: 3, cat: Movies/Other, desc: "Películas Anime"}
- {id: 4, cat: TV/Anime, desc: "Series Anime"}
- {id: 5, cat: Audio, desc: "Musica"}
- {id: 7, cat: Movies/SD, desc: "VHS / Retro"}
- {id: 8, cat: TV/Anime, desc: "Anime en Catalan"}
- {id: 9, cat: TV/Documentary, desc: "Zona Documentales"}
- {id: 10, cat: Movies, desc: "Zona Latino"}
- {id: 6, cat: Books/Comics, desc: "Manga"}
- {id: 11, cat: Books/EBook, desc: "Libros"}
- {id: 12, cat: Books/Comics, desc: "Cómics"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
book-search: [q]
music-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://tracker.milnueve.cc/\" target=\"_blank\">Milnueve</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }} Spanish"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Ciencia ficción)", "Ciencia_ficción"]
- name: re_replace
args: ["(?i)(Película de TV)", "Película_de_TV"]
- name: replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
minimumratio:
text: 1.0
minimumseedtime:
# 14 days (as seconds = 14 x 24 x 60 x 60)
text: 1209600
# json UNIT3D 9.2.0
+175
View File
@@ -0,0 +1,175 @@
---
id: momentpt
name: MomentPT
description: "MomentPT is a CHINESE Private Torrent Tracker for Photography"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://www.momentpt.top/
caps:
categorymappings:
- {id: 401, cat: Other, desc: "写真(Portraiture)"}
- {id: 402, cat: Other, desc: "人像(Portrait)"}
- {id: 403, cat: Other, desc: "风光(Landscape)"}
- {id: 404, cat: Other, desc: "纪实(Documentary)"}
- {id: 416, cat: Other, desc: "杂志(Magazine)"}
- {id: 415, cat: Other, desc: "静物(Still Life)"}
- {id: 414, cat: Other, desc: "儿童(Children)"}
- {id: 413, cat: Other, desc: "超现实(Surreal)"}
- {id: 412, cat: Other, desc: "美食(Cuisine)"}
- {id: 411, cat: Other, desc: "动物(Animals)"}
- {id: 405, cat: Other, desc: "人文(Humanity)"}
modes:
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: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 100 consecutive days.</li></ol>"
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, 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)
optional: true
default: 512MB
seeders:
selector: td.rowfollow:nth-child(6)
optional: true
default: 0
leechers:
selector: td.rowfollow:nth-child(7)
optional: true
default: 0
grabs:
selector: td.rowfollow:nth-child(8)
optional: true
default: 0
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: 2.0
minimumseedtime:
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
description:
selector: td.rowfollow:nth-child(2)
remove: a, b, font, img, span
# NexusPHP v1.9.7 2025-09-24 (custom)
+169
View File
@@ -0,0 +1,169 @@
---
id: musopia
name: Musopia (音乐乌托邦)
description: "Musopia (音乐乌托邦) is a CHINESE Private Torrent Tracker for MUSIC"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://www.musopia.vip/
caps:
categorymappings:
- {id: 406, cat: Audio/Video, desc: "音乐MV / Music Videos"}
- {id: 407, cat: Audio/Lossless, desc: "音乐 / Audio"} # wrongly listed as Sports
- {id: 408, cat: Audio/Lossless, desc: "音乐 / HQ Audio"}
- {id: 409, cat: Audio/Other, desc: "其他 / Misc"}
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: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 100 consecutive days.</li></ol>"
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)
optional: true
default: 512MB
seeders:
selector: td.rowfollow:nth-child(6)
optional: true
default: 0
leechers:
selector: td.rowfollow:nth-child(7)
optional: true
default: 0
grabs:
selector: td.rowfollow:nth-child(8)
optional: true
default: 0
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: 1.0
minimumseedtime:
# 6 days (as seconds = 6 x 24 x 60 x 60)
text: 518400
description:
selector: td.rowfollow:nth-child(2)
remove: a, b, font, img, span
# NexusPHP v1.10.2 2026-04-11 (custom)
+194
View File
@@ -0,0 +1,194 @@
---
id: muxuege
name: Muxuege
description: "Muxuege is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://pt.muxuege.org/
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "电影/Movies"}
- {id: 402, cat: TV, desc: "电视剧/TVSeries"}
- {id: 403, cat: TV, desc: "综艺/TV Shows"}
- {id: 404, cat: TV/Documentary, desc: "纪录片/Documentary"}
- {id: 405, cat: TV/Anime, desc: "动漫/Anime"}
- {id: 406, cat: Audio/Video, desc: "MV/Music Videos"}
- {id: 407, cat: TV/Sport, desc: "体育/Sports"}
- {id: 408, cat: Audio, desc: "音乐/Music"}
- {id: 418, cat: Audio, desc: "广播剧/Radio Dramas"}
- {id: 417, cat: Audio/Audiobook, desc: "有声书/Audiobooks"}
- {id: 416, cat: TV, desc: "短剧/Playlet"}
- {id: 415, cat: PC, desc: "软件/Software"}
- {id: 414, cat: Other, desc: "图片/Pictures"}
- {id: 413, cat: Other, desc: "教育/Education"}
- {id: 412, cat: Books, desc: "电子书/E-books"}
- {id: 411, cat: Console, desc: "游戏/Games"}
- {id: 410, cat: PC/ISO, desc: "系统镜像/System Images"}
- {id: 409, cat: Other, desc: "其他/Misc"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, doubanid]
movie-search: [q, imdbid, doubanid]
music-search: [q]
book-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: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 100 consecutive days.</li></ol>"
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: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
# 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: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
# 0 AND, 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
imdbid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="imdb.com/title/tt"]
attribute: href
doubanid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="movie.douban.com/subject/"]
attribute: href
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)
optional: true
default: 512MB
seeders:
selector: td.rowfollow:nth-child(6)
optional: true
default: 0
leechers:
selector: td.rowfollow:nth-child(7)
optional: true
default: 0
grabs:
selector: td.rowfollow:nth-child(8)
optional: true
default: 0
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: 2.0
minimumseedtime:
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
description:
selector: td.rowfollow:nth-child(2)
remove: a, b, font, img, span
# NexusPHP v1.10.2 2026-04-11
@@ -0,0 +1,174 @@
---
id: nanyangpt
name: NanyangPT (南洋)
description: "NanyangPT (南洋) is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://nanyangpt.com/
legacylinks:
- https://52pt.site/ # loaded in error when first set up from template
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "Movies/电影"}
- {id: 402, cat: TV, desc: "TV Series/剧集"}
- {id: 403, cat: TV/Anime, desc: "Anime/动漫"}
- {id: 404, cat: TV, desc: "TV Shows/综艺"}
- {id: 405, cat: TV/Sport, desc: "Sports/运体"}
- {id: 406, cat: TV/Documentary, desc: "Documentaries/纪录"}
- {id: 407, cat: Audio, desc: "Music/音乐"}
- {id: 408, cat: Other, desc: "Study/学习"}
- {id: 409, cat: PC, desc: "Software/软件"}
- {id: 410, cat: Console, desc: "Games/游戏"}
- {id: 411, cat: Other, desc: "Misc/其它"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, doubanid]
movie-search: [q, imdbid, doubanid]
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: "Account retention rules:<ol><li>University lecturer and above users will be retained forever</li><li>Excellent master's degree and above users will not be deleted after the account is parked (in the control panel)</li><li>Users with a parked account who do not log in for 400 consecutive days will be deleted</li><li>Users with non-parked account will be deleted if they do not log in for 150 consecutive days</li></ol>"
login:
# using cookie method as login.php is different depending on IP address
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: index.php
selector: a[href$="usercp.php"]
search:
paths:
- path: torrents.php
inputs:
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
# currently supports only one query id at one time.
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
# 0 incldead, 1 active, 2 dead, 3 noseeds
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: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
# 0 AND, 1 OR, 2 exact
search_mode: 0
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
notnewword: 1
# does not return imdb or doubanid in results
rows:
selector: table.torrents > tbody > tr:has(table.torrentname)
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
date_elapsed:
# time type: time elapsed (default)
selector: td: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: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)
optional: true
default: 512MB
seeders:
selector: td.rowfollow:nth-child(6)
optional: true
default: 0
leechers:
selector: td.rowfollow:nth-child(7)
optional: true
default: 0
grabs:
selector: td.rowfollow:nth-child(8)
optional: true
default: 0
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
description:
selector: td:nth-child(2)
remove: a, b, font, img, span
# NYPT Project v1.0 2014-10-01 (based on NexusPHP)
+478
View File
@@ -0,0 +1,478 @@
---
id: new-team
name: New-Team
description: "New-Team is a RUSSIAN Semi-Private Torrent Tracker for MOVIES / TV / GENERAL"
language: ru-RU
type: semi-private
encoding: UTF-8
links:
- https://new-team.org/
caps:
categorymappings:
# Кинематограф, театр, видео
- {id: 241, cat: Movies, desc: "|- Релизы от Scarabey"}
- {id: 1170, cat: Movies, desc: "|-- Зарубежные и российские фильмы 2019 - 2023"}
- {id: 1137, cat: Movies, desc: "|-- ТРЕБУЕТСЯ СИД."}
- {id: 1116, cat: Movies, desc: "|-- Группа 'Сиды' - хранение раздач"}
- {id: 1040, cat: Movies, desc: "|-- Зарубежные и российские фильмы до 1990 года"}
- {id: 1041, cat: Movies, desc: "|-- Зарубежные и российские фильмы 1991-2000"}
- {id: 1042, cat: Movies, desc: "|-- Зарубежные и российские фильмы 2001-2009"}
- {id: 1039, cat: Movies, desc: "|-- Зарубежные и российские фильмы 2010-2013"}
- {id: 1088, cat: Movies, desc: "|-- Зарубежные и российские фильмы 2014-2015"}
- {id: 1112, cat: Movies, desc: "|-- Зарубежные и российские фильмы 2016-2018"}
- {id: 1110, cat: Movies, desc: "|-- Зарубежные и российские фильмы в MKV (AVC / BDRip 720p /..."}
- {id: 1111, cat: Movies/Other, desc: "|-- Аниме"}
- {id: 1051, cat: Movies/Foreign, desc: "|-- Азиатские фильмы"}
- {id: 1035, cat: TV, desc: "|-- Сериалы"}
- {id: 1096, cat: TV, desc: "|--- Сериал '24 часа'"}
- {id: 1092, cat: TV, desc: "|--- Сериал 'Во все тяжкие'"}
- {id: 1094, cat: TV, desc: "|--- Сериал 'Игра престолов'"}
- {id: 1098, cat: TV, desc: "|--- Сериал 'Остаться в живых'"}
- {id: 1097, cat: TV, desc: "|--- Сериал 'Подпольная империя'"}
- {id: 1090, cat: TV, desc: "|--- Сериал 'Спартак'"}
- {id: 1093, cat: TV, desc: "|--- Сериал 'Ходячие мертвецы'"}
- {id: 1095, cat: TV, desc: "|--- Сериал 'Шерлок'"}
- {id: 124, cat: Movies, desc: "|- Кинофильмы"}
- {id: 191, cat: Movies/Foreign, desc: "|-- Зарубежное кино до 1990 года"}
- {id: 192, cat: Movies/Foreign, desc: "|-- Зарубежное кино 1990 - 1999"}
- {id: 160, cat: Movies/Foreign, desc: "|-- Зарубежное кино 2000 - 2009"}
- {id: 125, cat: Movies/Foreign, desc: "|-- Зарубежное кино 2010 - 2019"}
- {id: 1142, cat: Movies/Foreign, desc: "|-- Зарубежное кино 2020 - 2024"}
- {id: 1182, cat: Movies/Foreign, desc: "|-- Зарубежное кино 2025 (Новинки)"}
- {id: 126, cat: Movies/Foreign, desc: "|-- Зарубежное кино (HD и DVD Video)"}
- {id: 162, cat: Movies, desc: "|-- Российское кино"}
- {id: 164, cat: Movies, desc: "|--- Российское кино (HD и DVD Video)"}
- {id: 1144, cat: Movies, desc: "|--- Детское российское кино"}
- {id: 900, cat: Movies, desc: "|-- Советское кино"}
- {id: 1181, cat: Movies, desc: "|--- Советское кино (HD и DVD Video)"}
- {id: 1143, cat: Movies, desc: "|--- Детское советское кино"}
- {id: 1104, cat: Movies, desc: "|--- Фильмы довоенные и созданные во время войны"}
- {id: 1177, cat: Movies, desc: "|--- Телеспектакль"}
- {id: 891, cat: Movies/3D, desc: "|-- Кинофильмы 3D"}
- {id: 338, cat: Movies/Foreign, desc: "|-- Классика зарубежного кино"}
- {id: 337, cat: Movies/Foreign, desc: "|-- Азиатские фильмы"}
- {id: 917, cat: Movies, desc: "|-- Арт-хаус и авторское кино"}
- {id: 207, cat: Movies, desc: "|-- Сборники"}
- {id: 203, cat: Movies/Other, desc: "|-- Трейлеры и дополнительные материалы"}
- {id: 826, cat: Audio/Other, desc: "|-- Звуковые дорожки и переводы"}
- {id: 827, cat: Audio/Other, desc: "|--- Авторский перевод"}
- {id: 828, cat: Audio/Other, desc: "|--- Закадровый перевод"}
- {id: 134, cat: TV/Documentary, desc: "|- Документальные фильмы и телепередачи"}
- {id: 999, cat: TV/Documentary, desc: "|-- Флора и фауна"}
- {id: 254, cat: TV/Documentary, desc: "|-- Великая Отечественная война"}
- {id: 478, cat: TV/Documentary, desc: "|-- Научно-популярные фильмы"}
- {id: 1058, cat: TV/Documentary, desc: "|-- История: Города и Страны / Архитектура / Музеи мира"}
- {id: 136, cat: TV/Documentary, desc: "|-- История: Биографии / Кумиры / Личности / События"}
- {id: 253, cat: TV/Documentary, desc: "|-- Планета Земля / Космос / Вселенная"}
- {id: 256, cat: TV/Documentary, desc: "|-- Вера и религия / Диагностика кармы"}
- {id: 252, cat: TV/Documentary, desc: "|-- Тайны века / Спецслужбы / Теории Заговоров"}
- {id: 255, cat: TV/Documentary, desc: "|-- Развлекательные телепередачи и шоу, приколы и юмор"}
- {id: 135, cat: TV/Documentary, desc: "|-- Документальные фильмы и телепередачи (DVD, HD Video)"}
- {id: 889, cat: TV/Documentary, desc: "|-- Документальные фильмы и телепередачи (3D)"}
# Сериалы
- {id: 845, cat: TV, desc: "|- Отечественные cериалы"}
- {id: 850, cat: TV, desc: "|-- Обсуждение сериалов"}
- {id: 854, cat: TV, desc: "|-- Исторические, военные"}
- {id: 847, cat: TV, desc: "|- Отечественные сериалы (HD, DVD Video)"}
- {id: 1188, cat: TV, desc: "|-- Детектив, боевик, криминал"}
- {id: 857, cat: TV, desc: "|-- Исторические, военные"}
- {id: 846, cat: TV/Foreign, desc: "|- Зарубежные сериалы"}
- {id: 856, cat: TV/Foreign, desc: "|-- Исторические, военные"}
- {id: 848, cat: TV/Foreign, desc: "|- Зарубежные сериалы (HD, DVD Video)"}
- {id: 858, cat: TV/Foreign, desc: "|-- Исторические, военные"}
# Мультипликация
- {id: 869, cat: Movies/Other, desc: "|- Мультфильмы"}
- {id: 890, cat: Movies/Other, desc: "|-- Мультфильмы 3D"}
- {id: 871, cat: Movies/Other, desc: "|-- Отечественные Мультфильмы"}
- {id: 875, cat: Movies/Other, desc: "|-- Отечественные Мультфильмы (DVD, HD Video)"}
- {id: 1068, cat: Movies/Other, desc: "|- Короткометражные отечественные мультфильмы"}
- {id: 1189, cat: Movies/Other, desc: "|- Короткометражные отечественные мультфильмы (DVD, HD Video)"}
- {id: 877, cat: Movies/Other, desc: "|-- Сборники отечественных мультфильмов"}
- {id: 870, cat: Movies/Other, desc: "|-- Зарубежные Мультфильмы"}
- {id: 874, cat: Movies/Other, desc: "|-- Зарубежные Мультфильмы (DVD, HD Video)"}
- {id: 1067, cat: Movies/Other, desc: "|- Короткометражные иностранные мультфильмы"}
- {id: 1066, cat: Movies/Other, desc: "|- Короткометражные мультфильмы (DVD, HD Video)"}
- {id: 876, cat: Movies/Other, desc: "|-- Сборники зарубежных мультфильмов"}
- {id: 872, cat: TV/Anime, desc: "|- Мультсериалы"}
- {id: 878, cat: TV/Anime, desc: "|-- Отечественные Мультсериалы"}
- {id: 879, cat: TV/Anime, desc: "|-- Зарубежные Мультсериалы"}
- {id: 873, cat: TV/Anime, desc: "|- Аниме"}
- {id: 886, cat: TV/Anime, desc: "|-- Рипы Аниме"}
- {id: 884, cat: TV/Anime, desc: "|-- Аниме (DVD)"}
- {id: 885, cat: TV/Anime, desc: "|-- Аниме (HD Video)"}
- {id: 883, cat: TV/Anime, desc: "|-- Манга"}
# Музыка
- {id: 571, cat: Audio/Lossless, desc: "|- Камерная и сольная инструментальная музыка (lossless)"}
- {id: 567, cat: Audio/Lossless, desc: "|- Вокальная и хоровая музыка (lossless)"}
- {id: 577, cat: Audio, desc: "|- Classical Crossover (lossy и lossless)"}
- {id: 565, cat: Audio, desc: "|- Полные собрания сочинений и многодисковые издания..."}
- {id: 569, cat: Audio/Lossless, desc: "|- Оркестровая музыка (lossless)"}
- {id: 574, cat: Audio/MP3, desc: "|- Вокальная и хоровая музыка (lossy)"}
- {id: 576, cat: Audio/MP3, desc: "|- Камерная и сольная инструментальная музыка (lossy)"}
- {id: 579, cat: Audio/MP3, desc: "|- Восточноевропейский фолк (lossy)"}
- {id: 580, cat: Audio/Lossless, desc: "|- Восточноевропейский фолк (lossless)"}
- {id: 581, cat: Audio/MP3, desc: "|- Западноевропейский фолк (lossy)"}
- {id: 582, cat: Audio/Lossless, desc: "|- Западноевропейский фолк (lossless)"}
- {id: 583, cat: Audio, desc: "|- Klezmer и Еврейский фольклор (lossy и lossless)"}
- {id: 584, cat: Audio/MP3, desc: "|- Этническая музыка Сибири, Средней и Восточной Азии (lossy)"}
- {id: 585, cat: Audio/Lossless, desc: "|- Этническая музыка Сибири, Средней и Восточной Азии..."}
- {id: 587, cat: Audio/Lossless, desc: "|- Этническая музыка Индии (lossless)"}
- {id: 589, cat: Audio/Lossless, desc: "|- Этническая музыка Африки и Ближнего Востока (lossless)"}
- {id: 590, cat: Audio, desc: "|- Этническая музыка Кавказа и Закавказья (lossy и lossless)"}
- {id: 591, cat: Audio/MP3, desc: "|- Этническая музыка Северной и Южной Америки (lossy)"}
- {id: 592, cat: Audio/Lossless, desc: "|- Этническая музыка Северной и Южной Америки (lossless)"}
- {id: 593, cat: Audio, desc: "|- Этническая музыка Австралии, островов Тихого и Индийского..."}
- {id: 595, cat: Audio/Lossless, desc: "|- Country, Bluegrass (lossless)"}
- {id: 608, cat: Audio/Lossless, desc: "|- Nouveau Flamenco, Mediterranean Guitar, Acoustic guitar..."}
- {id: 607, cat: Audio, desc: "|- Nouveau Flamenco, Mediterranean Guitar, Acoustic guitar..."}
- {id: 487, cat: Audio, desc: "|- Fields Recordings, Nature Sounds (Звуки природы)"}
- {id: 481, cat: Audio/Lossless, desc: "|- New Age, Celtic New Age (lossless)"}
- {id: 483, cat: Audio/MP3, desc: "|- New Age, Celtic New Age (lossy)"}
- {id: 1048, cat: Audio/Lossless, desc: "|- Enigmatic, Gregorianic, Ambientpop, Mysticpop (lossless)"}
- {id: 1049, cat: Audio/MP3, desc: "|- Enigmatic, Gregorianic, Ambientpop, Mysticpop (lossy)"}
- {id: 484, cat: Audio/Lossless, desc: "|- Meditative, Healing, Relax & Nature (lossless)"}
- {id: 485, cat: Audio/MP3, desc: "|- Meditative, Healing, Relax & Nature (lossy)"}
- {id: 490, cat: Audio/Lossless, desc: "|- World Music, Ethnicbeat, Worldbeat, World Fusion..."}
- {id: 491, cat: Audio/MP3, desc: "|- World Music, Ethnicbeat, Worldbeat, World Fusion (lossy)"}
- {id: 492, cat: Audio/Lossless, desc: "|- Mantras, Ragas, Kirtans (lossless)"}
- {id: 493, cat: Audio/MP3, desc: "|- Mantras, Ragas, Kirtans (lossy)"}
- {id: 652, cat: Audio/MP3, desc: "|- Отечественный Рэп, Хип-Хоп (lossy)"}
- {id: 653, cat: Audio/MP3, desc: "|- Отечественный R'n'B (lossy)"}
- {id: 654, cat: Audio/Lossless, desc: "|- Отечественный Рэп, Хип-Хоп, R'n'B (lossless)"}
- {id: 657, cat: Audio/MP3, desc: "|- Зарубежный Рэп, Хип-Хоп (lossy)"}
- {id: 659, cat: Audio/Lossless, desc: "|- Зарубежный Рэп, Хип-Хоп (lossless)"}
- {id: 660, cat: Audio/Lossless, desc: "|- Зарубежный R'n'B (lossless)"}
- {id: 756, cat: Audio/Lossless, desc: "|- Ska, Ska-Punk, Ska-Jazz (lossless)"}
- {id: 752, cat: Audio/MP3, desc: "|- Reggae (lossy)"}
- {id: 755, cat: Audio/Lossless, desc: "|- Reggae, Dancehall, Dub (lossless)"}
- {id: 549, cat: Audio, desc: "|- Саундтреки и Караоке"}
- {id: 765, cat: Audio, desc: "|-- Минусовки (lossy и lossless)"}
- {id: 767, cat: Audio/Lossless, desc: "|-- Саундтреки к отечественным фильмам (lossless)"}
- {id: 768, cat: Audio/MP3, desc: "|-- Саундтреки к отечественным фильмам (lossy)"}
- {id: 769, cat: Audio/Lossless, desc: "|-- Саундтреки к зарубежным фильмам (lossless)"}
- {id: 770, cat: Audio/MP3, desc: "|-- Саундтреки к зарубежным фильмам (lossy)"}
- {id: 772, cat: Audio/Lossless, desc: "|-- Саундтреки к играм (lossless)"}
- {id: 776, cat: Audio/Lossless, desc: "|- Отечественный шансон (lossless)"}
- {id: 777, cat: Audio/MP3, desc: "|- Отечественный шансон (lossy)"}
- {id: 778, cat: Audio/MP3, desc: "|- Сборники отечественного шансона (lossy)"}
- {id: 779, cat: Audio/Lossless, desc: "|- Военная песня (lossless)"}
- {id: 780, cat: Audio/MP3, desc: "|- Военная песня (lossy)"}
- {id: 781, cat: Audio/Lossless, desc: "|- Авторская песня (lossless)"}
- {id: 782, cat: Audio/MP3, desc: "|- Авторская песня (lossy)"}
- {id: 952, cat: Audio/Lossless, desc: "|- Зарубежный шансон, Chanson (lossless)"}
- {id: 1175, cat: Audio/Lossless, desc: "|- Итальянская поп-музыка (lossless)"}
- {id: 1174, cat: Audio/Lossless, desc: "|- Латиноамериканская поп-музыка (lossless)"}
- {id: 1173, cat: Audio/Lossless, desc: "|- Easy Listening, Instrumental Pop (lossless)"}
- {id: 836, cat: Audio/MP3, desc: "|- Отечественная поп-музыка (lossy)"}
- {id: 837, cat: Audio/Lossless, desc: "|- Отечественная поп-музыка (lossless)"}
- {id: 838, cat: Audio/MP3, desc: "|- Зарубежная поп-музыка (lossy)"}
- {id: 839, cat: Audio/Lossless, desc: "|- Зарубежная поп-музыка (lossless)"}
- {id: 843, cat: Audio/Lossless, desc: "|- Восточноазиатская поп-музыка (lossless)"}
- {id: 1082, cat: Audio/Lossless, desc: "|- Disco, Italo-Disco, Euro-Disco, Hi-NRG (lossless)"}
- {id: 1081, cat: Audio/Lossless, desc: "|- Eurodance, Euro-House, Technopop (lossless)"}
- {id: 1084, cat: Audio/MP3, desc: "|- Disco, Italo-Disco, Euro-Disco, Hi-NRG (сборники) (lossy)"}
- {id: 1083, cat: Audio/MP3, desc: "|- Eurodance, Euro-House, Technopop (сборники) (lossy)"}
- {id: 1187, cat: Audio, desc: "|- Аудио, как приложение к журналам"}
- {id: 794, cat: Audio, desc: "|- Orthodox spiritual music. Православные песнопения..."}
- {id: 1140, cat: Audio, desc: "|- Аудиоматериал для тестирования и настройки"}
- {id: 1099, cat: Audio/MP3, desc: "|- Профессиональная музыка для йоги и фитнеса (lossy)"}
- {id: 789, cat: Audio/Lossless, desc: "|- Отечественная музыка других жанров (lossless)"}
- {id: 788, cat: Audio/MP3, desc: "|- Отечественная музыка других жанров (lossy)"}
- {id: 791, cat: Audio/Lossless, desc: "|- Зарубежная музыка других жанров (lossless)"}
- {id: 790, cat: Audio/MP3, desc: "|- Зарубежная музыка других жанров (lossy)"}
- {id: 795, cat: Audio, desc: "|- Сборники песен для детей (lossy и lossless)"}
- {id: 798, cat: Audio, desc: "|- Мюзикл (lossy и lossless)"}
- {id: 800, cat: Audio/MP3, desc: "|- Неофициальные и внежанровые сборники (lossy)"}
- {id: 186, cat: Audio/Video, desc: "|- Музыкальное видео (DVD и HD Video)"}
- {id: 185, cat: Audio/Video, desc: "|- Музыкальное видео"}
- {id: 1160, cat: Audio/Foreign, desc: "|- Зарубежная поп-музыка"}
- {id: 1159, cat: Audio, desc: "|- Советская эстрада, ретро, романсы"}
- {id: 1158, cat: Audio, desc: "|- Отечественная поп-музыка"}
- {id: 1157, cat: Audio, desc: "|- Инструментальная поп-музыка, эстрада"}
- {id: 1156, cat: Audio, desc: "|- Джаз и блюз"}
- {id: 1155, cat: Audio/Foreign, desc: "|- Зарубежная рок-музыка"}
- {id: 1154, cat: Audio, desc: "|- Отечественная рок-музыка"}
- {id: 1153, cat: Audio, desc: "|- Электронная музыка"}
- {id: 1152, cat: Audio, desc: "|- Классика и классика в современной обработке"}
# Электронная музыка
- {id: 611, cat: Audio/Lossless, desc: "|- Goa Trance, Psy-Trance (lossless)"}
- {id: 612, cat: Audio/MP3, desc: "|- Goa Trance, Psy-Trance (lossy)"}
- {id: 613, cat: Audio/Lossless, desc: "|- PsyChill, Ambient Dub (lossless)"}
- {id: 614, cat: Audio/MP3, desc: "|- PsyChill, Ambient Dub (lossy)"}
- {id: 616, cat: Audio/Lossless, desc: "|- Trance (lossless)"}
- {id: 617, cat: Audio/MP3, desc: "|- Trance (lossy)"}
- {id: 618, cat: Audio/MP3, desc: "|- Trance (Singles, EPs) (lossy)"}
- {id: 619, cat: Audio/MP3, desc: "|- Trance (Radioshows, Podcasts, Live Sets, Mixes) (lossy)"}
- {id: 1061, cat: Audio/MP3, desc: "|- Trance discography (lossy)"}
- {id: 621, cat: Audio/Lossless, desc: "|- Hardcore, Hardstyle, Jumpstyle (lossless)"}
- {id: 622, cat: Audio/MP3, desc: "|- Hardcore, Hardstyle, Jumpstyle (lossy)"}
- {id: 623, cat: Audio, desc: "|- Hardcore, Hardstyle, Jumpstyle (vinyl, web)"}
- {id: 624, cat: Audio/Lossless, desc: "|- House (lossless)"}
- {id: 625, cat: Audio, desc: "|- House (Radioshow, Podcast, Liveset, Mixes)"}
- {id: 626, cat: Audio/MP3, desc: "|- House (lossy)"}
- {id: 627, cat: Audio, desc: "|- House (Проморелизы, сборники)"}
- {id: 628, cat: Audio/MP3, desc: "|- House (Singles, EPs) (lossy)"}
- {id: 629, cat: Audio/Lossless, desc: "|- Techno (lossless)"}
- {id: 630, cat: Audio/MP3, desc: "|- Techno (lossy)"}
- {id: 631, cat: Audio/Other, desc: "|- Techno (Radioshows, Podcasts, Livesets, Mixes)"}
- {id: 632, cat: Audio/MP3, desc: "|- Techno (Singles, EPs) (lossy)"}
- {id: 643, cat: Audio/Lossless, desc: "|- Dubstep, Future Garage, Bass Music, UK Garage (lossless)"}
- {id: 644, cat: Audio/MP3, desc: "|- Dubstep, Future Garage, Bass Music, UK Garage (lossy)"}
- {id: 634, cat: Audio/Lossless, desc: "|- Electro, Electro-Freestyle, Nu Electro (lossless)"}
- {id: 635, cat: Audio/MP3, desc: "|- Electro, Electro-Freestyle, Nu Electro (lossy)"}
- {id: 636, cat: Audio/Lossless, desc: "|- Drum & Bass, Jungle (lossless)"}
- {id: 637, cat: Audio/MP3, desc: "|- Drum & Bass, Jungle (lossy)"}
- {id: 641, cat: Audio/Lossless, desc: "|- Breakbeat (lossless)"}
- {id: 642, cat: Audio/MP3, desc: "|- Breakbeat (lossy)"}
- {id: 645, cat: Audio/Lossless, desc: "|- IDM (lossless)"}
- {id: 646, cat: Audio/MP3, desc: "|- IDM (lossy)"}
- {id: 802, cat: Audio/Lossless, desc: "|- Chillout, Lounge, Downtempo (lossless)"}
- {id: 803, cat: Audio/MP3, desc: "|- Chillout, Lounge, Downtempo (lossy)"}
- {id: 804, cat: Audio/Lossless, desc: "|- Nu Jazz, Acid Jazz, Future Jazz (lossless)"}
- {id: 805, cat: Audio/MP3, desc: "|- Nu Jazz, Acid Jazz, Future Jazz (lossy)"}
- {id: 806, cat: Audio/Lossless, desc: "|- Trip Hop, Abstract Hip-Hop (lossless)"}
- {id: 807, cat: Audio/MP3, desc: "|- Trip Hop, Abstract Hip-Hop (lossy)"}
- {id: 1070, cat: Audio, desc: "|- 8-bit, Chiptune (lossy & lossless)"}
- {id: 808, cat: Audio/Lossless, desc: "|- Experimental (lossless)"}
- {id: 809, cat: Audio/MP3, desc: "|- Experimental (lossy)"}
- {id: 810, cat: Audio/Lossless, desc: "|- Modern Classical, Electroacoustic (lossless)"}
- {id: 811, cat: Audio/MP3, desc: "|- Modern Classical, Electroacoustic (lossy)"}
- {id: 812, cat: Audio/Lossless, desc: "|- Traditional Electronic, Ambient (lossless)"}
- {id: 813, cat: Audio/MP3, desc: "|- Traditional Electronic, Ambient (lossy)"}
- {id: 815, cat: Audio/Lossless, desc: "|- EBM, Dark Electro, Aggrotech (lossless)"}
- {id: 816, cat: Audio/MP3, desc: "|- EBM, Dark Electro, Aggrotech (lossy)"}
- {id: 817, cat: Audio/Lossless, desc: "|- Industrial, Noise (lossless)"}
- {id: 818, cat: Audio/MP3, desc: "|- Industrial, Noise (lossy)"}
- {id: 1071, cat: Audio/Lossless, desc: "|- Darkwave, Neoclassical, Ethereal, Dungeon Synth (lossless)"}
- {id: 1072, cat: Audio/MP3, desc: "|- Darkwave, Neoclassical, Ethereal, Dungeon Synth (lossy)"}
- {id: 819, cat: Audio/Lossless, desc: "|- Synthpop, Futurepop, New Wave (lossless)"}
- {id: 820, cat: Audio/MP3, desc: "|- Synthpop, Futurepop, New Wave (lossy)"}
- {id: 512, cat: Audio/Lossless, desc: "|- Label Packs (lossless)"}
- {id: 513, cat: Audio/MP3, desc: "|- Label packs, Scene packs, Radioshows packs (lossy)"}
# Рок-музыка
- {id: 524, cat: Audio, desc: "|- Зарубежный Rock"}
- {id: 699, cat: Audio/Lossless, desc: "|-- Pop Rock & Soft Rock (lossless)"}
- {id: 700, cat: Audio/MP3, desc: "|-- Pop Rock & Soft Rock (lossy)"}
- {id: 696, cat: Audio/Lossless, desc: "|-- Folk Rock (lossless)"}
- {id: 1167, cat: Audio/MP3, desc: "|-- Folk Rock (lossy)"}
- {id: 692, cat: Audio/Lossless, desc: "|-- Classic Rock & Hard Rock (lossless)"}
- {id: 693, cat: Audio/MP3, desc: "|-- Classic Rock & Hard Rock (lossy)"}
- {id: 694, cat: Audio/Lossless, desc: "|-- Progressive & Art-Rock (lossless)"}
- {id: 695, cat: Audio/MP3, desc: "|-- Progressive & Art-Rock (lossy)"}
- {id: 697, cat: Audio/Lossless, desc: "|-- AOR (Melodic Hard Rock, Arena rock) (lossless)"}
- {id: 698, cat: Audio/MP3, desc: "|-- AOR (Melodic Hard Rock, Arena rock) (lossy)"}
- {id: 701, cat: Audio/Lossless, desc: "|-- Instrumental Guitar Rock (lossless)"}
- {id: 702, cat: Audio/MP3, desc: "|-- Instrumental Guitar Rock (lossy)"}
- {id: 703, cat: Audio/Lossless, desc: "|-- Rockabilly, Psychobilly, Rock'n'Roll (lossless)"}
- {id: 704, cat: Audio/MP3, desc: "|-- Rockabilly, Psychobilly, Rock'n'Roll (lossy)"}
- {id: 705, cat: Audio/Lossless, desc: "|-- Восточноазиатский рок (lossless)"}
- {id: 706, cat: Audio/MP3, desc: "|-- Восточноазиатский рок (lossy)"}
- {id: 918, cat: Audio/Lossless, desc: "|- Sludge, Stoner, Post-Metal (lossless)"}
- {id: 919, cat: Audio/MP3, desc: "|- Sludge, Stoner, Post-Metal (lossly)"}
- {id: 711, cat: Audio/Lossless, desc: "|- Death, Doom (lossless)"}
- {id: 712, cat: Audio/MP3, desc: "|- Death, Doom (lossy)"}
- {id: 707, cat: Audio/Lossless, desc: "|- Avant-garde, Experimental Metal (lossless)"}
- {id: 708, cat: Audio/MP3, desc: "|- Avant-garde, Experimental Metal (lossy)"}
- {id: 709, cat: Audio/Lossless, desc: "|- Black (lossless)"}
- {id: 710, cat: Audio/MP3, desc: "|- Black (lossy)"}
- {id: 713, cat: Audio/Lossless, desc: "|- Folk, Pagan, Viking (lossless)"}
- {id: 714, cat: Audio/MP3, desc: "|- Folk, Pagan, Viking (lossy)"}
- {id: 715, cat: Audio/Lossless, desc: "|- Gothic Metal (lossless)"}
- {id: 716, cat: Audio/MP3, desc: "|- Gothic Metal (lossy)"}
- {id: 717, cat: Audio/Lossless, desc: "|- Grind, Brutal Death (lossless)"}
- {id: 718, cat: Audio/MP3, desc: "|- Grind, Brutal Death (lossy)"}
- {id: 719, cat: Audio/Lossless, desc: "|- Heavy, Power, Progressive (lossless)"}
- {id: 720, cat: Audio/MP3, desc: "|- Heavy, Power, Progressive (lossy)"}
- {id: 721, cat: Audio/Lossless, desc: "|- Metalcore, Deathcore, Mathcore (lossless)"}
- {id: 722, cat: Audio/MP3, desc: "|- Metalcore, Deathcore, Mathcore (lossy)"}
- {id: 723, cat: Audio/Lossless, desc: "|- Thrash, Speed (lossless)"}
- {id: 724, cat: Audio/MP3, desc: "|- Thrash, Speed (lossy)"}
- {id: 725, cat: Audio/Lossless, desc: "|- Сборники (lossless)"}
- {id: 726, cat: Audio/MP3, desc: "|- Сборники (lossy)"}
- {id: 1122, cat: Audio/Lossless, desc: "|- Gothic Rock, Deathrock, Electrogoth, Dark Cabaret..."}
- {id: 1125, cat: Audio/MP3, desc: "|- Gothic Rock, Deathrock, Electrogoth, Dark Cabaret (lossy)"}
- {id: 1123, cat: Audio/Lossless, desc: "|- Dark Folk, Neofolk, Martial Industrial, Ritual Ambient..."}
- {id: 1124, cat: Audio/MP3, desc: "|- Dark Folk, Neofolk, Martial Industrial, Ritual Ambient..."}
- {id: 727, cat: Audio/Lossless, desc: "|- Alternative & Nu-metal (lossless)"}
- {id: 728, cat: Audio/MP3, desc: "|- Alternative & Nu-metal (lossy)"}
- {id: 729, cat: Audio/Lossless, desc: "|- Punk (lossless)"}
- {id: 730, cat: Audio/MP3, desc: "|- Punk (lossy)"}
- {id: 731, cat: Audio/Lossless, desc: "|- Hardcore (lossless)"}
- {id: 732, cat: Audio/MP3, desc: "|- Hardcore (lossy)"}
- {id: 733, cat: Audio/Lossless, desc: "|- Indie, Post-Rock & Post-Punk (lossless)"}
- {id: 734, cat: Audio/MP3, desc: "|- Indie, Post-Rock & Post-Punk (lossy)"}
- {id: 735, cat: Audio/Lossless, desc: "|- Industrial & Post-industrial (lossless)"}
- {id: 736, cat: Audio/MP3, desc: "|- Industrial & Post-industrial (lossy)"}
- {id: 737, cat: Audio/Lossless, desc: "|- Emocore, Post-hardcore (lossless)"}
- {id: 738, cat: Audio/MP3, desc: "|- Emocore, Post-hardcore (lossy)"}
- {id: 1074, cat: Audio/MP3, desc: "|- Сборники (lossy)"}
- {id: 742, cat: Audio/Lossless, desc: "|- Рок, Панк, Альтернатива (lossless)"}
- {id: 743, cat: Audio/MP3, desc: "|- Рок, Панк, Альтернатива (lossy)"}
- {id: 744, cat: Audio/Lossless, desc: "|- Металл (lossless)"}
- {id: 745, cat: Audio/MP3, desc: "|- Металл (lossy)"}
- {id: 746, cat: Audio/Lossless, desc: "|- Рок на языках народов xUSSR (lossless)"}
- {id: 747, cat: Audio/MP3, desc: "|- Рок на языках народов xUSSR (lossy)"}
# Джазовая и блюзовая музыка
- {id: 670, cat: Audio/Lossless, desc: "|- World Jazz, Ethnic Jazz (lossless)"}
- {id: 666, cat: Audio/Lossless, desc: "|- Early Jazz, Swing, Gypsy (lossless)"}
- {id: 667, cat: Audio/Lossless, desc: "|- Bop (lossless)"}
- {id: 668, cat: Audio/Lossless, desc: "|- Mainstream Jazz, Cool (lossless)"}
- {id: 669, cat: Audio/Lossless, desc: "|- Jazz Fusion (lossless)"}
- {id: 671, cat: Audio/Lossless, desc: "|- Avant-Garde Jazz, Free Improvisation (lossless)"}
- {id: 672, cat: Audio/Lossless, desc: "|- Modern Creative, Third Stream (lossless)"}
- {id: 673, cat: Audio/Lossless, desc: "|- Smooth, Jazz-Pop (lossless)"}
- {id: 674, cat: Audio/Lossless, desc: "|- Vocal Jazz (lossless)"}
- {id: 675, cat: Audio/Lossless, desc: "|- Funk, Soul, R&B (lossless)"}
- {id: 677, cat: Audio/MP3, desc: "|- Зарубежный джаз (lossy)"}
- {id: 680, cat: Audio/Lossless, desc: "|- Blues Rock (lossless)"}
- {id: 679, cat: Audio/Lossless, desc: "|- Blues (Texas, Chicago, Modern and Others) (lossless)"}
- {id: 681, cat: Audio/Lossless, desc: "|- Roots, Pre-War Blues, Early R&B, Gospel (lossless)"}
- {id: 683, cat: Audio/MP3, desc: "|- Зарубежный блюз (lossy)"}
- {id: 686, cat: Audio/Lossless, desc: "|- Отечественный джаз (lossless)"}
- {id: 687, cat: Audio/MP3, desc: "|- Отечественный джаз (lossy)"}
- {id: 688, cat: Audio/Lossless, desc: "|- Отечественный блюз (lossless)"}
- {id: 689, cat: Audio/MP3, desc: "|- Отечественный блюз (lossy)"}
# Программное обеспечение
- {id: 68, cat: PC, desc: "|- Программы под Windows"}
- {id: 91, cat: PC, desc: "|-- Системы для бизнеса"}
- {id: 95, cat: PC, desc: "|-- Программы для работы со звуком"}
- {id: 94, cat: PC, desc: "|-- Редакторы видео"}
- {id: 87, cat: PC, desc: "|-- 3D моделирование, рендеринг и плагины для них"}
- {id: 98, cat: PC, desc: "|-- Системы навигации и карты"}
# Книги и журналы
- {id: 340, cat: Books, desc: "|- Предложения по улучшению раздела 'Книги и журналы..."}
- {id: 341, cat: Books, desc: "|- Художественная литература"}
- {id: 351, cat: Books, desc: "|-- Русская литература (Классика)"}
- {id: 405, cat: Books, desc: "|-- Русская литература (Современная проза)"}
- {id: 352, cat: Books/Foreign, desc: "|-- Зарубежная литература (до 1900 г.)"}
- {id: 353, cat: Books/Foreign, desc: "|-- Зарубежная литература (XX и XXI век)"}
- {id: 354, cat: Books, desc: "|-- Детектив / боевик / триллер"}
- {id: 355, cat: Books, desc: "|-- Женский роман"}
- {id: 315, cat: Books/Foreign, desc: "|-- Зарубежная фантастика / фэнтези / мистика"}
- {id: 316, cat: Books, desc: "|-- Отечественная фантастика / фэнтези / мистика"}
- {id: 356, cat: Books, desc: "|-- Приключения"}
- {id: 358, cat: Books/Foreign, desc: "|-- Художественная литература на иностранных языках"}
- {id: 365, cat: Books, desc: "|- Учебная литература для детского сада и начальной шко..."}
- {id: 359, cat: Books, desc: "|- Художественная литературара для средних и старших классов"}
- {id: 343, cat: Books, desc: "|- Гуманитарные науки, история, философия"}
- {id: 378, cat: Books, desc: "|-- Исторические науки. Издания 1992-по н.в."}
- {id: 377, cat: Books, desc: "|-- История России"}
- {id: 376, cat: Books, desc: "|-- Эпоха СССР"}
- {id: 375, cat: Books, desc: "|-- История отдельных стран и регионов"}
- {id: 371, cat: Books, desc: "|-- Философия"}
- {id: 368, cat: Books, desc: "|-- Психотерапия, психодиагностика, консультирование и психокоррекция"}
- {id: 367, cat: Books, desc: "|-- Эзотерика, саморазвитие и самосовершенствование"}
- {id: 382, cat: Books, desc: "|- Электроника / радио"}
- {id: 345, cat: Books, desc: "|- Компьютерная литература"}
- {id: 394, cat: Books, desc: "|-- Веб-дизайн и программирование"}
- {id: 393, cat: Books, desc: "|-- Программирование"}
- {id: 898, cat: Books, desc: "|-- СУБД"}
- {id: 392, cat: Books, desc: "|-- Графика, обработка видео"}
- {id: 391, cat: Books, desc: "|-- Сети / VoIP"}
- {id: 389, cat: Books, desc: "|-- Компьютерные журналы и приложения к ним"}
- {id: 396, cat: Books/Other, desc: "|- Прочее"}
- {id: 349, cat: Books/Mags, desc: "|- Журналы и газеты (общий раздел)"}
- {id: 350, cat: Books/Other, desc: "|- Разное"}
- {id: 342, cat: Books, desc: "|-- Учебная литература - для детей, родителей и учителей"}
- {id: 370, cat: Books, desc: "|-- Экономика, бизнес, менеджмент, маркетинг"}
- {id: 398, cat: Books, desc: "|-- Прочие хобби"}
- {id: 399, cat: Books, desc: "|-- Кулинария (книги)"}
- {id: 400, cat: Books, desc: "|-- Охота и рыбалка"}
- {id: 336, cat: Books, desc: "|-- Физкультура, фитнес, бодибилдинг, йога"}
# Разное
- {id: 242, cat: Other, desc: "|- Другое"}
# Скрытые разделы
- {id: 1184, cat: Other, desc: "|- Для оформления релизов AVP Studio"}
# undocumented
- {id: 556, cat: Audio, desc: "Архив раздач (общий музыкальный)"}
modes:
search: [q]
tv-search: [q]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: 1
options:
1: created
10: seeders
7: size
2: title
- name: type
type: select
label: Order requested from site
default: 2
options:
2: desc
1: asc
login:
path: login.php
method: form
form: form[action="./login.php"]
inputs:
login_username: "{{ .Config.username }}"
login_password: "{{ .Config.password }}"
redirect: "index.php"
login: Вход
error:
- selector: table.error
test:
path: index.php
selector: a[href^="/login.php?logout=1"]
search:
paths:
- path: tracker.php
inputs:
f: "{{ join .Categories \",\" }}"
nm: "{{ .Keywords }}"
o: "{{ .Config.sort }}"
s: "{{ .Config.type }}"
tm: -1
rows:
selector: tr[id^="tor_"]:has(a[href^="/download.php?id="])
fields:
category:
selector: a[href^="tracker.php?f="]
attribute: href
filters:
- name: querystring
args: f
title:
selector: a.tLink
details:
selector: a.tLink
attribute: href
download:
selector: a[href^="/download.php?id="]
attribute: href
size:
selector: td:nth-child(6) > u
seeders:
selector: td.seedmed > b
leechers:
selector: td.leechmed > b
grabs:
selector: td:nth-child(9)
date:
selector: td:last-child > u
downloadvolumefactor:
text: 1
uploadvolumefactor:
text: 1
# engine n/a
+203
View File
@@ -0,0 +1,203 @@
---
id: njtupt
name: njtupt (浦园)
description: "njtupt (浦园) is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://njtupt.top/
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "电影/Movies"}
- {id: 402, cat: TV, desc: "剧集/TV-Series"}
- {id: 403, cat: TV, desc: "综艺/TV-Show"}
- {id: 405, cat: TV/Anime, desc: "动漫/Anime"}
- {id: 406, cat: Audio, desc: "音乐/Music"}
- {id: 422, cat: Audio/Video, desc: "演出/MusicVideo"}
- {id: 404, cat: TV/Documentary, desc: "纪录片/Documentary"}
- {id: 407, cat: TV/Sport, desc: "体育/Sports"}
- {id: 415, cat: TV, desc: "资料/Education"}
- {id: 425, cat: PC/Games, desc: "游戏/Game"}
- {id: 428, cat: PC/0day, desc: "软件/Software"}
- {id: 409, cat: Other, desc: "其他/Other"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, doubanid]
movie-search: [q, imdbid, doubanid]
music-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: 2facode
type: text
label: 2FA code
- name: info_2fa
type: info
label: "About 2FA code"
default: "Only fill in the <b>2FA code</b> box if you have enabled <b>2FA</b> on the njtupt (浦园) Web Site. Otherwise just leave it empty."
- 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: "Account Retention Rules:<ol><li>Veteran User or above would never be deleted; (Not enabled for the time being).</li><li>Elite User or above would never be deleted if parked (at User CP); (Not enabled for the time being).</li><li>Parked accounts would be deleted if users have not logged in for more than 400 days in a row.</li><li>Unparked accounts would be deleted if users have not logged in for more than 150 days in a row.</li></ol>"
login:
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
selector: img[alt="CAPTCHA"]
input: imagestring
inputs:
secret: ""
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
two_step_code: "{{ .Config.2facode }}"
logout: ""
securelogin: ""
ssl: yes
trackerssl: yes
error:
- selector: td.embedded:has(h2:contains("失败"))
test:
path: index.php
selector: a[href="logout.php"]
search:
paths:
- path: torrents.php
inputs:
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
# 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: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
# 0 AND, 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
imdbid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="imdb.com/title/tt"]
attribute: href
doubanid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="movie.douban.com/subject/"]
attribute: href
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)
optional: true
default: 512MB
seeders:
selector: td.rowfollow:nth-child(6)
optional: true
default: 0
leechers:
selector: td.rowfollow:nth-child(7)
optional: true
default: 0
grabs:
selector: td.rowfollow:nth-child(8)
optional: true
default: 0
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
description:
selector: td:nth-child(2)
remove: a, b, font, img, span
# NexusPHP v1.8.15 2024-11-27
+192
View File
@@ -0,0 +1,192 @@
---
id: nobs
name: NOBS
description: "NOBS (NUCLEAR ORDER BIT SYNDICATE) is a SPANISH Private Torrent Tracker for MOVIES / TV"
language: es-ES
type: private
encoding: UTF-8
links:
- https://nobs.rawsmoke.net/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Console, desc: "Retro Arcade"}
- {id: 4, cat: Movies/Other, desc: "Anime Movies"}
- {id: 5, cat: TV/Anime, desc: "Anime TV Shows"}
- {id: 7, cat: Books, desc: "E-Books"}
- {id: 8, cat: Audio/Audiobook, desc: "Audiobooks"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
book-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://nobs.rawsmoke.net/\" target=\"_blank\">NOBS</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }} Spanish"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: re_replace
args: ["(?i)(TV Movie)", "TV_Movie"]
- name: replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
# global MR is 0.4 but torrents must be seeded for 4 days regardless of ratio
# minimumratio:
# text: 0.4
minimumseedtime:
# 4 days (as seconds = 4 x 24 x 60 x 60)
text: 345600
# json UNIT3D 9.2.0
@@ -0,0 +1,203 @@
---
id: nordicbytes
replaces:
- danishbytes-api
name: NordicBytes
description: "NordicBytes is a Mixed NORDIC Private Torrent Tracker for MOVIES / TV / GENERAL"
language: en-US
type: private
encoding: UTF-8
links:
- https://nordicbytes.org/
legacylinks:
- https://danishbytes.org/
- https://danishbytes.art/
- https://danishbytes.club/
- https://danishbytes2.org/
- https://dbytes.org/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: PC/0day, desc: "Apps"}
- {id: 4, cat: PC/Games, desc: "Games"}
- {id: 5, cat: Audio, desc: "Sound"}
- {id: 6, cat: Books, desc: "Books"}
- {id: 7, cat: Audio/Audiobook, desc: "AudioBooks"}
- {id: 8, cat: Audio/Other, desc: "Podcasts"}
- {id: 9, cat: XXX, desc: "XXX"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_apikey
type: info
label: About your API key
default: "Find or Generate a new API Key by accessing the <a href=\"https://nordicbytes.org/account/apikey/\" target=\"_blank\">NordicBytes Account API Key</a> page."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: false
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_activity
type: info
label: Account Inactivity
default: "Your account is automatically disabled after 90 days of no activity."
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
infohash:
selector: info_hash
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://placehold.co/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: re_replace
args: ["(?i)(TV Movie)", "TV_Movie"]
- name: replace
args: [" & ", "_&_"]
description:
text: "{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
minimumratio:
text: 1.0
minimumseedtime:
# 2 day (as seconds = 2 x 24 x 60 x 60)
text: 172800
# json Traxary v0.0.187 (based on UNIT3D 8.2.0)
@@ -0,0 +1,181 @@
---
id: nostradamus
name: Nostradamus
description: "Nostradamus is a ratioless FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
language: fr-FR
type: private
encoding: UTF-8
links:
- https://nostradamus.foo/
caps:
categorymappings:
# from https://nostradamus.foo/api?t=caps&apikey=YOUR-API-KEY
- {id: 2000, cat: Movies, desc: "Films"}
- {id: 2020, cat: Movies, desc: "Films/Film"}
- {id: 2010, cat: Movies/Other, desc: "Films/Animation"}
- {id: 2030, cat: TV/Documentary, desc: "Films/Documentaire"}
- {id: 2040, cat: Audio/Video, desc: "Films/Spectacle"}
- {id: 2060, cat: Audio/Video, desc: "Films/Concert"}
- {id: 2510, cat: Movies/Other, desc: "Films/Court-métrage"}
- {id: 5000, cat: TV, desc: "Séries TV"}
- {id: 5040, cat: TV, desc: "Séries TV/Série TV"}
- {id: 5070, cat: TV/Anime, desc: "Séries TV/Animation Série"}
- {id: 5080, cat: TV, desc: "Séries TV/Emission TV"}
- {id: 5090, cat: Audio/Video, desc: "Vidéo"}
- {id: 5060, cat: TV/Sport, desc: "Vidéo/Sport"}
- {id: 5091, cat: Audio/Video, desc: "Vidéo/Vidéo-clips"}
- {id: 5092, cat: Audio/Video, desc: "Vidéo/Autre"}
- {id: 7000, cat: Books, desc: "eBook"}
- {id: 7010, cat: Audio/Audiobook, desc: "eBook/Audio"}
- {id: 7030, cat: Books/Comics, desc: "eBook/BDs"}
- {id: 7040, cat: Books/Comics, desc: "eBook/Comics"}
- {id: 7020, cat: Books/EBook, desc: "eBook/Livres"}
- {id: 7050, cat: Books/Comics, desc: "eBook/Mangas"}
- {id: 7060, cat: Books/Mags, desc: "eBook/Presse"}
- {id: 3000, cat: Audio, desc: "Audio"}
- {id: 3030, cat: Audio/Other, desc: "Audio/Karaoke"}
- {id: 3010, cat: Audio, desc: "Audio/Musique"}
- {id: 3040, cat: Audio/Other, desc: "Audio/Podcast Radio"}
- {id: 3050, cat: Audio/Other, desc: "Audio/Samples"}
- {id: 1000, cat: Console, desc: "Jeu vidéo"}
- {id: 1099, cat: Console/Other, desc: "Jeu vidéo/Autre"}
- {id: 1091, cat: PC/Games, desc: "Jeu vidéo/Linux"}
- {id: 1092, cat: PC/Games, desc: "Jeu vidéo/MacOS"}
- {id: 1040, cat: PC/Games, desc: "Jeu vidéo/Microsoft"}
- {id: 1030, cat: Console/NDS, desc: "Jeu vidéo/Nintendo"}
- {id: 1060, cat: Console/Other, desc: "Jeu vidéo/Smartphone"}
- {id: 1080, cat: Console/PS4, desc: "Jeu vidéo/Sony"}
- {id: 1061, cat: Console/Other, desc: "Jeu vidéo/Tablette"}
- {id: 1090, cat: PC/Games, desc: "Jeu vidéo/Windows"}
- {id: 8000, cat: Other, desc: "eBook/Littérature & Audio/Autre & Séries TV/Documentaire"}
modes:
search: [q]
tv-search: [q, season, ep, tvdbid]
movie-search: [q, imdbid]
music-search: [q]
book-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://nostradamus.foo/api-access\" target=\"_blank\">Nostradamus API access</a> page and scrolling down to the <b>API Credentials</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:
# returns "401 Unauthorized, check your credentials" if passkey is invalid
path: api
method: get
inputs:
apikey: "{{ .Config.apikey }}"
t: search
limit: 1
search:
paths:
- path: api
response:
type: xml
inputs:
apikey: "{{ .Config.apikey }}"
t: "{{ if .Query.IMDBID }}movie{{ else }}{{ end }}{{ if .Query.TVDBID }}tvsearch{{ else }}{{ end }}{{ if or .Query.TVDBID .Query.IMDBID }}{{ else }}search{{ end }}"
q: "{{ .Keywords }}"
cat: "{{ join .Categories \",\" }}"
season: "{{ .Query.Season }}"
ep: "{{ .Query.Ep }}"
imdbid: "{{ .Query.IMDBID }}"
tvdbid: "{{ .Query.TVDBID }}"
limit: 100
keywordsfilters:
# replace spaces between words with percent wildcard
- name: re_replace
args: ["\\W+", "%"]
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: link
download:
selector: enclosure
attribute: url
infohash:
selector: "[name=infohash]"
attribute: value
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
tmdbid:
selector: "[name=tmdbid]"
attribute: value
seeders:
selector: "[name=seeders]"
attribute: value
leechers:
selector: "[name=leechers]"
attribute: value
grabs:
selector: "[name=grabs]"
attribute: value
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# torznab xml
+145
View File
@@ -0,0 +1,145 @@
---
id: order66
name: Order66
description: "Order66 is a Private Torrent Tracker for MOVIES / TV / GENERAL"
language: en-US
type: private
encoding: UTF-8
links:
- https://executeorder66.info/
caps:
categorymappings:
- {id: 47, cat: PC/0day, desc: "Apps: WINDOWS/O/S"}
- {id: 18, cat: PC, desc: "Apps: PC"}
- {id: 20, cat: PC, desc: "Apps: Linux"}
- {id: 62, cat: Console, desc: "Games: XBOX360/ALL"}
- {id: 10, cat: PC/Games, desc: "Games: PC"}
- {id: 9, cat: Audio, desc: "Karaoke: All"}
- {id: 63, cat: Books/Mags, desc: "Mags: mags"}
- {id: 54, cat: Movies/DVD, desc: "Movies: DVD-R"}
- {id: 52, cat: Movies/BluRay, desc: "Movies: BD-Rip"}
- {id: 55, cat: Movies/BluRay, desc: "Movies: HD/Bluray"}
- {id: 56, cat: Movies, desc: "Movies: Kids"}
- {id: 57, cat: Movies/HD, desc: "Movies: MP4"}
- {id: 58, cat: Movies, desc: "Movies: Packs"}
- {id: 53, cat: Movies/SD, desc: "Movies: Cam"}
- {id: 60, cat: Movies/HD, desc: "Movies: x265"}
- {id: 51, cat: Movies/BluRay, desc: "Movies: BD-R"}
- {id: 50, cat: Movies/UHD, desc: "Movies: 4K"}
- {id: 49, cat: Movies/SD, desc: "Movies: 480p"}
- {id: 48, cat: Movies/BluRay, desc: "Movies: BluRay/AVI/MKV"}
- {id: 61, cat: Movies/SD, desc: "Movies: Xvid"}
- {id: 59, cat: Movies/WEB-DL, desc: "Movies: WEBRip/Web-DL"}
- {id: 1, cat: Movies/Other, desc: "Movies: R3-En-Code"}
- {id: 64, cat: Audio, desc: "Music: Wav"}
- {id: 22, cat: Audio, desc: "Music: MP3/Flac"}
- {id: 26, cat: Audio, desc: "Music: SiteDJExclusivemix"}
- {id: 41, cat: TV/HD, desc: "TV: HD"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
settings:
- name: cookie
type: text
label: Cookie
- name: info_cookie
type: info_cookie
- name: freeleech
type: checkbox
label: Filter freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: id
options:
id: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_results
type: info
label: Search results
default: "If you are getting <b>0 results</b> then access the site with your browser and <b>mark as read</b> all PMs."
login:
# using cookie method because login page has embedded Cloudflare turnstile
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: index.php
selector: a[href="account-logout.php"]
search:
paths:
# https://executeorder66.info/torrents.php?search=&cat=
- path: torrents.php
inputs:
search: "{{ .Keywords }}"
cat: 0
sort: "{{ .Config.sort }}"
order: "{{ .Config.type }}"
keywordsfilters:
# replace spaces between words with percent wildcard
- name: re_replace
args: ["\\W+", "%"]
rows:
selector: "table.ttbl > tbody > tr:has(a[href^=\"download.php?id=\"]){{ if .Config.freeleech }}:has(span.badge-free){{ else }}{{ end }}"
fields:
category:
selector: a[href^="torrents.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a[href^="torrents-details.php?id="]
details:
selector: a[href^="torrents-details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
poster:
selector: div.cov-tip > img
attribute: src
size:
selector: td:nth-child(6)
date:
# auto adjusted by site account profile
# 16-06-26<br>09:08
selector: td:nth-child(8)
filters:
- name: dateparse
args: "dd-MM-yyHH:mm"
seeders:
selector: span[class^="num-s"]
leechers:
selector: span[class^="num-l"]
grabs:
selector: td:nth-child(7)
downloadvolumefactor:
case:
span.badge-free: 0
"*": 1
uploadvolumefactor:
text: 1
minimumratio:
text: 0.5
# TorrentTrader 3.8.3
@@ -0,0 +1,89 @@
---
id: pandacd
name: PandaCD
description: "PandaCD is a Public Tracker for MUSIC (Creative Commons and artist-permitted content)"
language: en-US
type: public
encoding: UTF-8
links:
- https://pandacd.io/
caps:
categorymappings:
# https://pandacd.io/api/torznab?t=caps
- {id: 3000, cat: Audio, desc: "Audio"}
- {id: 3010, cat: Audio/MP3, desc: "MP3"}
- {id: 3040, cat: Audio/Lossless, desc: "Lossless"}
modes:
search: [q]
music-search: [q, artist, album, genre]
settings: []
search:
paths:
- path: api/torznab
response:
type: xml
inputs:
t: "{{ .Query.Type }}"
q: "{{ .Keywords }}"
cat: "{{ join .Categories \",\" }}"
artist: "{{ .Query.Artist }}"
album: "{{ .Query.Album }}"
genre: "{{ .Query.Genre }}"
limit: 100
rows:
selector: rss > channel > item
fields:
category:
selector: "[name=category]"
attribute: value
title:
selector: title
details:
selector: guid
download:
selector: enclosure
attribute: url
date:
# Wed, 15 Apr 2026 02:01:34 +0000
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=leechers]"
attribute: value
grabs:
selector: "[name=grabs]"
attribute: value
files:
selector: "[name=files]"
attribute: value
infohash:
selector: "[name=infohash]"
attribute: value
genre:
selector: "[name=genre]"
attribute: value
description:
text: "{{ .Result.genre }}"
downloadvolumefactor:
selector: "[name=downloadvolumefactor]"
attribute: value
uploadvolumefactor:
selector: "[name=uploadvolumefactor]"
attribute: value
# torznab xml
@@ -0,0 +1,196 @@
---
id: peergarden
name: PeerGarden
description: "PeerGarden (PG) is a Private Torrent Tracker for MOVIES / TV / GENERAL"
language: en-US
type: private
encoding: UTF-8
links:
- https://peergarden.org/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: PC/0day, desc: "Apps"}
- {id: 4, cat: PC/Games, desc: "Games"}
- {id: 5, cat: Audio, desc: "Music"}
- {id: 6, cat: Books, desc: "Books"}
- {id: 7, cat: Audio/Audiobook, desc: "AudioBooks"}
- {id: 8, cat: Audio/Other, desc: "Podcasts"}
- {id: 10, cat: TV/Sport, desc: "Sports"}
- {id: 11, cat: TV/Anime, desc: "Anime"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_apikey
type: info
label: About your API key
default: "Find or Generate a new API Key by accessing the <a href=\"https://peergarden.org/account/apikey/\" target=\"_blank\">PeerGarden Account API Key</a> page."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: false
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_activity
type: info
label: Account Inactivity
default: "Your account is automatically disabled after 90 days of no activity."
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
infohash:
selector: info_hash
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://placehold.co/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: re_replace
args: ["(?i)(TV Movie)", "TV_Movie"]
- name: replace
args: [" & ", "_&_"]
description:
text: "{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
minimumratio:
text: 1.0
minimumseedtime:
# 2 day (as seconds = 2 x 24 x 60 x 60)
text: 172800
# json Traxary v0.0.187 (based on UNIT3D 8.2.0)
@@ -0,0 +1,171 @@
---
id: playletpt
name: PlayletPT
description: "PlayletPT is a CHINESE Private Torrent Tracker for Short Drama"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://playlet.cc/
legacylinks:
- https://playletpt.xyz/
caps:
categorymappings:
- {id: 408, cat: TV, desc: "短剧/Drama"}
- {id: 409, cat: TV, desc: "漫画/Comedy"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
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: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li></ol>"
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: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
# 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: "{{ if .Query.IMDBID }}4{{ else }}0{{ end }}"
# 0 AND, 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
imdbid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="imdb.com/title/tt"]
attribute: href
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)
optional: true
default: 512MB
seeders:
selector: td.rowfollow:nth-child(6)
optional: true
default: 0
leechers:
selector: td.rowfollow:nth-child(7)
optional: true
default: 0
grabs:
selector: td.rowfollow:nth-child(8)
optional: true
default: 0
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
minimumseedtime:
# 1 days (as seconds = 1 x 24 x 60 x 60)
text: 86400
description:
selector: td.rowfollow:nth-child(2)
remove: a, b, font, img, span
# NexusPHP v1.9.6 2025-06-25 (custom)
@@ -0,0 +1,192 @@
---
id: podzemlje
name: Podzemlje
description: "Podzemlje is an EX-YU Private Torrent Tracker for MOVIES / TV / GENERAL"
language: en-US
type: private
encoding: UTF-8
links:
- https://podzemlje.net/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: PC/Games, desc: "Igre"}
- {id: 4, cat: Audio, desc: "Muzika"}
- {id: 5, cat: PC/0day, desc: "Programi"}
- {id: 6, cat: Books, desc: "Knjige"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://podzemlje.net/\" target=\"_blank\">Podzemlje</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: re_replace
args: ["(?i)(TV Movie)", "TV_Movie"]
- name: replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
# global MR is 0.7 but torrents must be seeded for 3 days regardless of ratio
# minimumratio:
# text: 0.7
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# json UNIT3D 9.2.0
@@ -0,0 +1,72 @@
---
id: pornxlab
replaces:
- ptorrents
name: PornXLab
description: "PornXLab is a Public tracker for 3X"
language: en-US
type: public
encoding: UTF-8
links:
- https://www.pornxlab.com/
legacylinks:
- https://www.ptorrents.com/
caps:
categories:
XXX: XXX
modes:
search: [q]
settings: []
download:
selectors:
- selector: a.download-button
attribute: href
search:
paths:
- path: "{{ if .Keywords }}s.php?search={{ .Keywords }}{{ else }}{{ end }}"
rows:
selector: div.image-wrapper
fields:
category:
text: XXX
title:
selector: a.overlay
filters:
- name: re_replace
args: ["^.+?\\] ", ""]
details:
selector: a.overlay
attribute: href
download:
selector: a.overlay
attribute: href
filters:
- name: regexp
args: "-(\\d+).html"
- name: prepend
args: "/dl.php?t="
poster:
selector: img
attribute: src
date:
text: now
size:
selector: span.size
seeders:
text: 1
leechers:
text: 1
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
description:
selector: div.catalog a
# engine n/a
+186
View File
@@ -0,0 +1,186 @@
---
id: ptcc
name: PTCC (我的PT)
description: "PTCC (我的PT) is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://cc.mypt.cc/
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "Movies/电影"}
- {id: 402, cat: TV, desc: "TV Series/剧集"}
- {id: 403, cat: TV, desc: "TV Shows/节目"}
- {id: 404, cat: TV/Documentary, desc: "DOCU/纪录片"}
- {id: 405, cat: TV/Anime, desc: "Animations/动画片"}
- {id: 406, cat: Audio/Video, desc: "MTV/演唱会/唱片"}
- {id: 407, cat: TV/Sport, desc: "Sports/运动/体育"}
- {id: 408, cat: TV/Other, desc: "Playlet/短剧"}
- {id: 409, cat: Movies/Other, desc: "Opera/戏曲"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
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: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li> Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users with no traffic (i.e. upload/download data is 0) will be deleted if they have not logged in for more than 100 consecutive days.</li></ol>"
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: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
# 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 (broken so cannot search doubanid), 3 uploader, 4 imdburl
search_area: "{{ if .Query.IMDBID }}4{{ else }}0{{ end }}"
# 0 AND, 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
imdbid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="imdb.com/title/tt"]
attribute: href
doubanid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="movie.douban.com/subject/"]
attribute: href
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)
optional: true
default: 512MB
seeders:
selector: td.rowfollow:nth-child(6)
optional: true
default: 0
leechers:
selector: td.rowfollow:nth-child(7)
optional: true
default: 0
grabs:
selector: td.rowfollow:nth-child(8)
optional: true
default: 0
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
minimumseedtime:
# 1 day (as seconds = 24 x 60 x 60)
text: 86400
description_verified:
case:
span[title="通过"], span[title="通過"], span[title="Allowed"]: "Verified:"
span[title="未审"], span[title="未審"], span[title="Not reviewed"]: "Unverified:"
span[title="拒绝"], span[title="拒絕"], span[title="Denied"]: "Banned:"
description:
selector: td.rowfollow:nth-child(2)
remove: a, b, font, img, span
filters:
- name: prepend
args: "{{ .Result.description_verified }} "
# NexusPHP v1.8.15 2024-12-23
+173
View File
@@ -0,0 +1,173 @@
---
id: ptlao
name: PTLAO
description: "PTLAO is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://ptlao.top/
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "Movies"}
- {id: 402, cat: TV, desc: "TV Series"}
- {id: 403, cat: TV, desc: "TV Shows"}
- {id: 405, cat: TV/Anime, desc: "Animations"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries"}
- {id: 408, cat: Audio, desc: "HQ Audio"}
- {id: 409, cat: Other, desc: "Misc"}
- {id: 407, cat: TV/Sport, desc: "Sports"}
- {id: 406, cat: Audio/Video, desc: "Music Videos"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, doubanid]
movie-search: [q, imdbid, doubanid]
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: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite Users and above will not be deleted after parking (in the control panel)</li><li>Users with a parked account will be banned if they do not log in for 300 consecutive days</li><li>Users who do not log in for 150 consecutive days will be banned</li><li>Newly registered users with no traffic within 30 days, will be banned.</li></ol>"
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: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
# 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: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
# 0 AND, 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)
optional: true
default: 512MB
seeders:
selector: td.rowfollow:nth-child(6)
optional: true
default: 0
leechers:
selector: td.rowfollow:nth-child(7)
optional: true
default: 0
grabs:
selector: td.rowfollow:nth-child(8)
optional: true
default: 0
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.6
description:
selector: td.rowfollow:nth-child(2)
remove: a, b, font, img, span
# NexusPHP v1.9.14 2026-01-23
+203
View File
@@ -0,0 +1,203 @@
---
id: ptlgs
name: PTLGS
description: "PTLGS is a CHINESE Private Torrent Tracker for MOVIES / TV"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://ptlgs.org/
caps:
categorymappings:
- {id: 409, cat: Other/Misc, desc: "其他(Other)"}
- {id: 407, cat: TV/Sport, desc: "体育(Sports)"}
- {id: 406, cat: Audio/Video, desc: "音乐(Music Video)"}
- {id: 403, cat: TV, desc: "综艺(Variety Shows)"}
- {id: 402, cat: TV, desc: "剧集(Drama Serie)"}
- {id: 405, cat: TV/Anime, desc: "动漫/Anime)"}
- {id: 404, cat: TV/Documentary, desc: "纪录片/Documentary)"}
- {id: 401, cat: Movies, desc: "电影(Movies)"}
- {id: 411, cat: Other, desc: "字幕组(Subtitle Group)"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, doubanid]
movie-search: [q, imdbid, doubanid]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: 2facode
type: text
label: 2FA code
- name: info_2fa
type: info
label: "About 2FA code"
default: "Only fill in the <b>2FA code</b> box if you have enabled <b>2FA</b> on the PTLGS Web Site. Otherwise just leave it empty."
- 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: "Account retention rules:<ol><li>All users' accounts will be retained forever, and data will be retained forever</li><li>Newly registered accounts without traffic (i.e., upload/download data are 0) will be automatically frozen by the system if they do not log in for 7 consecutive days</li><li>Accounts that have been inactive for more than 30 days will be automatically banned by the system</li><li>determination method: When there is an unread announcement, it is necessary to manually confirm that the announcement has been read to be considered active; When there are no unread announcements, you need to visit the homepage to be active.</li></ol>"
login:
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
selector: img[alt="CAPTCHA"]
input: imagestring
inputs:
secret: ""
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
two_step_code: "{{ .Config.2facode }}"
logout: ""
securelogin: ""
ssl: yes
trackerssl: yes
error:
- selector: td.embedded:has(h2:contains("失败"))
test:
path: index.php
selector: a[href="logout.php"]
search:
paths:
- path: torrents.php
inputs:
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
# 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: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
# 0 AND, 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
imdbid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="imdb.com/title/tt"]
attribute: href
doubanid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="movie.douban.com/subject/"]
attribute: href
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)
optional: true
default: 512MB
seeders:
selector: td.rowfollow:nth-child(6)
optional: true
default: 0
leechers:
selector: td.rowfollow:nth-child(7)
optional: true
default: 0
grabs:
selector: td.rowfollow:nth-child(8)
optional: true
default: 0
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
minimumseedtime:
# 5 hours (as seconds = 5 x 60 x 60)
text: 18000
description:
selector: td.rowfollow:nth-child(2)
remove: a, b, font, img, span
# NexusPHP v1.8.13 2024-09-21
+168
View File
@@ -0,0 +1,168 @@
---
id: pttey
name: PTTey
description: "PTTey is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://pt.tey.cc/
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "Movies(电影)"}
- {id: 402, cat: TV, desc: "TV Series(电视剧)"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries(记录片)"}
- {id: 403, cat: TV/Other, desc: "TV Shows(电视节目)"}
- {id: 405, cat: TV/Anime, desc: "Animations(动漫)"}
- {id: 407, cat: TV/Sport, desc: "Sports(体育)"}
- {id: 406, cat: Audio/Video, desc: "Music Videos(MV)"}
- {id: 408, cat: Audio, desc: "Music(音乐)"}
- {id: 409, cat: Other, desc: "Misc(其他)"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
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: "Cherish your user account. Inactive accounts would be deleted based on the following rules:<ol><li>Veteran User or above would never be deleted.</li><li>Elite User or above would never be deleted if parked (at User CP).</li><li>Parked accounts would be deleted if users have not logged in for more than 400 days in a row.</li><li>Unparked accounts would be deleted if users have not logged in for more than 150 days in a row.</li><li>Accounts with both uploaded and downloaded amount being 0 would be deleted if users have not logged in for more than 100 days in a row.</li></ol>"
login:
# using cookie method because login page has embedded Cloudflare turnstile
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: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
# 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: "{{ if .Query.IMDBID }}4{{ else }}0{{ end }}"
# 0 AND, 1 OR, 2 exact
search_mode: 0
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
notnewword: 1
# does not return imdb link in results
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: table.torrentname td 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)
optional: true
default: 512MB
seeders:
selector: td.rowfollow:nth-child(6)
optional: true
default: 0
leechers:
selector: td.rowfollow:nth-child(7)
optional: true
default: 0
grabs:
selector: td.rowfollow:nth-child(8)
optional: true
default: 0
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
# NexusPHP v1.10.2 2026-04-11
+204
View File
@@ -0,0 +1,204 @@
---
id: ptying
name: PTYING (樱花)
description: "PTYING (樱花) is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://pt.ying.us.kg/
caps:
categorymappings:
- {id: 409, cat: Other, desc: "HQ Misc/其他"}
- {id: 408, cat: Audio, desc: "HQ Audio/音频"}
- {id: 406, cat: Audio/Video, desc: "Music Video/MV"}
- {id: 407, cat: TV/Sport, desc: "Sports/体育"}
- {id: 410, cat: TV, desc: "Playlet/短剧"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries/纪录片"}
- {id: 405, cat: TV/Anime, desc: "Anime/动漫"}
- {id: 403, cat: TV, desc: "TV Shows/综艺"}
- {id: 402, cat: TV, desc: "TV Series/电视剧"}
- {id: 401, cat: Movies, desc: "Movies/电影"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, doubanid]
movie-search: [q, imdbid, doubanid]
music-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: 2facode
type: text
label: 2FA code
- name: info_2fa
type: info
label: "About 2FA code"
default: "Only fill in the <b>2FA code</b> box if you have enabled <b>2FA</b> on the PTYING Web Site. Otherwise just leave it empty."
- 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: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li></ol>"
login:
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
selector: img[alt="CAPTCHA"]
input: imagestring
inputs:
secret: ""
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
two_step_code: "{{ .Config.2facode }}"
logout: ""
securelogin: ""
ssl: yes
trackerssl: yes
error:
- selector: td.embedded:has(h2:contains("失败"))
test:
path: index.php
selector: a[href="logout.php"]
search:
paths:
- path: torrents.php
inputs:
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
# 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: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
# 0 AND, 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
imdbid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="imdb.com/title/tt"]
attribute: href
doubanid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="movie.douban.com/subject/"]
attribute: href
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)
optional: true
default: 512MB
seeders:
selector: td.rowfollow:nth-child(6)
optional: true
default: 0
leechers:
selector: td.rowfollow:nth-child(7)
optional: true
default: 0
grabs:
selector: td.rowfollow:nth-child(8)
optional: true
default: 0
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
description:
selector: td:nth-child(2)
remove: a, b, font, img, span
minimumseedtime:
# 1 day (as seconds = 24 x 60 x 60)
text: 86400
# NexusPHP v1.8.15 2024-12-23
+189
View File
@@ -0,0 +1,189 @@
---
id: ptzone
name: PTzone
description: "PTzone is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://ptzone.xyz/
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "Movies(电影)"}
- {id: 402, cat: TV, desc: "TV Series(电视剧)"}
- {id: 403, cat: TV, desc: "TV Shows(综艺)"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries(纪录片)"}
- {id: 405, cat: TV/Anime, desc: "Animations(动漫)"}
- {id: 406, cat: Audio, desc: "Music(音乐)"}
- {id: 407, cat: TV/Sport, desc: "Sports(体育)"}
- {id: 408, cat: Other, desc: "Others(其它)"}
- {id: 410, cat: PC/0day, desc: "Software(软件)"}
- {id: 411, cat: PC/Games, desc: "Games(游戏)"}
- {id: 409, cat: TV, desc: "Others(其它)"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, doubanid]
movie-search: [q, imdbid, doubanid]
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: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 100 consecutive days.</li></ol>"
login:
# using cookie method because site regularly disables login page and goes into silent mode during the year
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: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
# 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: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
# 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^="details.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
imdbid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="imdb.com/title/tt"]
attribute: href
doubanid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="movie.douban.com/subject/"]
attribute: href
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)
optional: true
default: 512MB
seeders:
selector: td.rowfollow:nth-child(6)
optional: true
default: 0
leechers:
selector: td.rowfollow:nth-child(7)
optional: true
default: 0
grabs:
selector: td.rowfollow:nth-child(8)
optional: true
default: 0
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
description_verified:
case:
span[title="通过"], span[title="通過"], span[title="Allowed"]: "Verified:"
span[title="未审"], span[title="未審"], span[title="Not reviewed"]: "Unverified:"
span[title="拒绝"], span[title="拒絕"], span[title="Denied"]: "Banned:"
description:
selector: td.rowfollow:nth-child(2)
remove: a, b, font, img, span
filters:
- name: prepend
args: "{{ .Result.description_verified }} "
# NexusPHP v1.9.9 2025-10-02
@@ -0,0 +1,149 @@
---
id: pwtorrents2fa
name: PWTorrents2FA
description: "PWTorrents (PWT) is a Private Torrent Tracker for PROFESSIONAL WRESTLING. This indexer uses cookie login for 2FA."
language: en-US
type: private
encoding: UTF-8
links:
- https://pwtorrents.net/
legacylinks:
- http://pwtorrents.net/
caps:
categorymappings:
- {id: 26, cat: TV/Sport, desc: "AEW Dark"}
- {id: 21, cat: TV/Sport, desc: "AEW Dynamite"}
- {id: 20, cat: TV/Sport, desc: "AEW PPV"}
- {id: 23, cat: TV/Sport, desc: "AEW Rampage"}
- {id: 28, cat: TV/Sport, desc: "AEW Collision"}
- {id: 1, cat: TV/Sport, desc: "Boxing"}
- {id: 2, cat: TV/Sport, desc: "Documentaries"}
- {id: 3, cat: TV/Sport, desc: "DVD"}
- {id: 4, cat: TV/Sport, desc: "ECW"}
- {id: 13, cat: TV/Sport, desc: "Impact PPV"}
- {id: 14, cat: TV/Sport, desc: "Impact Weekly"}
- {id: 6, cat: TV/Sport, desc: "Indy's"}
- {id: 7, cat: TV/Sport, desc: "Matches"}
- {id: 8, cat: TV/Sport, desc: "Misc."}
- {id: 9, cat: TV/Sport, desc: "MMA"}
- {id: 11, cat: TV/Sport, desc: "Puro"}
- {id: 10, cat: TV/Sport, desc: "PWT Packs"}
- {id: 12, cat: TV/Sport, desc: "Ring Of Honor"}
- {id: 15, cat: TV/Sport, desc: "WCW"}
- {id: 18, cat: TV/Sport, desc: "WWE Network"}
- {id: 16, cat: TV/Sport, desc: "WWE PPV"}
- {id: 24, cat: TV/Sport, desc: "WWE RAW"}
- {id: 25, cat: TV/Sport, desc: "WWE Smackdown"}
- {id: 17, cat: TV/Sport, desc: "WWE Weekly"}
- {id: 27, cat: TV/Sport, desc: "WWE NXT"}
modes:
search: [q]
tv-search: [q, season, ep]
settings:
- name: cookie
type: text
label: Cookie
- name: info_cookie
type: info_cookie
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: seedbox
type: checkbox
label: "Use SeedBox Download Link"
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
login:
# using cookie method because login page can present second page for 2FA when enabled
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: my.php
selector: a[href="logout.php"]
search:
paths:
# https://pwtorrents.net/browse.php?c18=1&c16=1&c17=1&incldead=0
- path: browse.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
# 0 active, 1 incldead, 2 onlydead, 3 freeleech
incldead: "{{ if .Config.freeleech }}3{{ else }}1{{ end }}"
search: "{{ .Keywords }}"
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
rows:
selector: table[border="1"][cellspacing="0"][cellpadding="5"] tr:has(a[href^="download.php?id="])
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a[href^="details.php?id="]
optional: true
default: No Title
details:
selector: a[href^="details.php?id="]
attribute: href
download_1:
selector: a[href^="download.php?id="]
attribute: href
download_2:
selector: a[href^="seeddownload.php?id="]
attribute: href
download:
text: "{{ if .Config.seedbox }}{{ .Result.download_2 }}{{ else }}{{ .Result.download_1 }}{{ end }}"
date:
selector: td:nth-child(4)
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "yyyy-MM-ddHH:mm:ss zzz"
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
downloadvolumefactor:
case:
img[src="pic/freeleech.png"]: 0
"*": 1
uploadvolumefactor:
case:
img[src="gold.png"]: 2
img[src="silver.png"]: 1.5
img[src="bronze.png"]: 1.25
"*": 1
minimumratio:
text: 0.7
# engine n/a
@@ -0,0 +1,184 @@
---
id: retromoviesclub-api
name: RetroMoviesClub (API)
description: "RetroMoviesClub (RMC) is a Private Torrent Tracker for Classic Movies"
language: en-US
type: private
encoding: UTF-8
links:
- https://retro-movies.club/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
modes:
search: [q]
movie-search: [q, imdbid, tmdbid]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://retro-movies.club/\" target=\"_blank\">RetroMoviesClub</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_activity
type: info
label: Account Inactivity
default: "Accounts that are inactive for extended periods may be shelved or pruned."
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: re_replace
args: ["(?i)(TV Movie)", "TV_Movie"]
- name: replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
# global MR is 0.4 but torrents must be seeded for 48 hours
# minimumratio:
# text: 0.4
minimumseedtime:
# 48 hours (as seconds = 2 x 24 x 60 x 60)
text: 172800
# json UNIT3D 9.2.0
@@ -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
@@ -0,0 +1,140 @@
---
id: scenetime-api
name: SceneTime (API)
description: "SceneTime is a Private Torrent Tracker for MOVIES / TV / GENERAL"
language: en-US
type: private
encoding: UTF-8
requestDelay: 3
links:
- https://www.scenetime.com/
caps:
categorymappings:
# from https://www.scenetime.com/rss.php?apikey=YOUR-API-KEY&t=caps
- {id: 1000, cat: Console, desc: "Console"}
- {id: 100015, cat: Console/Other, desc: "Games Dreamcast"}
- {id: 100055, cat: Console/NDS, desc: "Games Nintendo"}
- {id: 100012, cat: Console/PS4, desc: "Games PS"}
- {id: 100051, cat: Console/Wii, desc: "Games Wii"}
- {id: 100048, cat: Console/XBox, desc: "Games XBOX"}
- {id: 2000, cat: Movies, desc: "Movies"}
- {id: 100047, cat: Movies, desc: "Movie Packs"}
- {id: 100064, cat: Movies/3D, desc: "Movies 3D"}
- {id: 100082, cat: Movies/Other, desc: "Movies CAM/TS"}
- {id: 100059, cat: Movies/HD, desc: "Movies HD"}
- {id: 100057, cat: Movies/SD, desc: "Movies SD"}
- {id: 100016, cat: Movies/UHD, desc: "Movies UHD"}
- {id: 3000, cat: Audio, desc: "Audio"}
- {id: 100004, cat: Audio, desc: "Music"}
- {id: 100116, cat: Audio, desc: "Music Packs"}
- {id: 4000, cat: PC, desc: "PC"}
- {id: 100006, cat: PC/Games, desc: "Games PC-ISO"}
- {id: 100053, cat: PC/0day, desc: "Apps"}
- {id: 100052, cat: PC/Mac, desc: "Mac/Linux"}
- {id: 5000, cat: TV, desc: "TV"}
- {id: 100001, cat: TV/Anime, desc: "TV ANIME"}
- {id: 100009, cat: TV/HD, desc: "TV HD"}
- {id: 100043, cat: TV, desc: "TV Packs"}
- {id: 100077, cat: TV/SD, desc: "TV SD"}
- {id: 100002, cat: TV/UHD, desc: "TV UHD"}
- {id: 6000, cat: XXX, desc: "XXX"}
- {id: 100010, cat: XXX, desc: "Movies Adult"}
- {id: 7000, cat: Books, desc: "Books"}
- {id: 100007, cat: Books, desc: "Books and Magazines"}
- {id: 100065, cat: Books/Comics, desc: "Comic Books"}
- {id: 8000, cat: Other, desc: "Other"}
- {id: 100024, cat: PC/Mobile-Other, desc: "Mobile Apps"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
music-search: [q]
book-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://scenetime.com/rss.php\" target=\"_blank\">SceneTime RSS</a> page, scrolling down to the <b>Torznab API</b> section, and copying the <b>API Key</b>."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: info_activity
type: info
label: Account Inactivity
default: "Unused accounts (accounts with no activity) and inactive unparked accounts may be deleted."
login:
# returns "401 Unauthorized, check your credentials" if passkey is invalid
path: "rss.php?apikey={{ .Config.apikey }}&view=html"
method: get
search:
paths:
- path: rss.php
response:
type: xml
inputs:
apikey: "{{ .Config.apikey }}"
t: "{{ if or .Query.Season .Query.Ep }}tvsearch{{ else }}search{{ end }}"
q: "{{ .Keywords }}"
cat: "{{ join .Categories \",\" }}"
season: "{{ .Query.Season }}"
ep: "{{ .Query.Ep }}"
imdbid: "{{ .Query.IMDBID }}"
limit: 100
downloadvolumefactor: "{{ if .Config.freeleech }}0{{ else }}{{ end }}"
rows:
selector: rss > channel > item
fields:
category:
selector: "[name=category]"
attribute: value
title:
selector: title
details:
selector: link
download:
selector: enclosure
attribute: url
imdbid:
selector: "[name=imdbid]"
attribute: value
date:
# Tue, 07 Apr 2026 20:41:08 +0000
selector: pubDate
filters:
- name: dateparse
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
size:
selector: size
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
minimumratio:
text: 1.0
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# torznab xml
@@ -0,0 +1,210 @@
---
id: seedcore-api
replaces:
- rotorrent-api
name: SeedCore (API)
description: "SeedCore (ROT) is a ROMANIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
language: ro-RO
type: private
encoding: UTF-8
links:
- https://seedcore.net/
legacylinks:
- https://rotorrent.info/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Audio, desc: "Music"}
- {id: 4, cat: PC/Games, desc: "Games"}
- {id: 5, cat: XXX, desc: "XXX"}
- {id: 6, cat: Other, desc: "Video"}
- {id: 7, cat: Other, desc: "Other"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://seedcore.net/\" target=\"_blank\">SeedCore</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: re_replace
args: ["(?i)(TV Movie)", "TV_Movie"]
- name: replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
selector: freeleech
case:
0%: 1 # not free
5%: 0.95
10%: 0.9
15%: 0.85
20%: 0.8
25%: 0.75
30%: 0.7
35%: 0.65
40%: 0.6
45%: 0.55
50%: 0.5
55%: 0.45
60%: 0.4
65%: 0.35
70%: 0.3
75%: 0.25
80%: 0.2
85%: 0.15
90%: 0.1
95%: 0.05
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
minimumratio:
text: 1.0
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# json UNIT3D 9.2.0 (custom)
@@ -0,0 +1,119 @@
---
id: shadowbit
name: Shadowbit
description: "Shadowbit is a ratioless ROMANIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
language: ro-RO
type: private
encoding: UTF-8
links:
- https://shadowbit.cc/
caps:
categorymappings:
# from https://shadowbit.cc/api/torznab?t=caps&apikey=YOUR-API-KEY
- {id: 1000, cat: Console, desc: "Console"}
- {id: 2000, cat: Movies, desc: "Movies"}
- {id: 2010, cat: Movies/Foreign, desc: "Movies/Foreign"}
- {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: 2050, cat: Movies/BluRay, desc: "Movies/BluRay"}
- {id: 2060, cat: Movies/3D, desc: "Movies/3D"}
- {id: 3000, cat: Audio, desc: "Audio"}
- {id: 3020, cat: Audio/Video, desc: "Audio/Video"}
- {id: 3040, cat: Audio/Lossless, desc: "Audio/Lossless"}
- {id: 4000, cat: PC, desc: "PC"}
- {id: 4040, cat: PC/Mobile-Other, desc: "PC/Mobile-Other"}
- {id: 4050, cat: PC/Games, desc: "PC/Games"}
- {id: 4060, cat: PC/ISO, desc: "PC/Linux"}
- {id: 5000, cat: TV, desc: "TV"}
- {id: 5020, cat: TV/Foreign, desc: "TV/Foreign"}
- {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: 5070, cat: TV/Anime, desc: "TV/Anime"}
- {id: 6000, cat: XXX, desc: "XXX"}
- {id: 7000, cat: Books, desc: "Books"}
- {id: 7020, cat: Books/EBook, desc: "Books/EBook"}
- {id: 8000, cat: Other, desc: "Other"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q, year]
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://shadowbit.cc/user_settings.php\" target=\"_blank\">Shadowbit Settings</a> page and copying your <b>Passkey</b>."
- name: info_activity
type: info
label: Account Inactivity
default: "Inactive accounts will be pruned after 6 months. Use the parking feature if you need extended absence (up to 2 years)."
login:
# returns "401 Unauthorized, check your credentials" if passkey is invalid
path: api/torznab
method: get
inputs:
apikey: "{{ .Config.apikey }}"
t: caps
search:
paths:
- path: api/torznab
response:
type: xml
inputs:
apikey: "{{ .Config.apikey }}"
t: "{{ if .Query.Year }}movie{{ else }}{{ end }}{{ if or .Query.Season .Query.Ep }}tvsearch{{ else }}{{ end }}{{ if or .Query.Year .Query.Season .Query.Ep }}{{ else }}search{{ end }}"
q: "{{ .Keywords }}"
cat: "{{ join .Categories \",\" }}"
season: "{{ .Query.Season }}"
ep: "{{ .Query.Ep }}"
year: "{{ .Query.Year }}"
limit: 100
rows:
selector: rss > channel > item
fields:
category:
selector: "[name=category]"
attribute: value
title:
selector: title
details:
text: "{{ .Config.sitelink }}"
download:
selector: enclosure
attribute: url
infohash:
selector: "[name=infohash]"
attribute: value
optional: true
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
seeders:
selector: "[name=seeders]"
attribute: value
leechers:
selector: "[name=peers]"
attribute: value
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# torznab xml
+171
View File
@@ -0,0 +1,171 @@
---
id: siqi
name: Siqi
description: "Siqi is a CHINESE Private Tracker for HD image BOOKS and E-BOOKS"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://si-qi.xyz/
caps:
categorymappings:
- {id: 411, cat: Books/Comics, desc: "漫画 (Comics)"}
- {id: 417, cat: Books/Technical, desc: "软件 (Software)"}
- {id: 416, cat: Books/EBook, desc: "摄影 (Photography)"}
- {id: 415, cat: Books/Technical, desc: "工具书 (Reference Books)"}
- {id: 414, cat: Books/Mags, desc: "杂志 (Magazines)"}
- {id: 413, cat: Other, desc: "图片集 (Photo Albums)"}
- {id: 412, cat: Books/Comics, desc: "连环画 (Comic Strips)"}
- {id: 418, cat: Books/EBook, desc: "插图书 (Illustrated Books)"}
- {id: 401, cat: Books/Technical, desc: "教学 (Instructional)"}
- {id: 409, cat: Books/Other, desc: "其他 (Others)"}
modes:
search: [q]
book-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.
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, 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)
optional: true
default: 512MB
seeders:
selector: td.rowfollow:nth-child(6)
optional: true
default: 0
leechers:
selector: td.rowfollow:nth-child(7)
optional: true
default: 0
grabs:
selector: td.rowfollow:nth-child(8)
optional: true
default: 0
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: 1.0
minimumseedtime:
# 1 days (as seconds = 1 x 24 x 60 x 60)
text: 86400
description:
selector: td.rowfollow:nth-child(2)
remove: a, b, font, img, span
# NexusPHP v1.9.6 2025-06-25 (Custom)
@@ -0,0 +1,141 @@
---
id: slobitgames
name: Slobit Games
description: "Slobit Games is a Private Torrent Tracker for GAMES"
language: en-US
type: private
encoding: UTF-8
links:
- https://games.slo-bitcloud.eu/
caps:
categorymappings:
- {id: 10, cat: PC/Games, desc: "Games - PC"}
- {id: 11, cat: Console/PS3, desc: "Games - PS2"}
- {id: 12, cat: Console/PSP, desc: "Games - PSP"}
- {id: 43, cat: Console/PS3, desc: "Games - PS3"}
- {id: 13, cat: Console/XBox, desc: "Games - Xbox"}
- {id: 14, cat: Console/XBox 360, desc: "Games - Xbox360"}
- {id: 15, cat: Console/PS3, desc: "Games - PS1"}
- {id: 44, cat: Console/Wii, desc: "Games - Wii"}
- {id: 45, cat: Console/NDS, desc: "Games - DS"}
- {id: 46, cat: Console/Other, desc: "Games - GameCube"}
- {id: 27, cat: Other, desc: "Music - Other"}
- {id: 33, cat: PC, desc: "Other - Emulation"}
- {id: 28, cat: Console/PS4, desc: "PS4 - PS4"}
- {id: 47, cat: Console/PS4, desc: "PS5 - PS"}
modes:
search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: id
options:
id: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_results
type: info
label: Search results
default: "If you are getting <b>0 results</b> then access the site with your browser and <b>mark as read</b> all PMs."
login:
path: account-login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: div.myFrame:contains("Access denied")
message:
text: "The specified username or password was incorrect."
test:
path: index.php
selector: a[href="account-logout.php"]
search:
paths:
# https://games.slo-bitcloud.eu/torrents-search.php?c45=1&c46=1&search=&cat=0&incldead=1&freeleech=0&inclexternal=0&lang=0
- path: torrents-search.php
inputs:
# $raw: "{{ range .Categories }}c{{.}}=1&{{end}}" # using this causes internal server error
search: "{{ .Keywords }}"
cat: 0
# 0 active, 1 incldead, 2 onlydead
incldead: 1
# 0 all, 1 notfree, 2 onlyfree
freeleech: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
# 0 both, 1 local, 2 external
inclexternal: 0
# 0 all, 1 English, 2 French, 3 German, 4 Italian, 5 Japanese, 6 Spanish, 7 Russian
lang: 0
sort: "{{ .Config.sort }}"
order: "{{ .Config.type }}"
rows:
selector: table.ttable_headinner > tbody > tr.t-row
filters:
- name: andmatch
fields:
category:
selector: a[href^="torrents.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a[href^="torrents-details.php?id="]
attribute: title
details:
selector: a[href^="torrents-details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
size:
selector: td:nth-child(6)
date:
text: now
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
description:
selector: td:nth-child(11)
filters:
- name: prepend
args: "Wait: "
downloadvolumefactor:
case:
span.badge-free: 0
"*": 1
uploadvolumefactor:
text: 1
minimumratio:
text: 1.0
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# TorrentTrader v3.0
@@ -0,0 +1,146 @@
---
id: sportscora
name: SportsCora (API)
description: "SportsCora is a Private Torrent Tracker for SPORTS"
language: en-US
type: private
encoding: UTF-8
links:
- https://sportscora.com/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movie"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Audio, desc: "Music"}
- {id: 4, cat: Console, desc: "Game"}
- {id: 5, cat: PC, desc: "Application"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://sportscora.com/\" target=\"_blank\">SportsCora</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
_id:
selector: ..id
categorydesc:
selector: category
title:
selector: name
details:
text: "{{ .Config.sitelink }}torrents/{{ .Result._id }}"
download:
selector: download_link
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
files:
selector: num_file
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
downloadvolumefactor:
# api returns 0=false, 1=true
selector: freeleech
case:
No: 1 # not free
Yes: 0 # freeleech
uploadvolumefactor:
# api returns 0=false, 1=true
selector: double_upload
case:
No: 1 # normal
Yes: 2 # double
# global MR is 1.0 but torrents must be seeded for 1 day regardless of ratio
# minimumratio:
# text: 1.0
minimumseedtime:
# 1 day (as seconds = 24 x 60 x 60)
text: 86400
# json UNIT3D 4.0.0
@@ -0,0 +1,206 @@
---
id: sportz247
replaces:
- tsdb
- f1gp
name: Sportz247
description: "Sportz247 is a Private Torrent Tracker for SPORTS"
language: en-US
type: private
encoding: UTF-8
links:
- https://sportz247.bar/
legacylinks:
- https://f1gp.site/
- https://f1gp.xyz/
caps:
categorymappings:
- {id: 45, cat: TV/Sport, desc: "40"}
- {id: 11, cat: TV/Sport, desc: "F1 Races"}
- {id: 1, cat: TV/Sport, desc: "F1 Qualifying"}
- {id: 2, cat: TV/Sport, desc: "F1 Sprint Races"}
- {id: 3, cat: TV/Sport, desc: "F1 Free Practice"}
- {id: 5, cat: TV/Sport, desc: "F1 Pre Races"}
- {id: 6, cat: TV/Sport, desc: "F1 Warm Up"}
- {id: 4, cat: TV/Sport, desc: "F1 Documentary"}
- {id: 7, cat: TV/Sport, desc: "F1 Oldies"}
- {id: 8, cat: TV/Sport, desc: "F1 Press Conferences"}
- {id: 9, cat: TV/Sport, desc: "F1 Post Races"}
- {id: 14, cat: TV/Sport, desc: "F1 Academy"}
- {id: 15, cat: TV/Sport, desc: "F1 Movies"}
- {id: 16, cat: TV/Sport, desc: "F1 Series"}
- {id: 17, cat: TV/Sport, desc: "F2 Championship"}
- {id: 18, cat: TV/Sport, desc: "F3 Championship"}
- {id: 19, cat: TV/Sport, desc: "FE Championship"}
- {id: 21, cat: TV/Sport, desc: "UFC"}
- {id: 22, cat: TV/Sport, desc: "MotoGP"}
- {id: 23, cat: TV/Sport, desc: "Boxing"}
- {id: 24, cat: Other, desc: "Magazines - Books"}
- {id: 26, cat: TV/Sport, desc: "Tennis"}
- {id: 27, cat: TV/Sport, desc: "World Cup 2026"}
- {id: 28, cat: TV/Sport, desc: "NBA"}
- {id: 29, cat: TV/Sport, desc: "Indy 500"}
- {id: 30, cat: TV/Sport, desc: "Football/Soccer"}
- {id: 33, cat: TV/Sport, desc: "WRC/Rally"}
- {id: 34, cat: TV/Sport, desc: "BTCC"}
- {id: 35, cat: TV/Sport, desc: "Isle of Man TT"}
- {id: 36, cat: TV/Sport, desc: "Surfing"}
- {id: 37, cat: TV/Sport, desc: "Porsche Mobil 1 Supercup"}
- {id: 38, cat: TV/Sport, desc: "Skateboarding"}
- {id: 39, cat: TV/Sport, desc: "Baseball-MLB"}
- {id: 40, cat: TV/Sport, desc: "WEC"}
- {id: 41, cat: TV/Sport, desc: "FIM Speedway Gp"}
- {id: 42, cat: TV/Sport, desc: "FIM MXGP"}
- {id: 43, cat: TV/Sport, desc: "Supercars"}
- {id: 44, cat: TV/Sport, desc: "WSBK"}
- {id: 46, cat: TV/Sport, desc: "NHRA"}
- {id: 47, cat: TV/Sport, desc: "F1H2O"}
- {id: 48, cat: TV/Sport, desc: "F1 Complete Packs"}
- {id: 49, cat: TV/Sport, desc: "GAA"}
- {id: 51, cat: TV/Sport, desc: "IndyNXT"}
- {id: 52, cat: TV/Sport, desc: "Snooker/Pool"}
- {id: 53, cat: TV/Sport, desc: "Horse Racing"}
- {id: 54, cat: TV/Sport, desc: "Goodwood Festival"}
- {id: 55, cat: TV/Sport, desc: "Motorsports Special Events"}
- {id: 56, cat: TV/Sport, desc: "FIM World Supercross"}
- {id: 57, cat: TV/Sport, desc: "Deutsche Tourenwagen Masters"}
- {id: 58, cat: TV/Sport, desc: "Athletics"}
- {id: 59, cat: TV/Sport, desc: "Cycling"}
- {id: 60, cat: TV/Sport, desc: "Golf"}
- {id: 61, cat: TV/Sport, desc: "IMSA"}
- {id: 62, cat: TV/Sport, desc: "NASCAR Craftsman Truck Series"}
- {id: 65, cat: TV/Sport, desc: "Nascar ARCA Menards Series"}
- {id: 25, cat: TV/Sport, desc: "NASCAR Cup Series"}
- {id: 66, cat: TV/Sport, desc: "NASCAR O'Reilly Auto Parts"}
- {id: 64, cat: TV/Sport, desc: "IROC"}
- {id: 67, cat: TV/Sport, desc: "Sports TV Shows"}
modes:
search: [q]
tv-search: [q, season, ep]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: 3
options:
3: created
5: seeders
4: size
2: title
- name: type
type: select
label: Order requested from site
default: 2
options:
2: desc
1: asc
- name: info
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. Default is <i>20</i>.
login:
path: index.php?page=login
method: post
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: tr td span[style="color:#FF0000;"]
test:
path: index.php
selector: a[href^="logout.php"]
search:
paths:
# https://f1gp.xyz/index.php?page=torrents&search=&category=0&active=0
- path: index.php
inputs:
page: torrents
search: "{{ .Keywords }}"
category: "{{ range .Categories }}{{.}};{{end}}"
# 0 filename, 1 file&descr, 2 descr, 3 uploaders, 5 gold, 6 silver, 7 bronze
options: "{{ if .Config.freeleech }}5{{ else }}0{{ end }}"
# 0 all, 1 active only, 2 dead only
active: 0
order: "{{ .Config.sort }}"
by: "{{ .Config.type }}"
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: table.lista > tbody > tr:has(a[href^="download.php?id="])
fields:
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
title:
selector: a[href^="index.php?page=torrent-details&id="]
details:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
poster:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: onmouseover
filters:
- name: regexp
args: src=(.+?) width
- name: replace
args: ["torrentimg/nocover.jpg", ""]
size:
selector: td:nth-last-child(4)
date:
# auto adjusted by site account profile
selector: td:nth-last-child(9)
filters:
- name: dateparse
args: "dd/MM/yyyy"
seeders:
selector: td:nth-last-child(8)
optional: true
default: 0
leechers:
optional: true
selector: td:nth-last-child(7)
default: 0
grabs:
optional: true
selector: td:nth-last-child(6)
default: 0
downloadvolumefactor:
case:
img[src="images/freeleech.gif"]: 0
img[src="images/gold.gif"]: 0
img[src="images/silver.gif"]: 0.5
img[src="images/bronze.gif"]: 0.75
"*": 1
uploadvolumefactor:
text: 1
minimumratio:
text: 1.4
minimumseedtime:
# 5 days (as seconds = 5 x 24 x 60 x 60)
text: 432000
# xbtitFM v4.2.13
+243
View File
@@ -0,0 +1,243 @@
---
id: teamflix
name: TeamFlix
description: "TeamFlix is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
language: fr-FR
type: private
encoding: UTF-8
links:
- https://tracker.teamflix.cc/
caps:
categorymappings:
- {id: 7, cat: Movies/Other, desc: "Animes"}
- {id: 8, cat: TV/Anime, desc: "AnimeSeries"}
- {id: 14, cat: TV/Other, desc: "Animation"}
- {id: 12, cat: Audio/Video, desc: "Concerts"}
- {id: 10, cat: TV/Documentary, desc: "Documentaires"}
- {id: 9, cat: TV, desc: "EmissionsTV"}
- {id: 1, cat: Movies, desc: "Films"}
- {id: 11, cat: TV, desc: "Spectacles"}
- {id: 2, cat: TV, desc: "SeriesTV"}
- {id: 13, cat: Books, desc: "Ebook"}
- {id: 4, cat: Console, desc: "Jeux Console"}
- {id: 3, cat: PC/Games, desc: "JeuxPC"}
- {id: 5, cat: PC/0day, desc: "Logiciels"}
- {id: 6, cat: Audio, desc: "Musique"}
- {id: 15, cat: Console/Other, desc: "Emulateur"}
- {id: 16, cat: TV/Sport, desc: "Sports"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://tracker.teamflix.cc/\" target=\"_blank\">TeamFlix</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- 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
- name: vfq
type: checkbox
label: Replace VFQ with FRENCH
default: false
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_activity
type: info
label: Account Inactivity
default: "Inactivity of an account for a period of 30 consecutive days will automatically deactivate your account."
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title_phase1:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
title_vfq:
text: "{{ .Result.title_phase1 }}"
filters:
- name: re_replace
args: ["(?i)\\b(VFQ)\\b", "FRENCH"]
title_phase2:
text: "{{ if .Config.vfq }}{{ .Result.title_vfq }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
title_vostfr:
text: "{{ .Result.title_phase2 }}"
filters:
- name: re_replace
args: ["(?i)\\b(vostfr|subfrench)\\b", "ENGLISH"]
title_phase3:
text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
title_multilang:
text: "{{ .Result.title_phase3 }}"
filters:
- name: re_replace
args: ["(?i)\\b(MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR)))\\b", "{{ .Config.multilanguage }}"]
title:
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase3 }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
minimumseedtime:
# 100 hours (as seconds = 100 x 60 x 60)
text: 360000
# json UNIT3D 9.2.0
@@ -0,0 +1,231 @@
---
id: thebrothers
name: The Brothers
description: "The Brothers is a Private GERMAN tracker for MOVIES / TV / GENERAL"
language: de-DE
type: private
encoding: UTF-8
links:
- https://leo-test.store/
legacylinks:
- https://the-brothers.bounceme.net/
caps:
categorymappings:
# Doku
- {id: 221, cat: TV/Documentary, desc: "Doku HD"}
# Movie
- {id: 217, cat: Movies/BluRay, desc: "Movie BluRay"}
- {id: 32, cat: Movies/HD, desc: "Movie HD"}
- {id: 208, cat: Movies/UHD, desc: "Movie 4 K"}
- {id: 124, cat: Movies, desc: "Movie Pack"}
- {id: 114, cat: Movies/DVD, desc: "Movie DVD"}
- {id: 196, cat: Movies/UHD, desc: "Movie UHD"}
- {id: 28, cat: Movies/SD, desc: "Movie SD"}
- {id: 204, cat: Movies/UHD, desc: "Movie UHD Pack"}
- {id: 26, cat: Movies/3D, desc: "Movie 3D"}
# Anime
- {id: 213, cat: TV/Anime, desc: "Anime Pack HD"}
- {id: 212, cat: TV/Anime, desc: "Anime Serie HD"}
- {id: 214, cat: TV/Anime, desc: "Anime UHD"}
- {id: 183, cat: TV/Anime, desc: "Anime HD"}
- {id: 189, cat: TV/Anime, desc: "Anime Serie"}
- {id: 184, cat: TV/Anime, desc: "Anime SD"}
- {id: 186, cat: TV/Anime, desc: "Anime 4K"}
# Serien
- {id: 60, cat: TV/SD, desc: "Serien SD"}
- {id: 56, cat: TV/SD, desc: "Serien DVD"}
- {id: 215, cat: TV/UHD, desc: "Serien UHD"}
- {id: 59, cat: TV, desc: "Serien Pack"}
- {id: 203, cat: TV/UHD, desc: "Serien UHD Pack"}
- {id: 57, cat: TV/HD, desc: "Serien HD"}
# Kids
- {id: 222, cat: Movies/HD, desc: "Kids HD"}
# Klassiker
- {id: 157, cat: Movies/HD, desc: "Klassiker HD"}
# App
- {id: 12, cat: PC/0day, desc: "App Win"}
- {id: 9, cat: PC, desc: "App Linux"}
- {id: 11, cat: PC/Mobile-Other, desc: "App Other"}
- {id: 10, cat: PC, desc: "App Sport"}
# Game
- {id: 218, cat: Console/Other, desc: "Game Nintendo Switch"}
- {id: 120, cat: Console/PS3, desc: "Game PlayStation"}
- {id: 16, cat: Console, desc: "Game Wimmelbild"}
- {id: 17, cat: PC/Games, desc: "Game PC"}
- {id: 20, cat: Console/PSP, desc: "Game PSP"}
- {id: 22, cat: Console/Wii, desc: "Game Wii"}
- {id: 24, cat: Console/XBox, desc: "Game XBOX"}
# Music
- {id: 126, cat: Audio, desc: "Music Mp3/Flac"}
- {id: 48, cat: Audio, desc: "Music Album"}
- {id: 49, cat: Audio, desc: "Music Charts"}
- {id: 148, cat: Audio, desc: "Music Discography"}
- {id: 52, cat: Audio, desc: "Music Pack"}
- {id: 54, cat: Audio, desc: "Music Single"}
- {id: 55, cat: Audio/Video, desc: "Music Video"}
- {id: 125, cat: Audio, desc: "Music Mixe"}
# Sport
- {id: 130, cat: TV/Sport, desc: "Sport WWE"}
- {id: 61, cat: TV/Sport, desc: "Sport Other"}
# Sonstiges
- {id: 216, cat: Books/Comics, desc: "Sonstiges Comic"}
- {id: 144, cat: TV/Documentary, desc: "Sonstiges Doku"}
- {id: 131, cat: Books/Mags, desc: "Sonstiges Zeitungen"}
- {id: 63, cat: Audio/Audiobook, desc: "Sonstiges A-Book"}
- {id: 96, cat: Books/EBook, desc: "Sonstiges E-Book"}
- {id: 69, cat: Books, desc: "Sonstiges Tutorial"}
- {id: 71, cat: Books/Other, desc: "Sonstiges Other"}
# Internt'l
- {id: 106, cat: Books/EBook, desc: "Internt'l E-Book"}
- {id: 103, cat: Movies/SD, desc: "Internt'l Movie SD"}
- {id: 98, cat: Movies/HD, desc: "Internt'l Movie HD"}
- {id: 105, cat: TV/Documentary, desc: "Internt'l Doku"}
- {id: 102, cat: TV/SD, desc: "Internt'l Serie SD"}
- {id: 115, cat: Movies/DVD, desc: "Internt'l DVD"}
- {id: 107, cat: Audio/Audiobook, desc: "Internt'l A-Book"}
- {id: 104, cat: Other, desc: "Internt'l Misc"}
- {id: 99, cat: TV/HD, desc: "Internt'l Serie HD"}
# XXX
- {id: 75, cat: XXX/Pack, desc: "XXX Pack"}
- {id: 113, cat: XXX/DVD, desc: "XXX DVD"}
- {id: 73, cat: XXX/x264, desc: "XXX HD"}
- {id: 76, cat: XXX/SD, desc: "XXX SD"}
# undocumented
- {id: 159, cat: Other, desc: "Other"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: sort
type: select
label: Sort requested from site
default: added
options:
added: created
seeds: seeders
size: size
name: 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>Anzahl der Torrents beim Durchsuchen</b> <i>Torrents per page:</i> setting to <b>60</b> on your account profile. The default is <i>15</i>.
login:
path: login.php
method: form
form: form[action="/login.php"]
cookies: ["JAVA=OK"] # avoid jscheck redirect
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: div#login_error
test:
path: index.php
selector: a[href="logout.php"]
download:
selectors:
- selector: a[href^="download_ssl.php?torrent="]
attribute: href
search:
paths:
- path: selection.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
# 0 name, 1 descr, 2 both
blah: 0
orderby: "{{ .Config.sort }}"
sort: "{{ .Config.type }}"
rows:
selector: div.selection_wrap
fields:
category_p1:
selector: div.kat_cat_pic_name
category_p2:
selector: div.kat_cat_pic_name_b
categorydesc:
text: "{{ .Result.category_p1 }} {{ .Result.category_p2 }}"
title:
selector: a.selection_a
filters:
- name: re_replace
args: ["^\\[[\\w ]*\\]\\s?", ""]
details:
selector: a.selection_a
attribute: href
download:
selector: a.selection_a
attribute: href
poster:
selector: div[id^="details"] img
attribute: src
size:
selector: div.selection_unter_ad
grabs:
selector: div.selection_unter_ae
date_day:
# Heute 13:30:04
# Gestern 09:10:10
selector: div.selection_unter_ab:not(:contains("."))
optional: true
filters:
- name: replace
args: ["Heute", "Today"]
- name: replace
args: ["Gestern", "Yesterday"]
- name: append
args: " +01:00" # CET
date_year:
# 30.02.2018 um 23:12:50
selector: div.selection_unter_ab:contains(".")
optional: true
filters:
- name: replace
args: [" um", ""]
- name: append
args: " +01:00" # CET
- name: dateparse
args: "dd.MM.yyyy HH:mm:ss zzz"
date:
text: "{{ if or .Result.date_year .Result.date_day }}{{ or .Result.date_year .Result.date_day }}{{ else }}now{{ end }}"
seeders:
selector: div.selection_unter_aa
leechers:
selector: div.selection_unter_aaa
downloadvolumefactor:
case:
":root:has(div.onlyup)": 0 # GLobal Freeleech event
"*": 1
uploadvolumefactor:
text: 1
# global MR is 0.7 but torrents must be seeded for 2 days regardless of ratio
# minimumratio:
# text: 0.7
minimumseedtime:
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
# 3xT
@@ -0,0 +1,193 @@
---
id: thorhub-api
name: Thor HUB (API)
description: "Thor HUB is a Private Torrent Tracker for MOVIES / TV / MUSIC"
language: en-US
type: private
encoding: UTF-8
links:
- https://thorhub.eu/
caps:
categorymappings:
- {id: 4, cat: Console, desc: "Games"}
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 3, cat: Audio/Lossless, desc: "Music (Lossless Only)"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 10, cat: XXX, desc: "xXx (Video (Compilations))"}
- {id: 5, cat: Movies, desc: "Trumped (Movies)"}
- {id: 7, cat: TV, desc: "Trumped (Series)"}
- {id: 8, cat: Other, desc: "Trumped (everything else)"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://thorhub.eu/\" target=\"_blank\">Thor HUB</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: re_replace
args: ["(?i)(TV Movie)", "TV_Movie"]
- name: replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
# global MR is 0.4 but torrents must be seeded for 7 days regardless of ratio
# minimumratio:
# text: 0.4
minimumseedtime:
# 7 days (as seconds = 7 x 24 x 60 x 60)
text: 604800
# json UNIT3D 9.2.0
@@ -0,0 +1,78 @@
---
id: torrentbyte
name: TorrentByte
description: "TorrentByte is a Public DHT Crawler"
language: en-US
type: public
encoding: UTF-8
links:
- https://torrentbyte.cc/
caps:
categorymappings:
- {id: Movies, cat: Movies, desc: "Movies"}
- {id: TV, cat: TV, desc: "TV"}
- {id: Games, cat: PC/Games, desc: "Games"}
- {id: Anime, cat: TV/Anime, desc: "Anime"}
- {id: Music, cat: Audio, desc: "Music"}
- {id: Software, cat: PC/0day, desc: "Software"}
- {id: XXX, cat: XXX, desc: "XXX"}
- {id: Other, cat: Other, desc: "Other"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
settings:
- name: info_flaresolverr
type: info_flaresolverr
search:
paths:
- path: /
inputs:
q: "{{ .Keywords }}"
rows:
selector: table > tbody > tr
fields:
category:
selector: td:nth-child(2)
title:
selector: td:nth-child(1)
attribute: title
details:
selector: a[href^="?view="]
attribute: href
infohash:
selector: a[href^="magnet:?xt="]
attribute: href
filters:
- name: regexp
args: "btih:([A-F|a-f|0-9]{40})"
size:
selector: td:nth-child(3)
files:
selector: td:nth-child(4)
date:
selector: td:nth-child(5)
filters:
- name: append
args: " +02:00" # CEST
- name: dateparse
args: "yyyy-MM-dd HH:mm:ss zzz"
seeders:
text: 1
leechers:
text: 1
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
description:
selector: td:nth-child(6)
remove: a
# engine n/a
@@ -0,0 +1,110 @@
---
id: torrentclaw
name: TorrentClaw
description: "TorrentClaw is a Private aggregate indexer of 10+ Public Torrent Trackers, with additional 'TrueSpec' metadata and quality score"
language: en-US
type: private
encoding: UTF-8
links:
- https://torrentclaw.com/
- https://torrentclaw.to/
caps:
categorymappings:
- {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: 5070, cat: TV/Anime, desc: "TV/Anime"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, tmdbid]
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://torrentclaw.com/profile?tab=apikey\" target=\"_blank\">TorrentClaw API Key</a> page."
- name: info_truespec
type: info
label: "TrueSpec verification tags"
default: "Verified releases include <b>[TC-xx]</b> (quality score 0-100) and <b>[TrueSpec]</b> tags in the title. These can be used for Sonarr and Radarr custom formats."
login:
# returns "401 Unauthorized, check your credentials" if passkey is invalid
path: api/v1/torznab
method: get
inputs:
t: search
limit: 1
search:
paths:
- path: api/v1/torznab
method: get
response:
type: xml
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
t: "{{ if .Query.TMDBID }}movie{{ else }}{{ end }}{{ if or .Query.Season .Query.Ep }}tvsearch{{ else }}{{ end }}{{ if or .Query.IMDBID .Query.TMDBID .Query.Season .Query.Ep }}{{ else }}search{{ end }}"
q: "{{ .Keywords }}"
season: "{{ .Query.Season }}"
ep: "{{ .Query.Ep }}"
imdbid: "{{ .Query.IMDBID }}"
tmdbid: "{{ .Query.TMDBID }}"
limit: 100
rows:
selector: channel > item
fields:
category:
selector: "[name=category]"
attribute: value
title:
selector: title
details:
text: "{{ .Config.sitelink }}"
magnet:
selector: enclosure
attribute: url
infohash:
selector: "[name=infohash]"
attribute: value
imdbid:
selector: "[name=imdbid]"
attribute: value
tmdbid:
selector: "[name=tmdbid]"
attribute: value
date:
# Sun, 08 Mar 2026 17:51:00 GMT
selector: pubDate
filters:
- name: dateparse
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
size:
selector: size
seeders:
selector: "[name=seeders]"
attribute: value
leechers:
selector: "[name=peers]"
attribute: value
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# torznab xml
@@ -0,0 +1,209 @@
---
id: torrenthaven-api
replaces:
- torrentavenue-api
name: TorrentHaven (API)
description: "TorrentHaven is a Private Torrent Tracker for MOVIES / TV / GENERAL"
language: en-US
type: private
encoding: UTF-8
links:
- https://torrenthaven.org/
legacylinks:
- https://torrentavenue.online/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV EP"}
- {id: 21, cat: Other/Misc, desc: "VIP"}
- {id: 6, cat: TV/Sport, desc: "Football"}
- {id: 22, cat: TV/Anime, desc: "Cartoons"}
- {id: 3, cat: Audio, desc: "Music"}
- {id: 4, cat: PC, desc: "Apps"}
- {id: 5, cat: Console, desc: "Games"}
- {id: 7, cat: TV/Sport, desc: "Boxing"}
- {id: 8, cat: TV/Sport, desc: "Ufc"}
- {id: 9, cat: TV/Sport, desc: "Wresting"}
- {id: 10, cat: TV/Sport, desc: "formula 1"}
- {id: 11, cat: TV/Sport, desc: "Nba"}
- {id: 12, cat: TV/Sport, desc: "MotaGP"}
- {id: 13, cat: TV/Sport, desc: "Snooker"}
- {id: 14, cat: TV/Sport, desc: "Darts"}
- {id: 15, cat: TV/Sport, desc: "Bare Knuckle Fighting Championship"}
- {id: 16, cat: Audio/MP3, desc: "Music mp3"}
- {id: 17, cat: Audio/Lossless, desc: "Music Flac"}
- {id: 18, cat: Movies/BluRay, desc: "Bluray"}
- {id: 19, cat: Movies/UHD, desc: "4K"}
- {id: 20, cat: TV, desc: "Tv/Packs"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
allowtvsearchimdb: true
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://torrenthaven.org/\" target=\"_blank\">TorrentHaven</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
minimumratio:
text: 1.0
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# json UNIT3D 9.2.0
@@ -0,0 +1,218 @@
---
id: torrenthr-api
name: TorrentHR (API)
description: "TorrentHR is a ratioless CROATIAN Private Torrent Tracker for 0DAY / GENERAL"
language: hr-HR
type: private
encoding: UTF-8
links:
- https://www.torrenthr.org/
caps:
categorymappings:
- {id: 31, cat: TV/Anime, desc: "Anime"}
- {id: 1, cat: PC/0day, desc: "Aplikacije"}
- {id: 25, cat: Books, desc: "E-books"}
- {id: 38, cat: PC/Mobile-Other, desc: "Smartphone"}
- {id: 16, cat: TV, desc: "THR Packs"}
- {id: 4, cat: Movies/SD, desc: "Filmovi/SD"}
- {id: 14, cat: Movies/DVD, desc: "Filmovi/DVD"}
- {id: 17, cat: Movies/HD, desc: "Filmovi/HD"}
- {id: 40, cat: Movies/BluRay, desc: "Filmovi/BD"}
- {id: 15, cat: TV/Sport, desc: "Sport"}
- {id: 18, cat: Movies/Foreign, desc: "Crtani Filmovi"}
- {id: 12, cat: TV/Documentary, desc: "Dokumentarni Filmovi"}
- {id: 11, cat: Audio, desc: "Koncerti/Spotovi"}
- {id: 3, cat: Audio/MP3, desc: "Glazba/MP3"}
- {id: 29, cat: Audio/Lossless, desc: "Glazba/FLAC"}
- {id: 5, cat: PC/Games, desc: "Igre/PC"}
- {id: 27, cat: Console/PS4, desc: "Igre/PS"}
- {id: 28, cat: Console/Wii, desc: "Igre/Wii"}
- {id: 26, cat: Console/XBox, desc: "Igre/Xbox"}
- {id: 13, cat: Other, desc: "Ostalo"}
- {id: 7, cat: TV/SD, desc: "Serije/SD"}
- {id: 34, cat: TV/HD, desc: "Serije/HD"}
- {id: 30, cat: Books/Comics, desc: "Stripovi"}
- {id: 10, cat: XXX, desc: "XXX/SD"}
- {id: 36, cat: XXX, desc: "XXX/HD"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://www.torrenthr.org/\" target=\"_blank\">TorrentHR</a> account <i>Postavke (Settings)</i> page and selecting <b>API</b> from the <i>Opće (General)</i> pulldown."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Akcija i avantura)", "Akcija_i_avantura"]
- name: re_replace
args: ["(?i)(SF i fantazija)", "SF_i_fantazija"]
- name: replace
args: ["(?i)(Znanstvena fantastika)", "Znanstvena_fantastika"]
- name: replace
args: ["(?i)(Talk show)", "Talk_show"]
- name: replace
args: ["(?i)(TV film)", "TV_film"]
- name: replace
args: ["(?i)(Rat i politika)", "Rat_i_politika"]
- name: replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
minimumratio:
text: 1.0
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# json TorrentHR v3.0 (based on UNIT3D 9.2.0)
+175
View File
@@ -0,0 +1,175 @@
---
id: tr4ker
name: TR4KER
description: "TR4KER is a FRENCH Semi-Private Torrent Tracker for MOVIES / TV / GENERAL"
language: fr-FR
type: semi-private
encoding: UTF-8
requestDelay: 1 # 60 request per minute
links:
- https://tr4ker.net/
caps:
categorymappings:
# from https://tr4ker.net/api/torznab?t=caps&apikey=YOUR-API-KEY
- {id: 1000, cat: Console, desc: "PC Games"}
- {id: 1010, cat: Console/XBox, desc: "Xbox"}
- {id: 1020, cat: Console/Wii, desc: "Nintendo"}
- {id: 1030, cat: Console/PS4, desc: "PlayStation"}
- {id: 2000, cat: Movies, desc: "Movies"}
- {id: 2010, cat: Movies/Foreign, desc: "Films Foreign"}
- {id: 2040, cat: Movies/HD, desc: "Movies/HD"}
- {id: 3000, cat: Audio, desc: "Audio"}
- {id: 3010, cat: Audio/MP3, desc: "Audio/MP3"}
- {id: 3030, cat: Audio/Audiobook, desc: "iobook"}
- {id: 3040, cat: Audio/Lossless, desc: "Audio/Lossless"}
- {id: 4000, cat: PC/0day, desc: "PC"}
- {id: 4030, cat: PC/Mac, desc: "PC/Mac"}
- {id: 4070, cat: PC/Mobile-Android, desc: "PC/Android"}
- {id: 5000, cat: TV, desc: "TV"}
- {id: 5040, cat: TV/HD, desc: "TV/HD"}
- {id: 5060, cat: TV/Sport, desc: "TV/Sport"}
- {id: 5070, cat: TV/Anime, desc: "TV/Anime"}
- {id: 6000, cat: XXX, desc: "XXX"}
- {id: 7000, cat: Books, desc: "Books"}
- {id: 7010, cat: Books/Mags, desc: "Books/Mags"}
- {id: 7020, cat: Books/EBook, desc: "Books/eBook"}
- {id: 7030, cat: Books/Comics, desc: "Books/Comics"}
- {id: 8000, cat: Other, desc: "Other"}
- {id: 8010, cat: Other/Misc, desc: "Other/Misc"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
allowtvsearchimdb: true
allowrawsearch: true
settings:
- name: apikey
type: text
label: API Key
- name: info_key
type: info
label: About your API key
default: "You can find or generate a new API Key by accessing the <a href=\"https://tr4ker.net/mon-compte/parametres\" target=\"_blank\">TR4KER Paramètres</a> page and scrolling down to the <b>Clé API</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
- name: info_3x
type: info
label: Including 3X
default: "IF you want to see 3x torrents access your <a href=\"https://tr4ker.net/mon-compte/parametres\" target=\"_blank\">TR4KER Paramètres</a> page and flick the <b>Contenu adulte (+18)</b> switch."
login:
# returns "401 Unauthorized, check your credentials" if apikey is invalid
path: api/torznab
method: get
inputs:
apikey: "{{ .Config.apikey }}"
t: search
limit: 1
search:
paths:
- path: api/torznab/all
response:
type: xml
inputs:
apikey: "{{ .Config.apikey }}"
t: "{{ .Query.Type }}"
q: "{{ .Keywords }}"
cat: "{{ join .Categories \",\" }}"
# season: "{{ .Query.Season }}"
# ep: "{{ .Query.Ep }}"
imdbid: "{{ .Query.IMDBID }}"
tmdbid: "{{ .Query.TMDBID }}"
tvdbid: "{{ .Query.TVDBID }}"
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: replace
args: ["/torrents/", "/torrent/"]
download:
selector: enclosure
attribute: url
imdbid:
selector: "[name=imdbid]"
attribute: value
tmdbid:
selector: "[name=tmdbid]"
attribute: value
tvdbid:
selector: "[name=tvdbid]"
attribute: value
date:
# Tue, 02 Jun 2026 19:24:18 +0000
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:
selector: "[name=downloadvolumefactor]"
attribute: value
uploadvolumefactor:
selector: "[name=uploadvolumefactor]"
attribute: value
minimumratio:
text: 0.51
# torznab xml
@@ -0,0 +1,151 @@
---
id: trackerzero
name: TrackerZero
description: "TrackerZero is an ITALIAN Private PAY2DL Torrent Tracker for MOVIES / TV / MUSIC / SOFTWARE"
language: it-IT
type: private
encoding: UTF-8
links:
- https://trackerzero.it/
caps:
# https://trackerzero.it/docs#/torrents/list_categories_api_torrents_categories_get
categorymappings:
- {id: 4, cat: Movies/UHD, desc: "4k"}
- {id: 25, cat: TV/Anime, desc: "Anime"}
- {id: 22, cat: PC/0day, desc: "App_Linux"}
- {id: 23, cat: PC/Mac, desc: "App_Mac"}
- {id: 21, cat: PC/0day, desc: "App_Windows"}
- {id: 28, cat: Audio/Audiobook, desc: "Audiolibri"}
- {id: 7, cat: Movies/HD, desc: "BluRay"}
- {id: 24, cat: TV/Anime, desc: "Cartoon"}
- {id: 12, cat: TV/Documentary, desc: "Documentari"}
- {id: 11, cat: TV/HD, desc: "DocuSerie"}
- {id: 8, cat: Movies/DVD, desc: "DVD-R"}
- {id: 5, cat: Movies/SD, desc: "DvdRiP"}
- {id: 14, cat: Audio/Lossless, desc: "Flac"}
- {id: 19, cat: PC/Games, desc: "Giochi_Linux"}
- {id: 20, cat: Console/Other, desc: "Giochi_Mac"}
- {id: 18, cat: PC/Games, desc: "Giochi_PC"}
- {id: 34, cat: Console/PS4, desc: "Giochi PS4"}
- {id: 33, cat: Console/PS4, desc: "Giochi PS5"}
- {id: 27, cat: Books/EBook, desc: "Libri"}
- {id: 13, cat: Audio/MP3, desc: "MP3"}
- {id: 6, cat: Movies/SD, desc: "News_Cinema"}
- {id: 35, cat: Console/NDS, desc: "Nintendo Switch"}
- {id: 30, cat: TV/Other, desc: "Programmi tv"}
- {id: 26, cat: Books/Mags, desc: "Quotidiani_Periodici"}
- {id: 17, cat: Movies/HD, desc: "Saghe"}
- {id: 10, cat: TV/HD, desc: "SerieTV_Italiane"}
- {id: 9, cat: TV/HD, desc: "SerieTV_Straniere"}
- {id: 16, cat: Movies/Other, desc: "Spettacoli_E_Teatro"}
- {id: 32, cat: TV/Sport, desc: "SPORT"}
- {id: 29, cat: Other, desc: "VideoCorsi_E_Guide"}
- {id: 15, cat: Audio/Video, desc: "VideoMusicai"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: apikey
type: text
label: API key
- name: info_apikey
type: info
label: About your API key
default: "Find your API key by accessing your <a href=\"https://trackerzero.it/\" target=\"_blank\">TrackerZero</a> <i>Profile</i> page and scrolling down to the <b>img.trackerzero.it</b> section.<br>The API key expires monthly so if your search returns <b>Status=Unauthorized Response={\"detail\":\"Invalid token\"}</b> then fetch your new API key from the site."
- name: passkey
type: text
label: Passkey
- name: info_passkey
type: info
label: About your Passkey
default: "Find your Passkey by accessing your <a href=\"https://trackerzero.it/\" target=\"_blank\">TrackerZero</a> <i>Profile</i> page and scrolling down to the <b>Passkey</b> section."
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: api/torrents/latest
method: get
search:
# docs: https://trackerzero.it/docs
paths:
# https://trackerzero.it/api/torrents?limit=100&page=1&q=pacific&sort_by=created_at&sort_dir=desc
- path: api/torrents
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
limit: 100
page: 1
q: "{{ .Keywords }}"
sort_by: "{{ .Config.sort }}"
sort_dir: "{{ .Config.type }}"
# category searching not supported, using it causes 500 internal server error
keywordsfilters:
- name: diacritics
args: replace
rows:
selector: items
fields:
category:
selector: category.id
title:
selector: name
_id:
selector: id
details:
text: "{{ .Config.sitelink }}torrent/{{ .Result._id }}"
download:
text: "{{ .Config.sitelink }}api/torrents/{{ .Result._id }}/download-rss?passkey={{ .Config.passkey }}"
poster:
selector: poster
date:
# "created_at": "2026-02-20T18:17:51.514900+00:00" is returned by Newtonsoft.Json.Linq as 02/20/2026 18:17:51
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: completed
downloadvolumefactor:
text: 1
uploadvolumefactor:
text: 1
minimumratio:
text: 1.0
minimumseedtime:
# 1 day (as seconds = 24 x 60 x 60)
text: 86400
# json api
@@ -0,0 +1,173 @@
---
id: ultrabits-api
name: Ultrabits (API)
description: "Ultrabits is a NORDIC Private Torrent Tracker for MOVIES / TV / GENERAL"
language: sv-SE
type: private
encoding: UTF-8
links:
- https://ultrabits.org/
caps:
# `id` is the site's internal category slug — the JSON search endpoint
# echoes it back in each torrent's `category` field, so Cardigann maps
# rows 1:1 against what the API returns. `desc` mirrors the labels
# users see on ultrabits.org so Sonarr / Radarr / Prowlarr render the
# same wording.
# sourced from https://ultrabits.org/all?page=1
categorymappings:
# Movies
- {id: Movie-x264, cat: Movies/HD, desc: "Movies/x264"}
- {id: Movie-x265, cat: Movies/HD, desc: "Movies/x265"}
- {id: Movie-UHD, cat: Movies/UHD, desc: "Movies/UHD"}
- {id: Movie-Remux, cat: Movies/UHD, desc: "Movies/Remux"}
- {id: Movie-BD, cat: Movies/BluRay, desc: "Movies/BluRay"}
- {id: Movie-DVD, cat: Movies/DVD, desc: "Movies/DVDR"}
- {id: Movie-WEB, cat: Movies/WEB-DL, desc: "Movies/WEB-DL"}
- {id: Movie-Subpack, cat: Movies/Foreign, desc: "Movies/Subpack"}
# TV
- {id: TV-x264, cat: TV/HD, desc: "TV/x264"}
- {id: TV-x265, cat: TV/HD, desc: "TV/x265"}
- {id: TV-UHD, cat: TV/UHD, desc: "TV/UHD"}
- {id: TV-WEB, cat: TV/WEB-DL, desc: "TV/WEB-DL"}
- {id: TV-DVD, cat: TV/SD, desc: "TV/DVDR"}
- {id: TV-Nordic, cat: TV/Foreign, desc: "TV/Nordic"}
- {id: TV-Remux, cat: TV, desc: "TV/Remux"}
- {id: TV-BD, cat: TV/HD, desc: "TV/BluRay"}
- {id: TV-Subpack, cat: TV/Foreign, desc: "TV/Subpack"}
# Music
- {id: FLAC, cat: Audio/Lossless, desc: "Audio/FLAC"}
- {id: MP3, cat: Audio/MP3, desc: "Audio/MP3"}
- {id: MusicVid, cat: Audio/Video, desc: "Audio/Video"}
- {id: MusicDisc, cat: Audio/Lossless, desc: "Audio/Disc"}
- {id: Podcast, cat: Audio/Other, desc: "Audio/Podcast"}
# Games
- {id: Game-PC, cat: PC/Games, desc: "PC/Games"}
- {id: Game-PS, cat: Console/PS4, desc: "Console/PlayStation"}
- {id: Game-Xbox, cat: Console/XBox One, desc: "Console/Xbox"}
- {id: Game-NSW, cat: Console/Other, desc: "Console/Switch"}
# Apps
- {id: 0DAY, cat: PC/0day, desc: "PC/0DAY"}
- {id: App-ISO, cat: PC/ISO, desc: "PC/ISO"}
- {id: App-Mobile, cat: PC/Mobile-Android, desc: "PC/Mobile"}
# Books
- {id: eBook, cat: Books/EBook, desc: "Books/eBook"}
- {id: AudioBook, cat: Audio/Audiobook, desc: "Books/Audiobook"}
- {id: Magazine, cat: Books/Mags, desc: "Books/Magazine"}
- {id: Comic, cat: Books/Comics, desc: "Books/Comics"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Key by accessing your <a href=\"https://ultrabits.org/profile/settings/api-keys\" target=\"_blank\">Ultrabits</a> account <i>API keys</i> page."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
default: added
options:
added: created
seeders: seeders
size: size
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_activity
type: info
label: Account Inactivity
default: "Log in to the website at least every 3 months to avoid account deactivation."
login:
path: v1/jackett/search
method: get
inputs:
apikey: "{{ .Config.apikey }}"
limit: 1
error:
- selector: error
message:
selector: description
search:
paths:
- path: /v1/jackett/search
response:
type: json
inputs:
q: "{{ .Keywords }}"
apikey: "{{ .Config.apikey }}"
cat: "{{ join .Categories \",\" }}"
imdbid: "{{ .Query.IMDBIDShort }}"
tmdbid: "{{ .Query.TMDBID }}"
season: "{{ .Query.Season }}"
ep: "{{ .Query.Ep }}"
freeleech: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
sort: "{{ .Config.sort }}"
order: "{{ .Config.type }}"
limit: 100
rows:
selector: data
count:
selector: total
fields:
title:
selector: name
details:
selector: detailsUrl
download:
selector: downloadUrl
category:
selector: category
size:
selector: size
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: grabs
date:
# "addedAt": "2026-04-29T15:45:27.544Z" is returned by Newtonsoft.Json.Linq as 04/29/2026 15:45:27
selector: addedAt
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
infohash:
selector: infoHash
optional: true
imdb:
selector: imdb
tmdbid:
selector: tmdbId
downloadvolumefactor:
selector: downloadvolumefactor
uploadvolumefactor:
selector: uploadvolumefactor
minimumratio:
text: 1.1
minimumseedtime:
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
# json api
@@ -0,0 +1,195 @@
---
id: unbreakable
name: Unbreakable
description: "Unbreakable is a GERMAN Private Torrent Tracker for MOVIES / TV / GENERAL"
language: de-DE
type: private
encoding: UTF-8
links:
- https://unbreakable5.eu/
caps:
categorymappings:
- {id: 157, cat: TV/Documentary, desc: "Doku 1080p"}
- {id: 167, cat: TV/Documentary, desc: "Doku 2160p"}
- {id: 156, cat: TV/Documentary, desc: "Doku 720p"}
- {id: 165, cat: TV/Documentary, desc: "Doku Pack 1080p"}
- {id: 164, cat: TV/Documentary, desc: "Doku Pack 720p"}
- {id: 163, cat: TV/Documentary, desc: "Doku Pack SD"}
- {id: 135, cat: TV/Documentary, desc: "Doku Packs 2160p"}
- {id: 155, cat: TV/Documentary, desc: "Doku SD x264/x265"}
- {id: 152, cat: Books/EBook, desc: "E-Books"}
- {id: 168, cat: Movies/Other, desc: "Filme Anime"}
- {id: 103, cat: Movies/BluRay, desc: "Filme Blu-Ray"}
- {id: 104, cat: Movies/DVD, desc: "Filme DVD-R"}
- {id: 141, cat: Movies/HD, desc: "Filme HD 1080p"}
- {id: 154, cat: Movies/HD, desc: "Filme HD 720p"}
- {id: 166, cat: Movies/Foreign, desc: "Filme International"}
- {id: 139, cat: Movies/HD, desc: "Filme Packs HD 1080p"}
- {id: 106, cat: Movies/HD, desc: "Filme Packs HD 720p"}
- {id: 105, cat: Movies/SD, desc: "Filme Packs SD x264/x265"}
- {id: 119, cat: Movies/UHD, desc: "Filme Packs UHD 2160p"}
- {id: 153, cat: Movies/SD, desc: "Filme SD x264/x265"}
- {id: 140, cat: Movies/UHD, desc: "Filme UHD 2160p"}
- {id: 102, cat: Movies/Other, desc: "Filmklassiker"}
- {id: 127, cat: Movies/Other, desc: "Filmklassiker Packs"}
- {id: 118, cat: Audio/Audiobook, desc: "Hörbücher"}
- {id: 109, cat: Audio/Lossless, desc: "Musik Flac"}
- {id: 129, cat: Audio/MP3, desc: "Musik MP3"}
- {id: 111, cat: Audio/Lossless, desc: "Musik Packs Flac"}
- {id: 112, cat: Audio/MP3, desc: "Musik Packs MP3"}
- {id: 170, cat: Audio/Video, desc: "Musik Videos"}
- {id: 161, cat: Console/NDS, desc: "Nintendo Switch"}
- {id: 162, cat: Console/PS3, desc: "Playstation"}
- {id: 115, cat: TV/Anime, desc: "Series Anime"}
- {id: 113, cat: TV/HD, desc: "Serie HD 1080p"}
- {id: 125, cat: TV/HD, desc: "Serie HD 720p"}
- {id: 144, cat: TV/Anime, desc: "Serie Packs Anime"}
- {id: 138, cat: TV/HD, desc: "Serie Packs HD 1080p"}
- {id: 116, cat: TV/HD, desc: "Serie Packs HD 720p"}
- {id: 137, cat: TV/SD, desc: "Serie Packs SD x264/x265"}
- {id: 143, cat: TV/UHD, desc: "Serie Packs UHD 2160p"}
- {id: 133, cat: TV/SD, desc: "Serie SD x264/x265"}
- {id: 114, cat: TV/UHD, desc: "Serie UHD 2160p"}
- {id: 169, cat: TV/Sport, desc: "Sport"}
- {id: 150, cat: PC/0day, desc: "Windows Apps"}
- {id: 149, cat: PC/Games, desc: "Windows Spiele"}
- {id: 69, cat: XXX, desc: "XXX"}
- {id: 151, cat: Books/Mags, desc: "Zeitschriften"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: pin
type: text
label: Pin
- name: onlyupload
type: checkbox
label: Filter OnlyUpload only
default: false
- name: info_free
type: info
label: About OnlyUpload at Unbreakable
default: "<ul><li>OnlyUpload are torrents where download is not counted but upload is. Good for building your Ratio up. (On the Jackett dashboard search results these are tagged as Freeleech).</li></ul>"
- name: sort
type: select
label: Sort requested from site
default: added
options:
added: created
seeds: seeders
size: size
name: 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 pro Seite:</b> setting to <b>100</b> on your <b>UserCP</b> page. The default is <i>15</i>.
- name: info_activity
type: info
label: Account Inactivity
default: "Inactive accounts are automatically deleted after 42 days."
- name: info_seedhours
type: info
label: Seeding Hours
default: Before using this indexer, make sure that you have set <b>Meine Seedzeit</b> on your <b>UserCP</b> page.
login:
path: login.php
method: form
cookies: ["JAVA=OK"] # avoid jscheck redirect
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
secure_pin: "{{ .Config.pin }}"
returnto: /
error:
- selector: table.tableinborder:contains("Anmeldung Gescheitert!") > tbody > tr > td.tablea
test:
path: index.php
selector: a[href="logout.php"]
search:
paths:
- path: browse.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
showsearch: 1
# 0 active, 1 all, 2 dead
incldead: 1
orderby: "{{ .Config.sort }}"
sort: "{{ .Config.type }}"
# site does not support imdbid searching or display imdb links in results.
rows:
selector: "table.tableinborder[border=\"0\"][cellspacing=\"1\"][cellpadding=\"0\"][style=\"width:100%\"] > tbody > tr:has(a[href^=\"download.php?torrent=\"]){{ if .Config.onlyupload }}:has(img[src=\"pic/oupic.gif\"]){{ else }}{{ end }}"
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: a[href^="details.php?id="]:has(b)
details:
selector: a[href*="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?torrent="]
attribute: href
poster:
selector: img#img-1
attribute: src
size:
selector: td.content_wrap > table > tbody > tr:nth-child(2) > td:nth-child(1) > b:nth-child(1)
grabs:
selector: td.content_wrap > table > tbody > tr:nth-child(2) > td:nth-child(3) > b
files:
selector: td.content_wrap > table > tbody > tr:nth-child(2) > td:nth-child(1) > b:nth-child(2)
seeders:
selector: td.content_wrap > table > tbody > tr:nth-child(2) > td:nth-child(2) > b:nth-child(1)
leechers:
selector: td.content_wrap > table > tbody > tr:nth-child(2) > td:nth-child(2) > b:nth-child(3)
date:
selector: td.content_wrap > table > tbody > tr:nth-child(2) > td:nth-child(5)
filters:
- name: replace
args: ["\u00a0", " "]
- name: append
args: " +01:00" # CET
- name: dateparse
args: "dd.MM.yyyy HH:mm:ss zzz"
downloadvolumefactor:
case:
img[src="pic/oupic.gif"]: 0 # only upload is counted
"*": 1
uploadvolumefactor:
case:
img[src="pic/freeleech.gif"]: 0 # nothing is counted
"*": 1
minimumratio:
text: 0.7
minimumseedtime:
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
# NetVision
+137
View File
@@ -0,0 +1,137 @@
---
id: v3x
name: V3X
description: "V3X is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
language: fr-FR
type: private
encoding: UTF-8
requestDelay: 2
links:
- https://v3x.club/
- https://v3x.tw/
caps:
categorymappings:
- {id: 2000, cat: Movies, desc: "Films"}
- {id: 5000, cat: TV, desc: "Séries"}
- {id: 3000, cat: Audio, desc: "Audio"}
- {id: 7000, cat: Books, desc: "Ebooks"}
- {id: 4000, cat: PC, desc: "Applications"}
- {id: 1000, cat: Console, desc: "Jeux vidéo"}
- {id: 8000, cat: Other, desc: "Divers"}
modes:
search: [q]
tv-search: [q, season, ep, tmdbid]
movie-search: [q, tmdbid]
music-search: [q]
book-search: [q]
allowrawsearch: true
settings:
- name: apikey
type: text
label: API Key
- name: info_key
type: info
label: About your API key
default: "Create your API key on V3X in <b>Réglages -> Intégrations</b> (needs the torznab scope)."
- name: apiurl
label: API URL
type: text
default: api.v3x.club
- 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:
# returns "401 Unauthorized, check your credentials" if apikey is invalid
path: "https://{{ .Config.apiurl }}/indexer/search"
method: get
inputs:
apikey: "{{ .Config.apikey }}"
limit: 1
search:
paths:
- path: "https://{{ .Config.apiurl }}/indexer/search"
response:
type: json
inputs:
apikey: "{{ .Config.apikey }}"
q: "{{ .Keywords }}"
cat: "{{ join .Categories \",\" }}"
tmdbid: "{{ .Query.TMDBID }}"
season: "{{ .Query.Season }}"
ep: "{{ .Query.Ep }}"
limit: 100
rows:
selector: results
fields:
category:
selector: category
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: details
download:
selector: download
infohash:
selector: infohash
tmdbid:
selector: tmdbid
date:
# "created_at": "2026-08-21T01:28:14.004Z" is returned by Newtonsoft.Json.Linq as 08/21/2026 01:28:14
selector: pubdate
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: grabs
downloadvolumefactor:
selector: downloadvolumefactor
uploadvolumefactor:
selector: uploadvolumefactor
minimumratio:
text: 0.8
# json v0.18
+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)
@@ -0,0 +1,191 @@
---
id: vietmediaf
name: VietMediaF
description: "VietMediaF is a VIETNAMESE Private Torrent Tracker for MOVIES / TV"
language: vi-VN
type: private
encoding: UTF-8
links:
- https://tracker.vietmediaf.store/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Audio/Video, desc: "Music Video"}
- {id: 4, cat: Books/Comics, desc: "Manga"}
- {id: 5, cat: Other, desc: "Recycle Bin"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://tracker.vietmediaf.store/\" target=\"_blank\">VietMediaF</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: re_replace
args: ["(?i)(TV Movie)", "TV_Movie"]
- name: replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
# global MR is 0.4 but torrents must be seeded for 7 days regardless of ratio
# minimumratio:
# text: 0.4
minimumseedtime:
# 7 days (as seconds = 7 x 24 x 60 x 60)
text: 604800
# json UNIT3D 9.2.0
+188
View File
@@ -0,0 +1,188 @@
---
id: xdy
name: XDY (修道院)
description: "XDY (修道院) is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://xdypt.vip/
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "电影(Movies)"}
- {id: 402, cat: TV, desc: "电视剧(TV Series)"}
- {id: 403, cat: TV, desc: "综艺(TV Shows"}
- {id: 404, cat: TV/Documentary, desc: "纪录片(Documentaries)"}
- {id: 405, cat: TV/Anime, desc: "动漫(Animations)"}
- {id: 406, cat: Audio/Video, desc: "(MV)Music Videos"}
- {id: 407, cat: TV/Sport, desc: "体育(Sports)"}
- {id: 408, cat: Audio, desc: "音轨(HQ Audio)"}
- {id: 409, cat: Other/Misc, desc: "音乐(Misc)"}
- {id: 410, cat: Console, desc: "游戏(Games"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, doubanid]
movie-search: [q, imdbid, doubanid]
music-search: [q]
book-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: "Inactive accounts would be deleted based on the following rules:<ol><li>Veteran User or above would never be deleted.</li><li>Elite User or above would never be deleted if parked (at User CP).</li><li>Parked accounts would be deleted if users have not logged in for more than 400 days in a row.</li><li>Unparked accounts would be deleted if users have not logged in for more than 150 days in a row.</li><li>Accounts with both uploaded and downloaded amount being 0 would be deleted if users have not logged in for more than 100 days in a row.</li></ol>"
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: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
# 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: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
# 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
imdbid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="imdb.com/title/tt"]
attribute: href
doubanid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="movie.douban.com/subject/"]
attribute: href
# Users can change the "Time display type" in their tracker preferences:
date_elapsed:
# time type: time elapsed (default)
selector: td: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: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:nth-child(5)
optional: true
default: 512MB
seeders:
selector: td:nth-child(6)
optional: true
default: 0
leechers:
selector: td:nth-child(7)
optional: true
default: 0
grabs:
selector: td:nth-child(8)
optional: true
default: 0
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
description:
selector: td:nth-child(2)
remove: a, b, font, img, span
# global MR is 0.8 but torrents must be seeded for 1 days regardless of ratio
# minimumratio:
# text: 0.8
minimumseedtime:
# 1 days (as seconds = 24 x 60 x 60)
text: 86400
# NexusPHP v1.10.2 2026-04-11
+183
View File
@@ -0,0 +1,183 @@
---
id: xingtan
name: Xingtan (杏坛)
description: "Xingtan (杏坛) is a CHINESE Torrent Tracker focusing on Medical Resources EBOOKS"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://xingtan.one/
caps:
categorymappings:
- {id: EBooks, cat: Books, desc: EBooks}
modes:
search: [q]
book-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: 2facode
type: text
label: 2FA code
- name: info_2fa
type: info
label: "About 2FA code"
default: "Only fill in the <b>2FA code</b> box if you have enabled <b>2FA</b> on the HDClone Web Site. Otherwise just leave it empty."
- 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: "Account retention rules:<ol><li>Extreme User and above will be retained forever</li><li>Crazy User and above will not have their account deleted after parking (in the control panel)</li><li> Users with a parked account will be deleted if they do not log in for 120 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 60 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 30 consecutive days.</li></ol>"
login:
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
selector: img[alt="CAPTCHA"]
input: imagestring
inputs:
secret: ""
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
two_step_code: "{{ .Config.2facode }}"
logout: ""
securelogin: ""
ssl: yes
trackerssl: yes
error:
- selector: td.embedded:has(h2:contains("失败"))
message:
selector: td.text
test:
path: index.php
selector: a[href$="logout.php"]
search:
paths:
- path: torrents.php
inputs:
# cat search not supported due to many undocumented category ids
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, 5 ISBN/DOI, 1 descr, 3 uploader, 4 imdburl, 6 subject
search_area: 0
# 0 AND, 2 exact
search_mode: 0
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
notnewword: 1
rows:
selector: table.torrents > tbody > tr:has(table.torrentname)
fields:
category:
text: EBooks
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
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)
optional: true
default: 512MB
seeders:
selector: td.rowfollow:nth-child(6)
optional: true
default: 0
leechers:
selector: td.rowfollow:nth-child(7)
optional: true
default: 0
grabs:
selector: td.rowfollow:nth-child(8)
optional: true
default: 0
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: 2.0
minimumseedtime:
# 10 days (as seconds = 10 x 24 x 60 x 60)
text: 864000
description:
selector: td:nth-child(2)
remove: a, b, font, img, span
# NexusPHP v1.8.2 2023-05-08
+185
View File
@@ -0,0 +1,185 @@
---
id: xingwan
name: Xingwan (星湾)
description: "Xingwan (星湾) is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://xingwan.cc/
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "Movies(🎬 电影)"}
- {id: 402, cat: TV, desc: "TV Series(📺 电视剧)"}
- {id: 410, cat: TV, desc: "ShortDrama(📱 短剧)"}
- {id: 405, cat: TV/Anime, desc: "Animations(🌸 动漫)"}
- {id: 403, cat: TV, desc: "TV Shows(🎤 综艺)"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries(🌍 纪录片)"}
- {id: 416, cat: Books/Comics, desc: "Comics(📖 漫画)"}
- {id: 406, cat: Audio/Video, desc: "Music Videos(🎵 音乐视频)"}
- {id: 408, cat: Audio, desc: "HQ Audio(🎧 无损音乐)"}
- {id: 407, cat: TV/Sport, desc: "Sports(⚽ 体育)"}
- {id: 411, cat: Console, desc: "Games(🎮 游戏)"}
- {id: 412, cat: PC, desc: "Software(💻 软件)"}
- {id: 413, cat: Books, desc: "Ebooks(📚 电子书)"}
- {id: 409, cat: Other, desc: "Misc(📦 其他杂项)"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, doubanid]
movie-search: [q, imdbid, doubanid]
music-search: [q]
book-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: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 100 consecutive days.</li></ol>"
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: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
# 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: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
# 0 AND, 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
imdbid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="imdb.com/title/tt"]
attribute: href
doubanid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="movie.douban.com/subject/"]
attribute: href
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)
optional: true
default: 512MB
seeders:
selector: td.rowfollow:nth-child(6)
optional: true
default: 0
leechers:
selector: td.rowfollow:nth-child(7)
optional: true
default: 0
grabs:
selector: td.rowfollow:nth-child(8)
optional: true
default: 0
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
description:
selector: td.rowfollow:nth-child(2)
remove: a, b, font, img, span
# NexusPHP v1.10.1 2026-02-17
+186
View File
@@ -0,0 +1,186 @@
---
id: xingyung
name: Xingyung (星陨阁)
description: "Xingyung (星陨阁) is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://pt.xingyungept.org/
caps:
categorymappings:
- {id: 409, cat: Other, desc: "其他/Misc"}
- {id: 408, cat: Audio, desc: "音频/HQ Audio"}
- {id: 406, cat: Audio/Video, desc: "MV/Music Videos"}
- {id: 407, cat: TV/Sport, desc: "体育/Sports"}
- {id: 410, cat: TV, desc: "短剧/Playlet"}
- {id: 404, cat: TV/Documentary, desc: "纪录片/Documentary"}
- {id: 405, cat: TV/Anime, desc: "动漫/Animations"}
- {id: 403, cat: TV, desc: "综艺/TV Shows"}
- {id: 402, cat: TV, desc: "电视剧/TVSeries"}
- {id: 401, cat: Movies, desc: "电影/Movies"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, doubanid]
movie-search: [q, imdbid, doubanid]
music-search: [q]
book-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: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 100 consecutive days.</li></ol>"
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: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
# 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: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
# 0 AND, 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
imdbid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="imdb.com/title/tt"]
attribute: href
doubanid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="movie.douban.com/subject/"]
attribute: href
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)
optional: true
default: 512MB
seeders:
selector: td.rowfollow:nth-child(6)
optional: true
default: 0
leechers:
selector: td.rowfollow:nth-child(7)
optional: true
default: 0
grabs:
selector: td.rowfollow:nth-child(8)
optional: true
default: 0
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: 2.0
minimumseedtime:
# 2 days (as seconds = 2 x 24 x 60 x 60)
text: 172800
description:
selector: td.rowfollow:nth-child(2)
remove: a, b, font, img, span
# NexusPHP v1.9.6 2025-06-25
@@ -0,0 +1,144 @@
---
id: xwtclassics2fa
name: XWT-Classics2FA
description: "XWT-Classics is a Private Torrent Tracker for CLASSIC PROFESSIONAL WRESTLING. This indexer uses cookie login for 2FA."
language: en-US
type: private
encoding: UTF-8
links:
- https://xwt-classics.net/
legacylinks:
- http://xwt-classics.net/
caps:
categorymappings:
- {id: 1, cat: TV/Sport, desc: "DVD"}
- {id: 9, cat: TV/Sport, desc: "Florida"}
- {id: 7, cat: TV/Sport, desc: "International"}
- {id: 6, cat: TV/Sport, desc: "Japan"}
- {id: 8, cat: TV/Sport, desc: "Misc"}
- {id: 11, cat: TV/Sport, desc: "NWA"}
- {id: 4, cat: TV/Sport, desc: "UWF/Mid-South"}
- {id: 12, cat: TV/Sport, desc: "WCW"}
- {id: 5, cat: TV/Sport, desc: "World Class"}
- {id: 10, cat: TV/Sport, desc: "WWE 24/7"}
- {id: 13, cat: TV/Sport, desc: "WWE Network"}
- {id: 2, cat: TV/Sport, desc: "WWF"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-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: seedbox
type: checkbox
label: "Use SeedBox Download Link"
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_activity
type: info
label: Account Inactivity
default: "Accounts inactive for more than 42 days are automatically deleted."
login:
# using cookie method because login page can present second page for 2FA when enabled
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: browse.php
selector: a[href="logout.php"]
search:
paths:
# http://xwt-classics.net/browse.php?search=ricks&cat=0&incldead=1
- path: browse.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
# 0 active, 1 incldead, 2 onlydead, 3 freleech
incldead: "{{ if .Config.freeleech }}3{{ else }}1{{ end }}"
search: "{{ .Keywords }}"
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
rows:
selector: table[border="0"][cellspacing="0"][cellpadding="5"] tr:has(a[href^="download.php?id="])
fields:
category_optional:
selector: a[href^="browse.php?cat="]
attribute: href
optional: true
filters:
- name: querystring
args: cat
category:
text: "{{ if .Result.category_optional }}{{ .Result.category_optional }}{{ else }}8{{ end }}"
title:
selector: a[href^="details.php?id="]
attribute: title
download_1:
selector: a[href^="download.php"]
attribute: href
download_2:
selector: a[href^="download2.php"]
attribute: href
download:
text: "{{ if .Config.seedbox }}{{ .Result.download_2 }}{{ else }}{{ .Result.download_1 }}{{ end }}"
details:
selector: a[href^="details.php?id="]
attribute: href
files:
selector: td:nth-child(3)
grabs:
selector: td:nth-child(7)
size:
selector: td:nth-child(6)
seeders:
selector: td:nth-last-child(3)
leechers:
selector: td:nth-last-child(2)
date:
selector: td:nth-child(5)
filters:
- name: append
args: " -02:00" # WGST
- name: dateparse
args: "yyyy-MM-ddHH:mm:ss zzz"
downloadvolumefactor:
case:
img[src="pic/freeleech.png"]: 0
"*": 1
uploadvolumefactor:
text: 1
minimumratio:
text: 0.7
minimumseedtime:
# 1 day (as seconds = 24 x 60 x 60)
text: 86400
# engine n/a
@@ -0,0 +1,197 @@
---
id: xwtorrents2fa
name: XWtorrents2FA
description: "XtremeWrestlingTorrents (XWT) is a Private Torrent Tracker for PROFESSIONAL WRESTLING / MMA. This indexer uses cookie login for 2FA."
language: en-US
type: private
encoding: windows-1252
links:
- https://xtremewrestlingtorrents.net/
legacylinks:
- http://xtremewrestlingtorrents.net/
caps:
categorymappings:
- {id: 82, cat: TV/Sport, desc: "AEW Collision"}
- {id: 83, cat: TV/Sport, desc: "AEW Collision HD"}
- {id: 74, cat: TV/Sport, desc: "AEW Dynamite"}
- {id: 75, cat: TV/Sport, desc: "AEW Dynamite HD"}
- {id: 78, cat: TV/Sport, desc: "AEW PPV's"}
- {id: 79, cat: TV/Sport, desc: "AEW PPV's HD"}
- {id: 76, cat: TV/Sport, desc: "AEW Rampage"}
- {id: 77, cat: TV/Sport, desc: "AEW Rampage HD"}
- {id: 47, cat: TV/Sport, desc: "Boxing"}
- {id: 14, cat: Movies, desc: "Documentary"}
- {id: 20, cat: TV/Sport, desc: "DVD"}
- {id: 88, cat: Books, desc: "eBooks"}
- {id: 2, cat: TV/Sport, desc: "ECW Original"}
- {id: 26, cat: TV/Sport, desc: "ECW Weekly"}
- {id: 21, cat: TV/Sport, desc: "Int Indy's"}
- {id: 69, cat: TV/Sport, desc: "Lucha Libre"}
- {id: 70, cat: TV/Sport, desc: "Lucha Libre HD"}
- {id: 23, cat: TV/Sport, desc: "Misc"}
- {id: 24, cat: TV/Sport, desc: "MMA"}
- {id: 59, cat: TV/Sport, desc: "MMA HD"}
- {id: 86, cat: TV/Sport, desc: "Netflix"}
- {id: 87, cat: TV/Sport, desc: "Netflix HD"}
- {id: 30, cat: TV/Sport, desc: "Packs"}
- {id: 68, cat: TV/Sport, desc: "Podcasts"}
- {id: 29, cat: TV/Sport, desc: "Puro"}
- {id: 18, cat: TV/Sport, desc: "ROH"}
- {id: 52, cat: TV/Sport, desc: "ROH HD"}
- {id: 45, cat: TV/Sport, desc: "Shoot Interviews"}
- {id: 4, cat: TV/Sport, desc: "Single Matches"}
- {id: 7, cat: TV/Sport, desc: "TNA Impact"}
- {id: 49, cat: TV/Sport, desc: "TNA Impact HD"}
- {id: 6, cat: TV/Sport, desc: "TNA PPV's"}
- {id: 55, cat: TV/Sport, desc: "TNA PPV's HD"}
- {id: 66, cat: TV/Sport, desc: "Total Divas"}
- {id: 67, cat: TV/Sport, desc: "Total Divas HD"}
- {id: 57, cat: TV/Sport, desc: "Tough Enough"}
- {id: 58, cat: TV/Sport, desc: "Tough Enough HD"}
- {id: 22, cat: TV/Sport, desc: "USA Indy's"}
- {id: 12, cat: TV/Sport, desc: "WCW"}
- {id: 71, cat: TV/Sport, desc: "Womens Wrestling"}
- {id: 15, cat: TV/Sport, desc: "Wrestling Films"}
- {id: 72, cat: TV/Sport, desc: "WWE 205 Live"}
- {id: 73, cat: TV/Sport, desc: "WWE 205 Live HD"}
- {id: 16, cat: TV/Sport, desc: "WWE Heat"}
- {id: 63, cat: TV/Sport, desc: "WWE Main Event"}
- {id: 64, cat: TV/Sport, desc: "WWE Network"}
- {id: 65, cat: TV/Sport, desc: "WWE Network HD"}
- {id: 46, cat: TV/Sport, desc: "WWE NXT"}
- {id: 50, cat: TV/Sport, desc: "WWE NXT HD"}
- {id: 9, cat: TV/Sport, desc: "WWE PPV's"}
- {id: 56, cat: TV/Sport, desc: "WWE PPV's HD"}
- {id: 10, cat: TV/Sport, desc: "WWE RAW"}
- {id: 51, cat: TV/Sport, desc: "WWE RAW HD"}
- {id: 11, cat: TV/Sport, desc: "WWE Smackdown"}
- {id: 53, cat: TV/Sport, desc: "WWE Smackdown HD"}
- {id: 43, cat: TV/Sport, desc: "WWE Superstars"}
- {id: 54, cat: TV/Sport, desc: "WWE Superstars HD"}
- {id: 89, cat: TV/Sport, desc: "WWE Vault"}
- {id: 19, cat: TV/Sport, desc: "WWE Velocity"}
- {id: 31, cat: TV/Sport, desc: "WWE Vintage"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
book-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: seedbox
type: checkbox
label: "Use SeedBox Download Link"
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_flaresolverr
type: info_flaresolverr
login:
# using cookie method because login page can present second page for 2FA when enabled
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: browse.php
selector: a[href="logout.php"]
search:
paths:
# http://xtremewrestlingtorrents.net/browse.php?search=halftime+heat&c46=1&c51=1&c31=1&c11=1&incldead=1
- path: browse.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
# 0 active, 1 incldead, 2 onlydead, 3 freeleech, 4 descr
incldead: "{{ if .Config.freeleech }}3{{ else }}1{{ end }}"
search: "{{ .Keywords }}"
sort: "{{ .Config.sort }}"
type: "{{ .Config.type }}"
rows:
selector: table[border="0"][cellspacing="0"][cellpadding="5"] tr:has(a[href^="download.php?id="])
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
download_1:
selector: a[href^="download.php"]
attribute: href
title_default:
# title can be missing so we use the &name= from the DL as a standby
text: "{{ .Result.download_1 }}"
filters:
- name: querystring
args: name
- name: replace
args: [".torrent", ""]
title:
selector: a[href^="details.php?id="]
attribute: title
optional: true
default: "{{ .Result.title_default }}"
download_2:
selector: a[href^="download2.php"]
attribute: href
download:
text: "{{ if .Config.seedbox }}{{ .Result.download_2 }}{{ else }}{{ .Result.download_1 }}{{ end }}"
details:
selector: a[href^="details.php?id="]
attribute: href
files:
selector: td:nth-child(3)
grabs:
selector: td:nth-child(7)
size:
selector: td:nth-child(6)
seeders:
selector: td:nth-last-child(3)
leechers:
selector: td:nth-last-child(2)
date:
selector: td:nth-child(5)
# auto adjusted by site account profile
filters:
- name: dateparse
args: "yyyy-MM-ddHH:mm:ss"
downloadvolumefactor:
case:
img[src="pic/freeleech.png"]: 0
"*": 1
uploadvolumefactor:
text: 1
minimumratio:
text: 0.7
minimumseedtime:
# 1 day (as seconds = 24 x 60 x 60)
text: 86400
# engine n/a
@@ -0,0 +1,197 @@
---
id: yggreborn-api
name: YggReborn (API)
description: "YggReborn is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
language: fr-FR
type: private
encoding: UTF-8
requestDelay: 2.1
links:
- https://www.yggreborn.org/
caps:
categorymappings:
# from https://www.yggreborn.org/api?t=caps&apikey=YOUR-PASSKEY
- {id: 1000, cat: PC/Games, desc: "PC/Games"}
- {id: 1100, cat: PC/Games, desc: "PC/Games/Windows"}
- {id: 1101, cat: Console, desc: "PC/Games/Nintendo"}
- {id: 1102, cat: Console, desc: "PC/Games/Sony"}
- {id: 1103, cat: PC/Games, desc: "PC/Games/Microsoft"}
- {id: 1104, cat: PC/Games, desc: "PC/Games/Linux"}
- {id: 1105, cat: PC/Games, desc: "PC/Games/macOS"}
- {id: 1106, cat: Console, desc: "PC/Games/Smartphone"}
- {id: 1107, cat: Console, desc: "PC/Games/Tablette"}
- {id: 1108, cat: Console, desc: "PC/Games/Autre"}
- {id: 1110, cat: PC/Games, desc: "PC/Games/Émulateurs"}
- {id: 1111, cat: PC/Games, desc: "PC/Games/ROMs"}
- {id: 2000, cat: Movies, desc: "Movies"}
- {id: 2100, cat: Movies, desc: "Movies/Film"}
- {id: 2101, cat: Movies, desc: "Movies/Animation"}
- {id: 2102, cat: Movies, desc: "Movies/Documentaire"}
- {id: 2103, cat: Movies, desc: "Movies/Concert"}
- {id: 2104, cat: Movies, desc: "Movies/Sport"}
- {id: 2105, cat: Movies, desc: "Movies/Spectacle"}
- {id: 2106, cat: Movies, desc: "Movies/Vidéoclips"}
- {id: 3000, cat: Audio, desc: "Audio"}
- {id: 3100, cat: Audio, desc: "Audio/Musique"}
- {id: 3101, cat: Audio, desc: "Audio/Podcast / Radio"}
- {id: 3102, cat: Audio, desc: "Audio/Samples"}
- {id: 3103, cat: Audio, desc: "Audio/Karaoké"}
- {id: 4000, cat: PC, desc: "PC"}
- {id: 4100, cat: PC, desc: "PC/Windows"}
- {id: 4101, cat: PC, desc: "PC/macOS"}
- {id: 4102, cat: PC, desc: "PC/Linux"}
- {id: 4103, cat: PC, desc: "PC/Smartphone"}
- {id: 4104, cat: PC, desc: "PC/Tablette"}
- {id: 4105, cat: PC, desc: "PC/Formation"}
- {id: 4106, cat: PC, desc: "PC/Autre"}
- {id: 4110, cat: PC, desc: "PC/GPS Applications"}
- {id: 4111, cat: PC, desc: "PC/GPS Cartes"}
- {id: 4112, cat: PC, desc: "PC/GPS Divers"}
- {id: 5000, cat: TV, desc: "TV"}
- {id: 5100, cat: TV, desc: "TV/Série TV"}
- {id: 5101, cat: TV, desc: "TV/Animation série"}
- {id: 5102, cat: TV, desc: "TV/Émission TV"}
- {id: 6000, cat: XXX, desc: "XXX"}
- {id: 6100, cat: XXX, desc: "XXX/Films"}
- {id: 6101, cat: XXX, desc: "XXX/Images"}
- {id: 6102, cat: XXX, desc: "XXX/Hentai"}
- {id: 6103, cat: XXX, desc: "XXX/Ebooks"}
- {id: 6104, cat: XXX, desc: "XXX/Jeux"}
- {id: 7000, cat: Books, desc: "Books"}
- {id: 7100, cat: Books, desc: "Books/Livres"}
- {id: 7101, cat: Books, desc: "Books/Presse"}
- {id: 7102, cat: Books, desc: "Books/Bandes dessinées"}
- {id: 7103, cat: Books, desc: "Books/Mangas"}
- {id: 7104, cat: Books, desc: "Books/Comics"}
- {id: 7105, cat: Books, desc: "Books/Livres audio"}
- {id: 8000, cat: Other, desc: "Other"}
- {id: 8100, cat: Other, desc: "Other/Objets 3D"}
- {id: 8101, cat: Other, desc: "Other/Personnages 3D"}
- {id: 8110, cat: Other, desc: "Other/Scripts PHP / CMS"}
- {id: 8111, cat: Other, desc: "Other/WordPress"}
- {id: 8112, cat: Other, desc: "Other/Divers"}
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://www.yggreborn.org/guide-api\" target=\"_blank\">YggReborn Guide API</a> page and scrolling down to the <b>Authentification</b> section."
- name: apiurl
label: API URL
type: text
default: api.yggreborn.org
- 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: "https://{{ .Config.apiurl }}/api"
method: get
inputs:
t: search
apikey: "{{ .Config.passkey }}"
limit: 1
error:
- selector: ":contains(\"invalid api key\")"
search:
paths:
# docs at https://www.yggreborn.org/guide-api
- path: "https://{{ .Config.apiurl }}/api"
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: 50
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
download:
selector: enclosure
attribute: url
infohash:
selector: "[name=infohash]"
attribute: value
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=leechers]"
attribute: value
grabs:
selector: "[name=grabs]"
attribute: value
downloadvolumefactor:
selector: "[name=downloadvolumefactor]"
attribute: value
uploadvolumefactor:
selector: "[name=uploadvolumefactor]"
attribute: value
minimumratio:
text: 1.0
# torznab xml
@@ -0,0 +1,100 @@
---
id: zamundarip
name: Zamunda RIP
description: "Zamunda RIP is a BULGARIAN Public Torrent Archive for MOVIES / TV / GENERAL"
language: bg-BG
type: public
encoding: UTF-8
links:
- https://zamunda.rip/
caps:
categorymappings:
# from https://zamunda.rip/api/torznab/api?t=caps
- {id: 1000, cat: Console, desc: "Console"}
- {id: 1050, cat: Console/XBox, desc: "Игри/Xbox"}
- {id: 2000, cat: Movies, desc: "Movies"}
- {id: 2040, cat: Movies/HD, desc: "Филми/HD"}
- {id: 2030, cat: Movies/SD, desc: "Филми/SD"}
- {id: 2010, cat: Movies, desc: "Филми/Русия"}
- {id: 2020, cat: Movies/Other, desc: "Филми/Документални"}
- {id: 2050, cat: Movies/BluRay, desc: "Blu-ray"}
- {id: 2060, cat: Movies/3D, desc: "Филми/3D"}
- {id: 3000, cat: Audio, desc: "Audio"}
- {id: 3010, cat: Audio, desc: "Музика"}
- {id: 3020, cat: Audio/Video, desc: "Музика/DVD-R"}
- {id: 3040, cat: Audio, desc: "Музика/DTS"}
- {id: 4000, cat: PC, desc: "PC"}
- {id: 4050, cat: PC/Games, desc: "Игри/PC ISO"}
- {id: 4030, cat: PC/Mac, desc: "Игри/Mac"}
- {id: 4020, cat: PC/ISO, desc: "Програми/PC ISO"}
- {id: 4010, cat: PC, desc: "Програми/други"}
- {id: 4040, cat: PC/Mobile-Other, desc: "Mobile/GSM"}
- {id: 4070, cat: PC/Mobile-Android, desc: "Андроид/Игри"}
- {id: 5000, cat: TV, desc: "TV"}
- {id: 5070, cat: TV/Anime, desc: "Анимации/Аниме"}
- {id: 5030, cat: TV, desc: "Сериали"}
- {id: 5040, cat: TV/HD, desc: "Сериали/HD"}
- {id: 5020, cat: TV, desc: "Сериали/Русия"}
- {id: 5060, cat: TV/Sport, desc: "Спорт/TV"}
- {id: 6000, cat: XXX, desc: "XXX"}
- {id: 6040, cat: XXX/x264, desc: "XXX"}
- {id: 7000, cat: Books, desc: "Other"}
- {id: 7030, cat: Books/Comics, desc: "Книги/Комикси"}
- {id: 8000, cat: Other, desc: "Misc"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
book-search: [q]
settings: []
search:
paths:
# https://zamunda.rip/api/torznab/api?t=search&limit=100
- path: api/torznab/api
response:
type: xml
inputs:
t: search
q: "{{ .Keywords }}"
cat: "{{ join .Categories \",\" }}"
limit: 100
rows:
selector: rss > channel > item
fields:
category:
selector: "[name=category]"
attribute: value
title:
selector: title
details:
text: "{{ .Config.sitelink }}"
download:
selector: link
date:
# Sun, 08 Feb 2026 19:31:03 +0000
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
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# torznab xml
+198
View File
@@ -0,0 +1,198 @@
---
id: zenith
name: Zenith
description: "Zenith is an Private Torrent Tracker for MOVIES / TV / GENERAL"
language: en-US
type: private
encoding: UTF-8
links:
- https://znth.cx/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 5, cat: Audio, desc: "Music"}
- {id: 6, cat: Books, desc: "Books"}
- {id: 7, cat: Audio/Audiobook, desc: "Audiobooks"}
- {id: 3, cat: Console, desc: "Games"}
- {id: 8, cat: PC, desc: "Software"}
- {id: 9, cat: Other, desc: "Misc"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
settings:
- name: apikey
type: text
label: APIKey
- name: info_key
type: info
label: About your API key
default: "Find or Generate a new API Token by accessing your <a href=\"https://znth.cx/\" target=\"_blank\">Zenith</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
default: false
- name: single_file_release_use_filename
type: checkbox
label: Use filename as title for single file releases
default: true
- name: sort
type: select
label: Sort requested from site
default: created_at
options:
created_at: created
seeders: seeders
size: size
name: title
- name: type
type: select
label: Order requested from site
default: desc
options:
desc: desc
asc: asc
- name: info_activity
type: info
label: Account Inactivity
default: "Accounts get disabled after 90 days of no logins or any sort of activity. Accounts will also get soft deleted after 120 days."
login:
path: api/torrents
method: get
error:
- selector: a[href*="/login"]
message:
text: "The API key was not accepted by {{ .Config.sitelink }}."
- selector: :root:contains("Account is Banned")
search:
paths:
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
- path: api/torrents/filter
response:
type: json
headers:
Authorization: ["Bearer {{ .Config.apikey }}"]
inputs:
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
name: "{{ .Keywords }}"
seasonNumber: "{{ .Query.Season }}"
episodeNumber: "{{ .Query.Ep }}"
imdbId: "{{ .Query.IMDBIDShort }}"
tmdbId: "{{ .Query.TMDBID }}"
tvdbId: "{{ .Query.TVDBID }}"
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
keywordsfilters:
- name: re_replace
args: ["\\.", " "]
rows:
selector: data
attribute: attributes
fields:
category:
selector: category_id
title_optional:
selector: name
title_filename:
selector: "files[0].name"
optional: true
files:
selector: num_file
title:
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
details:
selector: details_link
download:
selector: download_link
poster:
selector: meta.poster
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:
selector: tvdb_id
genre:
selector: meta.genres
filters:
- name: re_replace
args: ["(?i)(Science Fiction)", "Science_Fiction"]
- name: re_replace
args: ["(?i)(TV Movie)", "TV_Movie"]
- name: replace
args: [" & ", "_&_"]
_internal:
selector: internal
case:
False: "{{ .False }}"
True: "{{ .True }}"
description:
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: times_completed
date:
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
selector: created_at
filters:
- name: append
args: " +00:00" # GMT
- name: dateparse
args: "MM/dd/yyyy HH:mm:ss zzz"
size:
selector: size
_featured:
selector: featured
case:
False: "{{ .False }}"
True: "{{ .True }}"
downloadvolumefactor_freeleech:
# api returns 0%, 25%, 50%, 75%, 100%
selector: freeleech
case:
0%: 1 # not free
25%: 0.75
50%: 0.5
75%: 0.25
100%: 0 # freeleech
"*": 0 # catch errors
downloadvolumefactor:
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
uploadvolumefactor_double_upload:
# api returns False, True
selector: double_upload
case:
False: 1 # normal
True: 2 # double
uploadvolumefactor:
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
# global MR is 0.69 but torrents must be seeded for 3 days regardless of ratio
# minimumratio:
# text: 0.69
minimumseedtime:
# 3 days (as seconds = 3 x 24 x 60 x 60)
text: 259200
# json UNIT3D 9.2.0
+179
View File
@@ -0,0 +1,179 @@
---
id: zrpt
name: ZRPT (自然)
description: "ZRPT (自然) is a CHINESE Private Torrent Tracker for Documentaries"
language: zh-CN
type: private
encoding: UTF-8
links:
- https://zrpt.cc/
caps:
categorymappings:
- {id: 412, cat: TV/Documentary, desc: "Nature"}
- {id: 413, cat: TV/Documentary, desc: "NatureWeb"}
- {id: 401, cat: TV/Documentary, desc: "军事纪实"}
- {id: 402, cat: TV/Documentary, desc: "生物自然"}
- {id: 403, cat: TV/Documentary, desc: "餐饮美食"}
- {id: 404, cat: TV/Documentary, desc: "人文记录"}
- {id: 405, cat: TV/Documentary, desc: "宇宙星球"}
- {id: 406, cat: TV/Documentary, desc: "音乐视频"}
- {id: 407, cat: TV/Documentary, desc: "体育运动"}
- {id: 409, cat: TV/Documentary, desc: "其它"}
- {id: 415, cat: TV/Documentary, desc: "旅游风景"}
- {id: 416, cat: TV/Documentary, desc: "纪录片"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
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: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 100 consecutive days.</li></ol>"
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: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
# 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: "{{ if .Query.IMDBID }}4{{ else }}0{{ end }}"
# 0 AND, 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
imdbid:
# site currently only has a badge and rating, the id is not present. just in case a future update.
selector: a[href*="imdb.com/title/tt"]
attribute: href
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)
optional: true
default: 512MB
seeders:
selector: td.rowfollow:nth-child(6)
optional: true
default: 0
leechers:
selector: td.rowfollow:nth-child(7)
optional: true
default: 0
grabs:
selector: td.rowfollow:nth-child(8)
optional: true
default: 0
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
minimumseedtime:
# 1 days (as seconds = 1 x 24 x 60 x 60)
text: 86400
description:
selector: td.rowfollow:nth-child(2)
remove: a, b, font, img, span
# NexusPHP v1.9.6 2025-06-25 (custom)