# 🎬 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": ```bash # 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: ```yaml 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 ``` 2. **Execute:** ```bash # 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: ```bash git clone https://gitea.creidsuhs.net/creidsu/pymediamanager.git cd pymediamanager ``` 2. Use este `docker-compose.yml` (focado em build): ```yaml 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 ``` 3. **Compile e Execute:** ```bash # 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