🎬 PyMedia Manager

PyMedia Manager é uma solução completa e self-hosted para organização, renomeação e transcodificação de bibliotecas de mídia. Projetado para transformar uma pasta de downloads caótica em uma biblioteca organizada para servidores de mídia (Jellyfin/Plex).

Otimização de Hardware: Este projeto foi ajustado especificamente para processadores Intel de 4ª Geração (Haswell), utilizando drivers i965 e FFmpeg via VAAPI nativo para máxima performance e estabilidade.


Funcionalidades

1. 📂 Gerenciador de Arquivos

  • Interface Visual: Navegue pelas pastas do servidor como em um sistema operacional.
  • Ações: Mover, Excluir (lixeira), Renomear arquivos individualmente e Criar novas pastas.
  • Preview: Visualização rápida de tamanho e data de modificação.

2. 🏷️ Renomeador de Séries (Regex Inteligente)

  • Detecção Automática: Identifica padrões como S01E01, 1x01, S01 - EP01, Season 1 Episode 1.
  • Organização: Cria automaticamente a estrutura Nome da Série > Temporada XX > Episódio YY.mkv.
  • Segurança: Tabela de pré-visualização ("De -> Para") antes de aplicar qualquer alteração.

3. ⚙️ Encoder (FFmpeg Persistente)

  • Backend Desacoplado: O processo de conversão roda em uma thread de fundo. Você pode fechar o navegador ou atualizar a página (F5) que o progresso não é perdido.
  • Intel Haswell Ready: Utiliza o driver legado i965 e inicialização explícita de VAAPI para evitar conflitos de driver.
  • Seleção de Faixas: Mantém vídeos em H.264, copia áudios (POR/ENG/JPN) e legendas (PT-BR) sem recompressão.
  • Espelhamento: Replica a estrutura de pastas da origem para a pasta finalizados.

🛠️ Pré-requisitos Gerais

  • Docker e Docker Compose.
  • Hardware Intel com iGPU ativa (QuickSync).
  • Drivers de vídeo instalados no host (/dev/dri).
  • Permissões: O usuário do Docker precisa de acesso de leitura/escrita nas pastas.

Configuração de Pastas e Permissões (Obrigatório)

Antes de rodar qualquer versão, crie as pastas e ajuste as permissões para evitar erros de "Access Denied":

# 1. Crie as pastas de dados locais
mkdir -p data

# 2. Dê permissão total (O container roda internamente como root/user misto)
sudo chmod -R 777 data
sudo chmod -R 777 /home/creidsu/downloads  # Ajuste para sua pasta de mídia real

🚀 Opção A: Rodar em Produção (Imagem Pronta)

Use esta opção se você quer apenas usar o software sem compilar nada.

  1. Crie um arquivo docker-compose.yml com o conteúdo abaixo:
version: "3.8"
services:
  pymediamanager:
    # Imagem pronta do Registry (Não precisa compilar)
    image: gitea.creidsuhs.net/creidsu/pymediamanager:latest
    
    container_name: pymediamanager
    privileged: true  # Obrigatório para acesso total à GPU
    restart: unless-stopped
    
    # Acesso ao Hardware de Vídeo
    devices:
      - /dev/dri:/dev/dri
      
    # Grupo de Vídeo (Verifique o ID com 'ls -ln /dev/dri/renderD128')
    group_add:
      - "993"
      
    environment:
      - TZ=America/Sao_Paulo
      # O SEGREDO DO HASWELL: Força o driver antigo
      - LIBVA_DRIVER_NAME=i965
      
    volumes:
      # Apenas dados persistentes (Banco de dados e configs)
      - ./data:/app/data
      # Mapeamento de Mídia (Host : Container)
      - /sua/pasta/downloads:/downloads
      
    ports:
      - 8501:8501
  1. Execute:
# Baixa a imagem mais recente
docker-compose pull

# Sobe o servidor
docker-compose up -d

🏗️ Opção B: Compilar Localmente (Build)

Use esta opção se você está desenvolvendo ou alterou o código fonte.

  1. Clone o repositório:
git clone https://gitea.creidsuhs.net/creidsu/pymediamanager.git
cd pymediamanager
  1. Use este docker-compose.yml (focado em build):
version: "3.8"
services:
  pymediamanager:
    # Compila a partir da pasta atual
    build: .
    image: pymediamanager:local
    
    container_name: pymediamanager
    privileged: true
    restart: unless-stopped
    
    devices:
      - /dev/dri:/dev/dri
    group_add:
      - "993"
      
    environment:
      - TZ=America/Sao_Paulo
      - LIBVA_DRIVER_NAME=i965
      
    volumes:
      # Mapeia o código fonte para desenvolvimento (Hot-reload)
      # Nota: Se mudar a estrutura de pastas, remova este mapeamento e rebuilde
      # - ./app:/app 
      
      - ./data:/app/data
      - /sua/pasta/downloads:/downloads
      
    ports:
      - 8501:8501
  1. Compile e Execute:
# O --build força a recriação da imagem
docker-compose up -d --build

🖥️ Como Usar

Acesse no navegador: http://SEU-IP:8501

Aba 1: Gerenciador

Use para limpar o "lixo" (arquivos .txt, .nfo, samples) ou mover pastas inteiras antes de processar.

Aba 2: Renomeador

  1. Selecione a pasta da série (ex: /downloads/MinhaSerie).
  2. Clique em Analisar.
  3. Verifique a tabela de "De -> Para".
  4. Se estiver correto, clique em Confirmar.

Aba 3: Encoder

  1. Selecione a pasta organizada.
  2. Marque se deseja excluir o original após o sucesso.
  3. Clique em Iniciar.
  4. Pode fechar a aba! O processo roda em background. Ao voltar, ele mostrará o progresso atual.

🛠️ Solução de Problemas

1. Erro: Permission denied / Read-only file system

  • O container não tem permissão na pasta do host.
  • Solução: Rode sudo chmod -R 777 /caminho/dos/downloads.

2. Erro no Log: Failed to initialise VAAPI connection: -1

  • Conflito entre o driver novo (iHD) e o hardware antigo.
  • Solução: O script já possui uma função automática que tenta apagar o driver iHD e forçar o i965. Verifique se a variável LIBVA_DRIVER_NAME=i965 está no docker-compose.

3. Erro: 413 Payload Too Large ao fazer Push para o Gitea

  • O Proxy (Nginx/Cloudflare) está bloqueando o tamanho da imagem.
  • Solução: Desative o Proxy da Cloudflare (Nuvem Cinza) temporariamente ou configure client_max_body_size 0; no Nginx.

📦 Stack Tecnológica

  • Linguagem: Python 3.10
  • Frontend: Streamlit
  • Engine de Vídeo: FFmpeg (VAAPI Nativo)
  • Banco de Dados: SQLite + JSON (Estado)
  • Base OS: Ubuntu 22.04 LTS
Description
No description provided
Readme 53 KiB
Languages
Python 96.6%
Dockerfile 3.4%