diff --git a/README.md b/README.md
index 1ff270f04..5ac1e8919 100644
--- a/README.md
+++ b/README.md
@@ -216,6 +216,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* Sharewood
* SkTorrent
* SkTorrent-org
+ * themixingbowl (TMB)
* Toloka.to
* Torrent-Explosiv
* Torrents-Local
diff --git a/src/Jackett.Common/Definitions/themixingbowl.yml b/src/Jackett.Common/Definitions/themixingbowl.yml
new file mode 100644
index 000000000..0c7844c8c
--- /dev/null
+++ b/src/Jackett.Common/Definitions/themixingbowl.yml
@@ -0,0 +1,144 @@
+---
+id: themixingbowl
+name: themixingbowl
+description: "themixingbowl (TMB) is a Semi-Private Torrent Tracker for DJ Music mixes"
+language: en-us
+type: semi-private
+encoding: UTF-8
+links:
+ - https://tmb.dj/
+ - https://themixingbowl.org/
+
+caps:
+ categorymappings:
+ - {id: 1, cat: Audio, desc: Music}
+
+ modes:
+ search: [q]
+ music-search: [q, artist]
+
+settings:
+ - name: info_nojs
+ type: info
+ label: JavaScript
+ default: This indexer requires that the web site not use JS when searching. Access your account Preferences on the web site and change the set JavaScript level: setting to No JavaScript.
+ - 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: 11
+ options:
+ 11: created
+ 8: seeders
+ 4: size
+ 3: title
+ - name: type
+ type: select
+ label: Order requested from site
+ default: d
+ options:
+ d: desc
+ a: asc
+ - name: info_tpp
+ type: info
+ label: Results Per Page
+ default: For best results, change the Torrents per page: setting to 50 on your account preferences.
+
+login:
+ path: login/
+ method: post
+ inputs:
+ loginform: show
+ page_history: disable
+ page_js_enabled: false
+ redirect: "{{ .Config.sitelink }}"
+ username: "{{ .Config.username }}"
+ password: "{{ .Config.password }}"
+ keeploggedin: on
+ restricttoip: ""
+ ok: Login
+ error:
+ - selector: div:contains("do not match")
+ test:
+ path: /
+ selector: a[href="/logout/"]
+
+search:
+ paths:
+ # https://themixingbowl.org/torrent/advancedsearch/?search=tmb&go=Search&freesearch=on&results-order1=11.d&results-page=1
+ - path: torrent/advancedsearch/
+ inputs:
+ search: "{{ .Keywords }}"
+ go: Search
+ artistsearch: "{{ if .Query.Artist }}{{ .Query.Artist }}{{ else }}{{ end }}"
+ freesearch: "{{ if .Config.freeleech }}on{{ else }}{{ end }}"
+ results-order1: "{{ .Config.sort }}.{{ .Config.type }}"
+ results-page: 1
+ tagsearch: "{{ range .Categories }}{{.}},{{end}}"
+
+ rows:
+ selector: table.torrenttable > tbody > tr:has(a[href^="/torrent/download/"])
+
+ fields:
+ category:
+ text: 1
+ title:
+ selector: td.name a
+ details:
+ selector: td:nth-child(16) a
+ attribute: href
+ filters:
+ - name: append
+ args: "/details/"
+ download:
+ selector: a[href^="/torrent/download/"]
+ attribute: href
+ size:
+ selector: td:nth-child(5)
+ artist:
+ selector: span.artist
+ optional: true
+ tag:
+ selector: span.tag
+ optional: true
+ codec:
+ selector: td:nth-child(6)
+ optional: true
+ bit:
+ selector: td:nth-child(7)
+ optional: true
+ description:
+ text: "Artist=[{{ .Result.artist }}] , Tags={{ .Result.tag }} , Codec=[{{ .Result.codec }}] , BitRate=[{{ .Result.bit }}]"
+ grabs:
+ selector: td:nth-child(8)
+ seeders:
+ selector: td:nth-child(9)
+ leechers:
+ selector: td:nth-child(10)
+ date:
+ selector: td:nth-child(12)
+ filters:
+ - name: replace
+ args: ["at", ""]
+ - name: append
+ args: " +00:00" # auto adjusted by site account profile
+ - name: dateparse
+ args: "2 Jan 2006 15:04 -07:00"
+ downloadvolumefactor:
+ case:
+ "img[src$=\"freeleech.png\"]": 0
+ "*": 1
+ uploadvolumefactor:
+ text: 1
+ minimumratio:
+ text: 1.0
+# engine n/a