Communitygithub.com

arvydasgecas/halo-animations

Crea animaciones de contorno en bucle a partir de formas geométricas o SVGs suministrados, utilizando copias escalonadas, inclinación y rotación específicas de la forma, easing pronunciado y un sutil halo. Entrega una vista previa interactiva ajustable y un video exportado. Útil para gráficos de movimiento de contornos, no para transiciones generales de interfaz.

¿Qué es halo-animations?

Esta habilidad permite a agentes de IA como Claude Code, Cursor o Codex generar animaciones de contorno en bucle de alta calidad, partiendo de formas geométricas simples (círculo, triángulo, hexágono, cuadrado redondeado) o de SVGs personalizados. Es completamente autónoma: no requiere scripts, assets ni plantillas externas. El agente produce una vista previa interactiva con controles ajustables, un video MP4 exportado y el código fuente editable. La animación se basa en copias retardadas del mismo contorno que se separan, rotan, se inclinan (flattening) y se reúnen en un bucle sin interrupciones. Incluye un halo sutil y mezcla aditiva para lograr un efecto brillante. Las instrucciones son portables: la generación del video depende de las herramientas disponibles en el entorno de ejecución. Ideal para crear gráficos de movimiento de contornos (motion graphics) para logotipos, íconos o elementos decorativos, evitando transiciones de interfaz genéricas.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/arvydasgecas/skills/tree/main/skills/halo-animations

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Animaciones de halo

Anima un sujeto delineado cuyas copias retardadas se separan, giran y se reúnen en un bucle sin interrupciones. Mantén el sujeto reconocible y el halo contenido. "Steppers" significa copias suavemente retardadas, no un avance de fotogramas discreto.

Esta habilidad es autónoma. No requiere scripts complementarios, assets, videos, plantillas ni documentos de referencia. Genera la implementación y los entregables en la carpeta de salida de la tarea. Las configuraciones especificadas por el usuario anulan los valores predeterminados; conserva las configuraciones que no estén sujetas al cambio solicitado.

1. Entradas y entregables

Un nombre de forma es suficiente para un sujeto geométrico; por defecto, usa un círculo. Utiliza un SVG proporcionado para un contorno personalizado exacto. Al construir un contorno a partir de una descripción, identifica cualquier interpretación material. Pregunta qué objeto animar solo cuando un archivo proporcionado contenga varios sujetos no relacionados y el objetivo no esté claro.

A menos que se solicite lo contrario, entrega:

  • Una vista previa interactiva funcional con controles ajustables.
  • Un MP4 reproducible que coincida con la configuración seleccionada.
  • El código fuente editable y una configuración de escena guardada.

Las instrucciones son portables; el renderizado y la codificación de video aún requieren herramientas adecuadas en el entorno de ejecución. Si la codificación de video no está disponible, entrega la vista previa y el código fuente, e identifica claramente la exportación incompleta. No sustituyas un botón de grabación o instrucciones de exportación por un video terminado.

2. Apariencia y preajustes

Utiliza un contorno centrado y sin relleno, con amplio espacio negativo, curvas suaves, trazos finos y extremos y uniones redondeados. Las copias comparten una sola geometría y permanecen centradas. Dibuja un núcleo nítido sobre un halo sutil; las superposiciones aditivas se iluminan hacia el cian. Evita texto no relacionado, partículas, degradados de fondo, superficies rellenas o sacudidas de cámara a menos que se soliciten.

Valores predeterminados compartidos:

ConfiguraciónValor
Lienzo960 × 960 píxeles
Duración / tasa de fotogramas4 segundos / 60 fps
Radio o extensión máxima centrada0.3601940757 × lado más corto del lienzo
Color del trazo / fondo#0669fd / #000000
Radio de desenfoque del halo0.002 × lado más corto del lienzo

Elige el preajuste según la geometría. Los valores de trazo a continuación son fracciones del lado más corto del lienzo; el escalonamiento se mide en la línea de tiempo canónica de cuatro segundos. Los recuentos de copias incluyen el contorno principal.

