ASTROFOX
Plugins

Referencia de plugins

Referencia de manifiestos, controles, datos de audio, uniforms y fotogramas de plugins de Astrofox.

Todo plugin empieza con un manifiesto astrofox.plugin.json.

Campos del manifiesto#

CampoTipoDescripción
apinumberVersión de la especificación de plugins. Usa 1.
namestringIdentificador obligatorio con espacio de nombres, como @author/plugin-name.
versionstringVersión publicada del plugin.
labelstringNombre que aparece en los menús y en el panel Capas.
descriptionstringExplicación breve que se muestra durante la instalación.
authorstringAutor u organización del plugin.
typestringdisplay o effect.
runtimestringshader o worker. Los elementos visuales admiten ambos; los efectos requieren shader.
shaderstringRuta del shader de fragmentos para el entorno shader.
entrystringRuta del módulo ES para el entorno worker.
iconstringRuta opcional del icono que aparece en los menús.
permissionsstring[]Capacidades solicitadas, que actualmente incluyen network.
librariesstring[]Bibliotecas del anfitrión solicitadas por un worker; actualmente three.
camerabooleanAñade controles de cámara del anfitrión a un elemento worker.
audioobjectDatos FFT y del dominio temporal solicitados por el plugin.
defaultPropertiesobjectValores iniciales de las propiedades de cada nueva instancia.
controlsobjectEsquema declarativo del panel Controles.
uniformsobjectAsignación de propiedades a uniforms para entornos shader.

Las rutas se resuelven con relación a la URL del manifiesto. Los archivos publicados deben usar HTTPS; se permite http://localhost para desarrollo.

Datos de audio#

Declara únicamente los datos de audio que necesite el plugin:

ValorIntervalo y significado
fft.binsEntre 1 y 512 valores normalizados de frecuencia
fft.minFrequency / maxFrequencyVentana de frecuencias en hercios
fft.smoothingSuavizado exponencial entre 0 y 0.99
fft.minDecibels / maxDecibelsLímites de normalización del nivel de entrada
td.samplesNúmero de muestras de la forma de onda en el dominio temporal

Los valores FFT llegan entre 0 y 1. Los valores del dominio temporal también van de 0 a 1, con el silencio centrado en 0.5. Los elementos worker pueden solicitar tanto FFT como datos del dominio temporal. Los elementos shader solo reciben FFT y volumen. Los efectos shader reciben volumen, tiempo, delta e inputTexture, pero no arrays FFT ni del dominio temporal. Se utiliza el mismo proceso de análisis durante la reproducción y la exportación de vídeo.

Controles#

Los tipos de control compatibles son text, number, toggle, checkbox, color, colorrange, range, select y time.

Los campos habituales incluyen:

CampoFunción
labelNombre legible del control
typeComponente de entrada que se renderiza
min, max, stepLímites numéricos y precisión
withRangeMuestra un deslizador para una entrada numérica
withReactorPermite que un reactor controle esta propiedad
itemsValores disponibles para una entrada de selección
hiddenOculta la entrada de forma condicional o permanente

Como el manifiesto es JSON, los valores dinámicos usan referencias:

Las referencias al escenario pueden incluir scale; por ejemplo, { "$stage": "width", "scale": -1 } se resuelve como la anchura negativa del escenario.

Asignación de uniforms#

Los entornos shader asignan propiedades a uniforms GLSL:

color convierte un color hexadecimal en un vector de tres componentes. Las asignaciones vectoriales leen sus componentes de las propiedades indicadas.

Entradas de la función de creación del worker#

Según su manifiesto, la función de creación de un worker recibe:

EntradaDescripción
propertiesValores iniciales de propiedades del manifiesto y de la instancia
seedSemilla aleatoria estable por instancia
sizeDimensiones actuales del escenario
librariesEspacios de nombres de las bibliotecas del anfitrión solicitadas
rendererRenderizador Three.js compartido cuando se solicita three

Datos del fotograma#

render(frame) recibe:

CampoDescripción
idIdentificador del fotograma
timeTiempo determinista en segundos
deltaTiempo desde el fotograma anterior en milisegundos
playingIndica si la línea de tiempo o la entrada en directo están activas
exportingIndica si se está renderizando una exportación sin conexión
volumeNivel general normalizado de audio
seedSemilla estable de la instancia del plugin
fftArray FFT solicitado, cuando está configurado
tdArray del dominio temporal solicitado, cuando está configurado

Durante la exportación, delta se fija en 1000 / fps. Usa time, delta y seed para obtener animaciones reproducibles.

Resultado del renderizado#

El método render() de un worker puede devolver:

La anchura y la altura establecen los límites de la capa. Los valores opcionales de origen establecen su punto de origen para las transformaciones.