Sistema robusto de download de capítulos de mangá com recuperação automática e monitoramento avançado.
- Python 3.x
- Node.js (22) e npm/yarn
- Chrome (para o undetected-chromedriver)
- PM2 (para auto-restart do servidor Python)
# Instalar dependências Python
pip install -r requirements.txt
# Instalar dependências Node.js
npm install
# Instalar PM2 para gerenciamento de processos
npm install -g pm2
Crie um arquivo .env
na raiz do projeto:
# Caminho da pasta de download
MANGA_BASE_PATH=D:\
# Modo do navegador: 1=Normal, 2=Minimizado, 3=Headless
BROWSER_MODE=2
# Configurações de proxy (opcional)
PROXY_URL=
API_URL=http://api:5001
# Iniciar com PM2 (recomendado - reinicia automaticamente)
pm2 start app.py --name "manga-proxy" --interpreter python
# Ver status do servidor
pm2 status
# Ver logs em tempo real
pm2 logs manga-proxy -f
# Parar servidor
pm2 stop manga-proxy
O PM2 pode abrir janelas CMD extras no Windows. Isso é normal! Soluções:
# Opção 1: Iniciar sem mostrar janelas (recomendado)
pm2 stop all && pm2 delete all
pm2 start app.py --name "manga-proxy" --interpreter python --silent
# Opção 2: Fechar janelas CMD abertas (cuidado!)
taskkill /F /IM cmd.exe /FI "WINDOWTITLE eq python*"
# Opção 3: Se persistir, simplesmente minimize as janelas
# O sistema funciona normalmente com elas minimizadas
# Modo normal (uma obra)
npx ts-node --transpileOnly src/consumer/sussy.ts
# Modo batch (múltiplas obras do obra_urls.txt)
npx ts-node --transpileOnly src/consumer/sussy.ts urls
# Modo rentry (reprocessar falhas)
npx ts-node --transpileOnly src/consumer/sussy.ts rentry
# Outros providers
npx ts-node --transpileOnly src/consumer/seita.ts
npx ts-node --transpileOnly src/consumer/generic_wp.ts
- Auto-recovery: Servidor Python reinicia automaticamente se travar
- Rate limiting: Controle inteligente de requisições (2s mínimo)
- Emergency restart: Reset automático em erros críticos
- Monitoramento avançado: Estatísticas em tempo real
- Configurável via .env: Escolha o diretório de download
- Sistema de retry: 3 tentativas por capítulo com backoff exponencial
- Reprocessamento automático: Modo rentry para falhas
- Logging detalhado: Logs separados por sucesso/falha
- Bypass Cloudflare: Contorna proteções automaticamente
- Downloads concorrentes: 5 downloads simultâneos por capítulo
- Timeouts progressivos: Aumentam automaticamente em caso de problemas
- Detecção anti-bot: Identifica e contorna proteções JavaScript
# Health check do servidor
curl http://localhost:3333/health
# Status detalhado PM2
pm2 status
# Monitor visual com CPU/RAM
pm2 monit
# Logs em tempo real
pm2 logs manga-proxy -f
# Estatísticas de uptime
pm2 show manga-proxy
# Emergency restart do servidor (sem PM2)
curl -X POST http://localhost:3333/emergency-restart
# Reiniciar PM2
pm2 restart manga-proxy
# Reset completo
pm2 delete all && pm2 start app.py --name "manga-proxy" --interpreter python
projeto/
├── manga/ # Downloads (ou path configurado)
├── logs/
│ ├── success/ # Logs de sucessos por obra
│ └── failed/ # Logs de falhas por obra
├── obra_urls.txt # URLs para modo batch
├── url_fails.txt # URLs de falhas para reentry
└── .env # Configurações
# Build e execução com Docker
docker-compose up --build
# Executar todos os testes
npx jest
# Teste específico
npx jest --testPathPattern=provider_repository.test.ts
npm run dev # Modo desenvolvimento
npm run prod # Modo produção
npm run debug # Modo debug com inspector
npm run dex # Download específico do MangaDex
- Servidor não inicia: Verifique porta 3333 livre
- ECONNREFUSED: Servidor Python travou - PM2 reinicia automaticamente
- Timeout requests: Rate limiting ativo - aguarde
- Chrome crashes: Emergency restart automático
- Janelas CMD aparecem: Normal no Windows - minimize ou use
--silent
- Chrome travado:
taskkill /F /IM chrome.exe
- Porta ocupada:
netstat -ano | findstr :3333
- Janelas CMD:
pm2 start app.py --name "manga-proxy" --interpreter python --silent
- Fechar CMD:
taskkill /F /IM cmd.exe /FI "WINDOWTITLE eq python*"
- Reset completo: Reinicie o PM2 e delete pasta manga temporariamente
- Python Flask (app.py): Servidor proxy com bypass Cloudflare
- TypeScript Consumers: Downloaders com retry e logging
- PM2: Gerenciador de processos com auto-restart
- Provider Pattern: Sistema extensível para novos sites
- Retry por capítulo: 3 tentativas com backoff exponencial
- Reprocessamento por obra: Segunda fase para falhas
- Recovery cíclico: Até 10 ciclos automáticos de rentry
- Timeouts progressivos: Aumento de 50% por ciclo (15s → 22.5s → 30s...)
- Capítulos novos: Comparação com logs para detectar novos vs já baixados
- Proteção anti-bot: Detecção de JavaScript ofuscado e challenges
- Validação de capítulos: Detecção de 0 páginas e retry automático
- Logging de falhas: Persistência em
url_fails.txt
para reprocessamento
manga/[nome-sanitizado]/[numero-capitulo]/[pagina].jpg
logs/
├── success/[obra].json # Sucessos por obra
├── failed/[obra].json # Falhas por obra
└── ...
- ALWAYS start Python server with PM2 (
pm2 start app.py --name "manga-proxy" --interpreter python
) - Server must be running on port 3333 before executing downloaders
- System uses logs to avoid unnecessary re-downloads
- Docker support available for deployment
- Log files serve as application state