Communitygithub.com

k8s-animate

3Blue1Brown 스타일의 마님(Manim) 영상으로 쿠버네티스 프로세스를 공식 아이콘과 함께 설명합니다. 선택적으로 나레이션을 추가할 수 있습니다. 사용자가 /k8s-animate를 입력할 때만 실행되며, 자동으로 실행되지 않습니다.

k8s-animate란 무엇인가요?

이 스킬은 쿠버네티스 동작 과정을 3Blue1Brown 스타일의 애니메이션 영상(Manim 기반)으로 제작하는 도구입니다. 사용자가 `/k8s-animate` 명령어를 입력해야만 실행되며, 공식 쿠버네티스 커뮤니티 아이콘(CC-BY-4.0)을 활용하여 각 구성 요소를 정확히 표현합니다. 지원하는 플랫폼은 macOS, Arch Linux, Debian/Ubuntu이며, Kokoro TTS(무료, 오프라인, 상업적 사용 가능)를 통해 나레이션을 추가할 수 있습니다(`voiceover=on` 기본값). 워크플로우는 환경 확인 → 스토리보드 협의 → Manim 씬 작성 → 프리뷰 및 최종 렌더링 순서로 진행됩니다. 스토리보드는 6~12개의 비트로 구성되며, 각 비트는 움직이는 아이콘과 패킷 이동, 색상 변화 등으로 쿠버네티스 개념을 시각적으로 전달합니다. 사용자의 작업 디렉토리에 MP4 파일이 생성되며, 완료 후 자동으로 파일을 열어 확인할 수 있습니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wielenmaker/k8s-animate/tree/HEAD

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

쿠버네티스 설명 영상 만들기

출력은 강의용 MP4 파일입니다: 그래픽, 애니메이션, 거의 텍스트 없음, 자막 없음.

인자 voiceover=on|off (기본값 on). on은 로컬 Kokoro TTS 음성으로 나레이션을 추가합니다. off는 무음 영상을 만들고 Kokoro를 설치하거나 로드하지 않습니다.

인자 setup: 설치만 수행하고 영상은 만들지 않습니다. 아래 "환경 확인" 단계를 수행한 후 중단합니다.

두 개의 폴더. SKILL은 스킬의 기본 디렉토리(이 파일이 있는 폴더)입니다. 이 폴더에는 .venv/, icons/, references/, scripts/가 있습니다. OUT은 <사용자 작업 디렉토리>/<주제>이며, 영상마다 생성됩니다. 씬 파일, media/, 최종 MP4는 OUT에 위치하며 SKILL에는 절대 두지 않습니다(스킬을 업데이트하거나 제거하면 SKILL이 삭제됩니다). 절대 경로를 사용하고 현재 디렉토리에 의존하지 마십시오.

스킬에 포함된 파일

  • icons/: 공식 쿠버네티스 커뮤니티 아이콘(라벨 세트, CC-BY-4.0). 쿠버네티스 구성 요소 및 리소스에는 이 아이콘만 사용하십시오. 아이콘이 있는 구성 요소를 다시 그리거나, 다른 색으로 바꾸거나, 일반 도형으로 대체하지 마십시오. 아이콘이 없는 개념(CSR, 인증서, 패킷, iptables 규칙 등)은 참조 파일의 Doc, Packet 같은 간단한 도형을 사용하세요.
  • references/node_join.py: 완전하고 승인된 예제(kubeadm 노드 조인). 스타일, 팔레트, 헬퍼 클래스를 복사하세요.
  • references/kokoro_service.py: manim-voiceover에 연결된 Kokoro-82M.
  • references/kit.py: 공유 팔레트, 헬퍼, Explainer 기본 씬과 voiced(Scene). 새 씬은 여기에서 임포트합니다.
  • scripts/setup.sh [voiceover=on|off] [--yes]: 누락된 항목을 보고하고 설치 계획을 출력합니다(macOS, Arch, Debian/Ubuntu). --yes를 붙이면 설치를 진행합니다.
파일구성 요소파일구성 요소파일구성 요소
apikube-apiserverpodPodcmConfigMap
etcdetcdrsReplicaSetsecretSecret
schedkube-schedulerdeployDeploymentpvPersistentVolume
c-mkube-controller-managerstsStatefulSetpvcPersistentVolumeClaim
c-c-mcloud-controller-managerdsDaemonSetscStorageClass
kubeletkubeletjobJobnsNamespace
k-proxykube-proxycronjobCronJobsaServiceAccount
control-plane컨트롤 플레인 노드svcServicerole / c-roleRole / ClusterRole
node워커 노드epEndpointsrb / crbRoleBinding / ClusterRoleBinding
hpaHorizontalPodAutoscaleringIngressquotaResourceQuota
crdCustomResourceDefinitionnetpolNetworkPolicylimitsLimitRange

