Visão Geral Técnica
Torrentinim é um motor de busca de torrents auto-hospedado focado exclusivamente em API, projetado para operar com um perfil de memória extremamente reduzido. A aplicação oferece compatibilidade nativa com Sonarr e Radarr, funcionando de forma idêntica em Linux, macOS e Windows. Esta documentação detalha o processo de implantação, configuração do ambiente, utilização dos endpoints REST e a integração com ferramentas de automação de mídia.
Arquitetura e Vantagens
A solução se destaca pela eficiência de recursos e desenho modular:
- Minimalismo: O binário compilado ocupa cerca de 700KB, com uma média de consumo de RAM de apenas 24MB durante operações padrão.
- Foco em Back end: A ausência de interface web nativa prioriza a integração via API, permitindo que o desenvolvedor construa seu próprio frontend ou conecte-o a sistemas existentes.
- Multiplataforma: Compilado nativamente para os principais sistemas operacionais sem dependências externas complexas.
- Coleta Automatizada: Possui mecanismos internos para crawling de diversos indexadores públicos.
Indexadores Suportados: O sistema atualmente possui suporte integrado para EZTV, 1337x, Nyaa, RARBG, TorrentDownloads.me e YTS.
Implantação e Instalação
Método A: Binário Preparado
Para ambientes de produção, o uso do executável pré-compilado é o mais indicado.
- Adquira o binário correspondente à sua arquitetura na página de releases do projeto.
- Conceda permissões de execução ao arquivo:
chmod +x torrentinim-app
- Para a primeira execução, é necessário inicializar o banco de dados. Execute o seguinte comando para garantir um estado limpo:
TORRENTINIM_INIT_DB=true ./torrentinim-app
- Após a inicialização, inicie o serviço normalmente:
./torrentinim-app
Método B: Compilação via Código-Fonte
Para personalizações ou desenvolvimento, compile a ferramenta localmente.
git clone https://github.com/torrentinim/torrentinim.git
cd torrentinim
make deps
make run
Para gerar o binário de produção:
make build
Configuração de Ambiente
A parametrização do serviço é realizada através de variáveis de ambiente, oferecendo flexibilidade na orquestração de containers ou scripts de inicialização.
Exemplo de configuração de porta e CORS:
Para alterar a porta padrão e definir origens permitidas para requisições cross-origin:
export APP_PORT=8080
export ALLOWED_ORIGINS="https://meudominio.media,https://app.local"
./torrentinim-app
Utilização da API de Busca
O Torrentinim expõe uma interface REST simples para consultas. O endpoint principal aceita parâmetros de string de consulta e paginação.
Formato da Requisição:
GET http://127.0.0.1:8080/api/search?q=termos&pg=1
Exemplo prático buscando por um arquivo específico:
GET http://127.0.0.1:8080/api/search?q=ubuntu+server&pg=1
Estrutura da Resposta:
A API retorna um objeto JSON contendo metadados essenciais, incluindo nome do torrent, tamanho, contagem de seeds/peers e o link magnético (magnet URI) necessário para o download.
Integração com Sonarr e Radarr
A compatibilidade com as suítes PVR (Personal Video Recorder) como Sonarr e Radarr permite a busca automatizada de mídia. Embora a integração nativa esteja em evolução, é possível configurá-las manualmente utilizando a opção de "Indexador de Torrent Genérico" ou "Custom Indexer".
Passos para Configuração:
- Na interface do Sonarr ou Radarr, adicione um novo indexador do tipo Torznab ou Custom.
- Configure a URL base apontadno para a instância do Torrentinim. A estrutura da URL deve seguir o padrão de substituição de variáveis da ferramenta:
http://localhost:8080/api/search?q={{Query}}&pg=1
- Configure o parser de resposta para mapear os campos JSON retornados pelo Torrentinim para os campos esperados pelo Sonarr/Radarr.
Desenvolvimento e Estrutura do Código
Contribuidores interessados em estender as funcionalidades devem possuir o compilador Nim versão 1.2.0 ou superior. O repositório é organizado modularmente para facilitar a manutenção:
- src/crawlers/: Contém a lógica de extração de dados para cada site suportado.
- src/torrents/: Módulos centrais responsáveis pelo processamento e armazenamento dos metadados.
- src/helpers/: Funções utilitárias e compartilhadas entre os componentes.
O projeto adota práticas de respeito aos indexadores, implementando limitadores de taxa e estratégias de crawl otimizadas para evitar sobrecarga nos servidores de origem.