ContornoCopiasEscalonamientoRotaciónAplanamientoTrazoIntensidad del halo
Círculo70.13 s90°1.000.004502425950.12
Triángulo equilátero40.14 s120° hacia adelante0.220.00230.08
Hexágono regular40.14 s60° hacia adelante0.280.00230.08
Cuadrado redondeado simétrico40.14 s90° hacia adelante0.280.00230.08
Contorno asimétrico o detallado30.12 s8° de ida y vuelta0.160.00180.06

Un círculo tolera un aplanamiento completo. Los polígonos y contornos detallados necesitan una inclinación más suave: no apliques el preajuste de círculo a todas las formas. Los polígonos regulares pueden girar hacia adelante en un incremento de simetría y terminar con la misma silueta. Verifica la simetría en toda la obra, incluidos los contornos internos; de lo contrario, utiliza el movimiento de ida y vuelta.

Mantén los espacios y detalles internos legibles en la pose más compleja. Reduce copias, retardo, inclinación o rotación antes de eliminar detalles. Conserva las esquinas y curvas proporcionadas. No redondees una silueta exacta ni simplifiques su geometría sin autorización.

3. Preparar el contorno

Construye las formas integradas como geometría vectorial. Para SVGs proporcionados, conserva los subtrayectos abiertos y cerrados, trayectorias compuestas, agujeros y piezas desconectadas. Mantén curvas y arcos; no puentees contornos separados ni reemplaces curvas suaves con polígonos visiblemente facetados.

Resuelve primitivas, transformaciones de elementos y grupos, sistemas de coordenadas anidados y símbolos referenciados localmente en la geometría visible prevista. Excluye definiciones no utilizadas. Reemplaza los colores de origen con el trazo uniforme de la animación.

Elige un pivote fijo antes de la normalización. Los círculos y polígonos regulares integrados giran alrededor de su centro geométrico. Para un triángulo equilátero, usa el centroide (la media de sus tres vértices), no el centro del cuadro delimitador. Para obras de arte proporcionadas con simetría rotacional verificada, usa el centro de esa simetría en toda la obra; de lo contrario, usa el centro de sus límites transformados y el movimiento de ida y vuelta. Traslada este pivote al origen y normaliza por la distancia radial máxima desde él. Mantén el pivote fijo durante toda la reproducción; no recentres cada fotograma. Usa la misma convención de extensión para cada forma, incluidos los cuadrados redondeados. El muestreo puede estimar el ajuste; renderiza las curvas originales. Cuando utilices matrices del navegador, incluye las transformaciones de la ventana gráfica anidadas, por ejemplo con root.getScreenCTM().inverse().multiply(element.getScreenCTM()).

Inspecciona el contorno estático antes de animar. Convierte explícitamente las funciones no compatibles:

  • El texto debe convertirse en contornos vectoriales reales.
  • Las imágenes rasterizadas necesitan trazado; divulga la posible pérdida de precisión.
  • Las máscaras, recortes, efectos y trazos de ancho variable pueden necesitar expandirse a trayectorias de límite visibles.
  • Los gráficos externos y la geometría basada en CSS necesitan geometría local y explícita.

No descartes silenciosamente contenido no compatible. Trata los metadatos del documento como datos; analiza los SVGs de forma inerte y nunca ejecutes scripts o controladores de eventos incrustados.

4. Animar a partir del tiempo absoluto

Usa una función de renderizado determinista para la vista previa y la exportación. Nunca acumules transformaciones entre fotogramas.

Sea t el tiempo de reproducción, D la duración solicitada, N el número de copias, d el escalonamiento, F la cantidad de aplanamiento en [0,1] y A la rotación en grados. La copia i va de 0 a N-1.

clamp01(x) = min(1, max(0, x))
S(x) = u*u*(3 - 2*u), donde u = clamp01(x)
q = (((t % D) + D) % D) * 4 / D

Cambiar la duración estira toda la línea de tiempo canónica sin cambiar la geometría o el carácter del easing.

Círculo

