Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎬 Servidor de Mídia Automatizado — Guia Definitivo

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)


📑 Índice

  1. Visão Geral da Arquitetura
  2. Preparação do Sistema
  3. Deploy no Dockge
  4. Configuração dos Aplicativos
  5. Perfis de Qualidade (Radarr/Sonarr)
  6. Jellyfin na Samsung TV (TizenOS)
  7. Fluxo Completo — Da Requisição ao Play
  8. Troubleshooting
  9. Referências

1. 🏗 Visão Geral da Arquitetura

┌─────────────────────────────────────────────────────────────────┐
│                        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)                    │
└─────────────────────────────────────────────────────────────────┘

Por que Hardlinks?

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/torrents e /data/media devem estar no mesmo filesystem/partição.


2. 🛠 Preparação do Sistema

2.1 Verificar Pré-requisitos

# 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 grupo render for diferente de 109, atualize o valor de group_add no serviço jellyfin do docker-compose.yml.

2.2 Adicionar Usuário ao Grupo Render

# 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

2.3 Criar Estrutura de Diretórios

# ╔══════════════════════════════════════════════════════════╗
# ║  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/

2.4 Multi-Disco com MergerFS (SSD Secundário)

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/data no .env.

Passo 1: Instalar MergerFS

sudo apt update && sudo apt install -y mergerfs

Passo 2: Criar estrutura no SSD secundário

# 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}/data

Passo 3: Criar ponto de montagem unificado

sudo mkdir -p /mnt/merged/data

Passo 4: Montar com MergerFS

sudo 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)

Passo 5: Verificar que funciona

# 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/

Passo 6: Persistir no fstab (sobrevive reboots)

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ítica mfs tende a manter ambos no mesmo disco, minimizando esse cenário.

2.5 Criar Arquivo .env

# Copiar o template e editar
cp .env.example .env
nano .env

Conteúdo do .env:

DATA_ROOT=/srv
MERGED_DATA=/mnt/merged/data
PUID=1000
PGID=1000
TZ=America/Sao_Paulo

Se usar disco único (sem MergerFS), configure: MERGED_DATA=/srv/data


3. 🚀 Deploy no Dockge

Opção A: Via Interface Web do Dockge (Recomendado)

  1. Acesse o Dockge em http://homelab.local:5001
  2. Clique em "+ Compose" (botão no canto superior)
  3. Dê um nome à stack: mediaserver
  4. Cole o conteúdo inteiro do arquivo docker-compose.yml
  5. Clique na aba "Env" e adicione as variáveis:
    DATA_ROOT=/srv
    PUID=1000
    PGID=1000
    TZ=America/Sao_Paulo
    
  6. Clique em "Deploy"
  7. Aguarde todos os containers ficarem verdes (✅)

Opção B: Via Terminal (SSH)

# 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

Verificação Pós-Deploy

# 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

📋 Tabela de URLs dos Serviços

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

4. ⚙️ Configuração dos Aplicativos

ORDEM OBRIGATÓRIA de configuração:

1. Prowlarr → 2. Gluetun (VPN) + qBittorrent + SABnzbd → 3. Radarr → 4. Sonarr → 5. Bazarr → 6. Jellyfin → 7. Seerr

Cada aplicativo depende do anterior estar configurado.


4.1 Prowlarr — Indexadores

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.

Passo 1: Primeiro Acesso

  1. Acesse http://homelab.local:9696
  2. Crie um usuário e senha de autenticação

Passo 2: Configurar FlareSolverr (Obrigatório para RuTracker e sites com Cloudflare)

  1. Vá em SettingsIndexers (barra lateral)
  2. Em FlareSolverr no topo da página, configure:
    • FlareSolverr Host: http://flaresolverr:8191
  3. Clique em TestSave

💡 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.

Passo 3: Adicionar Indexadores

  1. Vá em IndexersAdd Indexer
  2. Procure e adicione indexadores de sua preferência
  3. 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
  4. Para cada indexador, teste a conexão clicando em Test antes de salvar
  5. 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.).

Passo 4: Indexadores Customizados (Torrentio, etc.) — Automático ✅

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:

  1. Vá em IndexersAdd Indexer
  2. Procure por Torrentio (ou outros que apareceram após o sync)
  3. Configure e salve normalmente

Para ver os logs do sync:

docker logs prowlarr-indexers-sync --tail 30

Passo 5: Copiar a API Key

  1. Vá em SettingsGeneral
  2. Copie a API Key — você vai precisar dela para conectar o Radarr e o Sonarr

4.2 Gluetun + qBittorrent — VPN e Download

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).