Manim은 SVG에 포함된 텍스트를 무시하며, api, c-m, sched, kubelet, k-proxy는 동일한 기어 글리프를 공유합니다. 항상 Icon(name, label) 헬퍼로 아이콘에 라벨을 붙이세요.

워크플로우

1. 환경 확인

bash SKILL/scripts/setup.sh voiceover=<on|off>를 실행하세요. Ready.가 출력되면 계속 진행합니다. 그렇지 않으면 누락된 항목과 설치 계획이 출력됩니다(이 머신에서 처음 실행하는 경우): 사용자에게 계획을 보여주고 설치 전에 허락을 구하세요.

  • 허락을 받으면 --yes를 붙여 다시 실행하세요. 느릴 수 있으므로(torch, 시스템 패키지) 백그라운드에서 실행하거나 긴 타임아웃을 설정하세요.
  • 계획에 sudo 줄이 있어 비밀번호를 입력할 수 없는 경우: 사용자가 직접 실행할 명령어를 알려주세요(! bash SKILL/scripts/setup.sh voiceover=<on|off> --yes).
  • Kokoro는 무료, Apache-2.0(유료 강좌에 사용 가능), 오프라인, 상업용에 준하는 품질입니다. 사용자가 원하지 않으면 voiceover=off를 제안하세요.

2. 스토리보드 협의

주제가 주어지지 않았다면 먼저 주제를 물어보세요. 그런 다음 채팅에서 스토리보드를 제안하고 승인을 기다리세요. 렌더링에 몇 분이 걸리기 때문입니다:

  • 612개의 비트, 각 비트는 13단어의 단계 라벨, 화면에서 움직이는 요소, 한 문장의 나레이션으로 구성됩니다.
  • 움직임을 통해 이야기를 전달합니다: 박스 안의 아이콘, 호 위의 패킷, 상태 변화를 나타내는 색상 변경. 화면에는 짧은 라벨만 표시됩니다.
  • 사실은 현재 쿠버네티스 버전에 맞게 정확해야 합니다. 세부 사항이 확실하지 않으면 추측하지 말고 그렇다고 말하세요.

3. 씬 작성

references/node_join.py를 모델로 삼으세요:

  • 하나의 NARRATION 딕셔너리(비트 → 문장)를 클래스 속성으로, 비트당 하나의 메서드; Explainer.construct가 with self.voice(line) 안에서 비트를 반복합니다.
  • OUT/<topic>.py를 작성하고 from references.kit import *로 임포트한 후 Explainer를 서브클래싱하고 마지막에 <Name>Voiced = voiced(<Name>)를 추가하세요. 비트는 def beat(self, i)입니다. 무음 <Name>과 나레이션 <Name>Voiced는 동일한 코드에서 비롯됩니다.
  • 씬 파일 이름을 표준 라이브러리 모듈 이름(operator.py는 Python 임포트를 깨뜨림)으로 짓지 마세요.
  • 팔레트(어두운 #0b1220, k8s 블루 #326ce5, 골드 토큰, 틸 네트워크, 앰버 NotReady, 그린 Ready)와 헬퍼 Icon, Packet, Doc, Step, Pill, send를 재사용하세요.
  • 작은 클래스, 최소한의 코드.
  • 용어는 나레이션에서 발음되는 방식으로 표기하세요: kubeadm → "kube admin", etcd → "et-cee-dee", kubectl → "kube control".

4. 프리뷰 후 렌더링

OUT 디렉토리에서 manim을 다음과 같이 실행하세요: PYTHONPATH=SKILL SKILL/.venv/bin/manim --media_dir OUT/media ...

  1. 프리뷰: ... -ql <topic>.py <Name>, 그런 다음 ffmpeg로 약 8프레임을 추출하여 하나의 콘택트 시트로 만들고 한 번 확인하세요. 겹침, 잘린 라벨, 어둡거나 읽기 어려운 텍스트를 수정하세요.
  2. 최종 렌더링: voiceover=off일 때 ... -qh <topic>.py <Name>, voiceover=on일 때 <Name>Voiced. OUT/media/videos/<topic>/1080p60/<Name>.mp4를 OUT/<topic>.mp4로 복사하세요.
  3. voiceover=on인 경우 MP4에 오디오 스트림이 있는지 확인하세요(ffprobe).
  4. 완료되면 MP4를 여세요(macOS에서는 open, Linux에서는 xdg-open, 디스플레이가 없으면 경로만 출력).

절대 MP4 경로, 길이, 주의할 점(특이한 용어 발음)을 보고하고 아이콘에 "Kubernetes community icons, CC BY 4.0" 크레딧이 필요함을 알리세요(아웃트로에 이미 표시됨). 음성 옵션: af_heart(기본값), am_michael, am_fenrir; voiced(<Name>, voice="am_michael")로 전달하세요.

관련 스킬