diff --git a/definitions/v11/ebooks-shares.yml b/definitions/v11/ebooks-shares.yml
index 84d2f0407..158084434 100644
--- a/definitions/v11/ebooks-shares.yml
+++ b/definitions/v11/ebooks-shares.yml
@@ -54,6 +54,7 @@ caps:
- {id: 340, cat: Books/EBook, desc: "Lit/RPG"}
- {id: 341, cat: Books/EBook, desc: "Collections"}
- {id: 352, cat: Books/EBook, desc: "Westerns"}
+ - {id: 370, cat: Books/EBook, desc: "Dystopian"}
# Children & Y/A
- {id: 299, cat: Books/EBook, desc: "Young Adult"}
- {id: 298, cat: Books/EBook, desc: "Children's"}
diff --git a/definitions/v11/f1gp.yml b/definitions/v11/f1gp.yml
index 30228e5e9..c1b3183bb 100644
--- a/definitions/v11/f1gp.yml
+++ b/definitions/v11/f1gp.yml
@@ -32,12 +32,13 @@ caps:
- {id: 22, cat: TV/Sport, desc: "MotoGP"}
- {id: 23, cat: TV/Sport, desc: "Boxing"}
- {id: 24, cat: Other, desc: "Magazines - Books"}
- - {id: 25, cat: TV/Sport, desc: "NNASCAR Cup Series"}
+ - {id: 25, cat: TV/Sport, desc: "NNASCAR"}
- {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"}
+ - {id: 30, cat: TV/Sport, desc: "Football/Soccer"}
+ - {id: 33, cat: TV/Sport, desc: "WRC/Rally"}
modes:
search: [q]
diff --git a/definitions/v11/carphunter.yml b/definitions/v11/herobit.yml
similarity index 62%
rename from definitions/v11/carphunter.yml
rename to definitions/v11/herobit.yml
index 027f00632..53a3d0d68 100644
--- a/definitions/v11/carphunter.yml
+++ b/definitions/v11/herobit.yml
@@ -1,12 +1,16 @@
---
-id: carphunter
-name: Carp-Hunter
-description: "Carp-Hunter is a HUNGARIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
+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:
@@ -16,15 +20,11 @@ caps:
- {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: 16, cat: Movies/HD, desc: "Film/HD1080P/Eng", default: true}
- - {id: 15, cat: Movies/HD, desc: "Film/HD1080P/Hun", default: true}
- - {id: 14, cat: Movies/HD, desc: "Film/HD720P/Eng", default: true}
- - {id: 13, cat: Movies/HD, desc: "Film/HD720P/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: 18, cat: Movies/UHD, desc: "Film/UHD/Eng", default: true}
- - {id: 17, cat: Movies/UHD, desc: "Film/UHD/Hun", default: true}
- - {id: 23, cat: Audio/Audiobook, desc: "Hangosköny", 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}
@@ -35,19 +35,23 @@ caps:
- {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, desc: "Sorozat/Eng", default: true}
- - {id: 32, cat: TV, desc: "Sorozat/Hun", 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: 34, cat: XXX, desc: "XXX/Filmek", default: false}
+ - {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]
- movie-search: [q]
+ tv-search: [q, season, ep, imdbid]
+ movie-search: [q, imdbid]
music-search: [q]
book-search: [q]
@@ -79,41 +83,42 @@ settings:
- name: info_settings
type: info
label: Settings Requirement
- default: This indexer only supports the details link option.
Navigate to the web site account Beállítások (Settings), change the Letöltések (Download) option to Link a részletekhez (Link to Details), and click Mentés (Save). Selecting Lenyíló menü (Dropdown Menu) will return no results.
+ default: This indexer only supports the direct datasheet link option.
Navigate to the web site account Beállítások (Settings), change the Torrent lista viselkedése (The behavior of the Torrent List) option to Közvetlen adatlap link (Direct datasheet link), and click Mentés (Save). Selecting Lenyíló részletek (Dropdown Details) will return no results.
+ - name: info_tpp
+ type: info
+ label: Results Per Page
+ default: For best results, change the Torrent oldalanként Torrents per page: setting to 100 on your account profile. The default is 35.
login:
- # using cookie method because login page has embedded Google reCAPTCHA
+ # 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"]
+ selector: a[href^="logout.php?k="]
search:
paths:
- path: browse.php
- categories: [1, 2, 8, 7, 16, 15, 14, 13, 4, 3, 18, 17, 23, 19, 20, 24, 21, 22, 35, 36, 25, 30, 31, 33, 32, 29, 28, 27, 26]
+ 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: [34, 39]
+ categories: [41, 34, 40, 39]
inputs:
xxx: 1
- keywordsfilters:
- # the site uses % for wildcard
- - name: re_replace
- args: ["[^a-zA-Z0-9]+", "%"]
+
inputs:
$raw: "{{ range .Categories }}cat[]={{.}}&{{end}}"
- search: "{{ .Keywords }}"
+ 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
- incldead: "{{ if .Config.freeleech }}3{{ else }}0{{ end }}"
+ 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: "table[cellpadding=\"3\"][style=\"width: 920px;\"] > tbody > tr:has(a[href^=\"browse.php?cat=\"])"
+ selector: tr.torrent-row
fields:
category:
@@ -123,38 +128,22 @@ search:
- name: querystring
args: cat
title:
- selector: a[href*="/details.php?id="]
- attribute: title
+ selector: a[href*="details.php?id="]
details:
- selector: a[href*="/details.php?id="]
+ selector: a[href*="details.php?id="]
attribute: href
download:
- selector: a[href*="/details.php?id="]
+ selector: a[href^="download.php?id="]
attribute: href
- filters:
- - name: replace
- args: ["/details", "/download"]
+ poster:
+ selector: a[href^="download.php?id="] button
+ attribute: data-poster
imdbid:
selector: a[href*="imdb.com/title/tt"]
attribute: href
- genre:
- selector: small[title]
- attribute: title
- description:
- case:
- img[src="/pic/yes.png"]: "Verified: {{ .Result.genre }}"
- img[src="/pic/nincs.png"]: "Unverified: {{ .Result.genre }}"
- poster:
- selector: a[onmouseover]
- attribute: onmouseover
- filters:
- - name: regexp
- args: "showTorrentThumb\\('(.*?)', "
date:
- selector: td:nth-last-child(6)
+ selector: div.torrent-date > strong
filters:
- - name: regexp
- args: (\d{4}-\d{2}-\d{2}.\d{2}:\d{2}:\d{2})
- name: replace
args: ["\u00a0", " "]
- name: append
@@ -162,21 +151,28 @@ search:
- name: dateparse
args: "yyyy-MM-dd HH:mm:ss zzz"
size:
- selector: td:nth-last-child(5)
+ 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:
- font:contains("x0"): 0
+ span:contains("x0"): 0
"*": 1
uploadvolumefactor:
case:
- font:contains("x2"): 2
- font:contains("x4"): 4
+ span:contains("x2"): 2
+ span:contains("x4"): 4
"*": 1
minimumratio:
text: 1.0
diff --git a/definitions/v11/musopia.yml b/definitions/v11/musopia.yml
index c71400320..6894a7210 100644
--- a/definitions/v11/musopia.yml
+++ b/definitions/v11/musopia.yml
@@ -162,8 +162,8 @@ search:
minimumratio:
text: 1.0
minimumseedtime:
- # 1 day (as seconds = 24 x 60 x 60)
- text: 86400
+ # 3 days (as seconds = 3 x 24 x 60 x 60)
+ text: 259200
description:
selector: td.rowfollow:nth-child(2)
remove: a, b, font, img, span
diff --git a/definitions/v11/ncore.yml b/definitions/v11/ncore.yml
index 9fb81d287..2c205307f 100644
--- a/definitions/v11/ncore.yml
+++ b/definitions/v11/ncore.yml
@@ -160,7 +160,7 @@ search:
selector: div.box_feltoltve2
filters:
- name: append
- args: " +01:00" # CET
+ args: " +02:00" # EET
- name: dateparse
args: "yyyy-MM-ddHH:mm:ss zzz"
downloadvolumefactor:
diff --git a/definitions/v11/nexum-api.yml b/definitions/v11/nexum-api.yml
index 25ba0fd22..e5ac6584f 100644
--- a/definitions/v11/nexum-api.yml
+++ b/definitions/v11/nexum-api.yml
@@ -13,26 +13,31 @@ caps:
# use https://nexum-core.com/api/v1/categories?apikey=YOUR-APIKEY for cat mappings, name is desc
categorymappings:
- {id: 10, cat: Books/EBook, desc: "Livres"}
+ - {id: 76, cat: PC/0day, desc: "Windows"}
- {id: 1, cat: Movies, desc: "Films"}
- - {id: 23, cat: Movies/Other, desc: "Film documentaire"}
- - {id: 11, cat: Books/Comics, desc: "BD"}
- {id: 9, cat: Audio/Audiobook, desc: "Livres audio"}
+ - {id: 11, cat: Books/Comics, desc: "BD"}
+ - {id: 23, cat: Movies/Other, desc: "Film documentaire"}
+ - {id: 77, cat: PC, desc: "Linux"}
- {id: 12, cat: Books/Comics, desc: "Comics"}
- {id: 24, cat: TV/Documentary, desc: "Série documentaire"}
+ - {id: 78, cat: PC/Mac, desc: "MacOS"}
- {id: 2, cat: TV, desc: "Séries TV"}
- - {id: 18, cat: Audio, desc: "Musique"}
- {id: 3, cat: TV/Documentary, desc: "Documentaires"}
- {id: 13, cat: Books/Comics, desc: "Mangas"}
+ - {id: 18, cat: Audio, desc: "Musique"}
+ - {id: 22, cat: TV, desc: "Émissions TV"}
- {id: 19, cat: Audio/Other, desc: "Podcasts"}
- {id: 14, cat: Books/Mags, desc: "Journaux"}
- - {id: 22, cat: TV, desc: "Émissions TV"}
- {id: 4, cat: TV/Anime, desc: "Animés"}
- {id: 20, cat: Audio/Other, desc: "Samples"}
- - {id: 5, cat: TV/Other, desc: "Concerts / Spectacles"}
- {id: 21, cat: Audio/Other, desc: "DJ Mix"}
+ - {id: 5, cat: TV/Other, desc: "Concerts / Spectacles"}
- {id: 7, cat: TV/Sport, desc: "Sports"}
- {id: 8, cat: Books, desc: "eBooks"}
- {id: 17, cat: Audio, desc: "Audio"}
+ - {id: 74, cat: Other, desc: "Formation"}
+ - {id: 75, cat: PC/Games, desc: "Jeux Vidéo"}
modes:
search: [q]
diff --git a/definitions/v11/ptfiles.yml b/definitions/v11/ptfiles.yml
index 3d8a0fd92..3b7af4411 100644
--- a/definitions/v11/ptfiles.yml
+++ b/definitions/v11/ptfiles.yml
@@ -5,6 +5,8 @@ description: "PTFiles (PTF) is a Private Torrent Tracker for MOVIES / TV / GENER
language: en-US
type: private
encoding: windows-1252
+certificates:
+ - 18e07892474429b99f7f9a20768792d31234433e # Expired 27th May 2026
links:
- https://ptfiles.net/
diff --git a/definitions/v11/zenith.yml b/definitions/v11/zenith.yml
new file mode 100644
index 000000000..a56cef987
--- /dev/null
+++ b/definitions/v11/zenith.yml
@@ -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 Zenith account My Settings page and clicking on the API Key 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