diff --git a/README.md b/README.md
index b38597c9d..85901393d 100644
--- a/README.md
+++ b/README.md
@@ -350,6 +350,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* Greek Team
* HaiDan
* Haitang
+ * HappyFappy
* HD Dolby
* HD-Bits.com
* HD-Forever (HDF)
diff --git a/src/Jackett.Common/Definitions/happyfappy.yml b/src/Jackett.Common/Definitions/happyfappy.yml
new file mode 100644
index 000000000..68ad60c22
--- /dev/null
+++ b/src/Jackett.Common/Definitions/happyfappy.yml
@@ -0,0 +1,136 @@
+---
+id: happyfappy
+name: HappyFappy
+description: "HappyFappy is a Private Torrent Tracker for 3X"
+language: en
+type: private
+encoding: UTF-8
+links:
+ - https://www.happyfappy.org/
+
+caps:
+ categorymappings:
+ - {id: 1, cat: XXX, desc: "PRON"}
+
+ modes:
+ search: [q]
+ tv-search: [q]
+ movie-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_tpp
+ type: info
+ label: Results Per Page
+ default: For best results, change the Torrents per page: setting to 100 on your account profile.
+ - 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
+
+login:
+ path: login
+ method: form
+ inputs:
+ username: "{{ .Config.username }}"
+ password: "{{ .Config.password }}"
+ cinfo: "2550|1350|24|-60"
+ iplocked: 0
+ keeploggedin: 1
+ error:
+ - selector: div.error
+ test:
+ path: /
+ selector: "#nav_userinfo"
+
+search:
+ paths:
+ - path: torrents.php
+ inputs:
+ $raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
+ searchtext: ""
+ title: "{{ .Keywords }}"
+ order_by: "{{ .Config.sort }}"
+ order_way: "{{ .Config.type }}"
+ action: advanced
+ filter_freeleech: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
+ filelist: ""
+ taglist: ""
+
+ rows:
+ selector: table#torrent_table > tbody > tr[class^="torrent row"]
+
+ fields:
+ category:
+ text: 1
+ title:
+ selector: a[href^="/torrents.php?id="]
+ details:
+ selector: a[href^="/torrents.php?id="]
+ attribute: href
+ download:
+ selector: a[href^="torrents.php?action=download&id="]
+ attribute: href
+ description:
+ optional: true
+ selector: div.tags
+ poster:
+ selector: td:nth-child(2) > script
+ filters:
+ - name: regexp
+ args: "src=\\\\\"(.*?)\\\\\""
+ - name: re_replace
+ args: ["\\\\(.)", "$1"]
+ - name: replace
+ args: ["/static/common/noartwork/noimage.png", ""]
+ files:
+ selector: td:nth-child(3)
+ date:
+ selector: td:nth-child(5) > span
+ attribute: title
+ filters:
+ - name: append
+ args: " +00:00" # auto adjusted by site account profile
+ - name: dateparse
+ args: "Jan 02 2006, 15:04 -07:00"
+ size:
+ selector: td:nth-child(6)
+ grabs:
+ selector: td:nth-child(7)
+ seeders:
+ selector: td:nth-child(8)
+ leechers:
+ selector: td:nth-child(9)
+ downloadvolumefactor:
+ case:
+ span.icon[title*="Freeleech"]: 0
+ "img[alt=\"Freeleech\"]": 0
+ "*": 1
+ uploadvolumefactor:
+ text: 1
+ minimumratio:
+ text: 0.5
+ minimumseedtime:
+ # 3 days (as seconds = 3 x 24 x 60 x 60)
+ text: 259200
+# Luminance