Communitygithub.com

k8s-animate

Crea un video estilo 3Blue1Brown con Manim que explica un proceso de Kubernetes usando los iconos oficiales de Kubernetes, opcionalmente narrado. Solo se invoca manualmente — ejecútalo únicamente cuando el usuario escriba /k8s-animate; nunca lo actives por tu cuenta.

¿Qué es k8s-animate?

Esta habilidad permite a un agente de IA (como Claude Code) generar videos explicativos animados sobre procesos de Kubernetes, siguiendo el estilo visual del canal 3Blue1Brown (con Manim). El usuario la invoca explícitamente escribiendo `/k8s-animate`. La habilidad se encarga de comprobar el entorno (instalando dependencias como Kokoro TTS si es necesario), acordar un guion gráfico con el usuario, escribir una escena de Manim basada en una referencia aprobada y renderizar el video final en formato MP4. Utiliza exclusivamente los iconos oficiales de la comunidad de Kubernetes (con licencia CC-BY-4.0) para representar componentes y recursos. Soporta narración opcional mediante Kokoro TTS local (Apache-2.0) o video silencioso. Está diseñada para plataformas como Claude Code, Cursor o Codex, y su código debe seguir fielmente las convenciones del proyecto (paleta de colores, clases auxiliares, estructura de carpetas). El agente no debe ejecutar esta habilidad por iniciativa propia; solo cuando el usuario lo solicite mediante el comando `/k8s-animate`.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wielenmaker/k8s-animate/tree/HEAD

Preguntar en tu IA favorita

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

Documentación

Crear un video explicativo de Kubernetes

El resultado es un MP4 para una conferencia: gráfico, animado, casi sin texto y sin subtítulos.

Argumento voiceover=on|off (por defecto on). on narra con la voz local de Kokoro TTS; off genera un video silencioso y nunca instala ni carga Kokoro.

Argumento setup: solo instala, no genera video. Realiza el paso "Verificar el entorno" que se indica a continuación y luego detente.

Dos carpetas. SKILL es el directorio base de la habilidad (la carpeta que contiene este archivo). Contiene .venv/, icons/, references/ y scripts/. OUT es <directorio de trabajo del usuario>/<tema>, creado por video. El archivo de escena, media/ y el MP4 final residen en OUT, nunca en SKILL (actualizar o eliminar la habilidad borra SKILL). Usa rutas absolutas; no confíes en el directorio actual.

Qué incluye esta habilidad

  • icons/: los iconos oficiales de la comunidad de Kubernetes (conjunto etiquetado, CC-BY-4.0). Usa solo estos iconos para componentes y recursos de Kubernetes. Nunca los redibujes, recolorees ni sustituyas con formas genéricas para un componente que tenga un icono aquí. Para conceptos sin icono (CSR, certificado, paquete, reglas iptables), usa formas simples como Doc y Packet de la referencia.
  • references/node_join.py: un ejemplo completo y aprobado (kubeadm node join). Copia su estilo, paleta y clases auxiliares.
  • references/kokoro_service.py: Kokoro-82M integrado con manim-voiceover.
  • references/kit.py: paleta compartida, ayudantes y la escena base Explainer más voiced(Scene). Las nuevas escenas importan desde aquí.
  • scripts/setup.sh [voiceover=on|off] [--yes]: informa qué falta y muestra el plan de instalación (macOS, Arch, Debian/Ubuntu); solo instala con --yes.
archivocomponentearchivocomponentearchivocomponente
apikube-apiserverpodPodcmConfigMap
etcdetcdrsReplicaSetsecretSecret
schedkube-schedulerdeployDeploymentpvPersistentVolume
c-mkube-controller-managerstsStatefulSetpvcPersistentVolumeClaim
c-c-mcloud-controller-managerdsDaemonSetscStorageClass
kubeletkubeletjobJobnsNamespace
k-proxykube-proxycronjobCronJobsaServiceAccount
control-planenodo de plano de controlsvcServicerole / c-roleRole / ClusterRole
nodenodo trabajadorepEndpointsrb / crbRoleBinding / ClusterRoleBinding
hpaHorizontalPodAutoscaleringIngressquotaResourceQuota
crdCustomResourceDefinitionnetpolNetworkPolicylimitsLimitRange

