2023-09-23 17:02:55 +00:00
# torrent-indexer
2022-08-30 02:21:55 +00:00
2025-07-27 11:52:04 -03:00
[](https://discord.gg/7wqNywmpQW)
2023-09-23 17:02:55 +00:00
This is a simple torrent indexer that can be used to index torrents from HTML pages. It is written in Golang and uses Redis as a cache.
2022-08-30 02:21:55 +00:00
2023-10-01 20:27:44 +00:00
## Test it
2024-04-28 12:27:17 -03:00
Visit [https://torrent-indexer.darklyn.org/ ](https://torrent-indexer.darklyn.org/ ) to test it.
2023-10-01 20:27:44 +00:00
2023-09-23 17:02:55 +00:00
## Supported sites
2022-08-30 02:21:55 +00:00
2023-10-01 20:27:44 +00:00
- [comando-torrents ](https://comando.la/ )
2024-04-28 12:27:17 -03:00
- [bludv ](https://bludvfilmes.tv/ )
2024-11-18 18:54:30 -03:00
- [torrent-dos-filmes ](https://torrentdosfilmes.se/ )
2025-07-16 15:34:51 -03:00
- [starck-filmes ](https://www.starckfilmes.online/ )
- [comandohds ](https://comandohds.org/ )
2025-07-22 14:57:05 -03:00
- [rede-torrent ](https://redetorrent.com/ )
2024-04-28 12:27:17 -03:00
## Deploy
If you have Docker + docker-compose installed, you can deploy it using the following command:
```bash
curl -s https://raw.githubusercontent.com/felipemarinho97/torrent-indexer/main/docker-compose.yml > docker-compose.yml
docker-compose up -d
```
The server will be available at [http://localhost:8080/ ](http://localhost:8080/ ).
2024-12-11 16:01:09 -03:00
## Configuration
You can configure the server using the following environment variables:
- `PORT` : (optional) The port that the server will listen to. Default: `7006`
- `FLARESOLVERR_ADDRESS` : (optional) The address of the FlareSolverr instance. Default: `N/A`
2024-12-13 11:54:55 -03:00
- `MEILISEARCH_ADDRESS` : (optional) The address of the MeiliSearch instance. Default: `N/A`
- `MEILISEARCH_KEY` : (optional) The API key of the MeiliSearch instance. Default: `N/A`
2024-12-11 16:01:09 -03:00
- `REDIS_HOST` : (optional) The address of the Redis instance. Default: `localhost`
- `SHORT_LIVED_CACHE_EXPIRATION` (optional) The expiration time of the short-lived cache in duration format. Default: `30m`
- This cache is used to cache homepage or search results.
- Example: `30m` , `1h` , `1h30m` , `1h30m30s`
- `LONG_LIVED_CACHE_EXPIRATION` (optional) The expiration time of the long-lived cache in duration format. Default: `7d`
- This cache is used to store the torrent webpages (posts). You can set it to a higher value because the torrent pages are not updated frequently.
2024-04-28 12:27:17 -03:00
## Integrating with Jackett
You can integrate this indexer with Jackett by adding a new Torznab custom indexer. Here is an example of how to do it for the `bludv` indexer:
```yaml
---
id: bludv_indexer
name: BluDV Indexer
description: "BluDV - Custom indexer on from torrent-indexer"
language: pt-BR
type: public
encoding: UTF-8
links:
- http://localhost:8080/
caps:
categorymappings:
- { id: Movie, cat: Movies, desc: "Movies" }
- { id: TV, cat: TV, desc: "TV" }
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
allowrawsearch: true
settings: []
search:
paths:
- path: "indexers/bludv?filter_results=true& q={{ .Keywords }}"
response:
type: json
keywordsfilters:
- name: tolower
rows:
selector: $.results
count:
selector: $.count
fields:
_id:
selector: title
download:
selector: magnet_link
title:
selector: title
description:
selector: original_title
details:
selector: details
infohash:
selector: info_hash
date:
selector: date
size:
selector: size
seeders:
selector: seed_count
leechers:
selector: leech_count
imdb:
selector: imdb
category_is_tv_show:
selector: title
filters:
- name: regexp
args: "\\b(S\\d+(?:E\\d+)?)\\b"
category:
text: "{{ if .Result.category_is_tv_show }}TV{{ else }}Movie{{ end }}"
# json engine n/a
```
2025-07-16 15:23:50 -03:00
## Integrating with Prowlarr
You can integrate this indexer with Prowlarr by adding a custom definition. See [Adding a custom YML definition ](https://wiki.servarr.com/prowlarr/indexers#adding-a-custom-yml-definition ).
```yaml
---
id: torrent-indexer
name: Torrent Indexer
description: "Indexing Brazilian Torrent websites into structured data. github.com/felipemarinho97/torrent-indexer"
language: pt-BR
type: public
encoding: UTF-8
links:
- http://localhost:8080/
caps:
categories:
Movies: Movies
TV: TV
modes:
search: [q]
tv-search: [q, season]
movie-search: [q]
settings:
- name: indexer
type: select
label: Indexer
default: bludv
options:
bludv: BLUDV
comando_torrents: Comando Torrents
torrent-dos-filmes: Torrent dos Filmes
2025-07-23 13:02:51 -03:00
comandohds: Comando HDs
starck-filmes: Starck Filmes
rede_torrent: Rede Torrent
2025-07-16 15:23:50 -03:00
search:
paths:
- path: "/indexers/{{ .Config.indexer }}"
response:
type: json
inputs:
filter_results: "true"
q: "{{ .Keywords }}"
keywordsfilters:
- name: tolower
- name: re_replace
args: ["(?i)(S0)(\\d{1,2})$", "temporada $2"]
- name: re_replace
args: ["(?i)(S)(\\d{1,3})$", "temporada $2"]
rows:
selector: $.results
count:
selector: $.count
fields:
download:
selector: magnet_link
title:
selector: title
description:
selector: original_title
details:
selector: details
infohash:
selector: info_hash
date:
selector: date
size:
selector: size
seeders:
selector: seed_count
leechers:
selector: leech_count
imdb:
selector: imdb
category_is_tv_show:
selector: title
filters:
- name: regexp
args: "\\b(S\\d+(?:E\\d+)?)\\b"
category:
text: "{{ if .Result.category_is_tv_show }}TV{{ else }}Movies{{ end }}"
```
2024-04-28 12:27:17 -03:00
# Warning
The instance running at [https://torrent-indexer.darklyn.org/ ](https://torrent-indexer.darklyn.org/ ) is my personal instance and it is not guaranteed to be up all the time. Also, for better availability, I recommend deploying your own instance because the Cloudflare protection may block requests from indexed sites if too many requests are made in a short period of time from the same IP.
2025-07-16 15:34:51 -03:00
If I notice that the instance is being used a lot, I may block requests from Jackett to avoid overloading the server without prior notice.