--- id: animetosho-xyz name: Anime Tosho description: "Anime Tosho is a Semi-Private Torrent Tracker for ANIME" language: en-US type: semi-private encoding: UTF-8 links: - https://animetosho.xyz/ caps: categorymappings: - {id: Anime, cat: TV/Anime, desc: "Anime"} # all results are currently returned as both 5070 & 2020 # # from https://animetosho.xyz/api/torznab?apikey=YOUR-API-KEY&t=caps # - {id: 5070, cat: TV/Anime, desc: "Anime (TV)"} # - {id: 2020, cat: Movies/Other, desc: "Anime (Movies)"} modes: search: [q] tv-search: [q, season, ep] movie-search: [q] settings: - name: apikey type: text label: API Key - name: info_key type: info label: About your API key default: "You can find or generate a new API Key by accessing the Anime Tosho profile page." - name: sonarr_compatibility type: checkbox label: Improve Sonarr compatibility by trying to add Season information into Release Titles default: false - name: strip_s01 type: checkbox label: Remove first season keywords (S1/S01/Season 1), as some results do not include this for first/single season releases default: false - name: radarr_compatibility type: checkbox label: Improve Radarr compatibility by removing year information from keywords and adding it to Release Titles default: false login: # returns "401 Unauthorized, check your credentials" if apikey is invalid path: api/torznab method: get inputs: apikey: "{{ .Config.apikey }}" t: search limit: 1 search: paths: - path: api/torznab response: type: xml inputs: apikey: "{{ .Config.apikey }}" t: "{{ .Query.Type }}" q: "{{ .Keywords }}" # all results are currently returned as both 5070 & 2020 # cat: "{{ join .Categories \",\" }}" season: "{{ .Query.Season }}" ep: "{{ .Query.Ep }}" limit: 100 keywordsfilters: - name: re_replace args: [" *\\b((?:19|20)\\d{2})\\b", "{{ if .Config.radarr_compatibility }}{{ else }} $1{{ end }}"] - name: re_replace args: ["(?i) *\\b(S(?:0|eason *)?1)\\b", "{{ if .Config.strip_s01 }}{{ else }} $1{{ end }}"] rows: selector: rss > channel > item fields: category: text: Anime title_keyword_year: text: "{{ .Query.Keywords }}" filters: - name: regexp args: "\\b((19|20)\\d{2})\\b" title_default: selector: title filters: - name: re_replace args: ["^(\\[.+?\\] ?)?(\\[.+?\\] ?)?(.+?)(\\[)", "$1$2$3{{ if and (.Config.radarr_compatibility) (.Result.title_keyword_year) }} {{ .Result.title_keyword_year }} $4{{ else }}$4{{ end }}"] title_has_season: text: "{{ .Result.title_default }}" filters: - name: regexp args: "(?i)(S\\d{1,3}([Ev]\\d+)?)" - name: append args: "NULL" title_has_episode: text: "{{ .Result.title_default }}" filters: - name: regexp args: "\\b(.+? - ?)(\\d+([-v]\\d+)?) ([\\[\\(])\\b" - name: append args: "NULL" title_has_movie_ova: text: "{{ .Result.title_default }}" filters: - name: regexp args: "(?i)(? Hotel.del.Luna.2019.S01.1080p... - name: re_replace args: ["^(.+?)([\\. ])((?:19|20)\\d{2})([\\. ])(.+)$", "{{ if and (eq .Result.title_has_season \"NULL\") (eq .Result.title_has_episode \"NULL\") }}$1$2$3$4S01$4$5{{ else }}$1$2$3$4$5{{ end }}"] # Insert S01 before resolution for Live Action titles without year or season info # e.g. Hotel Del Luna 720p HDTV... -> Hotel Del Luna S01 720p HDTV... - name: re_replace args: ["^(?!.*(?:19|20)\\d{2})(.+?)([\\. ])((?:480|720|1080|2160)[pi])(.*)$", "{{ if and (eq .Result.title_has_season \"NULL\") (eq .Result.title_has_episode \"NULL\") }}$1$2S01$2$3$4{{ else }}$1$2$3$4{{ end }}"] title: text: "{{ if .Config.sonarr_compatibility }}{{ .Result.title_live_action }}{{ else }}{{ .Result.title_default }}{{ end }}" details: selector: link download: selector: enclosure attribute: url infohash: selector: "[name=infohash]" attribute: value date: # Sun, 18 Jan 2026 04:05:41 +0000 selector: pubDate filters: - name: dateparse args: "ddd, dd MMM yyyy HH:mm:ss zzz" size: selector: "[name=size]" attribute: value seeders: selector: "[name=seeders]" attribute: value leechers: selector: "[name=leechers]" attribute: value downloadvolumefactor: text: 0 uploadvolumefactor: text: 1 description: selector: title # torznab xml