Saltar a contenido

MKVerything — El Cirujano de Medios

"Estandarización absoluta. Integridad innegociable."

MKVerything es el motor de saneamiento de Singularity Core. Su objetivo es convertir cualquier biblioteca de medios heterogénea en una colección de archivos MKV limpios, verificados y listos para su distribución.

🎯 ¿Para qué sirve?

  • Extrae el contenido principal de imágenes ISO (DVD/Blu-ray) automáticamente.
  • Moderniza formatos obsoletos (.avi, .mp4, .wmv) a MKV moderno.
  • Rescata archivos MKV corruptos mediante remuxado o re-encodado.
  • Limpia metadatos de spam (anuncios de grupos, links, etc.).

🛠️ ¿Cómo usarlo?

  1. Desde el menú Singularity: Pulsa 1 para entrar en el submenú de MKVerything.
  2. Modos disponibles:
    • Launcher [1.1]: Acceso al menú interactivo completo.
    • Setup [1.2]: Verificación rápida de dependencias.
    • Test [1.3]: Comprobación de binarios instalados.

Para procesar una biblioteca completa de forma desatendida, selecciona la Opción [5] (God Mode) dentro del Launcher.

⚙️ Funcionamiento Interno (The Guts)

El núcleo de MKVerything son dos subsistemas independientes:

I. Auditoría Forense en 4 Capas (Verifier)

Antes de procesar cualquier archivo, se ejecuta un algoritmo de verificación en 4 capas:

  1. Capa 1 (Estructura): mkvmerge -I valida que el contenedor MKV es íntegro.
  2. Capa 2 (Streams): ffprobe verifica que cada stream (audio, video, subs) es legible.
  3. Capa 3 (Decodificación): ffmpeg -f null - ejecuta un escaneo nulo completo. Si hay errores de bitstream, el archivo falla aquí.
  4. Capa 4 (Coherencia): Se comparan size/duration con el original para detectar "falsos positivos".

Si pasa todas las capas → Archivo validado. Si falla cualquiera → Escalada a Universal Rescuer.

II. La Escalera de Resiliencia (Universal Rescuer)

Si un archivo falla en Verifier, Universal Rescuer lo procesa en paralelo/NVMe (FAST_WORK_DIR = /app/RawLoadrr/tmp/TEMP_RESCUE) y prueba 4 niveles de rescate en orden decreciente de sofisticación:

graph TD
    Input[Archivo Fallido] --> L3{Nivel 3:<br/>VapourSynth+HW}

    L3 -->|✅ Éxito| Success[MKV Rescatado]
    L3 -->|❌ Fallo| L2{Nivel 2:<br/>Remux Médico}

    L2 -->|✅ Éxito| Success
    L2 -->|❌ Fallo| L1{Nivel 1:<br/>Re-Encode Bruto}

    L1 -->|✅ Éxito| Success
    L1 -->|❌ Fallo| L0[Nivel 0:<br/>Salvaguarda]

    L0 --> Manual[REQUIRES_MANUAL_REVIEW]
    Success --> Validate[Re-Validar con Verifier]
    Validate -->|✅| Replace[Reemplazar Original<br/>Atómicamente]
  • Nivel 3 (VapourSynth + Hardware): El Cirujano Endovascular

    • Ubicación del código: universal_rescuer.py:execute_strategy(level=3)
    • Dependencias forjadas: VapourSynth R73, L-SMASH-Works (compilado desde fuente), zimg
    • Lógica: Genera un script VapourSynth que utiliza core.lsmas.LWLibavSource() para "cateterizar" el archivo a bajo nivel, evitando rechazos por corrupción de contenedor. La salida va a vspipe -c y4m | ffmpeg con argumentos HW del HardwareAgent.
    • Cuándo actúa: Especialista en "trauma estructural" (contenedores dañados pero streams viables).
    • Duración: ~30-60% más rápido que re-encod completo.
  • Nivel 2 (Remux Médico): El Cirujano de Pistas

    • Ubicación del código: universal_rescuer.py:execute_strategy(level=2)
    • Comando exacto:
      ffmpeg -hide_banner -y -fflags +genpts -i <input> \
        -map 0 -c:v copy -c:a aac -af aresample=async=1 \
        -c:s srt <output>
      
    • Qué hace: Copia el stream de video intacto, pero re-encodifica audio a AAC y subs a SRT. El flag -fflags +genpts regenera timestamps y aresample=async=1 sincroniza el audio cuando hay desincronización.
    • Cuándo actúa: Video sano, pero audio/subs corruptos o en formatos raros (DTS, ASS inválido, etc.).
    • Duración: ~5-10% del tiempo de re-encod completo.
  • Nivel 1 (Re-Encode Bruto + Fallback Automático): La Fuerza Bruta Inteligente

    • Ubicación del código: universal_rescuer.py:execute_strategy(level=1)
    • Intento 1.1 (HW): Intenta H.264 con GPU (AMD VA-API, NVIDIA NVENC, Intel QSV, según HardwareAgent).
      • Trigger de fallback: Si stderr contiene "Could not write header", significa que el header está corrompido incluso en re-encod. Salta a fallback automáticamente.
      • Comando: ffmpeg -hide_banner -y -i <input> -map 0 <hw_args> <output>
    • Intento 1.2 (CPU Tank): Si HW falla por cualquier motivo, activa automáticamente:
      ffmpeg -hide_banner -y -i <input> \
        -c:v libx264 -preset fast -crf 22 \
        -c:a aac -b:a 128k -c:s srt \
        -map 0:v:0 -map 0:a? -map 0:s? \
        -ignore_unknown -map_metadata -1 \
        -metadata:s:v:0 sar=1/1 \
        -fflags +genpts+igndts+discardcorrupt <output>
      
      • Correcciones extras en CPU Tank:
        • -metadata:s:v:0 sar=1/1: Endereza aspect ratio corrompido por WinX/MediaPlayer.
        • -fflags +discardcorrupt: Descarta frames dañados en lugar de crashear.
        • -ignore_unknown: Ignora streams desconocidos.
    • Cuándo actúa: Stream de video dañado a nivel de datos.
    • Duración: ~1-4 horas según resolución y duración.
  • Nivel 0 (Salvaguarda): Rendición Táctica

    • Ubicación del código: universal_rescuer.py:transcodificar_archivo() (final)
    • Acción: NO modifica el archivo original. Genera una línea en el log: 🛑 REQUIRES_MANUAL_REVIEW: <ruta_origen>
    • Cuándo actúa: Protege contra "garbage in = garbage out". Un archivo que falla todos los 3 niveles probablemente está irrecuperable o su formato es desconocido.

🔧 Configuración y Ajustes

Personalización de SPAM

Puedes ajustar qué términos se consideran spam editando singularity_config.py:

SPAM_KEYWORDS = [
    "rarbg", "yify", "ettv", "www.", ".com", "torrent", ...
]
MKVerything eliminará estos términos de los títulos de las pistas y comentarios globales durante el procesado.

Resiliencia y Seguridad

  • Sacralidad de ISOs: El sistema nunca elimina una imagen ISO. Solo extrae su contenido.
  • Eliminación Segura: Los archivos originales (.avi, .mp4) solo se borran tras pasar con éxito la Capa 4 de verificación del nuevo MKV.
  • Estado Persistente: Los progresos se guardan en MKVerything/states/. Si detienes el proceso, al reiniciarlo saltará los archivos ya procesados con éxito.