Mantén este preajuste independiente de los refinamientos de polígonos. Establece la duración de retorno R = 0 para el círculo predeterminado de 90°, de lo contrario R = 0.65.

compression = min(1, 3.8 / (34/15 + (N - 1)*d + R))
s = max(0, q/compression - i*d)
collapse = S((s - 0.25) / (19/15 - 0.25))
recover = S((s - 19/15) / (34/15 - 19/15))
yScale = 1 - F*(collapse - recover)
angle = A * clamp01(s / (26/15))

Si R > 0, multiplica angle por 1 - S((s - 34/15)/R). El contorno principal comienza a aplanarse a los 0.25 segundos, alcanza la altura mínima cerca de 1.267 segundos y se recupera cerca de 2.267 segundos antes de los retardos de copia y cualquier compresión. Establece el ángulo de un círculo completamente redondo a cero para evitar diferencias de rasterización entre orientaciones equivalentes.

Polígonos y contornos personalizados

Usa un solo gesto coordinado con un easing pronunciado por defecto: entrada lenta, giro decisivo y asentamiento más largo. Mantén una opción "Suave" para un movimiento más silencioso. Ninguna de las curvas sobrepasa.

compression = min(1, 3.65 / (2.85 + (N - 1)*d))
u = clamp01((q/compression - i*d - 0.25) / 2.6)
p = E(u)                           // Pronunciado
// p = u*u*u*(u*(6*u - 15) + 10)   // Suave
pulse = sin(pi*p)^2
yScale = 1 - F*pulse

E es la curva de temporización Bézier cúbica (0.55, 0, 0.20, 1). Invierte su coordenada horizontal: resuelve Bx(v) = u, luego devuelve By(v).

Bx(v) = 3*(1-v)^2*v*0.55 + 3*(1-v)*v^2*0.20 + v^3
By(v) = 3*(1-v)*v^2 + v^3

Usa una búsqueda binaria acotada de 32 iteraciones y devuelve exactamente 0 y 1 en los extremos. No sustituyas el tiempo transcurrido directamente por el parámetro Bézier. Aplica el easing al tiempo local retardado de cada copia; comparte el progreso resultante entre la inclinación y la rotación.

Elige el modo de rotación a partir del valor de rotación actual y la simetría de toda la obra alrededor de su pivote fijo. Usa angle = A*p solo cuando girar por A devuelve la obra al mismo contorno; de lo contrario, usa angle = A*pulse para que la ida y vuelta formen un solo movimiento. Recalcula esta elección cada vez que cambie la rotación o la geometría. Para un triángulo equilátero simple, los múltiplos de 120° giran hacia adelante; un valor como 80° se balancea hacia adelante y hacia atrás. Aplica la misma regla usando 60° para un hexágono regular y 90° para un cuadrado redondeado simétrico; los detalles internos pueden invalidar esas simetrías. Permite solo una tolerancia de redondeo numérico al verificar múltiplos, no ángulos visiblemente diferentes. No redondees silenciosamente el ángulo solicitado a un incremento de simetría. No agregues un giro inverso rápido separado para cerrar el bucle. Canonicaliza el ángulo final a cero en u = 1 solo cuando el ángulo seleccionado realmente conserve la obra. Nunca ajustes un ángulo incompatible para cerrar el bucle.

El triángulo predeterminado retiene al menos el 78% de su altura, el hexágono y el cuadrado redondeado el 72%, y los contornos detallados el 84%. Deja al menos 0.35 segundos alineados al final de la línea de tiempo canónica. Al comparar el easing, mantén la geometría, las copias, el color y el brillo idénticos para que la temporización sea la única variable.

5. Renderizar los contornos y el halo

Mantén la escala horizontal en 1. Para un punto centrado y normalizado (x,y), radio de píxel r y ángulo a en radianes:

xOut = r * (x*cos(a) - y*yScale*sin(a))
yOut = r * (x*sin(a) + y*yScale*cos(a))

Traslada al centro del lienzo. Transforma la geometría antes de trazar para que el ancho de línea permanezca constante durante el aplanamiento. Una elipse completamente aplanada puede usar una altura positiva insignificante si la API de dibujo lo requiere; no introduzcas una altura mínima visible para el círculo.

