formatado o readme

This commit is contained in:
2026-01-25 01:03:46 +00:00
parent beb39940e1
commit 5036b4b93f

199
README.md
View File

@@ -1,178 +1,157 @@
🎬 PyMedia Manager # 🎬 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. **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).
Otimizado para: Processadores Intel antigos (4ª Geração / Haswell) utilizando drivers i965 e FFmpeg via VAAPI nativo. > ⚡ **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
Navegação visual estilo "Explorer" dentro do servidor. ## ✨ Funcionalidades
Mover, Excluir e Criar pastas. ### 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.
Renomeação manual de arquivos individuais. ### 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.
2. 🏷️ Renomeador de Séries (Regex) ### 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`.
Detecção inteligente de padrões (Scene, Anime, P2P). ---
Suporta: S01E01, 1x01, S01 - EP01, Season 1 Episode 1. ## 🚀 Instalação e Deploy
Tabela de Preview antes de aplicar alterações. ### Pré-requisitos
* Docker e Docker Compose.
Organização automática: Move para Nome da Série/Temporada XX/Episódio YY.mkv. * Hardware Intel com iGPU ativa (QuickSync).
* Drivers de vídeo instalados no host (`/dev/dri`).
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
### 1. Clonar o Repositório
```bash
git clone http://seu-gitea-url/seu-usuario/pymediamanager.git git clone http://seu-gitea-url/seu-usuario/pymediamanager.git
cd pymediamanager cd pymediamanager
```
2. Estrutura de Pastas ### 2. Estrutura de Pastas Necessária
O projeto espera a seguinte estrutura. Crie as pastas se não existirem:
O projeto deve ter a seguinte estrutura básica. Crie as pastas de dados se não existirem:
code Bash
```bash
mkdir -p data mkdir -p data
mkdir -p downloads/concluidos mkdir -p app/modules
mkdir -p downloads/temp # As pastas de mídia geralmente ficam fora, ex: /home/user/downloads
mkdir -p downloads/finalizados ```
3. Permissões (Crítico) ### 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.
Como o container precisa manipular arquivos no host, garanta permissões de escrita na pasta do projeto e nas pastas de mídia: ```bash
code Bash # Permissão na pasta do projeto
# Dá permissão na pasta do projeto
sudo chmod -R 777 . sudo chmod -R 777 .
# Dá permissão na sua pasta de downloads (ajuste o caminho conforme necessário) # Permissão na pasta de mídia do Host
sudo chmod -R 777 /home/seu-usuario/downloads sudo chmod -R 777 /home/seu-usuario/downloads
```
4. Configuração do docker-compose.yml ### 4. Arquivo `docker-compose.yml`
Crie ou verifique o arquivo na raiz do projeto:
Crie ou edite o arquivo docker-compose.yml na raiz:
code Yaml
```yaml
version: "3.8" version: "3.8"
services: services:
pymediamanager: pymediamanager:
build: . build: .
container_name: pymediamanager container_name: pymediamanager
privileged: true # Necessário para acesso total ao hardware privileged: true # Obrigatório para acesso total à GPU
restart: unless-stopped restart: unless-stopped
# Mapeamento da Placa de Vídeo # Acesso ao Hardware de Vídeo
devices: devices:
- /dev/dri:/dev/dri - /dev/dri:/dev/dri
# Permissão do Grupo de Vídeo (Geralmente 993, 109 ou 'render') # Grupo de Vídeo (Verifique o ID com 'ls -ln /dev/dri/renderD128')
# Rode 'ls -ln /dev/dri' no host para descobrir o número correto do grupo render
group_add: group_add:
- "993" - "993"
environment: environment:
- TZ=America/Sao_Paulo - TZ=America/Sao_Paulo
# FORÇA O DRIVER ANTIGO PARA INTEL HASWELL (4ª GERAÇÃO) # O SEGREDO DO HASWELL: Força o driver antigo
- LIBVA_DRIVER_NAME=i965 - LIBVA_DRIVER_NAME=i965
volumes: volumes:
# Código Fonte # Código Fonte
- ./app:/app - ./app:/app
# Banco de Dados e Estados # Banco de Dados e Estados (Persistência)
- ./data:/app/data - ./data:/app/data
# Pastas de Mídia (Ajuste o lado esquerdo para o seu caminho real) # Mapeamento de Mídia (Host : Container)
- /home/creidsu/downloads:/downloads - /home/creidsu/downloads:/downloads
ports: ports:
- 8501:8501 - 8501:8501
```
5. Compilar e Rodar ### 5. Compilar e Rodar
Sempre que alterar o código ou o Dockerfile, use `--build`:
Para subir o sistema pela primeira vez ou após alterações no código:
code Bash
```bash
docker-compose up -d --build docker-compose up -d --build
```
Para acompanhar os logs em tempo real (útil para ver o FFmpeg trabalhando): Para ver os logs do FFmpeg em tempo real:
code Bash
```bash
docker logs -f pymediamanager docker logs -f pymediamanager
```
🖥️ Como Usar ---
Acesse no seu navegador: http://IP-DO-SERVIDOR:8501 ## 🖥️ Como Usar
Aba 1: Gerenciador
Use para limpar o "lixo" da pasta de downloads ou mover arquivos para pastas de séries antes de renomear. Acesse no navegador: **`http://IP-DO-SEU-SERVER:8501`**
Aba 2: Renomeador
Selecione a pasta da série (ex: /downloads/Frieren). ### Aba 1: Gerenciador
Use para limpar o "lixo" (arquivos `.txt`, `.nfo`, samples) ou mover pastas inteiras antes de processar.
Clique em Analisar. ### 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**.
Verifique a tabela de "De -> Para". ### 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.
Se estiver correto, clique em Confirmar. ---
Aba 3: Encoder ## 🛠️ Solução de Problemas
Selecione a pasta raiz ou a pasta da série. **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`.
Marque se deseja excluir o original após o sucesso. **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.
Clique em Iniciar. **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`.
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) ## 📦 Stack Tecnológica
Erro: Permission denied ao mover arquivos. * **Linguagem:** Python 3.10
* **Frontend:** Streamlit
Execute sudo chmod -R 777 /sua/pasta/downloads no host. O Docker precisa de permissão total para criar pastas e mover arquivos. * **Engine de Vídeo:** FFmpeg (via `subprocess`)
* **Banco de Dados:** SQLite + JSON (Estado)
Erro: Failed to initialise VAAPI connection no log. * **Container:** Docker (Ubuntu Base)
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)