🎬 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
i965e FFmpeg viaVAAPInativo 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
i965e 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.
- Crie um arquivo
docker-compose.ymlcom 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
- 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.
- Clone o repositório:
git clone https://gitea.creidsuhs.net/creidsu/pymediamanager.git
cd pymediamanager
- 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
- 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
- Selecione a pasta da série (ex:
/downloads/MinhaSerie). - Clique em Analisar.
- Verifique a tabela de "De -> Para".
- Se estiver correto, clique em Confirmar.
Aba 3: Encoder
- Selecione a pasta organizada.
- 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.
🛠️ 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
iHDe forçar oi965. Verifique se a variávelLIBVA_DRIVER_NAME=i965está 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