Passo 1: Configurar a VPN (Gluetun + WireGuard)

Antes de acessar o qBittorrent, a VPN precisa estar funcionando. Escolha seu provedor abaixo:


🅰️ Opção A: AirVPN
  1. Acesse o Config Generator do AirVPN:
    • Login em airvpn.orgClient AreaConfig Generator
  2. 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)
  3. Clique em Generate e baixe o arquivo .conf
  4. Abra o arquivo .conf e 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
  5. Edite o arquivo .env no 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=
  6. Port Forwarding no AirVPN:
    • No painel AirVPN → Client AreaForwarded 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)

🅱️ Opção B: ProtonVPN
  1. Acesse o painel ProtonVPN:
  2. 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)
  3. Clique em Create e baixe o arquivo .conf
  4. Abra o arquivo .conf e extraia:
    [Interface]
    PrivateKey = SUA_CHAVE_PRIVADA_AQUI      # → WIREGUARD_PRIVATE_KEY
    Address = 10.2.0.2/32                    # → WIREGUARD_ADDRESSES
  5. Edite o arquivo .env no 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).


✅ Verificar se a VPN está funcionando

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).


Passo 2: Primeiro Acesso ao qBittorrent

  1. Acesse http://homelab.local:8080
    • Você verá a interface VueTorrent (moderna e responsiva)
    • Se aparecer a interface antiga, vá em ⚙️ → Web UIUse alternative WebUI → selecione /vuetorrent
  2. Credenciais padrão:
    • Usuário: admin
    • Senha: verificar nos logs do container:
      docker logs qbittorrent 2>&1 | grep "temporary password"
  3. Troque a senha imediatamente em: ⚙️ → Web UIAuthentication

Passo 3: Configurar Categorias (Crucial para Hardlinks)

  1. Vá em ⚙️ OptionsDownloads
  2. Default Save Path: /data/torrents
  3. Crie as categorias:
    • Clique com o botão direito na barra lateral → New Category
    • Categoria: radarrSave Path: /data/torrents/movies
    • Categoria: sonarrSave Path: /data/torrents/tv

Passo 4: Otimizações Importantes

  1. ⚙️ → Downloads:
    • Keep incomplete torrents in: /data/torrents/incomplete
    • ❌ Desmarcar "Append .!qB extension"
  2. ⚙️ → Connection:
    • Listening Port: 6881 (ou a porta do port forwarding da VPN)
  3. ⚙️ → Speed:
    • Configure limites de upload/download conforme sua internet
  4. ⚙️ → BitTorrent:
    • Enable DHT
    • Enable PeX
    • Enable Local Peer Discovery
    • Seeding Limits: configure conforme desejado (ex: ratio 2.0 ou 7 dias)

Passo 5: Verificar Kill Switch

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 retomar

4.3 Radarr — Filmes

URL: http://homelab.local:7878

Passo 1: Primeiro Acesso

  1. Acesse http://homelab.local:7878
  2. Configure a autenticação

Passo 2: Configurar Gerenciamento de Mídia

  1. SettingsMedia Management
  2. Clique em Show Advanced (topo da página)
  3. 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}]
      
  4. Root Folders:
    • Clique em Add Root Folder
    • Caminho: /data/media/movies

Passo 3: Conectar o Download Client (qBittorrent)

  1. SettingsDownload Clients+qBittorrent
  2. Configurar:
    • Name: qBittorrent
    • Host: gluetun ⚠️ (NÃO use qbittorrent — o qBit está na rede do Gluetun!)
    • Port: 8080
    • Use SSL: Desmarcar
    • Username: admin
    • Password: (sua senha do qBittorrent)
    • Category: radarr
  3. TestSave

⚠️ Se o teste falhar com "Unable to connect", verifique:

  1. O container gluetun está healthy? (docker ps)
  2. Você usou gluetun (e não qbittorrent) como hostname?

Passo 4: Conectar o Prowlarr (Indexadores)

O Prowlarr sincroniza automaticamente! Faça isso pelo lado do Prowlarr:

  1. No Prowlarr, vá em SettingsApps+Radarr
  2. Configurar:
    • Prowlarr Server: http://prowlarr:9696
    • Radarr Server: http://radarr:7878
    • API Key: (cole a API Key do Radarr, encontrada em Radarr → Settings → General)
  3. TestSave
  4. Os indexadores serão sincronizados automaticamente

Passo 5: Perfis de Qualidade

Veja a Seção 5 para configuração detalhada.


4.4 Sonarr — Séries

URL: http://homelab.local:8989

Passo 1: Primeiro Acesso

  1. Acesse http://homelab.local:8989
  2. Configure a autenticação

