Files
pymediamanager/README.md
2026-01-25 01:35:13 +00:00

167 lines
5.6 KiB
Markdown

# 🎬 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`.
---
## 🚀 Instalação e Deploy
### Pré-requisitos
* Docker e Docker Compose.
* Hardware Intel com iGPU ativa (QuickSync).
* Drivers de vídeo instalados no host (`/dev/dri`).
### 1. Clonar o Repositório
```bash
git clone http://seu-gitea-url/seu-usuario/pymediamanager.git
cd pymediamanager
```
### 2. Estrutura de Pastas Necessária
O projeto espera a seguinte estrutura. Crie as pastas se não existirem:
```bash
mkdir -p data
mkdir -p app/modules
# As pastas de mídia geralmente ficam fora, ex: /home/user/downloads
```
### 3. Configurar Permissões (Crítico ⚠️)
O Docker precisa de permissão total para ler, escrever, criar pastas e deletar arquivos no seu diretório de downloads.
```bash
# Permissão na pasta do projeto
sudo chmod -R 777 .
# Permissão na pasta de mídia do Host
sudo chmod -R 777 /home/seu-usuario/downloads
```
### 4. Arquivo `docker-compose.yml`
```yaml
version: "3.8"
services:
pymediamanager:
# --- MUDANÇA PRINCIPAL ---
# Baixa a imagem pronta do seu Gitea em vez de compilar
image: gitea.creidsuhs.net/creidsu/pymediamanager:latest
container_name: pymediamanager
privileged: true # Necessário para acessar o /dev/dri
restart: unless-stopped
# Acesso ao Hardware Intel
devices:
- /dev/dri:/dev/dri
# Grupo de renderização (seu ID específico)
group_add:
- "993"
environment:
- TZ=America/Sao_Paulo
# OBRIGATÓRIO PARA HASWELL: Força o driver i965
- LIBVA_DRIVER_NAME=i965
volumes:
# IMPORTANTE: Não mapeamos mais a pasta './app'
# pois o código já está dentro da imagem.
# Persistência do Banco de Dados e Status:
- ./data:/app/data
# Suas pastas de mídia:
- /home/creidsu/downloads:/downloads
ports:
- 8501:8501
```
### Como rodar agora (e no futuro)
No servidor, para subir essa versão:
1. **Baixar a versão mais recente:**
```bash
docker-compose pull
```
2. **Recriar o container:**
```bash
docker-compose up -d
```
Para ver os logs do FFmpeg em tempo real:
```bash
docker logs -f pymediamanager
```
---
## 🖥️ Como Usar
Acesse no navegador: **`http://IP-DO-SEU-SERVER: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 raiz da série (ex: `/downloads/MinhaSerie`).
2. Clique em **Analisar**.
3. Confira a tabela. Se o Regex pegou tudo certo, clique em **Confirmar Renomeação**.
### Aba 3: Encoder
1. Selecione a pasta organizada.
2. Marque se deseja excluir os originais após o sucesso.
3. Clique em **Iniciar**.
4. O sistema criará o arquivo `encoder_status.json`. A interface vai ler esse arquivo a cada 5 segundos.
5. **Pode fechar a aba!** O servidor continuará trabalhando.
---
## 🛠️ 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 `worker.py` já possui uma função `prepare_driver_environment()` 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. Docker não inicia (`group 'render' not found`)**
* O ID do grupo de vídeo muda de sistema para sistema.
* **Solução:** No terminal do host, digite `ls -ln /dev/dri`. Pegue o segundo número (ex: 993, 107) e coloque no `group_add` do `docker-compose.yml`.
---
## 📦 Stack Tecnológica
* **Linguagem:** Python 3.10
* **Frontend:** Streamlit
* **Engine de Vídeo:** FFmpeg (via `subprocess`)
* **Banco de Dados:** SQLite + JSON (Estado)
* **Container:** Docker (Ubuntu Base)