🎬 PyMedia Manager

PyMedia Manager é uma solução completa e self-hosted para organização e otimização de bibliotecas de mídia. Ele atua como uma interface centralizada para gerenciar downloads, renomear séries automaticamente com padrões complexos e transcodificar vídeos usando aceleração de hardware.

Otimizado para: Processadores Intel antigos (4ª Geração / Haswell) utilizando drivers i965 e FFmpeg via VAAPI nativo.

Funcionalidades

  1. 📂 Gerenciador de Arquivos

    Navegação visual estilo "Explorer" dentro do servidor.

    Mover, Excluir e Criar pastas.

    Renomeação manual de arquivos individuais.

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

    Detecção inteligente de padrões (Scene, Anime, P2P).

    Suporta: S01E01, 1x01, S01 - EP01, Season 1 Episode 1.

    Tabela de Preview antes de aplicar alterações.

    Organização automática: Move para Nome da Série/Temporada XX/Episódio YY.mkv.

  3. ⚙️ Encoder (FFmpeg Haswell)

    Backend Persistente: O processo continua rodando mesmo se fechar o navegador (sobrevive ao F5).

    Aceleração de Hardware: Uso nativo de h264_vaapi sobre o driver i965.

    Preservação de Áudio/Legenda: Mantém áudios (POR/ENG/JPN) e legendas (PT-BR) copiando o stream (copy), sem perda de qualidade.

    Estrutura Espelhada: Replica a estrutura de pastas da origem para a pasta finalizados.

🚀 Instalação e Deploy Pré-requisitos

Docker e Docker Compose instalados.

Hardware Intel com iGPU ativa (QuickSync).

Drivers de vídeo no host (/dev/dri).
  1. Clonar o Repositório code Bash

git clone http://seu-gitea-url/seu-usuario/pymediamanager.git cd pymediamanager

  1. Estrutura de Pastas

O projeto deve ter a seguinte estrutura básica. Crie as pastas de dados se não existirem: code Bash

mkdir -p data mkdir -p downloads/concluidos mkdir -p downloads/temp mkdir -p downloads/finalizados

  1. Permissões (Crítico)

Como o container precisa manipular arquivos no host, garanta permissões de escrita na pasta do projeto e nas pastas de mídia: code Bash

Dá permissão na pasta do projeto

sudo chmod -R 777 .

Dá permissão na sua pasta de downloads (ajuste o caminho conforme necessário)

sudo chmod -R 777 /home/seu-usuario/downloads

  1. Configuração do docker-compose.yml

Crie ou edite o arquivo docker-compose.yml na raiz: code Yaml

version: "3.8" services: pymediamanager: build: . container_name: pymediamanager privileged: true # Necessário para acesso total ao hardware restart: unless-stopped

# Mapeamento da Placa de Vídeo
devices:
  - /dev/dri:/dev/dri
  
# Permissão do Grupo de Vídeo (Geralmente 993, 109 ou 'render')
# Rode 'ls -ln /dev/dri' no host para descobrir o número correto do grupo render
group_add:
  - "993"
  
environment:
  - TZ=America/Sao_Paulo
  # FORÇA O DRIVER ANTIGO PARA INTEL HASWELL (4ª GERAÇÃO)
  - LIBVA_DRIVER_NAME=i965
  
volumes:
  # Código Fonte
  - ./app:/app
  # Banco de Dados e Estados
  - ./data:/app/data
  # Pastas de Mídia (Ajuste o lado esquerdo para o seu caminho real)
  - /home/creidsu/downloads:/downloads
  
ports:
  - 8501:8501
  1. Compilar e Rodar

Para subir o sistema pela primeira vez ou após alterações no código: code Bash

docker-compose up -d --build

Para acompanhar os logs em tempo real (útil para ver o FFmpeg trabalhando): code Bash

docker logs -f pymediamanager

🖥️ Como Usar

Acesse no seu navegador: http://IP-DO-SERVIDOR:8501 Aba 1: Gerenciador

Use para limpar o "lixo" da pasta de downloads ou mover arquivos para pastas de séries antes de renomear. Aba 2: Renomeador

Selecione a pasta da série (ex: /downloads/Frieren).

Clique em Analisar.

Verifique a tabela de "De -> Para".

Se estiver correto, clique em Confirmar.

Aba 3: Encoder

Selecione a pasta raiz ou a pasta da série.

Marque se deseja excluir o original após o sucesso.

Clique em Iniciar.

Pode fechar a aba! O processo roda em background. Ao voltar, ele mostrará o progresso atual lendo o arquivo de estado.

🛠️ Solução de Problemas (Troubleshooting)

Erro: Permission denied ao mover arquivos.

Execute sudo chmod -R 777 /sua/pasta/downloads no host. O Docker precisa de permissão total para criar pastas e mover arquivos.

Erro: Failed to initialise VAAPI connection no log.

Isso geralmente é conflito de driver. O sistema foi projetado para apagar automaticamente o driver iHD (novo) e usar o i965 (antigo).

Verifique se LIBVA_DRIVER_NAME=i965 está no docker-compose.

Verifique se o seu processador é realmente Haswell/Broadwell (Gen 4/5). Se for mais novo (Gen 8+), remova a variável de ambiente e o código de limpeza de driver.

Erro: Docker não sobe (group render not found).

O ID do grupo render muda de Linux para Linux.

Rode ls -ln /dev/dri/renderD128. O segundo número (ex: 993, 107) é o ID do grupo. Coloque esse número em group_add no docker-compose.

📝 Tecnologias

Python 3.10+

Streamlit (Interface Web)

FFmpeg (Engine de Transcodificação)

SQLite (Banco de Dados Local)

Docker (Containerização)
Description
No description provided
Readme 53 KiB
Languages
Python 96.6%
Dockerfile 3.4%