Workflows: Modos de Ejecución
Modo Orquestador (Recomendado)
Integración completa vía singularity.py. La interfaz te guía paso a paso sin necesidad de configuración manual.
Ventajas
✅ Configuración centralizada desde .env
✅ Interfaz interactiva con validaciones
✅ Gestión automática de credenciales (COOKIE, API_KEYS)
✅ Logging unificado a través de status_manager.py
✅ Sin archivos config.py dispersos
Pasos
1. Preparar Credenciales en .env
En la raíz del proyecto, edita o crea .env:
# Credenciales del Tracker UNIT3D
UNIT3D_BASE_URL=https://tu-tracker.org
UNIT3D_USERNAME=TuUsuario
UNIT3D_COOKIE_NAME=milnueve_session # O el nombre específico del tracker
UNIT3D_COOKIE_VALUE=abc123xyz789... # Extraída de DevTools
# Metadatos para inyección
UNIT3D_MSG_NUEVO="[center][b]🌱 ¡Mantén viva la comunidad compartiendo![/b][/center]"
UNIT3D_BANNER_URL="https://i.ibb.co/banner.webp"
# APIs para resurrección de imágenes
IMGBB_API=tu_api_key_aqui
PTSCREENS_API=opcional_api_key
# Rutas locales
TMPDIR_PATH=/app/RawLoadrr/tmp
2. Lanzar singularity.py
3. Seleccionar Opción
En el menú principal, elige:
4. Configurar Masa de Edición
El orquestador preguntará:
┌─────────────────────────────────────────┐
│ UNIT3D Mass Edition - Configuración │
├─────────────────────────────────────────┤
│ Banner a inyectar [URL/None]: [INPUT] │
│ ID inicio [1]: [INPUT] │
│ ID fin [500]: [INPUT] │
│ Ejecutar fase 01 (Scraper)? [S/n]: S │
│ Ejecutar fase 02 (Indexer)? [S/n]: S │
│ Ejecutar fase 03 (Updater)? [S/n]: S │
│ Ejecutar fase 04 (Resurrector)? [S/n]: S│
└─────────────────────────────────────────┘
Selección Granular
Puedes ejecutar solo algunas fases. Por ejemplo, si ya tienes ids.txt y mapeo_maestro.json del Modo Manual, salta a la fase 03.
5. Monitoreo en Tiempo Real
- Dashboard: Abre
http://localhost:8000para ver progreso en vivo - Logs: Revisa
logs/unit3d_mass_edition.logpara detalles - Status Manager: Actualización automática cada 5 segundos
6. Resumen Final
═══════════════════════════════════════════════════
✅ UNIT3D Mass Edition - Ejecución Completada
═══════════════════════════════════════════════════
Fase 01 (Scraper): ✅ 523 IDs extraídos
Fase 02 (Indexer): ✅ 518 torrents mapeados
Fase 03 (Updater): ✅ 510 metadatos restaurados
Fase 04 (Resurrector): ✅ 510 imágenes reparadas
⏱️ Tiempo total: 2h 14m 32s
📊 Tasa media: 1 torrent cada 15.5s
═══════════════════════════════════════════════════
Modo Manual (Standalone)
Para ejecuciones aisladas, debugging o si no usas singularity.py.
Pre-requisitos
- ✅ Python 3.8+
- ✅ Dependencias instaladas:
pip install -r requirements.txt - ✅ Variables de entorno configuradas (o archivo
config.py)
Estructura de Directorios
extras/MASS-EDITION-UNIT3D/
├── 01_scraper.py
├── 02_indexer.py
├── 03_mass_updater.py
├── 04_image_resurrector.py
├── config.py # ← Creas este
├── ids.txt # ← Generado por 01
├── mapeo_maestro.json # ← Generado por 02
├── completados.txt # ← Generado por 03
├── completados_resurrector.txt # ← Generado por 04
└── requirements.txt
Paso 1: Crear config.py
En extras/MASS-EDITION-UNIT3D/, crea config.py:
# config.py
import os
from pathlib import Path
# ===== CREDENCIALES DEL TRACKER =====
BASE_URL = os.getenv("UNIT3D_BASE_URL", "https://tu-tracker.org")
USERNAME = os.getenv("UNIT3D_USERNAME", "TuUsuario")
COOKIE_NAME = os.getenv("UNIT3D_COOKIE_NAME", "session_cookie")
COOKIE_VALUE = os.getenv("UNIT3D_COOKIE_VALUE", "abc123xyz789...")
# ===== METADATOS DE INYECCIÓN =====
MSG_VIEJO = "[center][b]PLEASE SEED TRACKER[/b][/center]"
MSG_NUEVO = os.getenv("UNIT3D_MSG_NUEVO",
"[center][b]¡Quédate seeding para mantener viva la comunidad![/b][/center]")
BANNER_VIEJO = "https://old-banner-url.com/banner.png"
BANNER_NUEVO = os.getenv("UNIT3D_BANNER_URL",
"https://i.ibb.co/banner-nuevo.png")
# ===== RUTAS LOCALES =====
TMP_ROOT = os.getenv("TMPDIR_PATH", "/app/RawLoadrr/tmp")
# ===== APIs PARA IMÁGENES =====
IMGBB_API = os.getenv("IMGBB_API", "")
PTSCREENS_API = os.getenv("PTSCREENS_API", "")
# ===== VALIDACIONES =====
if not COOKIE_VALUE or COOKIE_VALUE == "abc123xyz789...":
raise ValueError("❌ COOKIE_VALUE no configurada en config.py o .env")
if not os.path.exists(TMP_ROOT):
raise ValueError(f"❌ TMP_ROOT no existe: {TMP_ROOT}")
Manejo de Secretos
Nunca hagas commit de config.py con valores reales. Usa variables de entorno:
Paso 2: Configurar Variables de Entorno (Opcional)
Define el rango de IDs a procesar (usado por algunos scripts avanzados):
Si no se definen, los scripts procesan el rango completo encontrado.
Paso 3: Ejecutar en Orden Estricto
cd extras/MASS-EDITION-UNIT3D/
# Fase 01: Extraer IDs
python3 01_scraper.py
# Resultado: ids.txt
# Fase 02: Indexar
python3 02_indexer.py
# Resultado: mapeo_maestro.json
# Fase 03: Actualizar Metadatos
python3 03_mass_updater.py
# Resultado: completados.txt
# Checkpoint: Puedes reintentar si falla
# Fase 04: Resucitar Imágenes
python3 04_image_resurrector.py
# Resultado: completados_resurrector.txt
# + Descripciones sincronizadas
Paso 4: Monitoreo Manual
Sin dashboard, revisa:
# Ver progreso en tiempo real (tail -f)
tail -f completados.txt
tail -f completados_resurrector.txt
# Contar torrents procesados
wc -l completados.txt
# Buscar errores en stdout (guarda output)
python3 03_mass_updater.py 2>&1 | tee updater.log
Reanudación Automática
Si se interrumpe la fase 03:
# El script detecta completados.txt y salta IDs ya procesados
python3 03_mass_updater.py
# ℹ️ Total: 523 | ✅ Completados: 150 | ⏳ Pendientes: 373
Análogamente para fase 04 con completados_resurrector.txt.
Paso 5: Limpieza (Opcional)
Después de verificar que todo es correcto:
# Backup de archivos de control
mkdir backups/
mv completados.txt backups/completados_$(date +%Y%m%d_%H%M%S).txt
mv completados_resurrector.txt backups/
# Limpiar si necesitas reprocesar (CUIDADO)
rm ids.txt mapeo_maestro.json completados.txt completados_resurrector.txt
Tabla Comparativa: Orquestador vs Manual
| Aspecto | Orquestador | Manual |
|---|---|---|
| Setup | singularity.py → 1 minuto |
config.py → 5 minutos |
| Credenciales | Centralizadas en .env |
Distribuidas en config.py + exports |
| Logging | Dashboard en localhost:8000 |
tail -f + archivos log |
| Reanudación | Automática, interfaz amigable | Semi-automática, manual |
| Granularidad | Seleccionar fases por menú | Control exacto por terminal |
| Debugging | Verbose logs en dashboard | Directo en stdout |
| Recomendado para | Usuarios GUI, automatización CI/CD | Desarrolladores, troubleshooting |
Flujo de Trabajo Recomendado
Para Producción (500+ torrents)
Orquestador + Dashboard
├─ Configurar .env una sola vez
├─ Lanzar singularity.py
├─ Seleccionar UNIT3D Edition
├─ Dejar corriendo (≈3-4 horas para 1000 torrents)
└─ Revisar dashboard cada hora para alertas
Para Debugging / Pequeña Escala (< 50 torrents)
Modo Manual
├─ Crear config.py
├─ python3 01_scraper.py (editar ids.txt manualmente si es preciso)
├─ python3 02_indexer.py (verificar mapeo_maestro.json)
├─ python3 03_mass_updater.py (inspeccionar completados.txt)
└─ python3 04_image_resurrector.py (validar sincronización)
Para CI/CD (Automatización Noctuna)
#!/bin/bash
set -e
# Cargar credenciales del vault
source /secure/vault/.env
# Ejecutar pipeline completo
cd /app/RawLoadrr/extras/MASS-EDITION-UNIT3D/
python3 01_scraper.py
python3 02_indexer.py
python3 03_mass_updater.py
python3 04_image_resurrector.py
# Enviar reporte por email
mail -s "UNIT3D Edition: Completado" admin@tracker.org < completados.txt
Script de Automatización
Guarda este script como run_full_pipeline.sh en el directorio del proyecto para ejecutar el pipeline completo sin intervención.