Crie um vídeo explicativo sobre Kubernetes
A saída é um MP4 para uma palestra: gráfica, animada, quase sem texto, sem legendas.
Argumento voiceover=on|off (padrão on). on narra com a voz local do Kokoro TTS; off produz um vídeo silencioso e nunca instala ou carrega o Kokoro.
Argumento setup: apenas instalação, sem vídeo. Faça a etapa "Verificar o ambiente" abaixo e pare.
Duas pastas. SKILL é o diretório base da skill (a pasta que contém este arquivo). Ela contém .venv/, icons/, references/ e scripts/. OUT é <diretório de trabalho do usuário>/<tópico>, criado por vídeo. O arquivo da cena, media/ e o MP4 final ficam em OUT, nunca em SKILL (atualizar ou remover a skill exclui SKILL). Use caminhos absolutos; não dependa do diretório atual.
O que acompanha esta skill
icons/: os ícones oficiais da comunidade Kubernetes (conjunto identificado, CC-BY-4.0). Use apenas estes ícones para componentes e recursos do Kubernetes. Nunca redesenhe, recolorir em outra coisa ou substitua por uma forma genérica um componente que tenha um ícone aqui. Para conceitos sem ícone (CSR, certificado, pacote, regras iptables), use formas simples comoDocePacketda referência.references/node_join.py: um exemplo completo e aprovado (kubeadm node join). Copie seu estilo, paleta e classes auxiliares.references/kokoro_service.py: Kokoro-82M integrado ao manim-voiceover.references/kit.py: paleta compartilhada, ajudantes e a cena baseExplainermaisvoiced(Scene). Novas cenas importam dele.scripts/setup.sh [voiceover=on|off] [--yes]: informa o que está faltando e exibe o plano de instalação (macOS, Arch, Debian/Ubuntu); instala apenas com--yes.
| arquivo | componente | arquivo | componente | arquivo | componente |
|---|---|---|---|---|---|
| api | kube-apiserver | pod | Pod | cm | ConfigMap |
| etcd | etcd | rs | ReplicaSet | secret | Secret |
| sched | kube-scheduler | deploy | Deployment | pv | PersistentVolume |
| c-m | kube-controller-manager | sts | StatefulSet | pvc | PersistentVolumeClaim |
| c-c-m | cloud-controller-manager | ds | DaemonSet | sc | StorageClass |
| kubelet | kubelet | job | Job | ns | Namespace |
| k-proxy | kube-proxy | cronjob | CronJob | sa | ServiceAccount |
| control-plane | nó do plano de controle | svc | Service | role / c-role | Role / ClusterRole |
| node | nó worker | ep | Endpoints | rb / crb | RoleBinding / ClusterRoleBinding |
| hpa | HorizontalPodAutoscaler | ing | Ingress | quota | ResourceQuota |
| crd | CustomResourceDefinition | netpol | NetworkPolicy | limits | LimitRange |
O Manim descarta o texto incorporado nesses SVGs, e api, c-m, sched, kubelet, k-proxy compartilham o mesmo glifo de engrenagem. Sempre rotule os ícones com o auxiliar Icon(nome, rótulo).
Fluxo de trabalho
1. Verificar o ambiente
Execute bash SKILL/scripts/setup.sh voiceover=<on|off>. Se exibir Ready., continue. Caso contrário, ele exibiu o que está faltando e o plano (primeira execução nesta máquina): mostre o plano ao usuário e pergunte antes de instalar.
- Após confirmação, execute novamente com
--yes. É lento (torch, pacotes do sistema), então execute em segundo plano ou com um timeout longo. - Se o plano tiver uma linha
sudoque você não pode digitar a senha: forneça ao usuário o comando para executar por conta própria (! bash SKILL/scripts/setup.sh voiceover=<on|off> --yes). - Kokoro é gratuito, Apache-2.0 (adequado para cursos pagos), offline e com qualidade quase comercial; se o usuário não quiser, sugira
voiceover=off.
2. Combinar o storyboard
Pergunte pelo tópico se não foi fornecido. Em seguida, proponha um storyboard no chat e aguarde aprovação, pois a renderização leva minutos:
- 6 a 12 etapas, cada uma com: um rótulo de etapa de 1 a 3 palavras, o que se move na tela, uma frase falada.
- História contada através de movimento: ícones em caixas, pacotes em arcos, mudanças de cor para estado. Apenas rótulos curtos na tela.
- Os fatos devem estar corretos para a versão atual do Kubernetes. Se não tiver certeza sobre um detalhe, diga em vez de adivinhar.
3. Escrever a cena
Modele-a em references/node_join.py:
- Um dicionário
NARRATION(etapa → frase) como atributo de classe, um método por etapa;Explainer.constructpercorre-os dentro dewith self.voice(line). - Escreva
OUT/<tópico>.pycomfrom references.kit import *, subclassifiqueExplainere adicione<Nome>Voiced = voiced(<Nome>)no final. As etapas sãodef beat(self, i). O<Nome>silencioso e o<Nome>Voicednarrado vêm do mesmo código. - Nunca nomeie o arquivo da cena como um módulo stdlib (
operator.pyquebra as importações do Python). - Reutilize a paleta (fundo escuro
#0b1220, azul k8s#326ce5, token dourado, rede verde-água, âmbar NotReady, verde Ready) e os auxiliaresIcon,Packet,Doc,Step,Pill,send. - Classes pequenas, código mínimo.
- Escreva os termos como são falados na narração: kubeadm → "kube admin", etcd → "et-cee-dee", kubectl → "kube control".
4. Pré-visualizar e renderizar
Execute o manim como PYTHONPATH=SKILL SKILL/.venv/bin/manim --media_dir OUT/media ... a partir de OUT.
- Pré-visualização:
... -ql <tópico>.py <Nome>, depois extraia ~8 quadros com ffmpeg em uma folha de contato e examine uma vez. Corrija sobreposições, rótulos cortados e texto escuro ou ilegível. - Renderização final:
... -qh <tópico>.py <Nome>quandovoiceover=off, ou<Nome>Voicedquandovoiceover=on. CopieOUT/media/videos/<tópico>/1080p60/<Nome>.mp4paraOUT/<tópico>.mp4. - Com
voiceover=on, confirme que o MP4 tem um fluxo de áudio (ffprobe). - Abra o MP4 ao finalizar (
openno macOS;xdg-openno Linux, ou se não houver tela, apenas exiba o caminho).
Informe o caminho absoluto do MP4, a duração, algo para ouvir (pronúncia de termos incomuns) e lembre ao usuário que os ícones precisam do crédito "Ícones da comunidade Kubernetes, CC BY 4.0" (o encerramento já mostra). Opções de voz: af_heart (padrão), am_michael, am_fenrir; passe um como voiced(<Nome>, voice="am_michael").