Manim elimina el texto incrustado en estos SVG, y api, c-m, sched, kubelet, k-proxy comparten el mismo glifo de engranaje. Siempre etiqueta los iconos con el ayudante Icon(name, label).

Flujo de trabajo

1. Verificar el entorno

Ejecuta bash SKILL/scripts/setup.sh voiceover=<on|off>. Si imprime Ready., continúa. De lo contrario, imprime qué falta y el plan (primera ejecución en esta máquina): muestra el plan al usuario y pide confirmación antes de instalar.

  • Tras la confirmación, ejecútalo de nuevo con --yes. Es lento (torch, paquetes del sistema), así que ejecútalo en segundo plano o con un timeout largo.
  • Si el plan tiene una línea sudo y no puedes escribir la contraseña: dale al usuario el comando para que lo ejecute él mismo (! bash SKILL/scripts/setup.sh voiceover=<on|off> --yes).
  • Kokoro es gratuito, Apache-2.0 (válido para cursos de pago), offline y de calidad casi comercial; si el usuario no lo quiere, sugiere voiceover=off.

2. Acordar el guion gráfico

Pregunta por el tema si no se ha proporcionado. Luego propón un guion gráfico en el chat y espera la aprobación, porque el renderizado lleva minutos:

  • 6–12 tiempos, cada uno con: una etiqueta de paso de 1–3 palabras, qué se mueve en pantalla, una oración hablada.
  • Historia contada mediante movimiento: iconos en cajas, paquetes en arcos, cambios de color para estados. Solo etiquetas cortas en pantalla.
  • Los datos deben ser correctos para la versión actual de Kubernetes. Si no estás seguro de un detalle, dilo en lugar de adivinar.

3. Escribir la escena

Modélala en references/node_join.py:

  • Un diccionario NARRATION (tiempo → oración) como atributo de clase, un método por tiempo; Explainer.construct itera sobre ellos dentro de with self.voice(line).
  • Escribe OUT/<tema>.py con from references.kit import *, subclase de Explainer, y añade <Nombre>Voiced = voiced(<Nombre>) al final. Los tiempos son def beat(self, i). El <Nombre> silencioso y el <Nombre>Voiced narrado provienen del mismo código.
  • Nunca nombres el archivo de escena como un módulo de la stdlib (operator.py rompe las importaciones de Python).
  • Reutiliza la paleta (fondo oscuro #0b1220, azul k8s #326ce5, token dorado, red verde azulado, ámbar NotReady, verde Ready) y los ayudantes Icon, Packet, Doc, Step, Pill, send.
  • Clases pequeñas, código mínimo.
  • Escribe los términos como se pronuncian en la narración: kubeadm → "kube admin", etcd → "et-cee-dee", kubectl → "kube control".

4. Previsualizar, luego renderizar

Ejecuta manim como PYTHONPATH=SKILL SKILL/.venv/bin/manim --media_dir OUT/media ... desde OUT.

  1. Previsualización: ... -ql <tema>.py <Nombre>, luego extrae ~8 cuadros con ffmpeg en una hoja de contactos y revísala una vez. Corrige superposiciones, etiquetas recortadas y texto oscuro o ilegible.
  2. Renderizado final: ... -qh <tema>.py <Nombre> cuando voiceover=off, o <Nombre>Voiced cuando voiceover=on. Copia OUT/media/videos/<tema>/1080p60/<Nombre>.mp4 a OUT/<tema>.mp4.
  3. Con voiceover=on, confirma que el MP4 tenga un flujo de audio (ffprobe).
  4. Abre el MP4 al terminar (open en macOS; xdg-open en Linux, o si no hay pantalla solo imprime la ruta).

Informa de la ruta absoluta del MP4, la duración, cualquier cosa a la que prestar atención (pronunciación de términos inusuales) y recuerda al usuario que los iconos necesitan el crédito "Kubernetes community icons, CC BY 4.0" (el outro ya lo muestra). Opciones de voz: af_heart (por defecto), am_michael, am_fenrir; pásalo como voiced(<Nombre>, voice="am_michael").

Skills relacionados