Experiência Netflix no seu Home Server Stack completa: Jellyfin + Radarr + Sonarr + Bazarr + Prowlarr + Seerr + qBittorrent (VueTorrent) + SABnzbd (Usenet) + Gluetun (WireGuard VPN) + FlareSolverr
Hardware: DATEN DC5A-U — AMD Ryzen 5 Pro 5650GE (Radeon Vega 7 iGPU)
Sistema: Debian 13.5.0 + CasaOS + Dockge
DNS Local: http://homelab.local
Cliente Final: Smart TV Samsung (TizenOS)
- Visão Geral da Arquitetura
- Preparação do Sistema
- Deploy no Dockge
- Configuração dos Aplicativos
- Perfis de Qualidade (Radarr/Sonarr)
- Jellyfin na Samsung TV (TizenOS)
- Fluxo Completo — Da Requisição ao Play
- Troubleshooting
- Referências
┌─────────────────────────────────────────────────────────────────┐
│ FLUXO DE MÍDIA │
│ │
│ 👤 Usuário (TV/Mobile/PC) │
│ │ │
│ ▼ │
│ ┌─────────┐ requisição ┌────────┐ ┌────────┐ │
│ │ Seerr │ ──────────────▶ │ Radarr │ │ Sonarr │ │
│ │ :5055 │ │ :7878 │ │ :8989 │ │
│ └─────────┘ └───┬────┘ └───┬────┘ │
│ │ │ │
│ ┌────▼────────────▼───┐ │
│ │ Prowlarr │ │
│ │ :9696 │ │
│ └────────┬────────────┘ │
│ │ busca indexadores │
│ ▼ │
│ ┌─────────────────┐ ┌─────────────┐ │
│ │ qBittorrent │ │ SABnzbd │ │
│ │ :8080 │ │ :8085 │ │
│ └────────┬────────┘ └──────┬──────┘ │
│ │ torrent usenet│ │
│ ▼ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ /data (MESMO FILESYSTEM) │ │
│ │ /data/torrents/movies/ ◄── qBittorrent download │ │
│ │ /data/torrents/tv/ ◄── qBittorrent download │ │
│ │ /data/usenet/movies/ ◄── SABnzbd download │ │
│ │ /data/usenet/tv/ ◄── SABnzbd download │ │
│ │ │ hardlink (instantâneo, sem duplicação) │ │
│ │ ▼ │ │
│ │ /data/media/movies/ ◄── Radarr organiza aqui │ │
│ │ /data/media/tv/ ◄── Sonarr organiza aqui │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ │
│ │ Bazarr │ │ Jellyfin │ ◄── 📺 TV Samsung │
│ │ :6767 │ │ :8096 │ │
│ └──────────┘ └──────────┘ │
│ (legendas PT-BR) (streaming) │
└─────────────────────────────────────────────────────────────────┘
Quando o Radarr/Sonarr "move" um arquivo do diretório de torrents para o de mídia, ele na verdade cria um hardlink: uma segunda referência ao mesmo arquivo no disco. Resultado:
- ⚡ Instantâneo — não copia bytes, é uma operação de filesystem
- 💾 Zero espaço extra — o arquivo ocupa espaço apenas uma vez
- 🌱 Seeding continua — o qBittorrent continua semeando o arquivo original
Requisito:
/data/torrentse/data/mediadevem estar no mesmo filesystem/partição.
# Verificar Docker instalado
docker --version
docker compose version
# Verificar seu UID e GID (deve ser 1000 normalmente)
id
# Verificar se o dispositivo de GPU AMD está disponível
ls -la /dev/dri/
# Deve mostrar: card0, renderD128
# Verificar grupo 'render' e seu GID
getent group render
# Saída esperada: render:x:109: (o número pode variar)
⚠️ IMPORTANTE: Se o GID do gruporenderfor diferente de109, atualize o valor degroup_addno serviçojellyfindodocker-compose.yml.
# Permite que o Docker acesse a GPU AMD para transcoding
sudo usermod -aG render $USER
sudo usermod -aG video $USER
# Reiniciar para aplicar
sudo reboot# ╔══════════════════════════════════════════════════════════╗
# ║ ATENÇÃO: Substitua /srv pelo caminho do seu disco! ║
# ║ Exemplo: /mnt/hdd, /media/storage, etc. ║
# ╚══════════════════════════════════════════════════════════╝
export DATA_ROOT="/srv"
# --- Diretórios de dados (mídia, torrents e usenet) ---
sudo mkdir -p ${DATA_ROOT}/data/torrents/movies
sudo mkdir -p ${DATA_ROOT}/data/torrents/tv
sudo mkdir -p ${DATA_ROOT}/data/usenet/movies
sudo mkdir -p ${DATA_ROOT}/data/usenet/tv
sudo mkdir -p ${DATA_ROOT}/data/media/movies
sudo mkdir -p ${DATA_ROOT}/data/media/tv
# --- Diretórios de configuração dos containers ---
sudo mkdir -p ${DATA_ROOT}/configs/jellyfin/cache
sudo mkdir -p ${DATA_ROOT}/configs/radarr
sudo mkdir -p ${DATA_ROOT}/configs/sonarr
sudo mkdir -p ${DATA_ROOT}/configs/bazarr
sudo mkdir -p ${DATA_ROOT}/configs/prowlarr
sudo mkdir -p ${DATA_ROOT}/configs/seerr
sudo mkdir -p ${DATA_ROOT}/configs/sabnzbd
sudo mkdir -p ${DATA_ROOT}/configs/qbittorrent
# --- Ajustar permissões (UID/GID 1000) ---
sudo chown -R 1000:1000 ${DATA_ROOT}/data
sudo chown -R 1000:1000 ${DATA_ROOT}/configs
# --- Verificar estrutura ---
tree -L 3 ${DATA_ROOT}Resultado esperado:
/srv/
├── configs/
│ ├── bazarr/
│ ├── jellyfin/
│ │ └── cache/
│ ├── prowlarr/
│ ├── qbittorrent/
│ ├── radarr/
│ ├── sabnzbd/
│ ├── seerr/
│ └── sonarr/
└── data/
├── media/
│ ├── movies/
│ └── tv/
├── torrents/
│ ├── movies/
│ └── tv/
└── usenet/
├── movies/
└── tv/
Se você tem um segundo disco (SSD, HDD) e quer expandir o armazenamento de forma transparente, use o MergerFS para unificar ambos em um único ponto de montagem.
💡 Disco único? Se você só tem um disco, pule para a seção 2.5. Basta configurar
MERGED_DATA=/srv/datano.env.
sudo apt update && sudo apt install -y mergerfs# Substitua /mnt/ssd_secondary pelo ponto de montagem do seu segundo disco
export SSD2="/mnt/ssd_secondary"
sudo mkdir -p ${SSD2}/data/torrents/movies
sudo mkdir -p ${SSD2}/data/torrents/tv
sudo mkdir -p ${SSD2}/data/usenet/movies
sudo mkdir -p ${SSD2}/data/usenet/tv
sudo mkdir -p ${SSD2}/data/media/movies
sudo mkdir -p ${SSD2}/data/media/tv
sudo chown -R 1000:1000 ${SSD2}/datasudo mkdir -p /mnt/merged/datasudo mergerfs \
-o defaults,allow_other,use_ino,moveonenospc=true,category.create=mfs,cache.files=partial,dropcacheonclose=true,minfreespace=10G \
/srv/data:/mnt/ssd_secondary/data \
/mnt/merged/data| Flag | Função |
|---|---|
category.create=mfs |
Novos arquivos vão para o disco com mais espaço livre |
moveonenospc=true |
Se um disco encher durante escrita, move automaticamente |
minfreespace=10G |
Considera disco "cheio" quando restar menos de 10GB |
allow_other |
Permite que o Docker acesse o mount |
use_ino |
Preserva inodes originais (necessário para hardlinks) |
# Ver filmes existentes (devem aparecer os do SSD primário)
ls /mnt/merged/data/media/movies/
# Ver espaço combinado
df -h /mnt/merged/data/echo '/srv/data:/mnt/ssd_secondary/data /mnt/merged/data fuse.mergerfs defaults,allow_other,use_ino,moveonenospc=true,category.create=mfs,cache.files=partial,dropcacheonclose=true,minfreespace=10G 0 0' | sudo tee -a /etc/fstab
# Testar se o fstab está correto
sudo umount /mnt/merged/data
sudo mount -a
ls /mnt/merged/data/media/movies/ # Deve continuar mostrando os filmes
⚠️ Sobre hardlinks entre discos: Hardlinks só funcionam dentro do mesmo disco físico. Se o download e a mídia caírem em discos diferentes, o Radarr/Sonarr fará uma cópia completa ao invés de hardlink. Na prática, a políticamfstende a manter ambos no mesmo disco, minimizando esse cenário.
# Copiar o template e editar
cp .env.example .env
nano .envConteúdo do .env:
DATA_ROOT=/srv
MERGED_DATA=/mnt/merged/data
PUID=1000
PGID=1000
TZ=America/Sao_PauloSe usar disco único (sem MergerFS), configure:
MERGED_DATA=/srv/data
- Acesse o Dockge em
http://homelab.local:5001 - Clique em "+ Compose" (botão no canto superior)
- Dê um nome à stack:
mediaserver - Cole o conteúdo inteiro do arquivo
docker-compose.yml - Clique na aba "Env" e adicione as variáveis:
DATA_ROOT=/srv PUID=1000 PGID=1000 TZ=America/Sao_Paulo - Clique em "Deploy"
- Aguarde todos os containers ficarem verdes (✅)
# Navegar até o diretório das stacks do Dockge
cd /opt/stacks/mediaserver
# Copiar os arquivos docker-compose.yml e .env para este diretório
# (ou criar um link simbólico)
# Subir toda a stack
docker compose up -d
# Verificar status
docker compose ps# Todos os containers devem estar "Up" ou "healthy"
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"Saída esperada:
NAMES STATUS PORTS
jellyfin Up 2 minutes 0.0.0.0:8096->8096/tcp
radarr Up 2 minutes 0.0.0.0:7878->7878/tcp
sonarr Up 2 minutes 0.0.0.0:8989->8989/tcp
bazarr Up 2 minutes 0.0.0.0:6767->6767/tcp
prowlarr Up 2 minutes 0.0.0.0:9696->9696/tcp
seerr Up 2 minutes (healthy) 0.0.0.0:5055->5055/tcp
gluetun Up 2 minutes (healthy) 0.0.0.0:8080->8080/tcp, 0.0.0.0:8085->8085/tcp, ...
qbittorrent Up 2 minutes
sabnzbd Up 2 minutes
flaresolverr Up 2 minutes 0.0.0.0:8191->8191/tcp
| Serviço | URL | Função |
|---|---|---|
| Jellyfin | http://homelab.local:8096 |
Assistir filmes/séries |
| Radarr | http://homelab.local:7878 |
Gerenciar filmes |
| Sonarr | http://homelab.local:8989 |
Gerenciar séries |
| Bazarr | http://homelab.local:6767 |
Gerenciar legendas |
| Prowlarr | http://homelab.local:9696 |
Gerenciar indexadores |
| Seerr | http://homelab.local:5055 |
Solicitar filmes/séries |
| qBittorrent | http://homelab.local:8080 |
Downloads torrent (VueTorrent) |
| SABnzbd | http://homelab.local:8085 |
Downloads Usenet |
| Gluetun | — (sem WebUI) | VPN WireGuard + Kill Switch |
| FlareSolverr | http://homelab.local:8191 |
Bypass Cloudflare (Prowlarr) |
| Dockge | http://homelab.local:5001 |
Gerenciar containers |
| CasaOS | http://homelab.local |
Painel do sistema |
ORDEM OBRIGATÓRIA de configuração:
1. Prowlarr → 2. Gluetun (VPN) + qBittorrent + SABnzbd → 3. Radarr → 4. Sonarr → 5. Bazarr → 6. Jellyfin → 7. SeerrCada aplicativo depende do anterior estar configurado.
URL: http://homelab.local:9696
O Prowlarr centraliza todos os indexadores (sites de torrent) e os distribui automaticamente para o Radarr e Sonarr. É o primeiro a ser configurado.
- Acesse
http://homelab.local:9696 - Crie um usuário e senha de autenticação
- Vá em Settings → Indexers (barra lateral)
- Em FlareSolverr no topo da página, configure:
- FlareSolverr Host:
http://flaresolverr:8191
- FlareSolverr Host:
- Clique em Test → Save
💡 O que é o FlareSolverr? Muitos indexadores (como o RuTracker.org) usam proteção Cloudflare que bloqueia requisições automatizadas. O FlareSolverr resolve esses captchas/desafios usando um navegador headless, permitindo que o Prowlarr acesse esses sites normalmente.
- Vá em Indexers → Add Indexer
- Procure e adicione indexadores de sua preferência
- Para indexadores com Cloudflare (como RuTracker):
- Ao adicionar, marque a opção que referencia o FlareSolverr como proxy
- O campo aparecerá automaticamente se o FlareSolverr estiver configurado
- Para cada indexador, teste a conexão clicando em Test antes de salvar
- Priorize indexadores que tenham conteúdo em português brasileiro e releases de alta qualidade
💡 Dica: Adicione pelo menos 3-5 indexadores para ter redundância. O RuTracker é excelente para conteúdo de alta qualidade (Remux, FLAC, etc.).
A stack inclui o serviço prowlarr-indexers-sync que sincroniza automaticamente indexadores customizados do repositório dreulavelle/Prowlarr-Indexers (inclui Torrentio e outros).
Como funciona:
- Na primeira inicialização, o serviço clona o repositório e copia as definições para o Prowlarr
- A cada 6 horas, verifica se há atualizações no repositório
- Se houver novos indexadores, copia e reinicia o Prowlarr automaticamente
Após o sync, para ativar os novos indexadores:
- Vá em Indexers → Add Indexer
- Procure por Torrentio (ou outros que apareceram após o sync)
- Configure e salve normalmente
Para ver os logs do sync:
docker logs prowlarr-indexers-sync --tail 30- Vá em Settings → General
- Copie a API Key — você vai precisar dela para conectar o Radarr e o Sonarr
URL qBittorrent: http://homelab.local:8080 (interface VueTorrent)
🔒 Arquitetura VPN: O qBittorrent roda dentro da rede do Gluetun. Todo o tráfego de download passa por um túnel WireGuard criptografado. Se a VPN cair, o qBittorrent perde acesso à internet automaticamente (kill switch nativo).
Antes de acessar o qBittorrent, a VPN precisa estar funcionando. Escolha seu provedor abaixo:
- Acesse o Config Generator do AirVPN:
- Login em airvpn.org → Client Area → Config Generator
- Configure o gerador:
- Protocols: selecione WireGuard
- Server: escolha um servidor (ex: um na Holanda ou Suíça para melhor velocidade)
- Port: anote a porta (ex:
1637)
- Clique em Generate e baixe o arquivo
.conf - Abra o arquivo
.confe extraia as seguintes informações:[Interface] PrivateKey = SUA_CHAVE_PRIVADA_AQUI # → WIREGUARD_PRIVATE_KEY Address = 10.128.x.x/32 # → WIREGUARD_ADDRESSES [Peer] PresharedKey = SUA_PRESHARED_KEY_AQUI # → WIREGUARD_PRESHARED_KEY
- Edite o arquivo
.envno servidor:VPN_PROVIDER=airvpn WIREGUARD_PRIVATE_KEY=SUA_CHAVE_PRIVADA_AQUI WIREGUARD_PRESHARED_KEY=SUA_PRESHARED_KEY_AQUI WIREGUARD_ADDRESSES=10.128.x.x/32 VPN_COUNTRIES=Netherlands VPN_ENDPOINT_PORT=1637 VPN_PORT_FORWARDING=on VPN_PORT_FORWARDING_PROVIDER=
- Port Forwarding no AirVPN:
- No painel AirVPN → Client Area → Forwarded Ports
- Adicione uma porta (anote o número, ex:
12345) - Adicione ao
.env:FIREWALL_VPN_INPUT_PORTS=12345 - No qBittorrent, configure essa porta como Listening Port (Passo 4 abaixo)
- Acesse o painel ProtonVPN:
- Login em account.protonvpn.com
- Vá em Downloads → WireGuard configuration
- Gere uma configuração:
- Platform:
GNU/Linux - Protocol:
WireGuard - Server: escolha um com ícone P2P (ex:
NL#123— Holanda) - NAT-PMP / Port Forwarding: ✅ Ativar (requer plano Plus)
- Platform:
- Clique em Create e baixe o arquivo
.conf - Abra o arquivo
.confe extraia:[Interface] PrivateKey = SUA_CHAVE_PRIVADA_AQUI # → WIREGUARD_PRIVATE_KEY Address = 10.2.0.2/32 # → WIREGUARD_ADDRESSES
- Edite o arquivo
.envno servidor:VPN_PROVIDER=protonvpn WIREGUARD_PRIVATE_KEY=SUA_CHAVE_PRIVADA_AQUI WIREGUARD_PRESHARED_KEY= WIREGUARD_ADDRESSES=10.2.0.2/32 VPN_COUNTRIES=Netherlands VPN_ENDPOINT_PORT=51820 VPN_PORT_FORWARDING=on VPN_PORT_FORWARDING_PROVIDER=
⚠️ ProtonVPN: Port forwarding requer plano Plus ou superior. Sem port forwarding, downloads ainda funcionam mas com velocidades menores (sem conexões de entrada).
Após o deploy, verifique:
# Ver o IP público (deve ser o IP da VPN, NÃO o seu IP real)
docker exec -it gluetun wget -qO- https://ipinfo.io
# Ver logs do Gluetun
docker logs gluetun 2>&1 | tail -20
# Deve mostrar: "healthy" e "Wireguard is up"Se o log mostrar erros de autenticação, verifique se copiou a WIREGUARD_PRIVATE_KEY corretamente (sem espaços extras).
- Acesse
http://homelab.local:8080- Você verá a interface VueTorrent (moderna e responsiva)
- Se aparecer a interface antiga, vá em ⚙️ → Web UI → Use alternative WebUI → selecione
/vuetorrent
- Credenciais padrão:
- Usuário:
admin - Senha: verificar nos logs do container:
docker logs qbittorrent 2>&1 | grep "temporary password"
- Usuário:
- Troque a senha imediatamente em: ⚙️ → Web UI → Authentication
- Vá em ⚙️ Options → Downloads
- Default Save Path:
/data/torrents - Crie as categorias:
- Clique com o botão direito na barra lateral → New Category
- Categoria:
radarr→ Save Path:/data/torrents/movies - Categoria:
sonarr→ Save Path:/data/torrents/tv
- ⚙️ → Downloads:
- ✅ Keep incomplete torrents in:
/data/torrents/incomplete - ❌ Desmarcar "Append .!qB extension"
- ✅ Keep incomplete torrents in:
- ⚙️ → Connection:
- Listening Port:
6881(ou a porta do port forwarding da VPN)
- Listening Port:
- ⚙️ → Speed:
- Configure limites de upload/download conforme sua internet
- ⚙️ → BitTorrent:
- ✅ Enable DHT
- ✅ Enable PeX
- ✅ Enable Local Peer Discovery
- Seeding Limits: configure conforme desejado (ex: ratio 2.0 ou 7 dias)
Para garantir que o kill switch está funcionando:
# Pare o Gluetun temporariamente
docker stop gluetun
# O qBittorrent deve parar TODOS os downloads imediatamente
# e não deve conseguir acessar a internet
# Reinicie o Gluetun
docker start gluetun
# Aguarde ~30s para reconectar — os downloads devem retomarURL: http://homelab.local:7878
- Acesse
http://homelab.local:7878 - Configure a autenticação
- Settings → Media Management
- Clique em Show Advanced (topo da página)
- Movie Naming:
- ✅ Rename Movies
- Standard Movie Format:
{Movie CleanTitle} ({Release Year}) {imdb-{ImdbId}} {edition-{Edition Tags}} [{Quality Full} {MediaInfo VideoDynamicRangeType}][{MediaInfo VideoBitDepth}bit][{MediaInfo VideoCodec}]{[Mediainfo AudioCodec}{ Mediainfo AudioChannels}]{MediaInfo AudioLanguages}[{MediaInfo SubtitleLanguages}] - Movie Folder Format:
{Movie CleanTitle} ({Release Year}) [imdbid-{ImdbId}]
- Root Folders:
- Clique em Add Root Folder
- Caminho:
/data/media/movies
- Settings → Download Clients → + → qBittorrent
- Configurar:
- Name:
qBittorrent - Host:
gluetun⚠️ (NÃO useqbittorrent— o qBit está na rede do Gluetun!) - Port:
8080 - ❌ Use SSL: Desmarcar
- Username:
admin - Password: (sua senha do qBittorrent)
- Category:
radarr
- Name:
- Test → Save
⚠️ Se o teste falhar com "Unable to connect", verifique:
- O container gluetun está
healthy? (docker ps)- Você usou
gluetun(e nãoqbittorrent) como hostname?
O Prowlarr sincroniza automaticamente! Faça isso pelo lado do Prowlarr:
- No Prowlarr, vá em Settings → Apps → + → Radarr
- Configurar:
- Prowlarr Server:
http://prowlarr:9696 - Radarr Server:
http://radarr:7878 - API Key: (cole a API Key do Radarr, encontrada em Radarr → Settings → General)
- Prowlarr Server:
- Test → Save
- Os indexadores serão sincronizados automaticamente
Veja a Seção 5 para configuração detalhada.
URL: http://homelab.local:8989
- Acesse
http://homelab.local:8989 - Configure a autenticação
- Settings → Media Management → Show Advanced
- Episode Naming:
- ✅ Rename Episodes
- Standard Episode Format:
{Series TitleYear} - S{season:00}E{episode:00} - {Episode CleanTitle} [{Quality Full} {MediaInfo VideoDynamicRangeType}][{MediaInfo VideoBitDepth}bit][{MediaInfo VideoCodec}][{Mediainfo AudioCodec} {Mediainfo AudioChannels}]{[MediaInfo AudioLanguages]}{[MediaInfo SubtitleLanguages]} - Season Folder Format:
Season {season:00} - Series Folder Format:
{Series TitleYear} [tvdbid-{TvdbId}]
- Root Folders:
- Caminho:
/data/media/tv
- Caminho:
- Settings → Download Clients → + → qBittorrent
- Configurar igual ao Radarr (Host:
gluetun, porta, credenciais), mas:- Category:
sonarr(importante — diferente do Radarr!)
- Category:
- Test → Save
Se o teste falhar, verifique as mesmas dicas da Seção 4.3 Passo 3.
Faça pelo lado do Prowlarr:
- No Prowlarr, vá em Settings → Apps → + → Sonarr
- Configurar:
- Prowlarr Server:
http://prowlarr:9696 - Sonarr Server:
http://sonarr:8989 - API Key: (cole a API Key do Sonarr)
- Prowlarr Server:
- Test → Save
URL: http://homelab.local:6767
O Bazarr é o que vai transformar a experiência em algo verdadeiramente "Netflix BR": ele busca e sincroniza legendas em português automaticamente.
- Settings → Radarr:
- ✅ Enabled
- Host:
radarr - Port:
7878 - API Key: (API Key do Radarr)
- Test → Save
- Settings → Sonarr:
- ✅ Enabled
- Host:
sonarr - Port:
8989 - API Key: (API Key do Sonarr)
- Test → Save
- Settings → Languages
- Languages Profile:
- Clique em Add New Profile
- Name:
PT-BR + English - Adicione os idiomas na ordem de prioridade:
- 🇧🇷 Portuguese (Brazil) — prioridade máxima
- 🇵🇹 Portuguese — fallback
- 🇬🇧 English — último recurso
- ✅ Marque Hearing Impaired para incluir legendas com descrição de sons (opcional)
- Default Settings:
- Série: selecione o perfil
PT-BR + English - Filme: selecione o perfil
PT-BR + English - ✅ Enabled
- Série: selecione o perfil
- Settings → Providers
- Adicione os seguintes provedores (na ordem de prioridade):
- OpenSubtitles.com (requer conta gratuita)
- Crie conta em: https://www.opensubtitles.com
- Insira username, password e API Key
- LegendasDivx (excelente para PT-BR)
- Crie conta em: https://www.legendasdivx.pt
- Insira username e password
- Subdivx (bom para conteúdo latino)
- Addic7ed (bom para séries)
- Supersubtitles (conteúdo brasileiro)
- OpenSubtitles.com (requer conta gratuita)
💡 Dica crucial: O OpenSubtitles.com com conta gratuita tem limite de 20 downloads/dia. Considere uma conta VIP se tiver muita mídia. Ter múltiplos provedores garante que o Bazarr sempre encontre legendas.
- Settings → Subtitles:
- Subtitle Folder:
Alongside media file(legenda junto ao vídeo) - ✅ Upgrade Previously Downloaded Subtitles (busca versões melhores automaticamente)
- Days to Upgrade:
7
- Subtitle Folder:
- Settings → Scheduler:
- Sonarr/Radarr Sync:
6 Hours - Search Missing Subtitles:
12 Hours
- Sonarr/Radarr Sync:
URL: http://homelab.local:8096
- Acesse
http://homelab.local:8096 - Selecione idioma: Português (Brasil)
- Crie usuário administrador
- Adicionar Bibliotecas:
- Filmes:
- Tipo:
Movies - Pasta:
/data/media/movies - Idioma preferido:
Portuguese (Brazil) - País:
Brazil
- Tipo:
- Séries:
- Tipo:
Shows - Pasta:
/data/media/tv - Idioma preferido:
Portuguese (Brazil) - País:
Brazil
- Tipo:
- Filmes:
- Configure idioma de metadados: Português (Brasil)
- ✅ Permitir acesso remoto
- Painel Admin → Playback (ou Reprodução)
- Transcoding:
- Hardware acceleration:
Video Acceleration API (VAAPI) - VA-API Device:
/dev/dri/renderD128 - ✅ Enable hardware decoding for:
- ✅ H264
- ✅ HEVC (H.265)
- ✅ VP9
- ✅ AV1 (se suportado pela sua iGPU — Vega 7 pode não suportar)
- ✅ Enable hardware encoding
- ✅ Allow encoding in HEVC format
- Prefer OS native DXVA or VA-API: ✅ Habilitado
- Hardware acceleration:
- Save
⚠️ Nota sobre AMD Vega 7: A iGPU suporta decodificação de H.264, HEVC e VP9. A codificação (encoding) via AMF pode ter suporte limitado. Se encontrar problemas no transcoding, desmarque "Enable hardware encoding" e deixe apenas a decodificação via hardware.
💡 No Jellyfin 10.11+, o download de legendas foi removido do painel admin. Não se preocupe: o Bazarr é quem faz o download! Você só precisa configurar o Jellyfin para exibi-las.
- Clique no seu Ícone de Perfil (canto superior direito) → Legendas (Subtitles)
- Configure:
- Idioma de legenda preferido:
Português (Brasil) - Modo de legenda:
Sempre exibir legendas(ou Padrão) - Gravar legendas (Burn-in):
Automático(evita transcoding desnecessário na TV Samsung)
- Idioma de legenda preferido:
- Salve as configurações.
- Painel Admin → Networking
- Base URL: deixe vazio (ou configure se usar reverse proxy)
- ✅ Allow remote connections
- Certifique-se que a porta
8096está acessível na rede local
URL: http://homelab.local:5055
O Seerr é a interface principal onde você (e outros usuários da casa) vão solicitar filmes e séries. É a "Netflix" do seu servidor.
- Acesse
http://homelab.local:5055 - Sign in with Jellyfin:
- Jellyfin URL:
http://jellyfin:8096(nome do container) - Email: seu email
- Username: seu usuário do Jellyfin
- Password: sua senha do Jellyfin
- Jellyfin URL:
- Clique em Sign In
- Settings → Services → Radarr → Add Radarr Server
- Configurar:
- ✅ Default Server
- Server Name:
Radarr - Hostname:
radarr - Port:
7878 - API Key: (API Key do Radarr)
- Quality Profile: (selecione o perfil criado na Seção 5)
- Root Folder:
/data/media/movies - ✅ Enable Scan (sincroniza biblioteca Jellyfin)
- Test → Save
- Settings → Services → Sonarr → Add Sonarr Server
- Configurar:
- ✅ Default Server
- Server Name:
Sonarr - Hostname:
sonarr - Port:
8989 - API Key: (API Key do Sonarr)
- Quality Profile: (selecione o perfil criado na Seção 5)
- Root Folder:
/data/media/tv - ✅ Enable Scan
- Test → Save
- Settings → General:
- Display Language:
Português (Brasil) - Discover Language:
Portuguese (Brazil) - Discover Region:
Brazil
- Display Language:
- Settings → Users:
- Configure permissões padrão para novos usuários
- ✅ Auto-approve requests (se for uso pessoal/familiar)
URL: http://homelab.local:8085
O SABnzbd é um cliente de download Usenet (newsgroups). Complementa o qBittorrent (torrents) com uma segunda fonte de conteúdo — downloads Usenet são geralmente mais rápidos, diretos (sem depender de seeders) e mais privados.
🔒 Arquitetura VPN: Assim como o qBittorrent, o SABnzbd roda dentro da rede do Gluetun. Todo o tráfego passa pelo túnel WireGuard com kill switch nativo.
- Acesse
http://homelab.local:8085 - O wizard inicial do SABnzbd vai guiar a configuração
- Se aparecer uma mensagem de "host not allowed", adicione
homelab.local(ou o IP do servidor) à whitelist:Depois reinicie o container:# Editar o config do SABnzbd para adicionar o host # O arquivo fica em ${DATA_ROOT}/configs/sabnzbd/sabnzbd.ini # Adicione na seção [misc]: # host_whitelist = homelab.local, 192.168.1.100
docker restart sabnzbd
- No wizard (ou em Config → Servers), adicione seu provedor Usenet:
- Host: (endereço do seu provedor, ex:
news.eweka.nl,news.newshosting.com) - Port:
563(SSL) ou119(sem SSL) - ✅ SSL: Recomendado ativar
- Username: (seu usuário do provedor Usenet)
- Password: (sua senha)
- Connections:
10-30(depende do plano do provedor) - Priority:
0(servidor principal)
- Host: (endereço do seu provedor, ex:
- Test Server → Save
💡 Precisa de um provedor Usenet? Diferente de torrents, Usenet requer uma assinatura paga. Provedores populares: Eweka, Newshosting, Frugal Usenet, UsenetExpress. A maioria oferece trial gratuito.
- Vá em Config → Categories
- Configure as categorias para os *arr apps:
- Categoria:
radarr→ Folder:/data/usenet/movies - Categoria:
sonarr→ Folder:/data/usenet/tv
- Categoria:
- Default category: deixe como
Default
- Config → General:
- SABnzbd Host:
0.0.0.0(aceitar conexões dos outros containers) - SABnzbd Port:
8085 - Copie a API Key — você vai precisar dela para conectar o Radarr e Sonarr
- SABnzbd Host:
- Config → Folders:
- Temporary Download Folder:
/data/usenet/incomplete - Completed Download Folder:
/data/usenet(as categorias redirecionam para subpastas)
- Temporary Download Folder:
Agora adicione o SABnzbd como segundo download client no Radarr e Sonarr (ao lado do qBittorrent):
No Radarr:
- Settings → Download Clients → + → SABnzbd
- Configurar:
- Name:
SABnzbd - Host:
gluetun⚠️ (mesmo padrão do qBittorrent — SABnzbd está na rede do Gluetun) - Port:
8085 - API Key: (API Key do SABnzbd)
- Category:
radarr
- Name:
- Test → Save
No Sonarr:
- Settings → Download Clients → + → SABnzbd
- Configurar:
- Name:
SABnzbd - Host:
gluetun - Port:
8085 - API Key: (API Key do SABnzbd)
- Category:
sonarr
- Name:
- Test → Save
💡 Radarr/Sonarr com dois download clients: Quando ambos (qBittorrent + SABnzbd) estão configurados, o Radarr/Sonarr escolhe automaticamente o client correto baseado no tipo de release (torrent → qBittorrent, NZB → SABnzbd).
Esta é a seção mais importante para garantir que você sempre receba a melhor qualidade possível de imagem e som.
-
Settings → Profiles → Edit o perfil
Any(ou crie um novo) -
Nome:
Ultra HD - Melhor Qualidade -
Upgrade Until:
Remux-2160p -
Qualities (ordenar de cima para baixo = maior para menor prioridade):
✅ Remux-2160p ← Qualidade máxima (4K Blu-ray sem compressão) ✅ Bluray-2160p ← 4K Blu-ray encode ✅ WEB-DL 2160p ← 4K de streaming (Netflix, Disney+, etc.) ✅ WEBDL-2160p ✅ Remux-1080p ← Full HD Blu-ray sem compressão ✅ Bluray-1080p ← Full HD Blu-ray encode ✅ WEB-DL 1080p ← Full HD de streaming ✅ WEBDL-1080p ✅ Bluray-720p ← HD (fallback) ❌ Desmarcar tudo abaixo -
Language:
Any
Os Custom Formats permitem priorizar ou evitar releases específicos.
- Settings → Custom Formats → +
- Crie os seguintes:
Name: Audio PT-BR
Conditions:
- Type: Language
- Language: Portuguese (Brazil)
- Required: No
- Negate: No
Name: Multi Audio
Conditions:
- Type: Release Title
- Value: (?i)\b(multi|dual[.-]?audio|dublado)\b
- Required: No
- Negate: No
Name: x265/HEVC
Conditions:
- Type: Release Title
- Value: (?i)\b(x265|h\.?265|hevc)\b
- Required: No
- Negate: No
Name: Releases Ruins
Conditions:
- Type: Release Title
- Value: (?i)\b(cam|ts|telesync|telecine|hdts|hd-ts)\b
- Required: No
- Negate: No
- Atribuir scores ao perfil:
- Settings → Profiles → edite
Ultra HD - Melhor Qualidade - Na seção Custom Formats, atribua os scores indicados acima
- Settings → Profiles → edite
Repita a mesma lógica do Radarr:
- Settings → Profiles
- Nome:
Ultra HD - Séries - Upgrade Until:
Bluray-2160p(Remux de série é raro) - Qualities prioritárias:
✅ Bluray-2160p ✅ WEB-DL 2160p ✅ WEBDL-2160p ✅ Bluray-1080p ✅ WEB-DL 1080p ✅ WEBDL-1080p ✅ HDTV-1080p ❌ Desmarcar resoluções abaixo de 1080p
💡 Dica para séries em andamento: Séries novas geralmente estão disponíveis apenas em WEB-DL. O Sonarr fará upgrade automático quando uma versão Bluray estiver disponível.
Em ambos os apps:
- Settings → Profiles → edite seu perfil
- Language: configure como
Anypara aceitar qualquer idioma de áudio - Use os Custom Formats (não a configuração de Language) para priorizar PT-BR sem bloquear outros idiomas
⚠️ Por que não filtrar por idioma? Se você restringir para "Portuguese only", vai perder releases de altíssima qualidade que têm apenas áudio original (inglês). A estratégia correta é aceitar qualquer idioma e usar Custom Formats para dar score maior a releases com áudio PT-BR ou multi.
O Jellyfin tem um app oficial e gratuito na Samsung TV App Store.
- Na TV Samsung, abra a Samsung Apps (ou App Store)
- Pesquise por "Jellyfin"
- Instale o aplicativo oficial (ícone roxo/azul)
- Abra o app
💡 Compatibilidade: O app Jellyfin está disponível para TVs Samsung com TizenOS 2018 ou mais recente (modelos NU, RU, TU, AU, BU, CU, DU e mais recentes).
- Na tela de login, insira:
- Server Address:
http://homelab.local:8096 - Se
homelab.localnão resolver, use o IP fixo do servidor (ex:http://192.168.1.100:8096)
- Server Address:
- Faça login com seu usuário Jellyfin
- O dashboard deve mostrar suas bibliotecas de Filmes e Séries
A Samsung TV com TizenOS suporta Direct Play de muitos codecs nativamente, o que evita transcoding e mantém a qualidade máxima.
| Codec | Resolução Máx | Suporte |
|---|---|---|
| H.264 | 4K (4096x2160) | ✅ Todas |
| HEVC/H.265 | 4K (4096x2160) | ✅ 2016+ |
| VP9 | 4K | ✅ 2017+ |
| AV1 | 8K | ✅ 2020+ |
| AAC | - | ✅ Todas |
| AC3/EAC3 | - | ✅ Todas |
| DTS | - | |
| TrueHD | - | ❌ Necessita transcoding de áudio |
- Settings (⚙️) no app Jellyfin da TV:
- Playback:
- Maximum streaming bitrate:
Auto(ou100 Mbps+se sua rede suportar) - Preferred audio language:
Portuguese - Preferred subtitle language:
Portuguese - ✅ Play default audio track regardless of language (caso não tenha PT-BR)
- Maximum streaming bitrate:
- Home Screen:
- ✅ Enable next up
- ✅ Enable resume
- Playback:
-
Conexão por cabo (Ethernet): Sempre que possível, conecte a TV via cabo Ethernet em vez de Wi-Fi. Isso é crucial para streaming 4K sem buffer.
-
Evitar Transcoding: Se a TV consegue reproduzir o codec diretamente (Direct Play), a qualidade será máxima e o servidor não terá carga. Para isso:
- Prefira releases em H.264 ou HEVC (suportados nativamente)
- Se usar Remux (40-80 GB), certifique-se de ter rede Gigabit
-
Problema com DTS ou TrueHD: Se o áudio não reproduzir, vá em:
- Jellyfin Admin → Playback → Transcoding
- ✅ Allow audio transcoding (transcodifica apenas o áudio, mantendo vídeo em Direct Play)
-
Legendas: Para evitar transcoding causado por legendas:
- Prefira legendas SRT (texto) em vez de PGS/SUP (imagem)
- O Bazarr já baixa legendas SRT por padrão ✅
- Legendas PGS embutidas em Blu-ray Remux forçam transcoding na maioria das TVs
-
Cache e Buffer:
- Se houver buffering, reduza o bitrate máximo nas configurações do app
- Verifique se não há outros dispositivos saturando a rede
Aqui está o fluxo completo de como tudo funciona junto:
1. 📱 Você abre o Seerr (http://homelab.local:5055) no celular/PC
│
2. 🔍 Pesquisa "Oppenheimer" e clica em "Solicitar"
│
3. 📨 Seerr envia a requisição para o Radarr
│
4. 🔎 Radarr consulta o Prowlarr, que busca em todos os indexadores
│
5. 📋 Prowlarr retorna os resultados; Radarr escolhe o melhor
│ (baseado no Perfil de Qualidade e Custom Formats)
│ Prioridade: Remux-2160p > Bluray-2160p > WEB-DL 2160p
│ Bonus: +100 se tiver áudio PT-BR, +30 se for x265
│
6. ⬇️ Radarr envia o torrent para o qBittorrent (categoria: radarr)
│
7. 💾 qBittorrent baixa para /data/torrents/movies/
│
8. 🔗 Radarr detecta o download completo e cria um HARDLINK:
│ /data/torrents/movies/Oppenheimer.2023.2160p.Remux.mkv
│ ↕ (mesmo arquivo, zero espaço extra)
│ /data/media/movies/Oppenheimer (2023)/Oppenheimer (2023).mkv
│
9. 🇧🇷 Bazarr detecta o novo filme e busca legendas PT-BR
│ → OpenSubtitles, LegendasDivx, SubDivX...
│ → Salva: Oppenheimer (2023).pt-br.srt junto ao .mkv
│
10. 🎬 Jellyfin escaneia a biblioteca e disponibiliza o filme
│
11. 📺 Você abre o Jellyfin na TV Samsung e dá PLAY!
│ → Direct Play (4K HEVC, sem transcoding)
│ → Legenda PT-BR carregada automaticamente
│
🍿 Pipoca pronta. Experiência Netflix. ✅
# Ver logs detalhados de um container
docker logs <nome_container> --tail 100 -f
# Exemplo:
docker logs jellyfin --tail 50
docker logs seerr --tail 50# Verificar que UID/GID estão corretos
ls -la /srv/data/
ls -la /srv/configs/
# Corrigir se necessário
sudo chown -R 1000:1000 /srv/data /srv/configs- Verifique se
/data/torrentse/data/mediaestão na mesma partição:df /srv/data/torrents /srv/data/media # Devem mostrar o mesmo filesystem - No Radarr/Sonarr, verifique se os caminhos são relativos ao mesmo volume Docker (
/data) - No container, os caminhos devem ser:
- Download:
/data/torrents/movies/(outv/) - Root Folder:
/data/media/movies/(outv/)
- Download:
# Verificar se o container vê a GPU
docker exec -it jellyfin ls -la /dev/dri/
# Deve mostrar: card0, renderD128
# Verificar drivers AMD no host
sudo dmesg | grep -i amdgpu
# Verificar se o grupo render está correto
docker exec -it jellyfin id- No Jellyfin, tente reproduzir um vídeo que force transcoding
- Verifique os logs:
docker logs jellyfin 2>&1 | grep -i "transcode\|vaapi\|error"
- Se VAAPI encoding falhar, desabilite encoding e mantenha apenas decoding
- Verifique conectividade:
docker exec -it seerr wget -qO- http://jellyfin:8096/health - Certifique-se de que ambos estão na mesma rede Docker (
mediastack)
Se o Bazarr não encontrar a legenda, você pode adicionar a que baixou manualmente pela própria interface dele (evita erro de nome/permissão):
- Abra o Bazarr e vá até o Filme/Episódio desejado.
- Clique no ícone do episódio para ver os detalhes.
- Use a opção Upload Subtitles (ícone de seta 📤).
- Envie seu
.srte escolha o idioma. O Bazarr renomeia e move para a pasta correta sozinho!
Se um filme/série foi enviado para o qBittorrent mas não sai do 0% (sem peers/seeders):
A stack inclui o serviço stalled-cleaner que roda a cada 15 minutos e faz isso automaticamente:
- Verifica a fila do Radarr e Sonarr
- Detecta downloads com status "warning" (stalled) ou sem progresso após 30 minutos
- Remove o download do qBittorrent
- Faz blocklist do release (para nunca mais tentar o mesmo arquivo)
- O Radarr/Sonarr busca automaticamente a próxima melhor alternativa
Configuração: O cleaner lê as API Keys diretamente dos configs do Radarr/Sonarr — não precisa configurar nada manualmente.
Para ver os logs do cleaner:
docker logs stalled-cleaner --tail 50Para ajustar o tempo de espera (padrão: 30 min) ou intervalo (padrão: 15 min), edite no docker-compose.yml:
environment:
- STALLED_TIMEOUT=30 # minutos sem progresso antes de remover
- CHECK_INTERVAL=900 # segundos entre cada verificação (900 = 15 min)Se precisar agir imediatamente sem esperar o cleaner:
- Vá no Radarr/Sonarr na aba Activity → Queue
- Clique no ícone de X (Remove) ao lado do download travado
- CRUCIAL: Marque a caixa "Blocklist release" e confirme
- O Radarr/Sonarr buscará automaticamente a próxima melhor opção
Em Settings → Indexers do Radarr e Sonarr, aumente o Minimum Seeders para 5 para evitar pegar torrents mortos.
| Recurso | URL |
|---|---|
| Jellyfin Docs | https://jellyfin.org/docs/ |
| Radarr Wiki | https://wiki.servarr.com/radarr |
| Sonarr Wiki | https://wiki.servarr.com/sonarr |
| Bazarr Wiki | https://wiki.bazarr.media/ |
| Prowlarr Wiki | https://wiki.servarr.com/prowlarr |
| Seerr Docs | https://docs.seerr.dev/ |
| Seerr GitHub | https://github.com/seerr-team/seerr |
| qBittorrent Docker | https://docs.linuxserver.io/images/docker-qbittorrent |
| SABnzbd Wiki | https://sabnzbd.org/wiki/ |
| SABnzbd Docker | https://docs.linuxserver.io/images/docker-sabnzbd |
| VueTorrent (WebUI) | https://github.com/VueTorrent/VueTorrent |
| Gluetun (VPN) | https://github.com/qdm12/gluetun-wiki |
| AirVPN Config Generator | https://airvpn.org/generator/ |
| ProtonVPN WireGuard | https://protonvpn.com/support/wireguard-configurations/ |
| TRaSH Guides (Quality Profiles) | https://trash-guides.info/ |
| Jellyfin Samsung TV | https://jellyfin.org/downloads/clients |
| Hardlinks Explained | https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/ |
Última atualização: Julho 2026 Stack Version: Seerr v3.3.0 | Jellyfin latest | Linuxserver.io images (latest)