% ---------------------------------------------------------------------------------------
%   CONFIGURACIÓN DEL DOCUMENTO
% ---------------------------------------------------------------------------------------
% \documentclass define el tipo de documento y las opciones base.
% - 11pt: Tamaño de fuente base. Un buen equilibrio entre densidad y legibilidad.
% - a4paper: Define el tamaño del papel estándar internacional.
\documentclass[11pt, a4paper]{article}


% %%% --- IMPORTACIÓN DE PAQUETES --- %%%
% Los paquetes añaden nuevas funcionalidades a LaTeX.

% --- Paquetes Esenciales ---
\usepackage[utf8]{inputenc}             % Permite escribir caracteres UTF-8 (acentos, ñ) directamente.
\usepackage[T1]{fontenc}                % Codificación de fuentes moderna para una correcta visualización y copiado de PDF.
\usepackage[spanish,es-noshorthands]{babel} % Soporte para el idioma español. La opción 'es-noshorthands' es
                                        % CRÍTICA para evitar conflictos con otros paquetes.

% --- Configuración de Página y Diseño ---
\usepackage{geometry}                   % Para configurar los márgenes y el diseño de la página.
\usepackage{graphicx}                   % Para incluir imágenes (\includegraphics).
\usepackage{fancyhdr}                   % Para personalizar encabezados y pies de página.
\usepackage{xcolor}                     % Para usar colores por nombre o código (HTML, RGB, etc.).
\usepackage{float}                      % Proporciona el especificador [H] para "flotar aquí exactamente".

% --- Tipografía y Estilo de Texto ---
% \usepackage{firasans}                 % EJEMPLO: Fuente Sans-Serif moderna (mantener comentada si no está instalada).
\usepackage{textcomp}                   % Provee símbolos adicionales como el de copyright.
\usepackage{fontawesome5}               % Permite usar iconos de Font Awesome (ej: \faInfoCircle).

% --- Tablas, Listas y Cajas ---
\usepackage{booktabs}                   % Para crear tablas de aspecto profesional (\toprule, \midrule, \bottomrule).
\usepackage{longtable}                  % Para tablas que pueden ocupar varias páginas.
\usepackage{tabularx}                   % Para tablas con columnas de ancho flexible que ocupan todo el ancho del texto.
\usepackage{array}                      % Herramientas avanzadas para columnas en tablas.
\usepackage{enumitem}                   % Para un control avanzado sobre el formato de las listas (itemize, enumerate).
\usepackage{tcolorbox}                  % Para crear cajas de texto coloreadas y personalizables.
\usepackage{titlesec}                   % Para personalizar el formato de los títulos de sección (\section, \subsection).
\usepackage{titletoc}                   % Control sobre la tabla de contenidos.

% --- Utilidades y Enlaces ---
\usepackage{hyperref}                   % Para crear hipervínculos dentro del documento y a URLs externas.
                                        % Es una buena práctica cargarlo al final.


% %%% --- CONFIGURACIÓN DE GEOMETRÍA DE LA PÁGINA --- %%%
% Se definen los márgenes y espacios para el encabezado/pie de página.
\geometry{
  a4paper,          % Tamaño de papel
  margin=2.5cm,     % Margen uniforme para todos los lados
  headheight=15pt,  % Altura reservada para el encabezado
  footskip=30pt     % Distancia desde el final del texto hasta el pie de página
}


% %%% --- PALETA DE COLORES PERSONALIZADA --- %%%
% Se define una paleta de colores corporativa para mantener la consistencia visual.
% Se usa el modelo HTML para una fácil selección desde herramientas de diseño.
\definecolor{WarlockRed}{HTML}{C11919}
\definecolor{WarlockGold}{HTML}{ECD125}
\definecolor{WarlockDark}{HTML}{212325}
\definecolor{WarlockGray}{HTML}{333333}
\definecolor{WarlockLightGray}{HTML}{F5F5F5}
\definecolor{WarlockBlue}{HTML}{005A9B}
\definecolor{InfoBlue}{HTML}{E7F3FE}
\definecolor{WarnYellow}{HTML}{FFFBE6}
\definecolor{WarnBorder}{HTML}{FFBE0B}