Passo 2: Configurar Gerenciamento de Mídia

  1. SettingsMedia ManagementShow Advanced
  2. 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}]
      
  3. Root Folders:
    • Caminho: /data/media/tv

Passo 3: Conectar o Download Client (qBittorrent)

  1. SettingsDownload Clients+qBittorrent
  2. Configurar igual ao Radarr (Host: gluetun, porta, credenciais), mas:
    • Category: sonarr (importante — diferente do Radarr!)
  3. TestSave

Se o teste falhar, verifique as mesmas dicas da Seção 4.3 Passo 3.

Passo 4: Conectar o Prowlarr (Indexadores)

Faça pelo lado do Prowlarr:

  1. No Prowlarr, vá em SettingsApps+Sonarr
  2. Configurar:
    • Prowlarr Server: http://prowlarr:9696
    • Sonarr Server: http://sonarr:8989
    • API Key: (cole a API Key do Sonarr)
  3. TestSave

4.5 Bazarr — Legendas PT-BR

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.

Passo 1: Conectar ao Radarr e Sonarr

  1. SettingsRadarr:
    • Enabled
    • Host: radarr
    • Port: 7878
    • API Key: (API Key do Radarr)
    • TestSave
  2. SettingsSonarr:
    • Enabled
    • Host: sonarr
    • Port: 8989
    • API Key: (API Key do Sonarr)
    • TestSave

Passo 2: Configurar Idiomas

  1. SettingsLanguages
  2. Languages Profile:
    • Clique em Add New Profile
    • Name: PT-BR + English
    • Adicione os idiomas na ordem de prioridade:
      1. 🇧🇷 Portuguese (Brazil) — prioridade máxima
      2. 🇵🇹 Portuguese — fallback
      3. 🇬🇧 English — último recurso
    • ✅ Marque Hearing Impaired para incluir legendas com descrição de sons (opcional)
  3. Default Settings:
    • Série: selecione o perfil PT-BR + English
    • Filme: selecione o perfil PT-BR + English
    • Enabled

Passo 3: Configurar Provedores de Legendas

  1. SettingsProviders
  2. Adicione os seguintes provedores (na ordem de prioridade):
    • OpenSubtitles.com (requer conta gratuita)
    • LegendasDivx (excelente para PT-BR)
    • Subdivx (bom para conteúdo latino)
    • Addic7ed (bom para séries)
    • Supersubtitles (conteúdo brasileiro)

💡 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.

Passo 4: Performance e Sincronização

  1. SettingsSubtitles:
    • Subtitle Folder: Alongside media file (legenda junto ao vídeo)
    • Upgrade Previously Downloaded Subtitles (busca versões melhores automaticamente)
    • Days to Upgrade: 7
  2. SettingsScheduler:
    • Sonarr/Radarr Sync: 6 Hours
    • Search Missing Subtitles: 12 Hours

4.6 Jellyfin — Media Server

URL: http://homelab.local:8096

Passo 1: Wizard Inicial

  1. Acesse http://homelab.local:8096
  2. Selecione idioma: Português (Brasil)
  3. Crie usuário administrador
  4. Adicionar Bibliotecas:
    • Filmes:
      • Tipo: Movies
      • Pasta: /data/media/movies
      • Idioma preferido: Portuguese (Brazil)
      • País: Brazil
    • Séries:
      • Tipo: Shows
      • Pasta: /data/media/tv
      • Idioma preferido: Portuguese (Brazil)
      • País: Brazil
  5. Configure idioma de metadados: Português (Brasil)
  6. ✅ Permitir acesso remoto

Passo 2: Configurar Hardware Transcoding (VAAPI AMD)

  1. Painel AdminPlayback (ou Reprodução)
  2. 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
  3. 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.

Passo 3: Configurações de Legendas (Exibição)

💡 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.

  1. Clique no seu Ícone de Perfil (canto superior direito) → Legendas (Subtitles)
  2. 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)
  3. Salve as configurações.

Passo 4: Rede e Acesso

  1. Painel AdminNetworking
  2. Base URL: deixe vazio (ou configure se usar reverse proxy)
  3. Allow remote connections
  4. Certifique-se que a porta 8096 está acessível na rede local

4.7 Seerr — Interface de Requisições

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.

Passo 1: Wizard Inicial

  1. Acesse http://homelab.local:5055
  2. 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
  3. Clique em Sign In

Passo 2: Configurar Radarr

  1. SettingsServicesRadarrAdd Radarr Server
  2. 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)
  3. TestSave

Passo 3: Configurar Sonarr

  1. SettingsServicesSonarrAdd Sonarr Server
  2. 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
  3. TestSave

