---
id: teamhd
name: TeamHD
description: "TeamHD is a RUSSIAN Private Torrent Tracker for HD MOVIES / TV"
language: ru-RU
type: private
encoding: UTF-8
links:
  - https://teamhd.org/

caps:
  categorymappings:
    - {id: 29, cat: Movies/HD, desc: "Movies Фильмы"}
    - {id: 25, cat: TV/Anime, desc: "Cartoons Мультфильмы"}
    - {id: 26, cat: Audio/Lossless, desc: "Hi-Res Audio"}
    - {id: 27, cat: Other, desc: "Demo Демо"}
    - {id: 28, cat: TV/Documentary, desc: "Documentary Документальное кино"}
    - {id: 30, cat: Audio/Video, desc: "Music Video Музыкальное видео"}
    - {id: 31, cat: TV/Sport, desc: "Sport Спорт"}
    - {id: 32, cat: TV/HD, desc: "TV Show ТВ Шоу"}
    - {id: 33, cat: TV/HD, desc: "Soaps Сериалы"}
    - {id: 34, cat: TV/HD, desc: "Other"}
    - {id: 35, cat: Movies, desc: "Content w/o subs Контент без перевода"}

  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: useragent
    type: text
    label: User-Agent
  - name: info_useragent
    type: info_useragent
  - name: stripcyrillic
    type: checkbox
    label: Strip Cyrillic Letters
    default: false
  - name: freeleech
    type: checkbox
    label: Search freeleech only
    default: false
  - name: info_activity
    type: info
    label: Account Inactivity
    default: "Inactive users are regularly deleted. If you haven’t downloaded or distributed anything, or haven’t visited the site for 90 days, then you are a random guest on our resource. The tracker needs active users who know exactly why they came here. That’s why we regularly conduct automatic inactivity sweeps. If you need to be away from the tracker for a long time (business trip, personal circumstances, etc.), use 'parking' your account."

login:
  # using cookie method because login page has embedded Google reCAPTCHA
  method: cookie
  inputs:
    cookie: "{{ .Config.cookie }}"
  test:
    path: index.php
    selector: a[href*="/logout.php"]

search:
  paths:
    - path: browse
  inputs:
    $raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
    # replace spaces with wildcard (percent symbol) as site's default search is exact string.
    search: "{{ re_replace .Keywords \"[\\s]+\" \"%\" }}"
    # 0 active, 1 incldead, 2 onlydead, 3 noseeders
    incldead: 1
    # 0 all, 1 gold, 2 silver, 3 normal
    free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"

  headers:
    User-Agent: ["{{ .Config.useragent }}"]

  keywordsfilters:
    # remove the year from the titles as the site chokes on them during search https://github.com/Jackett/Jackett/issues/4397#issuecomment-623148789
    - name: re_replace
      args: [" +(?:19|20)\\d{2} *$", ""]
    # if season only then S01 -> Season 1
    - name: re_replace
      args: ["(?i) S0(\\d{1})$", " Season $1"]
    # if season only then S10 -> Season 10
    - name: re_replace
      args: ["(?i) S(\\d{2})$", " Season $1"]

  rows:
    selector: table.browse > tbody > tr

  fields:
    download:
      selector: a[href^="download.php?id="]
      attribute: href
    title:
      selector: a[href^="/details/id"]
      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 }}"]
        # convert Season xx -> Sxx
        - name: re_replace
          args: ["(?i)Season (\\d{2})", "S$1"]
        # convert Season x -> S0x
        - name: re_replace
          args: ["(?i)Season (\\d{1})", "S0$1"]
        # remove []
        - name: re_replace
          args: ["[\\[|\\]]", ""]
    details:
      selector: a[href^="/details/id"]
      attribute: href
    category:
      selector: a[href*="/browse/cat"]
      attribute: href
      filters:
        - name: regexp
          args: (\d+)
    date:
      selector: td > div > small
      # auto adjusted by site account profile
      filters:
        - name: dateparse
          args: "dd-MM-yyyy HH:mm"
    seeders:
      selector: td:nth-child(4)
      filters:
        - name: split
          args: ["|", 0]
    leechers:
      selector: td:nth-child(4)
      filters:
        - name: split
          args: ["|", 1]
    grabs:
      selector: td:nth-child(5) strong
    size:
      selector: td:nth-child(5)
      remove: strong
    downloadvolumefactor:
      case:
        ":root:has(div.justify-content-center:contains(\"Включен фрилич до\"))": 0 # Global Freeleech event
        a[href^="/details/id"][style="color:#f2b101"]: 0
        a[href^="/details/id"][style="color:#828b8b"]: 0.5
        "*": 1
    uploadvolumefactor:
      text: 1
    minimumratio:
      text: 1.0
    description:
      selector: a[href^="/details/id"]
# engine n/a