% Se establece el color de texto por defecto para todo el documento.
\color{WarlockGray}


% %%% --- CONFIGURACIÓN DE HIPERVÍNCULOS --- %%%
% Se personaliza la apariencia de los enlaces generados por 'hyperref'.
\hypersetup{
    colorlinks=true,                  % Los enlaces serán coloreados en lugar de encajonados.
    linkcolor=WarlockRed,             % Color para enlaces internos (a secciones, figuras, etc.).
    filecolor=WarlockRed,             % Color para enlaces a archivos locales.
    urlcolor=WarlockRed,              % Color para enlaces a URLs externas.
    pdftitle={Warlock-Studio 2.2 User Manual & Technical Documentation}, % Metadatos del PDF.
    pdfauthor={Iván Eduardo Chavez Ayub (Revisado por IA)}             % Metadatos del PDF.
}


% %%% --- ESTILO DE TÍTULOS DE SECCIÓN --- %%%
% Se usa 'titlesec' para definir un estilo personalizado para las secciones.
% \titleformat{<comando>}[<forma>]{<formato>}{<etiqueta>}{<separación>}{<código-antes>}
\titleformat{\section}
  {\normalfont\Large\bfseries\color{WarlockRed}} % Formato del título: Fuente normal, grande, negrita, color rojo.
  {\thesection.}                                 % Etiqueta: El número de la sección seguido de un punto.
  {1em}                                          % Separación horizontal entre la etiqueta y el título.
  {}                                             % Código a ejecutar antes del título (en este caso, ninguno).

\titleformat{\subsection}
  {\normalfont\large\bfseries\color{WarlockRed!70!black}} % Similar a \section, pero con un color más oscuro.
  {\thesubsection.}
  {1em}
  {}

% \titlespacing*{<comando>}{<espacio-izq>}{<espacio-arriba>}{<espacio-abajo>}
\titlespacing*{\section}
  {0pt}                 % Espaciado a la izquierda del título.
  {3.5ex plus 1ex minus .2ex} % Espaciado vertical ANTES del título (con flexibilidad).
  {2.3ex plus .2ex}     % Espaciado vertical DESPUÉS del título (con flexibilidad).


% %%% --- DEFINICIÓN DE CAJAS DE TEXTO PERSONALIZADAS --- %%%
% Se usa 'tcolorbox' para crear entornos de "cajas" para información y advertencias.
\tcbuselibrary{skins, breakable, shadows} % Se cargan bibliotecas adicionales para más estilos.
                                          % 'breakable' permite que las cajas se dividan entre páginas.
                                          % 'shadows' añade efectos de sombra.

% Caja para información general.
\newtcolorbox{infobox}{
    colback=InfoBlue,                       % Color de fondo de la caja.
    colframe=WarlockBlue,                   % Color del borde.
    fonttitle=\bfseries,                    % Fuente del título de la caja (negrita).
    coltitle=WarlockBlue,                   % Color del texto del título.
    title=\faInfoCircle\hspace{0.5em} Información, % Contenido del título (icono + texto).
    breakable,                              % Permite que la caja se parta entre páginas.
    pad at break=2mm,                       % Espaciado interno cuando la caja se rompe.
    enhanced,                               % Activa modos de renderizado avanzados.
    drop shadow={WarlockGray!50!white}      % Añade una sombra sutil.
}

% Caja para advertencias importantes.
\newtcolorbox{warnbox}{
    colback=WarnYellow,
    colframe=WarnBorder,
    fonttitle=\bfseries,
    coltitle=WarnBorder!80!black,
    title=\faExclamationTriangle\hspace{0.5em} Advertencia,
    breakable,
    pad at break=2mm,
    enhanced,
    drop shadow={WarnBorder!50!white}
}