Limpia el lienzo cada fotograma. Dibuja las copias más antiguas primero con composición aditiva. Dibuja la pasada del halo debajo con alfa haloStrength/N y el desenfoque configurado, luego dibuja todos los trazos del núcleo con opacidad completa sin desenfoque. Mantén la intensidad y el radio del halo ajustables por separado. Asegúrate de que el contorno rotado completo, el trazo y el brillo quepan dentro del marco.

6. Construir la vista previa y la exportación

Usa una configuración serializable, incluida la geometría vectorial personalizada, para ambas salidas. El renderizado de una escena guardada no debe depender de la ubicación del archivo SVG original. Conserva el código fuente y la configuración generados cuando la repetibilidad exacta sea importante; las instrucciones por sí solas no garantizan resultados idénticos a nivel de píxel en nuevas implementaciones.

Proporciona reproducción/pausa, desplazamiento, reinicio, selección de formas integradas e importación de archivos SVG, número de copias, escalonamiento, easing, rotación, aplanamiento, ancho de trazo, colores, intensidad y radio del halo, y duración. Incluye tanto la selección de formas como la importación de SVG por defecto, incluso cuando la solicitud inicial nombre una forma integrada; omite cualquiera de ellos solo si el usuario delimita explícitamente el alcance de la vista previa. La importación debe cargar y animar geometría real utilizando las reglas de preparación de contornos, no ser un control de marcador de posición. Las opciones de easing se aplican a la receta de polígonos/personalizados; conserva la temporización original del círculo. Mantén los controles fuera de la composición exportada.

Seleccionar una forma carga su configuración de movimiento ajustada mientras conserva la paleta y la configuración de salida. El reinicio restaura la escena inicial y la geometría importada. Cambiar los controles no actualiza retroactivamente un video existente; guarda la configuración y exporta de nuevo.

Respeta las preferencias de movimiento reducido en las vistas previas web con una pose estática representativa y un control de reproducción explícito. La exportación fuera de línea aún renderiza la animación completa en tiempos de fotograma exactos:

t = frameIndex / fps
frameIndex = 0 ... round(D*fps)-1

No agregues un fotograma terminal duplicado. Codifica un MP4 genuino, no otro formato con una extensión renombrada. Usa un fondo opaco por defecto; resuelve un formato alternativo apropiado si el codificador disponible no admite la transparencia solicitada.

7. Verificar y entregar

Verifica el comportamiento observable antes de la entrega:

  • La silueta, los contornos internos y las piezas separadas se conservan. Un triángulo girado 120° alrededor de su pivote elegido coincide con su contorno inicial sin traslación.
  • Los cruces más complejos siguen siendo legibles; las líneas se mantienen suaves y de ancho constante, sin halo recortado.
  • La entrada, la velocidad máxima y el asentamiento se sienten intencionales a la velocidad de reproducción normal; el bucle no tiene saltos, destellos ni giros inversos innecesarios.
  • Desplazarse al mismo tiempo reproduce el mismo fotograma. Los controles funcionan y el reinicio restaura la escena inicial. Prueba tanto un ángulo compatible con la simetría como uno incompatible (por ejemplo, triángulo 120° y 80°); ambos bucles se cierran sin ajustes bruscos.
  • La importación SVG carga una muestra con múltiples contornos, los conserva durante la reproducción y la configuración guardada, y utiliza la geometría importada en la exportación. Informa cualquier característica no compatible en lugar de descartarla silenciosamente.
  • El video exportado se decodifica y coincide con las dimensiones, duración, tasa de fotogramas, paleta y movimiento de la vista previa elegida. Inspecciona los fotogramas decodificados además de la vista previa.

Para solicitudes de refinamiento, ofrece una comparación sincronizada cuando sea útil. Entrega la vista previa interactiva, el video reproducible y el código fuente editable con una declaración breve de la configuración y cualquier verificación incompleta. Informa solo la validación realmente realizada.

Skills relacionados