Passo 4: Configurações Gerais

  1. SettingsGeneral:
    • Display Language: Português (Brasil)
    • Discover Language: Portuguese (Brazil)
    • Discover Region: Brazil
  2. SettingsUsers:
    • Configure permissões padrão para novos usuários
    • Auto-approve requests (se for uso pessoal/familiar)

4.8 SABnzbd — Cliente Usenet

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.

Passo 1: Primeiro Acesso

  1. Acesse http://homelab.local:8085
  2. O wizard inicial do SABnzbd vai guiar a configuração
  3. Se aparecer uma mensagem de "host not allowed", adicione homelab.local (ou o IP do servidor) à whitelist:
    # 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
    Depois reinicie o container:
    docker restart sabnzbd

Passo 2: Configurar Servidor Usenet

  1. No wizard (ou em ConfigServers), adicione seu provedor Usenet:
    • Host: (endereço do seu provedor, ex: news.eweka.nl, news.newshosting.com)
    • Port: 563 (SSL) ou 119 (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)
  2. Test ServerSave

💡 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.

Passo 3: Configurar Categorias

  1. Vá em ConfigCategories
  2. Configure as categorias para os *arr apps:
    • Categoria: radarrFolder: /data/usenet/movies
    • Categoria: sonarrFolder: /data/usenet/tv
  3. Default category: deixe como Default

Passo 4: Configurações Gerais

  1. ConfigGeneral:
    • 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
  2. ConfigFolders:
    • Temporary Download Folder: /data/usenet/incomplete
    • Completed Download Folder: /data/usenet (as categorias redirecionam para subpastas)

Passo 5: Conectar ao Radarr e Sonarr

Agora adicione o SABnzbd como segundo download client no Radarr e Sonarr (ao lado do qBittorrent):

No Radarr:

  1. SettingsDownload Clients+SABnzbd
  2. 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
  3. TestSave

No Sonarr:

  1. SettingsDownload Clients+SABnzbd
  2. Configurar:
    • Name: SABnzbd
    • Host: gluetun
    • Port: 8085
    • API Key: (API Key do SABnzbd)
    • Category: sonarr
  3. TestSave

💡 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).


5. 🎯 Perfis de Qualidade (Radarr/Sonarr)

Esta é a seção mais importante para garantir que você sempre receba a melhor qualidade possível de imagem e som.

5.1 Radarr — Perfil de Qualidade para Filmes

  1. SettingsProfilesEdit o perfil Any (ou crie um novo)

  2. Nome: Ultra HD - Melhor Qualidade

  3. Upgrade Until: Remux-2160p

  4. 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
    
  5. Language: Any

5.2 Custom Formats (Radarr) — Filtros Avançados

Os Custom Formats permitem priorizar ou evitar releases específicos.

  1. SettingsCustom Formats+
  2. Crie os seguintes:

🇧🇷 Áudio Português BR (Score: +100)

Name: Audio PT-BR
Conditions:
  - Type: Language
  - Language: Portuguese (Brazil)
  - Required: No
  - Negate: No

🎵 Áudio Multi (Score: +50)

Name: Multi Audio
Conditions:
  - Type: Release Title
  - Value: (?i)\b(multi|dual[.-]?audio|dublado)\b
  - Required: No
  - Negate: No

🎬 Codec x265/HEVC (Score: +30)

Name: x265/HEVC
Conditions:
  - Type: Release Title
  - Value: (?i)\b(x265|h\.?265|hevc)\b
  - Required: No
  - Negate: No

❌ Releases Ruins (Score: -1000)

Name: Releases Ruins
Conditions:
  - Type: Release Title
  - Value: (?i)\b(cam|ts|telesync|telecine|hdts|hd-ts)\b
  - Required: No
  - Negate: No
  1. Atribuir scores ao perfil:
    • SettingsProfiles → edite Ultra HD - Melhor Qualidade
    • Na seção Custom Formats, atribua os scores indicados acima

5.3 Sonarr — Perfil de Qualidade para Séries

Repita a mesma lógica do Radarr:

  1. SettingsProfiles
  2. Nome: Ultra HD - Séries
  3. Upgrade Until: Bluray-2160p (Remux de série é raro)
  4. 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.

5.4 Configuração de Idioma no Radarr/Sonarr

Em ambos os apps:

  1. SettingsProfiles → edite seu perfil
  2. Language: configure como Any para aceitar qualquer idioma de áudio
  3. 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.


6. 📺 Jellyfin na Samsung TV (TizenOS)

6.1 Instalação do App Jellyfin