% Comando personalizado para formatear código en línea.
% \newcommand{<nombre>}[<argumentos>]{<definición>}
\newcommand{\inlinecode}[1]{\colorbox{WarlockLightGray}{\small\texttt{#1}}}


% %%% --- CONFIGURACIÓN DE ENCABEZADO Y PIE DE PÁGINA --- %%%
% Se usa 'fancyhdr' para controlar el contenido de encabezados y pies.
\pagestyle{fancy}
\fancyhf{} % Limpia todos los campos del encabezado y pie de página.

% \fancyhead[L/C/R]{...} define el contenido de la cabecera (Izquierda, Centro, Derecha).
\fancyhead[L]{\textit{Warlock-Studio 2.2}}
\fancyhead[R]{\leftmark} % \leftmark muestra el nombre de la sección actual.

% \fancyfoot[L/C/R]{...} define el contenido del pie de página.
\fancyfoot[L]{\includegraphics[height=0.8cm]{logo.png}} % Asume que 'logo.png' está en la misma carpeta.
\fancyfoot[C]{\thepage} % Muestra el número de página actual.
\fancyfoot[R]{\textcopyright~2025 Warlock-Studio}

% Se definen los grosores de las líneas de separación.
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0.4pt}

% Se redefine cómo se genera la marca de sección para que incluya el número.
\renewcommand{\sectionmark}[1]{\markboth{\thesection. #1}{}}


% =======================================================================================
%   INICIO DEL CUERPO DEL DOCUMENTO
% =======================================================================================
\begin{document}

% %%% --- PÁGINA DE TÍTULO --- %%%
% Se crea una portada impactante y profesional usando un 'tcolorbox' a toda página.
\begin{titlepage}
    \begin{tcolorbox}[
        %--- Estilo de la caja ---
        colback=WarlockDark,                    % Fondo oscuro.
        colframe=WarlockGold,                   % Borde dorado.
        sharp corners,                          % Esquinas rectas en lugar de redondeadas.
        boxrule=1.5pt,                          % Grosor del borde.
        %--- Alineación y Tamaño ---
        halign=center,                          % Alineación horizontal del contenido.
        valign=center,                          % Alineación vertical del contenido.
        height=\dimexpr\textheight-1cm\relax    % Altura de la caja (toda la altura del texto menos 1cm).
      ]
      %--- Contenido de la Portada ---
      \centering % Centra los elementos internos.

      \includegraphics[width=0.5\textwidth]{logo.png}\par % Logo.

      \vfill % Espacio flexible para empujar el contenido.

      \color{white} % Cambia el color del texto a blanco para contraste.

      {\Huge\bfseries Warlock-Studio\par}
      \vspace{0.7cm} % Espacio vertical fijo.
      {\Large -- Manual Técnico del Usuario y Documentación --\par}
      \vspace{0.2cm}
      {\Large Versión 2.2\par}

      \vfill % Otro espacio flexible.

      {\large Iván Eduardo Chavez Ayub\par}
      \href{https://github.com/Ivan-Ayub97}{\texttt{\color{WarlockGold}@Ivan-Ayub97 en GitHub}}\par % Enlace con estilo.

      \vspace{1.5cm}

      {\large \today\par} % Muestra la fecha de compilación.
    \end{tcolorbox}
    \thispagestyle{empty} % Oculta el encabezado y pie de página en la portada.
\end{titlepage}


% %%% --- RESUMEN Y TABLA DE CONTENIDOS --- %%%
\pagestyle{fancy} % Restaura el estilo de página 'fancy' después de la portada.

% El entorno 'abstract' crea un resumen del documento.
\begin{abstract}
\noindent % Evita la sangría en la primera línea.
Este documento es una guía técnica exhaustiva para Warlock-Studio 2.2. La información ha sido validada y enriquecida con un análisis profundo del código fuente para proporcionar detalles precisos sobre su arquitectura, una guía de optimización avanzada y un manual de solución de problemas robusto.
\end{abstract}

\newpage % Salto de página antes de la tabla de contenidos.
\tableofcontents % Genera la tabla de contenidos automáticamente.
\newpage % Salto de página después de la tabla de contenidos.


% %%% --- CUERPO PRINCIPAL DEL MANUAL --- %%%

% --- Sección 1: Introducción ---
\section{Introducción}
Warlock-Studio es una suite de mejora y escalado de medios impulsada por IA, diseñada para ofrecer resultados de alta calidad a través de una interfaz de usuario accesible. La versión 2.2 introduce mejoras clave en estabilidad, rendimiento y la experiencia del usuario, consolidándose como una herramienta robusta para creadores de contenido y entusiastas.

\subsection{Novedades en la Versión 2.2}
El análisis del código revela las siguientes mejoras sustanciales:
% Se usa 'itemize' para listas con viñetas. [leftmargin=*] alinea la lista con el margen del párrafo.
\begin{itemize}[leftmargin=*]
    \item \textbf{Gestión de Hilos y Cierres Seguros:} Se ha mejorado la gestión de concurrencia mediante \texttt{Lock} y \texttt{RLock} para garantizar que el estado del proceso se actualice de forma segura y se eviten condiciones de carrera al procesar videos. La terminación del proceso (\texttt{terminate}) ahora es más robusta.
    \item \textbf{Optimización de Memoria Proactiva:} Durante el procesamiento de videos largos, la aplicación ahora invoca explícitamente al recolector de basura de Python (\texttt{gc.collect()}) después de procesar lotes de fotogramas, reduciendo significativamente la probabilidad de errores de memoria insuficiente.
    \item \textbf{Manejo de Errores de GPU:} Se ha añadido un manejador específico para errores de memoria de la GPU durante el escalado de video. Si se detecta un error "out of memory", la aplicación reduce automáticamente el tamaño de los \textit{tiles} y reintenta el proceso.
    \item \textbf{Pantalla de Bienvenida (Splash Screen):} Se ha añadido una pantalla de inicio de 10 segundos que mejora la percepción de la carga inicial de la aplicación.
    \item \textbf{Registro (Logging) y Diagnóstico:} La aplicación crea archivos de registro (\texttt{warlock\_studio.log} y \texttt{error\_log.txt}) en la carpeta de \textbf{Documentos} del usuario, facilitando el diagnóstico de problemas.
\end{itemize}

\subsection{Características Principales}
\begin{itemize}[leftmargin=*]
    \item \textbf{Escalado por IA:} Utiliza modelos de última generación como Real-ESRGAN, BSRGAN y SRVGGNetCompact.
    \item \textbf{Interpolación de Fotogramas:} Aumenta los FPS o crea efectos de cámara lenta fluidos usando modelos RIFE.
    \item \textbf{Reducción de Ruido:} Incluye modelos IRCNN dedicados a la limpieza de imágenes y videos.
    \item \textbf{Aceleración por Hardware:} Usa el motor ONNX Runtime con el proveedor DirectML (\texttt{DmlExecutionProvider}) para una aceleración por GPU compatible con DirectX 12.
    \item \textbf{Codificación de Video Avanzada:} Soporte para codificadores acelerados por hardware de NVIDIA (NVENC), AMD (AMF) e Intel (QSV).
\end{itemize}


% --- Sección 2: Instalación ---
\section{Instalación y Arquitectura del Programa}

\subsection{Requisitos del Sistema}
% Se usa 'table' para tablas que no se dividen entre páginas. [H] fuerza su posición.
\begin{table}[H]
    \centering % Centra la tabla en la página.
    % 'tabular' es el entorno que dibuja la tabla. {ll} define dos columnas alineadas a la izquierda.
    \begin{tabular}{ll}
        \toprule % Línea superior de la tabla (de booktabs).
        \textbf{Componente} & \textbf{Requisito} \\
        \midrule % Línea media de la tabla (de booktabs).
        Sistema Operativo & Windows 10 (64-bit) o posterior \\
        Memoria RAM & 8 GB (Mínimo), 16 GB (Recomendado) \\
        Tarjeta Gráfica (GPU) & Compatible con \textbf{DirectX 12}. \textbf{Recomendado: 4+ GB VRAM}. \\
        Almacenamiento & 2 GB de espacio libre. Se recomienda un SSD para un mejor rendimiento. \\
        \bottomrule % Línea inferior de la tabla (de booktabs).
    \end{tabular}
    \caption{Requisitos de hardware y software para Warlock-Studio 2.2.}
\end{table}

\subsection{Estructura de Archivos y Dependencias}
\begin{infobox}
Warlock-Studio es una aplicación autocontenida. Los siguientes componentes se incluyen en la instalación y no requieren acción por parte del usuario.
\end{infobox}
\begin{itemize}[leftmargin=*]
    \item \inlinecode{ffmpeg.exe:} Ubicado en la carpeta \texttt{Assets}, es el motor para toda la manipulación, codificación y decodificación de video.
    \item \inlinecode{exiftool.exe:} También en \texttt{Assets}, se utiliza para leer y escribir metadatos (EXIF, XMP), asegurando que la información original del archivo se preserve.
    \item \textbf{Modelos IA:} Los modelos en formato \texttt{.onnx} se encuentran en la carpeta \texttt{AI-onnx}.
    \item \textbf{Preferencias de Usuario:} Se guarda un archivo \inlinecode{Warlock-Studio_2.2_UserPreference.json} en la carpeta de \textbf{Documentos} del usuario.
    \item \textbf{Registros (Logs):} Los archivos de registro se almacenan en \texttt{Documentos\textbackslash Warlock-Studio_2.2_Logs}.
\end{itemize}


% --- Sección 3: Guía de Modelos ---
\section{Guía Detallada de Modelos de IA}
La elección del modelo de IA es el factor más importante para la calidad y el tiempo de procesamiento.

\subsection{Tabla Comparativa de Modelos}
La siguiente tabla detalla el uso relativo de VRAM de cada modelo.
% 'longtable' es para tablas que pueden ocupar varias páginas. La definición de columnas es similar a 'tabular'.
% Se usa 'p{<ancho>}' para la última columna, creando un párrafo de ancho fijo con ajuste de línea automático.
\begin{longtable}{l l c c p{6.5cm}}
\toprule
\textbf{Modelo} & \textbf{Función Principal} & \textbf{Escala} & \textbf{Peso VRAM} & \textbf{Caso de Uso Recomendado} \\
\midrule
\endhead % \endhead define el encabezado que se repetirá en cada página.

\multicolumn{5}{c}{\textit{Modelos de Reducción de Ruido (Denoising)}} \\
\midrule
\texttt{IRCNN\_Mx1} & Denoise & x1 & 4.0 & Ruido moderado. \\
\texttt{IRCNN\_Lx1} & Denoise & x1 & 4.0 & Ruido intenso. \\
\midrule
\multicolumn{5}{c}{\textit{Modelos de Escalado - Alta Calidad (Lentos)}} \\
\midrule
\texttt{BSRGANx4} & Upscale & x4 & 0.6 & Fotografías realistas. Excelente detalle fino. \\
\texttt{BSRGANx2} & Upscale & x2 & 0.7 & Similar a x4 pero para un escalado menor. \\
\texttt{RealESRGANx4} & Upscale & x4 & 0.6 & Uso general, bueno para texturas. \\
\texttt{RealESRNetx4} & Upscale & x4 & 2.2 & Alternativa a RealESRGAN, puede ser más rápido. \\
\midrule
\multicolumn{5}{c}{\textit{Modelos de Escalado - Alta Velocidad (Ligeros)}} \\
\midrule
\texttt{RealESR\_Gx4} & Upscale & x4 & 2.2 & Escalado rápido, ideal para videos. \\
\texttt{RealESR\_Animex4} & Upscale & x4 & 2.2 & Optimizado para anime y dibujos animados. \\
\midrule
\multicolumn{5}{c}{\textit{Modelos de Interpolación de Fotogramas (Solo Video)}} \\
\midrule
\texttt{RIFE} & Interpolar & N/A & N/A & Máxima calidad de interpolación. \\
\texttt{RIFE\_Lite} & Interpolar & N/A & N/A & Versión más rápida, ideal para GPUs con < 4 GB VRAM. \\
\bottomrule
\caption{Guía de selección de modelos de IA y su impacto en VRAM.}
\label{tab:modelos} % \label para poder referenciar la tabla con \ref{tab:modelos}.
\end{longtable}


% --- Sección 4: Optimización ---
\section{Configuración y Optimización del Rendimiento}

\subsection{Parámetros Críticos de Rendimiento}
\begin{itemize}[leftmargin=*]
    \item \textbf{Input Resolution \%:} El ajuste más efectivo para la velocidad. Reduce la resolución antes de procesarla con IA. Un valor entre \textbf{50\% y 75\%} suele ser ideal.
    \item \textbf{GPU VRAM Limiter (GB):} Defina la VRAM de su GPU. Se usa para calcular el tamaño de los \textit{tiles} de procesamiento y evitar errores de memoria.
    \item \textbf{AI Multithreading:} Solo para videos. Procesa varios fotogramas en paralelo. Acelera el proceso pero consume más VRAM y CPU.
    \item \textbf{AI Blending:} Combina la imagen original con la procesada. Útil para reducir artefactos cuando se usa un \textit{Input Resolution} bajo.
\end{itemize}

\subsection{El Fichero de Preferencias de Usuario}
El archivo \inlinecode{Warlock-Studio_2.2_UserPreference.json} guarda su configuración.
% Se usa 'tabularx' para que la tabla ocupe automáticamente el 100% del ancho del texto.
% La columna 'X' es una columna flexible que se expande para llenar el espacio disponible.
\begin{table}[H]
    \centering
    \small % Reduce el tamaño de la fuente dentro de la tabla.
    \begin{tabularx}{\textwidth}{l X}
        \toprule
        \textbf{Clave JSON} & \textbf{Descripción} \\
        \midrule
        \texttt{default\_AI\_model} & El último modelo de IA seleccionado. \\
        \texttt{default\_AI\_multithreading} & El número de hilos de procesamiento para video. \\
        \texttt{default\_gpu} & La última GPU seleccionada (Auto, GPU 1, etc.). \\
        \texttt{default\_keep\_frames} & Si se deben conservar los fotogramas de video ("ON" o "OFF"). \\
        \texttt{default\_image\_extension} & Extensión de imagen por defecto (\texttt{.png}, \texttt{.jpg}, etc.). \\
        \texttt{default\_video\_extension} & Extensión de video por defecto (\texttt{.mp4}, \texttt{.mkv}, etc.). \\
        \texttt{default\_video\_codec} & El codificador de video por defecto (x264, hevc\_nvenc, etc.). \\
        \texttt{default\_blending} & El nivel de mezcla seleccionado (Low, Medium, High). \\
        \texttt{default\_output\_path} & La última ruta de salida seleccionada. \\
        \texttt{default\_input\_resize\_factor} & El valor del porcentaje de resolución de entrada. \\
        \texttt{default\_output\_resize\_factor} & El valor del porcentaje de resolución de salida. \\
        \texttt{default\_VRAM\_limiter} & El valor del limitador de VRAM de la GPU. \\
        \bottomrule
    \end{tabularx}
    \caption{Claves guardadas en el archivo de preferencias del usuario.}
\end{table}

% --- Sección 5: Solución de Problemas ---
\section{Guía Avanzada de Solución de Problemas}
\begin{warnbox}
La causa \textbf{Número 1} de errores son los \textbf{caracteres especiales} en rutas y nombres de archivo. Evite usar: \texttt{', ", @, \#, \$, \%, \&, *, [, ], ?, etc.}.
\end{warnbox}

% 'description' es para listas de definiciones.
% [style=nextline] coloca el texto en la línea siguiente al término.
\begin{description}[leftmargin=*, style=nextline, itemsep=0.8em]
    \item[\faBan\ Error: "FFmpeg encoding failed: Invalid argument"]
        \textbf{Causa:} Nombre de archivo o ruta no válida.
        \textbf{Solución:} Renombre el archivo y/o la carpeta eliminando caracteres especiales.

    \item[\faMemory\ Error: "out of memory" o cierre inesperado]
        \textbf{Causa:} La GPU se quedó sin memoria de video (VRAM).
        \textbf{Solución:}
        % 'enumerate' es para listas numeradas. 'nosep' reduce el espacio entre ítems.
        \begin{enumerate}[nosep, leftmargin=*]
            \item Reduzca el \textbf{VRAM Limiter} a un valor igual o inferior al de su GPU.
            \item Baje el \textbf{Input Resolution \%} a 75\% o menos.
            \item Para videos, disminuya los hilos de \textbf{AI Multithreading} o apáguelo.
            \item La aplicación intentará recuperarse de este error automáticamente.
        \end{enumerate}

    \item[\faTachometerAlt\ Error: "cannot convert float NaN to integer"]
        \textbf{Causa:} Timeout del driver de la GPU, a menudo por sobrecarga o sobrecalentamiento.
        \textbf{Solución:} Reinicie el proceso \textbf{sin borrar la carpeta de fotogramas}. El programa reanudará el trabajo donde se quedó.

    \item[\faVolumeMute\ Problema: Video de salida sin audio]
        \textbf{Causa:} El video original no tenía audio, se usó un modo \textit{Slowmotion} o el códec de audio era incompatible.
        \textbf{Solución:} El programa intenta copiar el audio, si falla, lo re-codifica a AAC. Si todo falla, guarda el video sin audio. Usar \inlinecode{.mkv} en la salida puede ayudar.

    \item[\faQuestionCircle\ Problema: La aplicación no se abre]
        \textbf{Causa:} Configuración corrupta, falta de permisos o error del entorno.
        \textbf{Solución:}
        \begin{enumerate}[nosep, leftmargin=*]
            \item Elimine el archivo \inlinecode{Warlock-Studio_2.2_UserPreference.json} en su carpeta de \textbf{Documentos}.
            \item Revise los archivos de registro en \texttt{Documentos\textbackslash Warlock-Studio_2.2_Logs}.
            \item Asegúrese de que sus controladores de GPU estén actualizados.
        \end{enumerate}
\end{description}

% --- Sección 6: Arquitectura ---
\section{Arquitectura y Procesos Avanzados}

\subsection{Motor de Inferencia y Aceleración por Hardware}
Warlock-Studio utiliza \textbf{ONNX Runtime} con el proveedor \textbf{DirectML} (\inlinecode{DmlExecutionProvider}). Este traduce las operaciones de IA a llamadas de \textbf{DirectX 12}, garantizando una amplia compatibilidad con GPUs de NVIDIA, AMD e Intel.

\subsection{Sistema de Tiles y Gestión de Memoria}
Para manejar archivos de alta resolución, la aplicación divide cada fotograma en fragmentos (\textit{tiles}). El tamaño de estos se calcula dinámicamente usando el \textbf{VRAM Limiter}. Además, se invoca al recolector de basura de Python (\inlinecode{gc.collect()}) para forzar la liberación de memoria y garantizar estabilidad.

\subsection{Funcionalidad de Reanudación y Checkpoints}
Si un proceso de video se interrumpe, los fotogramas procesados se guardan. Al reiniciar la tarea, la función \inlinecode{check\_video\_upscaling\_resume} detecta estos archivos y continúa el trabajo desde donde falló, ahorrando tiempo.

\subsection{Escritura Asíncrona de Fotogramas}
Durante el escalado de video, los fotogramas procesados se envían a un hilo de escritura separado. Esto permite a la GPU procesar el siguiente lote sin esperar a que la escritura en disco (más lenta) termine, maximizando el rendimiento.


% =======================================================================================
%   FIN DEL DOCUMENTO
% =======================================================================================
\end{document}
