diff --git a/definitions/v11/1ptbar.yml b/definitions/v11/1ptbar.yml
index 9141ad99d..d222cd402 100644
--- a/definitions/v11/1ptbar.yml
+++ b/definitions/v11/1ptbar.yml
@@ -221,4 +221,4 @@ search:
description:
selector: td:nth-child(2)
remove: a, b, font, img, span
-# NexusPHP v1.9.9 2025-10-02
+# NexusPHP v1.9.13 2025-12-28
diff --git a/definitions/v11/3changtrai.yml b/definitions/v11/3changtrai.yml
index 92f2442cb..e4d50fae2 100644
--- a/definitions/v11/3changtrai.yml
+++ b/definitions/v11/3changtrai.yml
@@ -169,4 +169,4 @@ search:
description:
selector: td:nth-child(2)
remove: a, b, font, img, span
-# NexusPHP v1.9.9 2025-10-02
+# NexusPHP v2.0 2026-01-01
diff --git a/definitions/v11/arabicsource-api.yml b/definitions/v11/arabicsource-api.yml
index 7769a0744..a97d0516f 100644
--- a/definitions/v11/arabicsource-api.yml
+++ b/definitions/v11/arabicsource-api.yml
@@ -18,13 +18,14 @@ caps:
- {id: 6, cat: TV, desc: "مسلسلات رسوم مترجمة (Subtitled Animated Series)"}
- {id: 7, cat: TV, desc: "مسلسلات عربية (Arabic Series)"}
- {id: 8, cat: TV, desc: "مسرحيات (Plays)"}
- - {id: 9, cat: TV/Documentary, desc: "وثائقيات (Documentaries)"}
- {id: 10, cat: Other, desc: "إسلاميات (Islamic Content)"}
- {id: 11, cat: Other, desc: "رمضانيات (Ramadan Content)"}
- {id: 12, cat: Other, desc: "منوعات (Variety)"}
- {id: 13, cat: Audio, desc: "صوتيات (Audio)"}
- {id: 14, cat: Movies, desc: "كرتون كلاسيك (Classic Cartoons)"}
- {id: 15, cat: Other, desc: "تورنت خام (Raw Torrents)"}
+ - {id: 20, cat: TV/Documentary, desc: "مسلسلات وثائقيات (Documentary Series)"}
+ - {id: 9, cat: Movies, desc: "أفلام وثائقيات (Documentary Films)"}
- {id: 19, cat: Other, desc: "تورينتات ضائعة (Lost Torrents)"}
modes:
diff --git a/definitions/v11/aura4k-api.yml b/definitions/v11/aura4k-api.yml
new file mode 100644
index 000000000..3c494637b
--- /dev/null
+++ b/definitions/v11/aura4k-api.yml
@@ -0,0 +1,191 @@
+---
+id: aura4k-api
+name: AURA4K (API)
+description: "AURA4K is a Private Torrent Tracker for MOVIES / TV"
+language: en-US
+type: private
+encoding: UTF-8
+links:
+ - https://aura4k.net/
+
+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]
+ 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 AURA4K 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 with no activity (login/traffic) for more than 90 days may be automatically 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:
+ # 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 72 hours OR 1:1
+ minimumratio:
+ text: 1.0
+ minimumseedtime:
+ # 72 hours (as seconds = 3 x 24 x 60 x 60)
+ text: 259200
+# json UNIT3D 9.2.0
diff --git a/definitions/v11/backups.yml b/definitions/v11/backups.yml
index ee2110a8b..c432ae5cb 100644
--- a/definitions/v11/backups.yml
+++ b/definitions/v11/backups.yml
@@ -130,29 +130,31 @@ search:
# sort is done via do=quick_sort, and freeleech sorting is part of that set
rows:
- selector: "table#sortabletable > tbody > tr:has(a[href*=\"/details.php?id=\"]){{ if .Config.freeleech }}:has(img[src$=\"freedownload.gif\"]){{ else }}{{ end }}"
+ selector: "table#sortabletable > tbody > tr:has(a[href*=\"download-torrent-\"]){{ if .Config.freeleech }}:has(img[src$=\"freedownload.gif\"]){{ else }}{{ end }}"
filters:
- name: andmatch
args: 66
fields:
category:
- selector: a[href*="/browse.php?category="]
+ selector: a[href*="torrent-category-"]
attribute: href
filters:
- - name: querystring
- args: category
+ - name: regexp
+ args: category-(\d+)
title_default:
- selector: a[href*="/details.php?id="]
+ # is often abbreviated
+ selector: a[href*="torrent-details-"]
title:
+ # can be abbreviated but usually longer than title_default
selector: div.tooltip-content > div
optional: true
default: "{{ .Result.title_default }}"
details:
- selector: a[href*="/details.php?id="]
+ selector: a[href*="torrent-details-"]
attribute: href
download:
- selector: a[href*="/download.php?id="]
+ selector: a[href*="download-torrent-"]
attribute: href
magnet:
selector: a[href^="magnet:?xt="]
@@ -185,4 +187,9 @@ search:
args: " +00:00" # GMT
- name: dateparse
args: "dd-MM-yyyy HH:mm zzz"
+ minimumratio:
+ text: 1.0
+ minimumseedtime:
+ # 2 days (as seconds = 2 x 24 x 60 x 60)
+ text: 172800
# TS Special Edition v.8.0
diff --git a/definitions/v11/crnaberza.yml b/definitions/v11/crnaberza.yml
index 78e31dfb3..42e633b57 100644
--- a/definitions/v11/crnaberza.yml
+++ b/definitions/v11/crnaberza.yml
@@ -37,6 +37,7 @@ caps:
- {id: 80, cat: TV, desc: "Paketi"}
- {id: 49, cat: PC, desc: "Programi"}
- {id: 28, cat: Other, desc: "Razno"}
+ - {id: 85, cat: Movies, desc: "Remux"}
- {id: 62, cat: TV/SD, desc: "SD Boxset"}
- {id: 38, cat: TV/Sport, desc: "Sport"}
- {id: 39, cat: Audio/Video, desc: "Spotovi DVD"}
diff --git a/definitions/v11/cyanbug.yml b/definitions/v11/cyanbug.yml
index 77019428f..070aaa2ba 100644
--- a/definitions/v11/cyanbug.yml
+++ b/definitions/v11/cyanbug.yml
@@ -211,4 +211,4 @@ search:
filters:
- name: prepend
args: "{{ .Result.description_verified }} "
-# NexusPHP v1.8.14 2024-10-07
+# NexusPHP v1.9.11 2025-11-02
diff --git a/definitions/v11/freefarm.yml b/definitions/v11/freefarm.yml
index 5e7ed343f..2855685c2 100644
--- a/definitions/v11/freefarm.yml
+++ b/definitions/v11/freefarm.yml
@@ -209,4 +209,4 @@ search:
filters:
- name: prepend
args: "{{ .Result.description_verified }} "
-# NexusPHP v1.9.11 2025-11-02
+# NexusPHP v1.9.13 2025-12-28
diff --git a/definitions/v11/girotorrent.yml b/definitions/v11/girotorrent.yml
index bc07619a0..20f599d11 100644
--- a/definitions/v11/girotorrent.yml
+++ b/definitions/v11/girotorrent.yml
@@ -40,11 +40,6 @@ caps:
- {id: 28, cat: Movies/Foreign, desc: "Movie Subbed-ita"}
- {id: 73, cat: Movies/SD, desc: "Movie MP4"}
- {id: 29, cat: Movies/Foreign, desc: "Movie Lingua Originale"}
- # ANIMAZIONE
- - {id: 32, cat: TV/Anime, desc: "Anime Disney"}
- - {id: 33, cat: TV/Anime, desc: "Anime"}
- - {id: 34, cat: TV/Anime, desc: "Anime Altri Cartoni"}
- - {id: 62, cat: TV/Anime, desc: "Anime Natale Bimbi Girotor"}
# TELEVISIONE
- {id: 36, cat: TV, desc: "TV Serie"}
- {id: 99, cat: TV/HD, desc: "TV Serie Hevc"}
@@ -54,6 +49,11 @@ caps:
- {id: 38, cat: TV, desc: "TV Concerti-Spettacoli"}
- {id: 39, cat: TV, desc: "TV Teatro-Cabaret"}
- {id: 40, cat: TV/Documentary, desc: "Tv Documentario"}
+ # ANIMAZIONE
+ - {id: 32, cat: TV/Anime, desc: "Anime Disney"}
+ - {id: 33, cat: TV/Anime, desc: "Anime"}
+ - {id: 34, cat: TV/Anime, desc: "Anime Altri Cartoni"}
+ - {id: 62, cat: TV/Anime, desc: "Anime Natale Bimbi Girotor"}
# MUSICA
- {id: 42, cat: Audio, desc: "Musica CD Singoli"}
- {id: 43, cat: Audio, desc: "Musica Italiana"}
@@ -149,13 +149,12 @@ download:
search:
paths:
- # 15 results per page fetch 5 (site is slow, dont be greedy and fetch more)
- path: index.php
inputs:
page: torrents
search: "{{ .Keywords }}"
category: "{{ range .Categories }}{{.}};{{end}}"
- # 0 name, 1 name&descr, 2 descr, 3 uploader, 5 gold, 6 silver, 7 bronze
+ # 0 filename, 1 file&descr, 2 descr, 3 uploader, 5 gold, 6 silver, 7 bronze
# note the options are exclusive, so searching for gold means the search keywords are ignored
options: 0
# 0 all, 1 activeonly, 2 deadonly
@@ -252,4 +251,4 @@ search:
args: ["x Upload Multiplier", ""]
minimumratio:
text: 0.5
-# xbtitFM 3.1.00
+# xbtitFM v4.2.12
diff --git a/definitions/v11/hxpt.yml b/definitions/v11/hxpt.yml
new file mode 100644
index 000000000..f1f4634dd
--- /dev/null
+++ b/definitions/v11/hxpt.yml
@@ -0,0 +1,160 @@
+---
+id: hxpt
+name: HxPT (好学)
+description: "HxPT (好学) is a CHINESE Private Torrent Tracker for E-LEARNING"
+language: zh-CN
+type: private
+encoding: UTF-8
+links:
+ - https://www.hxpt.org/
+
+caps:
+ categorymappings:
+ - {id: 401, cat: Other, desc: "学前教育 (Preschool)"}
+ - {id: 402, cat: Other, desc: "小学部 (Primary School)"}
+ - {id: 403, cat: Other, desc: "初中部 (Middle School)"}
+ - {id: 404, cat: Other, desc: "高职部 (Vocational High School)"}
+ - {id: 405, cat: Other, desc: "高中部 (High School)"}
+ - {id: 406, cat: Other, desc: "教育影音 (Educational Video)"}
+
+ 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 Torrents per page: setting to 100 on your account profile.
+ - name: info_activity
+ type: info
+ label: Account Inactivity
+ default: "Account retention rules:
- Veteran User and above will be retained forever
- Elite User and above will not have their account deleted after parking (in the control panel)
- Users with a parked account will be deleted if they do not log in for 400 consecutive days
- Users with a non-parked account will be deleted if they do not log in for 150 consecutive days
- 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.
"
+
+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
+ minimumseedtime:
+ # 24 hours (as seconds = 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
diff --git a/definitions/v11/idope.yml b/definitions/v11/idope.yml
deleted file mode 100644
index a4e7aacf8..000000000
--- a/definitions/v11/idope.yml
+++ /dev/null
@@ -1,130 +0,0 @@
----
-id: idope
-name: iDope
-description: "iDope is a Public torrent search engine presenting direct magnet links"
-language: en-US
-type: public
-encoding: UTF-8
-requestDelay: 2
-links:
- - https://idope.me/
-legacylinks:
- - https://idope.black-mirror.xyz/
- - https://idope.unblocked.casa/
- - https://idope.proxyportal.fun/
- - https://idope.uk-unblock.xyz/
- - https://idope.ind-unblock.xyz/
- - https://idope.unblocked.bar/
- - https://idope.proxyportal.pw/
- - https://idope.uk-unblock.pro/
- - https://idope.unblocked.rest/
- - https://idope.unblocked.monster/
- - https://idope.se/
-
-caps:
- categorymappings:
- - {id: 0, cat: Other, desc: Others}
- - {id: 1, cat: Movies, desc: Movies}
- - {id: 2, cat: Other, desc: Video}
- - {id: 3, cat: TV, desc: TV}
- - {id: 4, cat: TV/Anime, desc: Anime}
- - {id: 5, cat: XXX, desc: XXX}
- - {id: 6, cat: Audio, desc: Music}
- - {id: 7, cat: PC/Games, desc: Games}
- - {id: 8, cat: PC, desc: Apps}
- - {id: 9, cat: Books, desc: Books}
-
- modes:
- search: [q]
- tv-search: [q, season, ep]
- movie-search: [q]
- music-search: [q]
- book-search: [q]
-
-settings:
- - name: itorrents-links
- type: checkbox
- label: Add download links via itorrents.org
- default: false
- - name: info
- type: info
- label: ITorrents Note
- default: Without the itorrents option only magnet links will be provided.
- - name: sort
- type: select
- label: Sort requested from site (Applies only to search with Keywords)
- default: -3
- options:
- -3: "created desc"
- -1: "seeders desc"
- -2: "size desc"
- 3: "created asc"
- 1: "seeders asc"
- 2: "size asc"
- - name: info_flaresolverr
- type: info_flaresolverr
-
-search:
- paths:
- # present trending results if there are no search parms supplied
- # sort torrent-list by age in descending order
- - path: "{{ if .Keywords }}torrent-list/{{ .Keywords }}?o={{ .Config.sort }}&c={{ range .Categories }}{{.}}{{end}}{{ else }}browse.html{{ end }}"
- - path: "{{ if .Keywords }}torrent-list/{{ .Keywords }}?p=2&o={{ .Config.sort }}&c={{ range .Categories }}{{.}}{{end}}{{ else }}browse.html?&p=2{{ end }}"
-
- headers:
- # Using a custom user-agent to return the desktop layout.
- User-Agent: ["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203"]
-
- rows:
- selector: div.resultdiv
-
- fields:
- category:
- selector: div.resultdivbotton div.resultdivbottoncategory
- optional: true
- default: 0
- case:
- ":contains(\"Others\")": 0
- ":contains(\"Movies\")": 1
- ":contains(\"Video\")": 2
- ":contains(\"TV\")": 3
- ":contains(\"Anime\")": 4
- ":contains(\"XXX\")": 5
- ":contains(\"Music\")": 6
- ":contains(\"Games\")": 7
- ":contains(\"Apps\")": 8
- ":contains(\"Books\")": 9
- title:
- selector: div.resultdivtop a div.resultdivtopname
- details:
- selector: div.resultdivtop a
- attribute: href
- download_itorrents:
- selector: div.resultdivbotton div.hideinfohash
- filters:
- - name: toupper
- - name: prepend
- args: http://itorrents.org/torrent/
- - name: append
- args: ".torrent"
- download:
- text: "{{ if .Config.itorrents-links }}{{ .Result.download_itorrents }}{{ else }}{{ end }}"
- infohash:
- selector: div.resultdivbotton div.hideinfohash
- date:
- selector: div.resultdivbotton div.resulttime div.resultdivbottontime
- filters:
- - name: timeago
- size:
- selector: div.resultdivbotton div.resultlength div.resultdivbottonlength
- files:
- selector: div.resultdivbotton div.resultfile div.resultdivbottonfiles
- seeders:
- selector: div.resultdivbotton div.resultseed div.resultdivbottonseed
- leechers:
- text: 0
- downloadvolumefactor:
- text: 0
- uploadvolumefactor:
- text: 1
-# engine n/a
diff --git a/definitions/v11/jpopsuki.yml b/definitions/v11/jpopsuki.yml
index db8af8046..55f3f7480 100644
--- a/definitions/v11/jpopsuki.yml
+++ b/definitions/v11/jpopsuki.yml
@@ -68,12 +68,15 @@ login:
- selector: form#loginform > span.warning, font[color="red"]
test:
path: index.php
- selector: a[href^="logout.php?auth="]
+ selector: a[href^="logout.php?auth="], a[href^="torrents.php?action=download&id="]
search:
# https://jpopsuki.eu/ajax.php?section=torrents&artistname=&action=advanced&torrentname=snow+man&remastertitle=&filelist=&bitrate=&format=&media=&year=&freeleech=&remastered=&searchtags=&tags_type=0&order_by=s3&order_way=desc&enablegrouping=1
paths:
- path: ajax.php
+ keywordsfilters:
+ - name: re_replace # replace special characters with " " (space)
+ args: ["[\\[!\"#$%&'()*+,\\-.\\/:;<=>?@[\\]^_`{|}~]", " "]
inputs:
$raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}{{ if or .Query.Album .Query.Artist .Keywords }}action=advanced{{ else }}searchtags=japanese&tags_type=0{{ end }}"
artistname: "{{ .Query.Artist }}"
diff --git a/definitions/v11/kunlun.yml b/definitions/v11/kunlun.yml
new file mode 100644
index 000000000..2fc7e7b9f
--- /dev/null
+++ b/definitions/v11/kunlun.yml
@@ -0,0 +1,170 @@
+---
+id: kunlun
+name: Kunlun (昆仑)
+description: "Kunlun (昆仑) is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
+language: zh-CN
+type: private
+encoding: UTF-8
+links:
+ - https://www.yhpp.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: "Documentaries/纪录片"}
+ - {id: 405, cat: TV/Anime, desc: "Animations/动漫、动画"}
+ - {id: 406, cat: Audio/Video, desc: "Music Videos/音乐视频"}
+ - {id: 407, cat: TV/Sport, desc: "Sports/体育"}
+ - {id: 408, cat: Audio/Lossless, desc: "Music/音乐"}
+ - {id: 409, cat: Other, 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 Torrents per page: setting to 100 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:- Veteran User or above would never be deleted
- Elite User or above would never be deleted if parked (at User CP)
- Parked accounts would be deleted if users have not logged in for more than 400 days in a row
- Un-parked accounts would be deleted if users have not logged in for more than 150 days in a row
- 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.
"
+
+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 }}"
+ 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 or .Query.IMDBID .Query.DoubanID }} {{ else }}{{ .Keywords }}{{ end }}{{ if .Query.DoubanID }}{{ .Query.DoubanID }}{{ 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 .Query.DoubanID }}1{{ else }}{{ end }}{{ if or .Query.IMDBID .Query.DoubanID }}{{ 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(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
+ 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)
+ seeders:
+ selector: td.rowfollow.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
+ description:
+ selector: td.rowfollow:nth-child(2)
+ remove: a, b, font, img, span
+# NexusPHP v1.9.13 2025-12-28
diff --git a/definitions/v11/leech24.yml b/definitions/v11/leech24.yml
index 270226822..c96dbc1a8 100644
--- a/definitions/v11/leech24.yml
+++ b/definitions/v11/leech24.yml
@@ -108,12 +108,12 @@ login:
search:
paths:
- # https://leech24.net/torrents-search.php?c3=1&c1=1&c2=1&c42=1&c4=1&c7=1&search=&cat=0&incldead=1&freeleech=0&lang=0
+ # https://leech24.net/torrents-search.php?&search=&incldead=1&freeleech=0&lang=0
- path: torrents-search.php
inputs:
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
- cat: 0
+# cat: 0 # causes 0 results
# 0 active, 1 incldead, 2 onlydead
incldead: 1
# 0 all, 1 notfree, 2 onlyfree
diff --git a/definitions/v11/lemonhd-net.yml b/definitions/v11/lemonhd-net.yml
index 540ceab61..63332260f 100644
--- a/definitions/v11/lemonhd-net.yml
+++ b/definitions/v11/lemonhd-net.yml
@@ -180,4 +180,4 @@ search:
description:
selector: td:nth-child(2)
remove: a, b, font, img, span
-# NexusPHP v1.9.11 2025-11-02
+# NexusPHP v1.9.13 2025-12-28
diff --git a/definitions/v11/matrix.yml b/definitions/v11/matrix.yml
index 88195ade1..6f3c5ff12 100644
--- a/definitions/v11/matrix.yml
+++ b/definitions/v11/matrix.yml
@@ -33,7 +33,7 @@ caps:
- {id: 39, cat: PC/Games, desc: "Játékok/Rip/Dox"}
- {id: 47, cat: Other, desc: "Klippek"}
- {id: 30, cat: Audio/Lossless, desc: "Lossless/EN"}
-# - {id: 29, cat: Audio/Lossless, desc: "Lossless/HU"}
+ - {id: 29, cat: Audio/Lossless, desc: "Lossless/HU"}
- {id: 25, cat: Audio/MP3, desc: "MP3/EN"}
- {id: 6, cat: Audio/MP3, desc: "MP3/HU"}
- {id: 33, cat: PC, desc: "Program/egyéb"}
@@ -143,7 +143,7 @@ search:
img[src="/pic/categories/cat_games.gif"]: 39
img[src="/pic/categories/026.png"]: 47
img[src="/pic/categories/024.png"]: 30
-# img[]: 29
+ img[src="/pic/categories/019.png" ]: 29
img[src="/pic/categories/023.png"]: 25
img[src="/pic/categories/018.png"]: 6
img[src="/pic/categories/025.png"]: 33
diff --git a/definitions/v11/ptskit.yml b/definitions/v11/ptskit.yml
index de23bd0aa..ba7f102e8 100644
--- a/definitions/v11/ptskit.yml
+++ b/definitions/v11/ptskit.yml
@@ -194,4 +194,4 @@ search:
description:
selector: td.rowfollow:nth-child(2)
remove: a, b, font, img, span
-# NexusPHP v1.9.11 2025-11-02
+# NexusPHP v1.9.13 2025-12-28
diff --git a/definitions/v11/torrentqq.yml b/definitions/v11/torrentqq.yml
index 5de27d6ce..1b5e482c7 100644
--- a/definitions/v11/torrentqq.yml
+++ b/definitions/v11/torrentqq.yml
@@ -7,16 +7,14 @@ type: public
encoding: UTF-8
followredirect: true
links:
- - https://torrentqq400.com/
+ - https://torrentqq402.com/
- https://torrentegg86.com/
legacylinks:
- https://torrentegg71.com/
- https://torrentegg72.com/
- https://torrentegg73.com/
- https://torrentegg74.com/
- - https://torrentqq385.com/
- https://torrentegg75.com/
- - https://torrentqq386.com/
- https://torrentegg76.com/
- https://torrentqq387.com/
- https://torrentegg77.com/
@@ -40,6 +38,8 @@ legacylinks:
- https://torrentegg85.com/
- https://torrentqq398.com/
- https://torrentqq399.com/
+ - https://torrentqq400.com/
+ - https://torrentqq401.com/
caps:
categorymappings:
diff --git a/definitions/v11/wdt.yml b/definitions/v11/wdt.yml
deleted file mode 100644
index 847a58998..000000000
--- a/definitions/v11/wdt.yml
+++ /dev/null
@@ -1,190 +0,0 @@
----
-id: wdt
-name: WDT
-description: "Wrestling Desires Torrents (Ultimate Wrestling Torrents) is a Private Torrent Tracker for PROFESSIONAL WRESTLING / MMA"
-language: en-US
-type: private
-encoding: UTF-8
-links:
- - http://ultimatewrestlingtorrents.com/
-legacylinks:
- - https://ultimatewrestlingtorrents.com/
-
-caps:
- categorymappings:
- # note: when refreshing categories also update $raw
- - {id: 14, cat: Audio/Audiobook, desc: "Audiobooks"}
- - {id: 16, cat: Audio, desc: "Music Audio"}
- - {id: 13, cat: Audio, desc: "Podcasts"}
- - {id: 15, cat: Audio, desc: "Wrestling Themes"}
- - {id: 29, cat: Books/EBook, desc: "Ebooks"}
- - {id: 28, cat: Books/Mags, desc: "Magazines"}
- - {id: 30, cat: Books/Other, desc: "Misc"}
- - {id: 18, cat: Books/Other, desc: "Wrestling Newsletters"}
- - {id: 34, cat: TV/Sport, desc: "Impact Wrestling PPV / One Nig"}
- - {id: 9, cat: TV/Sport, desc: "Weekly"}
- - {id: 33, cat: TV/Sport, desc: "Xplosion"}
- - {id: 32, cat: TV/Sport, desc: "DVDRips"}
- - {id: 31, cat: TV/Sport, desc: "DVDs"}
- - {id: 20, cat: TV/Sport, desc: "Packs"}
- - {id: 19, cat: PC, desc: "Computer Programs"}
- - {id: 35, cat: PC/Games, desc: "Games"}
- - {id: 36, cat: PC/Mobile-Other, desc: "Mobile Apps"}
- - {id: 37, cat: TV/Sport, desc: "Boxing"}
- - {id: 38, cat: TV/Sport, desc: "Classics"}
- - {id: 12, cat: TV/Documentary, desc: "Documentary"}
- - {id: 40, cat: TV, desc: "Indy Other Promotions"}
- - {id: 44, cat: TV, desc: "Other MMA"}
- - {id: 11, cat: TV, desc: "Other Videos"}
- - {id: 42, cat: TV, desc: "Puro NJPW"}
- - {id: 43, cat: TV, desc: "Self Defense Tutorials"}
- - {id: 21, cat: TV, desc: "Shoots"}
- - {id: 22, cat: TV, desc: "TV Episodes"}
- - {id: 41, cat: TV/Sport, desc: "UFC"}
- - {id: 10, cat: Movies, desc: "Wrestlers Movies"}
- - {id: 26, cat: TV/Sport, desc: "Network"}
- - {id: 24, cat: TV/Sport, desc: "NXT"}
- - {id: 27, cat: TV/Sport, desc: "Other WWE Shows"}
- - {id: 17, cat: TV/Sport, desc: "Raw"}
- - {id: 23, cat: TV/Sport, desc: "Smackdown"}
- - {id: 25, cat: TV/Sport, desc: "WWE PPV"}
-
- 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: 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_results
- type: info
- label: Search results
- default: "If you are getting the error Login Failed, got redirected then access the site with your browser and mark as read all PMs."
- - name: info_activity
- type: info
- label: Account Inactivity
- default: "Accounts inactive for more than 42 days are automatically deleted."
-
-login:
- path: login.php
- method: form
- form: form[action="takelogin.php"]
- inputs:
- username: "{{ .Config.username }}"
- password: "{{ .Config.password }}"
- use_ssl: ""
- perm_ssl: ""
- returnto: /
- error:
- - selector: table.main:contains("Login failed!")
- message:
- selector: table tr td.colhead2
- test:
- path: /
- selector: a[href*="logout.php?hash_please="]
-
-search:
- paths:
- # https://ultimatewrestlingtorrents.com/browse.php?search=&searchin=title&incldead=0&only_free=1
- # note: site uses the catsX[]=nn method which cardigann does not support. without the cats the site returns nothing. so we hardcode all cats.
- # https://ultimatewrestlingtorrents.com/browse.php?cats3[]=14&cats3[]=16&cats3[]=13&cats3[]=15&cats5[]=29&cats5[]=28&cats5[]=30&cats5[]=18&cats1[]=34&cats1[]=9&cats1[]=33&cats6[]=32&cats6[]=31&cats6[]=20&cats7[]=19&cats7[]=35&cats7[]=36&cats2[]=37&cats2[]=38&cats2[]=12&cats2[]=40&cats2[]=44&cats2[]=11&cats2[]=42&cats2[]=43&cats2[]=21&cats2[]=22&cats2[]=41&cats2[]=10&cats4[]=26&cats4[]=24&cats4[]=27&cats4[]=17&cats4[]=23&cats4[]=25&search=&searchin=title&incldead=1
- - path: browse.php
- inputs:
- $raw: "cats3[]=14&cats3[]=16&cats3[]=13&cats3[]=15&cats5[]=29&cats5[]=28&cats5[]=30&cats5[]=18&cats1[]=34&cats1[]=9&cats1[]=33&cats6[]=32&cats6[]=31&cats6[]=20&cats7[]=19&cats7[]=35&cats7[]=36&cats2[]=37&cats2[]=38&cats2[]=12&cats2[]=40&cats2[]=44&cats2[]=11&cats2[]=42&cats2[]=43&cats2[]=21&cats2[]=22&cats2[]=41&cats2[]=10&cats4[]=26&cats4[]=24&cats4[]=27&cats4[]=17&cats4[]=23&cats4[]=25"
- search: "{{ .Keywords }}"
- # title, descr, genre, all
- searchin: title
- # 0 active, 1 incldead, 2 onlydead
- incldead: 1
- only_free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
- sort: "{{ .Config.sort }}"
- type: "{{ .Config.type }}"
-
- keywordsfilters:
- - name: re_replace
- args: ["(\\w+)", "+$1"] # prepend + to each word
-
- rows:
- selector: table.table-bordered tr:has(a[href^="download.php?torrent="])
- filters:
- - name: andmatch
-
- fields:
- category:
- selector: a[href^="browse.php?cat="]
- attribute: href
- filters:
- - name: querystring
- args: cat
- title:
- selector: a[href^="details.php?id="]
- attribute: onmouseover
- filters:
- - name: regexp
- args: "Tip\\('(.+?)"
- download:
- selector: a[href^="download.php?torrent="]
- attribute: href
- details:
- selector: a[href^="details.php?id="]
- attribute: href
- files:
- selector: td:nth-child(5)
- date:
- selector: td:nth-child(7)
- # auto adjusted by site account profile
- filters:
- - name: dateparse
- args: "MMM d yyyy hh:mm tt"
- size:
- selector: td:nth-child(8)
- grabs:
- selector: td:nth-child(9)
- seeders:
- selector: td:nth-child(10)
- leechers:
- selector: td:nth-child(11)
- description:
- case:
- img[src="./pic/mod.gif"]: Verified
- "*": Unverified
- downloadvolumefactor:
- case:
- "a.info:contains(\"[FREE]\")": 0
- "a.info:contains(\"[SILVER]\")": 0.5
- "*": 1
- uploadvolumefactor:
- text: 1
- minimumratio:
- text: 1.0
- minimumseedtime:
- # 12 hours (as seconds = 12 x 60 x 60)
- text: 43200
-# U-232 V5