O Jellyfin tem um app oficial e gratuito na Samsung TV App Store.

  1. Na TV Samsung, abra a Samsung Apps (ou App Store)
  2. Pesquise por "Jellyfin"
  3. Instale o aplicativo oficial (ícone roxo/azul)
  4. 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).

6.2 Configuração Inicial na TV

  1. Na tela de login, insira:
    • Server Address: http://homelab.local:8096
    • Se homelab.local não resolver, use o IP fixo do servidor (ex: http://192.168.1.100:8096)
  2. Faça login com seu usuário Jellyfin
  3. O dashboard deve mostrar suas bibliotecas de Filmes e Séries

6.3 Otimização de Playback na TV

A Samsung TV com TizenOS suporta Direct Play de muitos codecs nativamente, o que evita transcoding e mantém a qualidade máxima.

Codecs suportados nativamente (Direct Play) pela maioria das Samsung TVs:

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 - ⚠️ Modelos selecionados
TrueHD - ❌ Necessita transcoding de áudio

Configurações recomendadas no app:

  1. Settings (⚙️) no app Jellyfin da TV:
    • Playback:
      • Maximum streaming bitrate: Auto (ou 100 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)
    • Home Screen:
      • Enable next up
      • Enable resume

6.4 Dicas de Performance

  1. 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.

  2. 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
  3. Problema com DTS ou TrueHD: Se o áudio não reproduzir, vá em:

    • Jellyfin AdminPlaybackTranscoding
    • Allow audio transcoding (transcodifica apenas o áudio, mantendo vídeo em Direct Play)
  4. 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
  5. 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

7. 🔄 Fluxo Completo — Da Requisição ao Play

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. ✅

8. 🔧 Troubleshooting

Container não inicia

# Ver logs detalhados de um container
docker logs <nome_container> --tail 100 -f

# Exemplo:
docker logs jellyfin --tail 50
docker logs seerr --tail 50

Problemas de permissão

# 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

Hardlinks não funcionam (Radarr/Sonarr copiando ao invés de linkar)

  1. Verifique se /data/torrents e /data/media estão na mesma partição:
    df /srv/data/torrents /srv/data/media
    # Devem mostrar o mesmo filesystem
  2. No Radarr/Sonarr, verifique se os caminhos são relativos ao mesmo volume Docker (/data)
  3. No container, os caminhos devem ser:
    • Download: /data/torrents/movies/ (ou tv/)
    • Root Folder: /data/media/movies/ (ou tv/)

GPU AMD não detectada pelo Jellyfin

# 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

Transcoding não funciona

  1. No Jellyfin, tente reproduzir um vídeo que force transcoding
  2. Verifique os logs:
    docker logs jellyfin 2>&1 | grep -i "transcode\|vaapi\|error"
  3. Se VAAPI encoding falhar, desabilite encoding e mantenha apenas decoding

Seerr não encontra o Jellyfin

  1. Verifique conectividade:
    docker exec -it seerr wget -qO- http://jellyfin:8096/health
  2. Certifique-se de que ambos estão na mesma rede Docker (mediastack)

Adicionar legendas baixadas manualmente

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):

  1. Abra o Bazarr e vá até o Filme/Episódio desejado.
  2. Clique no ícone do episódio para ver os detalhes.
  3. Use a opção Upload Subtitles (ícone de seta 📤).
  4. Envie seu .srt e escolha o idioma. O Bazarr renomeia e move para a pasta correta sozinho!

Torrent travado (Stalled) sem baixar

Se um filme/série foi enviado para o qBittorrent mas não sai do 0% (sem peers/seeders):

Solução Automática (Stalled Cleaner) ✅

A stack inclui o serviço stalled-cleaner que roda a cada 15 minutos e faz isso automaticamente:

  1. Verifica a fila do Radarr e Sonarr
  2. Detecta downloads com status "warning" (stalled) ou sem progresso após 30 minutos
  3. Remove o download do qBittorrent
  4. Faz blocklist do release (para nunca mais tentar o mesmo arquivo)
  5. 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 50

Para 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)

Solução Manual

Se precisar agir imediatamente sem esperar o cleaner:

  1. Vá no Radarr/Sonarr na aba ActivityQueue
  2. Clique no ícone de X (Remove) ao lado do download travado
  3. CRUCIAL: Marque a caixa "Blocklist release" e confirme
  4. O Radarr/Sonarr buscará automaticamente a próxima melhor opção

Prevenção

Em SettingsIndexers do Radarr e Sonarr, aumente o Minimum Seeders para 5 para evitar pegar torrents mortos.


9. 📚 Referências

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)

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages