Aquitectura y variables notables
Hace poco un grupo de fansubbers de habla inglesa me pidieron que les ayudara a aprender sobre karaokes. Más adelante, otro fansubber me pidió lo mismo. Fue entonces cuando me percaté de que la documentación sobre Kara Effector estaba desactualizada o incompleta.
Uno de los autores del mismo Kara Effector me lo había mencionado, que había gran cantidad de funciones que nunca fueron documentadas. Así que me propuse usar mis conocimientos en prompting para generar una documentación clara y completa sobre todas las variables y funciones que podemos utilizar en Kara Effector, acompañadas de ejemplos y aclaraciones.
Esta es la primera versión de dicha idea. La hice con el interés de que sirva como una ayuda para quienes, como yo, quieren sacarle el mayor provecho a esta herramienta a fin de hacer mejores karaokes.
Arquitectura de Kara Effector
Section titled “Arquitectura de Kara Effector”El sistema de Kara Effector no es una sola pieza, sino un conjunto de módulos interconectados. Mientras que Effector-utils-lib-3.6 proporciona las herramientas de efectos, las siguientes librerías proporcionan la base sobre la que todo se construye.
Librerías centrales del sistema
Section titled “Librerías centrales del sistema”Pre-procesamiento de datos de karaoke.
Esta es la primera y más fundamental librería que actúa sobre los subtítulos. Su trabajo es analizar cada línea de diálogo temporizada y convertirla en una estructura de datos rica y fácil de usar. Es el “esqueleto” sobre el que los efectos construirán las animaciones.
- Análisis de tiempos: Parsea las etiquetas
\kpara obtener la duración y los tiempos de cada sílaba. - Manejo de furigana: Detecta y separa el texto furigana (texto sobre el kanji), calculando sus propias dimensiones y estilos.
- Cálculo de dimensiones: Utiliza las funciones de Aegisub para pre-calcular el ancho, alto y posición de cada sílaba y del texto completo en la pantalla.
- Estructura de datos: Organiza toda esta información en una tabla Lua (
line.kara,line.furi) que se pasa a las funciones de efectos, simplificando enormemente el acceso a datos comosyl.widthosyl.center.
En resumen, karaskel hace todo el trabajo pesado de medición y posicionamiento inicial, para que los creadores de efectos puedan concentrarse en la animación.
Biblioteca de utilidades avanzadas de bajo nivel.
Esta es una librería externa extremadamente potente, creada por “Youka” (Christoph Spanknebel). El Kara Effector la utiliza como su motor para muchas de las operaciones más complejas y computacionalmente intensivas. Es una dependencia crítica que le da al KE gran parte de su poder.
- Matemáticas avanzadas: Incluye funciones para transformaciones matriciales 3D, cálculos de curvas Bézier, vectores y trigonometría.
- Procesamiento de formas avanzado: Contiene algoritmos muy optimizados para delinear (to_outline), aplanar (flatten), dividir (split) y detectar (detect) formas (shapes) vectoriales a partir de datos de píxeles.
- Decodificación de archivos: Puede leer y analizar archivos
.bmp(imágenes) y.wav(audio), extrayendo datos que pueden usarse para crear efectos visuales. - Interacción con fuentes: Puede obtener métricas detalladas de las fuentes del sistema y convertir texto directamente a formas vectoriales, una función crucial para efectos tipográficos.
- Manejo de UTF-8: Proporciona funciones robustas para trabajar con texto Unicode.
En esencia, Yutils es la “caja de herramientas de ingeniería” que permite a Effector-utils-lib-3.6 ofrecer funciones de tan alto nivel.
Compatibilidad y creación de atajos.
Estos archivos no contienen mucha lógica original. Su función principal es actuar como “puente” o “adaptador”. Cargan las librerías más modernas de Aegisub (como aegisub.util y effector-auto4) y crean versiones abreviadas o alias de sus funciones.
- Atajos: Definen funciones cortas como
R,Rs,Rd, etc., que son en realidad llamadas a funciones más largas comoke4.math.R. - Alias: Hacen que funciones de
aegisub.utilestén disponibles bajo nombres más antiguos o convenientes, comotable.copy.
El propósito de estos archivos es hacer que el código de Kara Effector sea más limpio y fácil de leer para el autor, al tiempo que se aprovecha la potencia y eficiencia de las librerías estándar de Automation 4 de Aegisub.
Archivos de extensibilidad y configuración
Section titled “Archivos de extensibilidad y configuración”Almacenar tus propias funciones y variables reutilizables.
Este archivo está pensado para que los usuarios avanzados añadan sus propias funciones de utilidad, variables globales o formas personalizadas. Al mantener estas adiciones en un archivo separado, se evita modificar los archivos principales de Kara Effector. Esto tiene dos ventajas:
- Mantiene el código de Kara Effector limpio y original.
- Facilita la actualización de Kara Effector en el futuro, ya que puedes reemplazar los archivos principales sin perder tus personalizaciones.
Almacenar las configuraciones de los efectos que creas y guardas.
Cuando creas un efecto en la interfaz de Modify y lo guardas, su configuración se escribe en este archivo. Cada entrada es una llamada a la función effector.create_fx, que define el nombre del efecto y todos sus parámetros. Este archivo actúa como una base de datos de tus presets de efectos, que Kara Effector carga cada vez que se inicia.
Arquitectura general del sistema
Section titled “Arquitectura general del sistema”Ahora que hes visto todas las piezas, el flujo de trabajo en Kara Effector puede ser resumido en:
-
Inicio
El script principal
Effector 3.6.luase ejecuta, carga todas las librerías (karaskel,Effector-utils-lib-3.6, etc.) y los archivos de configuración (Effector-newfx-3.6). -
Interfaz
Se muestra la interfaz gráfica al usuario para que seleccione las líneas, el tipo de efecto y la configuración.
-
Pre-procesamiento
Al aplicar el efecto,
karaskel.luaanaliza las líneas seleccionadas y las convierte en estructuras de datos detalladas. -
Ejecución del efecto
La función del efecto seleccionado (definida a través de
effector.create_fx) se ejecuta para cada sílaba/carácter/línea. -
Cálculos Internos
Durante la ejecución, la función del efecto utiliza las herramientas de las librerías:
- Usa la librería
effectorpara la lógica principal. - Usa las librerías
math,shape,text,color, etc… deEffector-utils-lib-3.6para los cálculos. - Estas, a su vez, pueden usar las funciones de bajo nivel de
Yutils.luapara las operaciones más complejas.
- Usa la librería
-
Salida
El resultado final es un conjunto de etiquetas de ASS, generadas por la librería
tag, que se insertan en nuevas líneas de subtítulo en Aegisub.
Variables disponibles
Section titled “Variables disponibles”En Kara Effector, las variables son atajos a propiedades de los elementos de karaoke (líneas, sílabas, etc.) y del entorno del script (resolución del video, etc.). Se pueden usar en casi todas las cajas de texto de la interfaz “Modify Effect”, pero son más potentes en:
Return[fx]: Para construir el texto o la forma final mediante un formato.Variables[fx]: Para definir valores personalizados que se usarán en otras cajas de texto.Add Tags[fx]: Para añadir efectos dinámicos basados en las propiedades del elemento.
Diferencias fundamentales entre variables de tiempo
Section titled “Diferencias fundamentales entre variables de tiempo”Es muy importante entender la diferencia entre los tipos de variables de tiempo.
| Descripción | Ejemplo |
|---|---|
| El tiempo de inicio de la línea de diálogo original, en milisegundos, desde el principio del video. Es un valor absoluto. | Si una línea empieza en la marca de 15 segundos del video, l.start_time será 15000. |
| Descripción | Ejemplo |
|---|---|
El tiempo de inicio de la sílaba, en milisegundos, contado desde el principio de su propia línea (l.start_time). Es un valor relativo a la línea actual. | Si la línea empieza en 15000 y la sílaba empieza medio segundo después, syl.start_time será 500. Su tiempo absoluto es . |
| Descripción | Función |
|---|---|
El tiempo de inicio de la sílaba, en milisegundos, contado desde el principio de la línea de efecto generada (fx.start_time). | Esta es la variable que casi siempre deberías usar dentro de una etiqueta \t(). Un efecto (como una entrada anticipada o lead-in) podría empezar antes que la línea original, por lo que necesitas un tiempo relativo a la nueva línea de efecto. Se calcula como: (l.start_time + syl.start_time) - fx.start_time. |
| Ejemplo |
|---|
La línea empieza en 15000 (l.start_time). |
La sílaba empieza en 500 (syl.start_time). Tiempo absoluto: 15500. |
Tu efecto de entrada anticipada empieza en 14800 (fx.start_time - 200). |
syl.syl_start será . Por lo tanto, \t(700, ...) se sincronizará perfectamente con la sílaba, pues le suma esos 200ms de ventaja que le diste al efecto de lead-in y no has tenido que calcularlo manualmente. |
Variables de línea
Section titled “Variables de línea”Estas se llaman con line o l y contienen información sobre la línea de diálogo completa que se está procesando.
Todas
| Variable | Abreviatura en do_fx | Descripción |
|---|---|---|
line.start_time | l_start | Tiempo de inicio de la línea (en ms). |
line.end_time | l_end | Tiempo de fin de la línea (en ms). |
line.duration | l_dur | Duración total de la línea (en ms). |
line.mid_time | l_mid | El punto medio en el tiempo de la línea. |
line.i | l_i | Índice de la línea actual en la selección. |
line.n | l_n | Número total de líneas en la selección. |
line.text_stripped | - | El texto de la línea sin ninguna etiqueta ASS. |
line.width | l_width | Ancho total de la línea en píxeles. |
line.height | l_height | Alto total de la línea en píxeles. |
line.left line.center line.right | l_left l_center l_right | Coordenadas X de la caja delimitadora de la línea. |
line.top line.middle line.bottom | l_top l_middle l_bottom | Coordenadas Y de la caja delimitadora de la línea. |
line.descent line.extlead | Métricas de la fuente: descenso y espaciado externo. | |
line.styleref | L | Una referencia al objeto de estilo completo de la línea. |
line.hira .kata .roma | line.hira .kata .roma | El texto completo de la línea convertido a hiragana, katakana o romaji. |
Variables de sílaba
Section titled “Variables de sílaba”Estas se llaman con syl y están disponibles cuando Template Type es Syl, Syl Multi, Char, Furi, o cualquiera de las conversiones a kana/romaji.
Todas
| Variable | Abreviatura en do_fx | Descripción |
|---|---|---|
syl.start_time | syl_start | Tiempo de inicio de la sílaba, relativo al inicio de la línea (en ms). |
syl.end_time | syl_end | Tiempo de fin de la sílaba, relativo al inicio de la línea. |
syl.duration | syl_dur | Duración de la sílaba (en ms). |
syl.mid_time | syl_mid | El punto medio en el tiempo de la sílaba. |
syl.i | syl_i | Índice de la sílaba actual en la línea. |
syl.n | syl_n | Número total de sílabas en la línea. |
syl.text_stripped | syl.text | El texto de la sílaba sin etiquetas. |
syl.width | syl_width | Ancho de la sílaba en píxeles. |
syl.height | syl_height | Alto de la sílaba en píxeles. |
syl.left, syl.center, syl.right | syl_left, syl_center, syl_right | Coordenadas X de la sílaba. |
syl.top, syl.middle, syl.bottom | syl_top, syl_middle, syl_bottom | Coordenadas Y de la sílaba. |
syl.prespacewidth | Ancho en píxeles del espacio en blanco antes de la sílaba. | |
syl.postspacewidth | Ancho en píxeles del espacio en blanco después de la sílaba. |
Variables de palabra
Section titled “Variables de palabra”Estas se llaman con word y están disponibles cuando Template Type es Word, Translation Word, o un tipo de plantilla basado en líneas.
Todas
| Variable | Abreviatura en do_fx | Descripción |
|---|---|---|
word.start_time | word_start | Tiempo de inicio estimado de la palabra, relativo al inicio de la línea. |
word.end_time | word_end | Tiempo de fin estimado de la palabra. |
word.duration | word_dur | Duración estimada de la palabra. |
word.i | word_i | Índice de la palabra actual en la línea. |
word.n | word_n | Número total de palabras en la línea. |
word.text | El texto de la palabra. | |
word.width .height | word_width word_height | Dimensiones de la palabra. |
word.left .center .right | word_left word_center word_right | Coordenadas X de la palabra. |
Variables de carácter
Section titled “Variables de carácter”Estas se llaman con char y están disponibles cuando Template Type es Char o Translation Char.
Todas
| Variable | Abreviatura en do_fx | Descripción |
|---|---|---|
char.start_time | char_start | Tiempo de inicio estimado del carácter, relativo al inicio de la línea. |
char.end_time | char_end | Tiempo de fin estimado del carácter. |
char.duration | char_dur | Duración estimada del carácter. |
char.i | char_i | Índice del carácter en la línea. |
char.n | char_n | Número total de caracteres en la línea. |
char.text | El carácter actual (una cadena de un solo carácter). | |
char.width .height | char_width char_height | Dimensiones del carácter. |
char.left .center .right | char_left char_center char_right | Coordenadas X del carácter. |
Variables de efecto
Section titled “Variables de efecto”Estas se llaman con fx y se calculan para cada línea de efecto que se genera. Son cruciales para entender el contexto temporal y espacial del propio efecto.
Return[fx], Variables[fx], Add Tags[fx].
| Variable | Descripción |
|---|---|
fx.start_time | El tiempo de inicio real de la línea de efecto que se está creando (en ms). |
fx.end_time | El tiempo de fin real de la línea de efecto que se está creando (en ms). |
fx.dur | La duración real de la línea de efecto (fx.end_time - fx.start_time). |
fx.pos_x fx.pos_y | La coordenada central final (X, Y) del objeto, después de aplicar funciones paramétricas y desplazamientos. |
syl.syl_start | Tiempo de inicio de la sílaba relativo al inicio del efecto. Esta es la variable clave a usar dentro de una etiqueta \t() para la sincronización de karaoke. |
syl.syl_end | Tiempo de fin de la sílaba relativo al inicio del efecto. |
Variables de bucle e iteración
Section titled “Variables de bucle e iteración”Estas variables controlan los bucles para crear efectos complejos, repetitivos o por capas.
Return[fx], Variables[fx], Add Tags[fx].
| Variable | Descripción |
|---|---|
j | El contador del bucle principal (definido en la caja loop). Itera desde 1 hasta maxj. |
maxj | El número total de iteraciones para el bucle principal. |
module | La variable más importante para la animación. Representa el progreso del bucle j, normalizado de 0.0 a 1.0.Se calcula como . |
module1 module2 | Módulos de progreso anidados, relativos al número de sílabas y al número de líneas, respectivamente. |
J | El contador del bucle externo (definido por la función replay()). |
maxJ | El número total de repeticiones del efecto. |
moduler | El progreso del bucle J, normalizado de 0.0 a 1.0. |
Variables de entorno y estilo
Section titled “Variables de entorno y estilo”Estas se llaman con meta y L y dan información sobre el script de Aegisub y el estilo de la línea.
Variables[fx], Return[fx].
| Variable | Abreviatura en do_fx | Descripción |
|---|---|---|
meta.res_x meta.res_y | xres yres | La resolución X e Y del script de Aegisub. |
frame_dur | La duración de un único fotograma de video (en ms). | |
ratio | ratio | Un factor de corrección de la relación de aspecto, útil para adaptar efectos a diferentes resoluciones de video. |
L.color1 L.color3 | l_color1 l_color3 | Los colores primario y de contorno del estilo de la línea. |
L.alpha1 L.alpha3 | l_alpha1 l_alpha3 | Las transparencias primaria y de contorno del estilo. |
L.outline L.shadow | l_outline l_shadow | El grosor del contorno y de la sombra del estilo. |
L.fontsize L.fontname | l_fsize l_fname | El tamaño y el nombre de la fuente del estilo. |
Abreviaturas / Variables con dólar
Section titled “Abreviaturas / Variables con dólar”Estas se llaman con $. El script Effector-utils-lib-3.6.lua define una serie de variables con un prefijo $ como atajos a las variables más comunes. Son extremadamente útiles para escribir código más corto y legible.
| Variable | Equivalente en Lua | Descripción |
|---|---|---|
$lstart $lend $ldur | l_start l_end l_dur | Tiempos de la línea. |
$li $linen | l_i l_n | Índice de la línea y total. |
$lleft $lcenter $lright | l_left l_center l_right | Posición X de la línea. |
$ltop $lmiddle $lbottom | l_top l_middle l_bottom | Posición Y de la línea. |
$lwidth $lheight | l_width l_height | Dimensiones de la línea. |
| Variable | Equivalente en Lua | Descripción |
|---|---|---|
$sstart $send $sdur | syl_start syl_end syl_dur | Tiempos de la sílaba. |
$si $syln | syl_i syl_n | Índice de la sílaba y total. |
$sleft $scenter $sright | syl_left syl_center syl_right | Posición X de la sílaba. |
| Variable | Equivalente en Lua | Descripción |
|---|---|---|
$cstart $cend $cdur | char_start char_end char_dur | Tiempos del carácter. |
$ci $charn | char_i char_n | Índice del carácter y total. |
$cleft $ccenter $cright | char_left char_center char_right | Posición X del carácter. |
| Variable | Equivalente en Lua | Descripción |
|---|---|---|
$wstart $wend $wdur | word_start word_end word_dur | Tiempos de la palabra. |
$wi $wordn | word_i word_n | Índice de la palabra y total. |
$wleft $wcenter $wright | word_left word_center word_right | Posición X de la palabra. |
| Variable | Equivalente en Lua | Descripción |
|---|---|---|
$fstart $fend $fdur | furi_start furi_end furi_dur | Tiempos del furigana. |
$fi $furin | furi_i furi_n | Índice del furigana y total. |
$fleft $fcenter $fright | furi_left furi_center furi_right | Posición X del furigana. |
| Variable | Equivalente en Lua | Descripción |
|---|---|---|
$fxstart $fxend $fxdur | fx_start fx_end fx_dur | Tiempos de la línea de efecto generada. |
$fxi $fxn | fx_i fx_n | Índice del bucle actual (j) y total de iteraciones (maxj). |
$fxleft $fxcenter $fxright | fx_left fx_center fx_right | Posición X final del objeto del efecto. |
$fxtop $fxmiddle $fxbottom | fx_top fx_middle fx_bottom | Posición Y final del objeto del efecto. |
$fxwidth $fxheight | fx_width fx_height | Dimensiones finales del objeto del efecto. |
$fxx $fxy | fx_x fx_y | Posición de anclaje final del objeto del efecto. |
| Variable | Equivalente en Lua | Descripción |
|---|---|---|
$start $end $dur | val_start val_end val_dur | Tiempos del elemento actual (depende del Template Type). |
$i $n | val_i val_n | Índice y total del elemento actual. |
$left $center $right | val_left val_center val_right | Posición X del elemento actual. |
$top $middle $bottom | val_top val_middle val_bottom | Posición Y del elemento actual. |
$width $height | val_width val_height | Dimensiones del elemento actual. |
$x $y | val_center val_middle | Posición de anclaje del elemento actual. |
| Variable | Equivalente en Lua | Descripción |
|---|---|---|
$scale_x $scale_y | l_scale_x l_scale_y | Escalado de la fuente del estilo. |
$angle | l_angle | Rotación del estilo. |
$outline $shadow | l_outline l_shadow | Grosor de contorno y sombra del estilo. |
$fontsize | l_fsize | Tamaño de fuente del estilo. |
$fontname | l_fname | Nombre de la fuente del estilo. |
$spacing | l_spacing | Espaciado entre letras del estilo. |
$color1 a $color4 | l_color1 a l_color4 | Los cuatro colores del estilo. |
$alpha1 a $alpha4 | l_alpha1 a l_alpha4 | Las cuatro transparencias del estilo. |
$align | l_align | El número de alineación del estilo. |
Variables internas de Aegisub y Karaskel
Section titled “Variables internas de Aegisub y Karaskel”Estas son las variables fundamentales sobre las que Kara Effector construye las suyas. Se usan con menos frecuencia directamente en la interfaz de usuario, pero entenderlas es crucial para funciones avanzadas y para depurar errores. Estas propiedades son añadidas por el script karaskel.lua a cada objeto line durante el preprocesamiento.
Principalmente Variables[fx] y Return[fx] para usuarios avanzados que escriben código Lua complejo.
| Variable | Descripción |
|---|---|
line.kara | La tabla principal que contiene todas las sílabas de karaoke procesadas. line.kara[i] es lo que se convierte en el objeto syl dentro de un efecto. |
line.kara.n | El número total de sílabas en la línea. |
line.furi | Una tabla separada que contiene todos los segmentos de furigana procesados. |
line.styleref | Un objeto completo que contiene todas las propiedades del estilo de la línea (color, fuente, márgenes, etc.). La abreviatura L en los efectos apunta a esto. |
line.effect | El texto original del campo Effect de la línea. |
p.e. line.kara.syl.text.
| Variable | Descripción |
|---|---|
syl.text | El texto original de la sílaba, incluyendo cualquier etiqueta de formato. |
syl.text_spacestripped | El texto de la sílaba sin espacios en blanco al principio o al final. |
syl.prespace syl.postspace | Los caracteres de espacio en blanco (" ", "\t") que estaban antes y después de la sílaba. |
syl.highlights | Una tabla que contiene los tiempos para cada sub-resaltado en sílabas con múltiples tiempos \k (p.e. {\k10\k20\k30}sílaba). |
syl.furi | Una sub-tabla que contiene una referencia al furigana directamente asociado con esta sílaba. |
p.e. line.furi.text.
| Variable | Descripción |
|---|---|
.text | El texto del furigana. |
.syl | Una referencia a la sílaba principal a la que este furigana está anclado. |
.isbreak | Un booleano que indica si el furigana debe unirse visualmente con el anterior (false) o no (true), controlado por ! o < en el texto. |
.spillback | Un booleano que indica si el texto del furigana puede extenderse a la izquierda de su texto base, controlado por <. |
Variables de plantilla (template)
Section titled “Variables de plantilla (template)”Estas son variables especiales y potentes diseñadas para Template Types como Template Line [Syl]. A diferencia de syl.width (que te da el ancho de la sílaba actual), estas variables otorgan acceso a una tabla con las propiedades de todos los elementos de la línea a la vez.
Add Tags[fx] y Return[fx] (solo en Template Types).
Tabla con propiedades de todas las sílabas.
| Variable | Descripción | Ejemplo de Uso |
|---|---|---|
.width[k] | Ancho de la k-ésima sílaba. | linefx[ii].syls.width[syl.i] |
.center[k] | Centro de la k-ésima sílaba. | linefx[ii].syls.center[syl.i] |
.start_time[k] | Tiempo de inicio de la k-ésima sílaba. | linefx[ii].syls.start_time[syl.i] |
Tabla con propiedades de todas las palabras.
| Variable | Descripción | Ejemplo de Uso |
|---|---|---|
.width[k] | Ancho de la k-ésima palabra. | linefx[ii].words.width[word.i] |
.center[k] | Centro de la k-ésima palabra. | linefx[ii].words.center[word.i] |
.start_time[k] | Tiempo de inicio de la k-ésima palabra. | linefx[ii].words.start_time[word.i] |
Tabla con propiedades de todas los caracteres.
| Variable | Descripción | Ejemplo de Uso |
|---|---|---|
.width[k] | Ancho del k-ésimo carácter. | linefx[ii].chars.width[char.i] |
.center[k] | Centro del k-ésimo carácter. | linefx[ii].chars.center[char.i] |
.start_time[k] | Tiempo de inicio del k-ésimo carácter. | linefx[ii].chars.start_time[char.i] |
Aclaración sobre variables inaccesibles
Section titled “Aclaración sobre variables inaccesibles”Es tan importante saber lo que no puedes usar como lo que sí puedes. La inaccesibilidad de ciertas variables no es una limitación de Kara Effector, sino una consecuencia de cómo funcionan la programación y los “ámbitos” de las variables.
En resumen, solo puedes llamar a variables que existen y tienen un valor en el momento exacto en que tu código en la caja de texto de la UI es evaluado. Este momento es dentro de la función effector.do_fx, para una línea, sílaba e iteración de bucle específicas.
Aquí tienes una aclaración de las secciones y tipos de variables que NO puedes llamar directamente desde las cajas de texto de la UI de Kara Effector, y la razón.
Variables de configuración de la interfaz gráfica de usuario (GUI)
Section titled “Variables de configuración de la interfaz gráfica de usuario (GUI)”Estas variables definen la ventana que estás viendo. No son datos de karaoke, sino metadatos sobre la propia herramienta.
effector.GUI_config,effector.GUI_modify,effector.GUI_karax,effector.GUI_shape,effector.GUI_trans,effector.GUI_add,effector.ipol_lines.- Cualquier variable dentro de estas tablas, como
effector.GUI_modify[29].items.
Estas variables se usan antes de que tu efecto se ejecute para construir el diálogo. Cuando escribes en la caja Return[fx], la ventana ya existe. No puedes llamar a una variable que define la ventana desde dentro de esa misma ventana.
Variables internas del motor del script
Section titled “Variables internas del motor del script”Estas son variables que el script principal (Kara Effector 3.6.lua) usa para gestionar su estado, contar cosas y almacenar datos globalmente mientras se ejecuta.
count_save: Un contador para archivos de autoguardado.fx_box: La tabla que contiene la configuración del efecto actualmente seleccionado para mostrarlo en la UI de Modify.list_fx, list_library: Las tablas que contienen todos los efectos cargados, ordenados por categoría.
Son parte de la maquinaria interna y no son relevantes para el diseño de un efecto. Están fuera del ámbito de la función effector.do_fx que evalúa tu código. Permitir el acceso a ellas podría crear inestabilidad y resultados impredecibles. El script solo te proporciona la información que necesitas para la tarea actual, como los datos de la línea (l) o la sílaba (syl).
Variables locales y temporales de preprocesamiento
Section titled “Variables locales y temporales de preprocesamiento”Antes de que tu efecto se ejecute, karaskel.lua analiza cada línea. Durante este proceso, usa muchas variables temporales para calcular anchos, posiciones y estructuras.
worksyl: Una tabla temporal quekaraskelusa para agrupar sílabas con múltiples tiempos\k.cur_inline_fx: Una variable que almacena el último efecto en línea (\-) encontrado.lgroups: En la maquetación del furigana, es una tabla que agrupa sílabas para calcular su espaciado.toinsert: Una cola de estilos de furigana que necesitan ser añadidos al archivo.
Son variables “locales” dentro de las funciones de karaskel. Una vez que una función termina su trabajo (p.e. calcular las posiciones de todas las sílabas en una línea), estas variables se destruyen y su memoria se libera. Recibes el resultado final de estos cálculos (p.e. syl.width, syl.center), pero no las variables intermedias usadas para llegar ahí.
Es como pedir un plato en un restaurante. Recibes el plato terminado (syl.width), pero no tienes acceso a los ingredientes a medio cortar en la tabla del chef (worksyl).
Variables internas de funciones de librerías
Section titled “Variables internas de funciones de librerías”Puedes llamar a las funciones de estas librerías (p.e. shape.rotate(...)), pero no puedes acceder a las variables que están dentro de esas funciones.
- Dentro de
Yutils.shape.split, la tablanew_shapemientras se está construyendo. - Dentro de
shape.array, las tablasshape_radial,shape_rectangular, etc., mientras se están generando. - Dentro de
effector.time, las variablesTim,Hor,Min,Seg.
Este es un principio fundamental de la programación llamado “ámbito de función”. Las variables declaradas dentro de una función solo existen mientras esa función se está ejecutando. Cuando la función te da un resultado (su valor de retorno), sus variables internas desaparecen.
El objeto global aegisub y su estado interno
Section titled “El objeto global aegisub y su estado interno”El script interactúa con Aegisub a través de una API (Interfaz de Programación de Aplicaciones), que se compone principalmente de funciones. No expone su estado interno como variables que puedas leer.
aegisub.selected_lines_count: Una variable así no existe. Debes usaraegisub.get_dialog_selection().aegisub.main_window_handle: Punteros internos del programa.aegisub.undo_history_table: La lista de acciones para deshacer.
Aegisub expone un conjunto controlado de funciones (aegisub.text_extents, aegisub.progress.set, etc.) por seguridad y estabilidad. No concede acceso directo a su memoria interna o al estado de la aplicación.
Resumen de variables inaccesibles
Section titled “Resumen de variables inaccesibles”| Categoría | Variables/Secciones de Ejemplo | Razón de la Inaccesibilidad |
|---|---|---|
| Configuración de UI | effector.GUI_config effector.GUI_modify fx_box | Definen la interfaz gráfica; no son variables de datos de karaoke. |
| Motor del script | count_save list_fx list_library fx_box | Son parte de la maquinaria interna del script, fuera del ámbito de ejecución del efecto. |
| Preprocesamiento | worksyl cur_inline_fx (en karaskel.lua) | Son variables temporales y locales que se destruyen una vez que su tarea ha finalizado. |
| Funciones de librería | Variables internas de Yutils.shape.split o tag.oscill | Son locales a las funciones. Solo recibes el resultado final que la función retorna. |
| Estado de Aegisub | El número de líneas seleccionadas, el historial de deshacer | Aegisub no expone su estado interno como variables, solo a través de una API basada en funciones. |
