Communitygithub.com

jjietay/clayducation

부드러운 3D 클레이 스타일의 해설이 포함된 학습 설명 영상(MP4)을 제작합니다. 무언의 마스코트가 등장하며, 음성 생성 전에 스크립트가 다른 에이전트에 의해 검증됩니다. 사용자가

clayducation란 무엇인가요?

이 스킬은 사용자의 요청에 따라 부드러운 3D 클레이 애니메이션 스타일로 제작된, 해설이 포함된 학습 설명 영상을 생성합니다. 주로 AI 코딩 어시스턴트(예: Claude Code)를 위한 것으로, 현재 대화와 프로젝트 맥락을 최대한 활용한다는 장점이 있습니다. 영상의 룩(Clay 3D, Classic 2D 혼합, 단일 스타일), 시청자 유형(시험 복습, 초보 학습자 등), 체크포인트 시점(완료 후, 스토리보드 후, 첫 프레임 후), 배경 음악(Calm, Lo-fi, 없음)을 사용자에게 먼저 질문합니다. 무언의 마스코트가 등장하여 개념을 시연하고, 음성 해설은 160단어/분 속도로 제공되며, 수학적 플롯에는 Manim을, 액션 장면에는 클레이 모델을 사용합니다. 모든 수치와 주장은 검증된 출처에서 가져와야 하며, 오버랩이나 충돌 없는 완성도를 여러 차례 점검합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jjietay/clayducation/tree/HEAD

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

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

문서

설명 영상

사용자가 개념 학습을 돕는 영상을 만듭니다. 새로운 도구와 달리, 이 대화와 프로젝트를 이미 알고 있다는 큰 장점이 있습니다. 이 지식을 활용하세요.

엔진은 ~/.claude/skills/clayducation/engine/ 에 있습니다. 이 파일에서 make 는 다음을 의미합니다:

node ~/.claude/skills/clayducation/engine/make.mjs <명령어> <프로젝트-디렉토리>

0단계: 먼저 질문하기 (스킬 시작 시마다)

사용자가 /clayducation 를 입력했거나 말로 영상을 요청했든, 첫 번째로 해야 할 일은 아래 질문들을 AskUserQuestion(클릭 가능한 옵션 포함)으로 하는 것입니다. 사용자 메시지나 이 대화에서 이미 답변된 질문은 건너뜁니다(예: "뉴스릴처럼" 은 룩을, "lo-fi 음악과 함께" 는 음악을 답변한 것입니다). 추천 옵션을 먼저 제시하고 "(Recommended)" 라고 표시하세요. 네 질문을 모두 한 번의 호출로 질문하세요(도구는 최대 4개까지 허용). 주제 자체가 명확하지 않고 건너뛴 질문이 없으면, 주제에 대해 먼저 별도 호출로 질문하세요.

질문헤더옵션 (첫 번째 = 기본값)
영상에 어떤 룩을 사용할까요?룩클레이 3D: 부드러운 클레이 룩 하나, 무언의 마스코트가 작업 수행 · 클래식 2D, 혼합: 각 파트마다 다른 2D 스타일 · 클래식 2D, 단일 스타일: 사용자가 지정 (뉴스릴, 화이트보드 등)
영상 대상과 길이는 어떻게 될까요?시청자시험 복습, 표준: 강의 표기법, 계산된 숫자, 시험 함정, 56분 · 시험 복습, 심층: 동일, 89분, 모든 유도 단계 포함 · 초보 학습자, 짧음: 직관 우선, 기호 적음, 2~4분 · (기타: 사용자가 시청자와 길이 지정, 예: "전문가 복습, 짧게")
언제 확인을 드릴까요?체크포인트한 번에: 완성된 영상으로 돌아오기 · 스토리보드 후: 계획을 보여주고 승인 대기 · 첫 룩 후: 첫 프레임을 보여주고 대기
어떤 음악을 사용할까요?음악Calm (current): 부드러운 패드, 비트 없음 · Lo-fi (lofi): 가벼운 비트, 더 많은 에너지 · 없음

대화 내용이 추천하는 옵션이 있다면 해당 옵션을 먼저 제시합니다(다음 주 시험: 시험 복습, 심층). 메시지가 시청자 질문의 절반만 답변한 경우(예: "내 시험을 위해"), 질문은 유지하고 그 절반과 일치하는 옵션만 제공합니다. 시청자는 시험 복습, 초보 학습자, 전문가 복습(빠르고 밀도 높음)입니다. 길이는 짧음(24분), 표준(56분), 심층(8~9분)입니다. 답변을 4단계의 video.json 에 "_look" (clay 또는 classic), "_brief": { "viewer": ..., "length": ..., "checkpoint": ..., "style": ... }, "_render": { "music": "current" | "lofi" | false } 로 기록하세요. 이후의 모든 단계와 재구축은 여기서 값을 읽고 다시 묻지 않습니다. 사용자가 질문을 무시하면 각 질문의 첫 번째 옵션을 사용합니다.

한 번에, 사용자가 체크포인트를 선택하지 않은 경우

0단계 후에, 멈추지 않고 아래 모든 단계를 수행하고, 완성되고 검증된 영상만 가지고 돌아오세요. "계속할까요?" 라고 묻지 말고, 초안을 보여주지 말고, 단계 사이에 기다리지 마세요. 아래 모든 검사는 사용자가 실행하고 조치해야 할 부분입니다. 유일한 정지 지점은 사용자가 선택한 체크포인트입니다: "스토리보드 후" 는 7단계 후에 멈추고(스토리보드와 스크립트 에이전트의 판결을 보여준 후 대기), "첫 룩 후" 는 9단계의 첫 번째 make look 에서 멈춥니다(해당 이미지를 보여준 후 대기).

사용자가 원하는 룩 (6단계 전에 읽기)

행동하는 것에는 클레이, 플롯에는 Manim, 모든 영상에 마스코트가 등장합니다. styles/clay.md 를 읽으세요. 사용자는 이전의 혼합 스타일 대신 영상 간 일관성을 위해 클레이 룩을 선택했습니다. 2D 스타일은 선택적인 클래식 룩입니다. 아래 섹션을 참조하세요.

  • 플롯을 클레이에 강제로 넣지 마세요 (사용자가 요청함). 2D Manim 그림이 클레이보다 시청자 이해에 더 도움이 될 때(곡선, 분포, 등고선, 투영 또는 평면상의 다른 기하학), 해당 부분을 Manim 배경(styles/math-manim.md)의 Manim 파트로 만드세요. 수학적 곡선을 복사하는 클레이 모델을 절대 만들지 마세요: 사용자는 이전에 그러한 모델을 제거했습니다. 행동하는 객체와 마스코트의 물리적 작업은 클레이에 남습니다. 영상은 클레이 파트에서 Manim 파트로, 그리고 다시 돌아올 수 있으며, 동일한 색상은 동일한 대상을 의미합니다.

  • 하나의 룩, 여러 파트. 영상은 약 15~40초 길이의 파트(훅, 각 아이디어, 사용자 사례, 마무리)로 나뉩니다. 각 파트는 고유한 단색 배경, 카메라 및 설정을 가집니다. 서로 인접한 두 파트는 배경을 공유하지 않습니다.

  • 마스코트가 작업을 수행합니다. 그는 무언이며 립싱크가 없고, 내레이터는 음성 해설입니다. 그는 걷고, 당기고, 밀고, 물건을 나르고, 직접 손으로 끕니다. 따라서 스크립트의 힘은 시청자가 그가 하는 것을 보는 것입니다. 사용자는 그가 서서 지켜보기만 했던 이전 영상 이후에 이 방식을 요청했습니다. 그는 기본적으로 무표정을 유지하며, make check 는 그가 한 자리에 멈춰 있을 때 WARN을 표시합니다. 작업을 다양화하세요: 각 파트에서 다른 액션 헬퍼 사용(carry, knock, press, grip, pointAt, pushOn; styles/clay.md 의 "다른 액션 사용" 참조). 사용자는 그가 모든 파트에서 밀기만 하는 것을 발견했습니다.

  • 사물은 연결되어야 합니다. 스프링은 벽에 닿고, 핀은 지도에 닿고, 손은 잡고 있는 것에 닿습니다. 사용자는 모든 검사가 통과했음에도 벽에 닿지 않은 스프링을 발견했습니다. make bake 는 models.js (JOINS) 의 모든 조인을 측정하므로, 새로운 조인을 거기에 추가하고 스틸 이미지에서 접촉을 확인하세요.

  • 자체 모델만 사용하세요. styles/library/clay 의 키트를 사용하세요. 절대 모델을 다운로드하지 마세요. 영상에 새 객체가 필요하면 동일한 룩의 키트에 추가하세요.

  • 각 파트는 하나의 연속 샷입니다. 파트 내에는 컷이나 새 슬라이드가 없습니다: 음성 해설이 말하는 대로 객체가 도착하고, 이동하고, 결합하며, 카메라는 천천히 움직입니다. 파트는 다음 파트가 시작되는 상태에서 끝나거나, 다음 파트 배경으로의 와이프로 끝납니다.

  • 그림이 설명하고, 텍스트는 이름만 붙입니다. 텍스트는 평평하고 선명하게 유지되며, 3D 위에 HTML로 표시됩니다. 프레임당: 키커(작은 대문자, 파트 및 출처), 최대 8단어의 제목, 각각 1~4단어의 가는 지시선이 있는 레이블 몇 개, 하단에 최대 한 줄의 캡션. 문장 열, 글머리 기호 목록, 색상 의미 범례 절대 금지. 화면에 최대 약 15단어.

  • 수식은 음성을 따라 연기합니다 (사용자가 요청함). 고정된 수식은 노트를 읽는 것과 다를 바 없습니다. eqn() 을 사용하여 각 수식을 만드세요: 항이 말해질 때 도착하고, 음성이 항을 이동시킬 때 이동하고, 취소를 말할 때 충돌 및 폭발하며, 중요한 것을 지칭할 때만 튕깁니다. make look 은 가만히 있는 수식과 화면에 취소 표시 없이 "취소" 라는 문장에 대해 오류를 표시합니다. styles/clay.md 참조.

  • 물리적 움직임. 사물은 객체처럼 움직입니다: 팔이 뻗고, 공이 떨어지고 튕기고, 블록이 떨어져 안정되고, 펄스가 이동합니다. 정적 상자의 축적 없음.

  • 동일한 객체는 모든 영상에서 색상을 유지합니다 (로봇은 항상 주황색, 지도는 항상 노란색).

스토리보드가 이 중 하나라도 위반하면 코드를 작성하기 전에 스토리보드를 변경하세요.

엄격한 규칙

  • 기본적으로 병렬 처리 (사용자가 요청함, 2026-11-09). 동시에 실행할 수 있는 모든 것은 동시에 실행합니다: 13분짜리 영상이 모든 프레임을 하나의 Chrome 페이지에서 측정할 때 3시간이 걸렸습니다(코어 하나 사용, GPU 10%). 이제 엔진은 여러 페이지에서 동시에 look, collide, review, stable 을 측정합니다(렌더의 workers: 코어 절반, 최대 8개, 여유 메모리가 허용하는 만큼만). build 는 sheet, stable, review를 함께 실행합니다. 프레임을 방문하는 단계를 추가할 때도 페이지 전체에 나누세요(make.mjs 의 measureParallel, traceParallel, idParallel). 작업 시: 독립적인 작업을 함께 시작하고(look과 selftest, Manim 렌더와 체크), 다른 작업이 실행될 수 있는 동안 한 작업을 기다리지 마세요.

  • 여기, 주 대화에서 생각을 하세요. 컨텍스트가 여기에 있으므로, 스크립트, 스토리보드 및 장면을 직접 작성하세요. 이러한 단계를 서브 에이전트에 절대 넘기지 마세요: 서브 에이전트는 컨텍스트 없이 시작합니다. 7단계의 스크립트 에이전트는 유일한 예외이며, 일부러 빈 상태로 시작합니다.

  • 핵심 설명을 서두르지 마세요. 사용자는 이 영상에서 배웁니다. reference/script.md 의 템포 규칙을 따르고 모든 템포 WARN을 수정하세요.

  • 사실을 지어내지 마세요. 각 숫자, 공식 및 주장은 확인한 출처에서 가져옵니다: 사용자의 코드, 데이터시트, 사양, 논문, 문서. 이를 storyboard.md 에 나열하세요. 확인할 수 없는 것은 보고하세요.

  • "사용자 사례"는 선택 사항입니다. 현재 대화나 프로젝트에 실제로 일치하는 예시(사용자가 겪은 버그, 수정, 측정된 숫자)가 있을 때만 추가하세요. 절대 지어내지 마세요.

  • 겹침 금지. 어떤 시각 요소도 다른 요소를 덮어서는 안 됩니다: 텍스트 위 텍스트, 텍스트 위 그래픽, 다른 그래픽을 숨기는 그래픽. 각 레이블, 수식, 화살표 및 객체는 고유한 공간을 확보해야 합니다. check 는 텍스트 겹침에 대해 WARN을 표시하고, review 는 측정된 모든 겹침을 overlaps.md 에 기록합니다. 혼잡은 사용자의 판단이므로, 전체 크기 프레임에서 확인하세요. ID 패스가 도움이 됩니다: make look 은 가장 좁은 간격의 이미지를 추가하고, 텍스트가 다른 대상과 12px 이내일 때, 텍스트가 그림 위에 있을 때, 낮은 텍스트 대비, 다른 대상이 숨기는 모델에 대해 WARN을 표시합니다. make final 전에 모든 겹침을 수정하세요.

  • 자막은 한 줄입니다. 각 큐는 최대 42자이며 두 큐가 동시에 표시되지 않으므로, 플레이어는 절대 두 줄을 표시하지 않습니다. 엔진이 이 작업을 수행합니다. verify 는 규칙을 위반하는 큐를 보고합니다. 큐를 맞추기 위해 make.mjs 의 SUB_MAX 를 변경하지 마세요.

  • 폐쇄 루프 (사용자가 요청했으며 엔진이 강제함). 모든 편집 후: make look, 나열된 모든 이미지를 읽고, 보이는 문제를 수정하고, 다시 확인합니다. 그런 다음에야 빌드합니다. 빌드는 오래 걸리고 look은 몇 초면 끝나므로, 절대 맹목적으로 편집하고 빌드하지 마세요. 각 이미지는 오른쪽 상단에 CHECK 숫자가 있으며, 모든 이미지의 숫자가 순서대로 있어야 게이트가 열립니다:

    1. 편집. script.md 를 변경했다면 make voice 를 실행합니다. 영상에 Manim 파트가 있고 manim_scenes.py 또는 음성을 변경했다면 make manim 을 실행합니다: make look 은 Manim 프레임을 그리지만 생성하지는 않습니다.
    2. make look <dir>: 변경된 각 장면의 모든 프레임을 측정하고, 근접 프레임과 움직이는 부분을 그립니다. 모두 읽으세요. 그런 다음 make look <dir> --ok <숫자> 를 실행합니다. 이것이 없으면 make build 가 중지됩니다. 이미 읽고 확인한 것과 동일한 프레임과 레이블이 있는 이미지는 READ BEFORE를 표시하며 숫자가 필요 없습니다(모든 이미지가 이전에 읽은 것일 때 --ok -). 모든 새 이미지를 읽으세요. 스트립에도 동일한 규칙이 적용됩니다.
    3. make build <dir>. 충돌이 있으면 중지됩니다.
    4. build/review/moving.md 의 모든 스트립을 읽으세요. 그런 다음 make look <dir> --moving-ok <숫자> 를 실행합니다.
    5. make final <dir>. look 또는 build 이후 소스가 변경되었거나, 충돌 또는 겹침이 해결되지 않은 경우 중지됩니다. 각 단계를 별도의 명령으로 실행하고, 첫 번째 실패에서 중지하며, 편집이 적용되었는지 확인하세요.
  • 모든 판독자는 근접 프레임과 움직이는 부분을 확인합니다. 영상을 판단하는 모든 에이전트 또는 세션은 편집된 각 파트의 근접 프레임과 움직이는 모든 대상(마스코트 및 객체, 전체 움직임 동안)의 모든 프레임을 읽습니다. 영상 샘플링은 충분하지 않습니다: 샘플링된 프레임 사이에서 손이 테이블을 통과한 사례가 있었습니다.

  • 새로운 결함은 보호 장치를 추가합니다. 사용자가 결함을 발견하면, 먼저 reference/faults.md 와 engine/test/selftest.mjs 에 추가하고, 테스트가 해당 결함에서 실패하는지 확인합니다. 그런 다음 영상을 수정합니다. 영상만 수정하지 마세요. 각 검사 변경 후 make selftest 를 실행합니다.

사용자가 요청한 사항 (유지)

각각은 귀로 요청되거나 선택되었습니다. 엔진은 대부분을 자체적으로 수행합니다.

주제내용자동?
음성Chatterbox 내장 음성, engine/tts/slow-reference.wav 에 따라 분당 약 160단어로 느리게 재생; 어조가 유지되도록 각 문단을 한 번에 읽음예
일시 정지모든 마침표는 정확히 0.6초, 모든 쉼표는 최대 0.3초, 스크립트 구두점에서 설정예; voice 가 일시 정지를 배치할 수 없으면 WARN 표시
불량 테이크스크립트와 단어가 다른 파트(Whisper 확인)는 새 시드로 최대 3번 재녹음; 최고 테이크 유지예; 여전히 틀리면 WARN 표시
빠른 부분영상 일반 속도의 1.3배를 초과하는 절(기호 단어는 2배 계산)은 재녹음; 사용자는 "lambda v is v, scaled by lambda"가 너무 빠르다고 발견예; "fast" WARN: 자체 짧은 문장과 [pause] 부여
음수"negative"로 읽고, "minus" 사용 금지voice 가 ERROR와 함께 중지
반복 단어"one one"은 쉼표 추가("one, one") 또는 음성 미끄러짐 방지예
대본연결된 문단; [pause] 는 아이디어가 끝나거나 애니메이션이 재생될 때만 사용. 거부됨: 모든 문장 후 일시 정지, 끊기는 문장, 빠른 음성, 늘어진(먹먹한) 음성, Kokoro사용자, reference/script.md 참조
음악들을 수 있고, 일정하며, 음성보다 약 13dB 아래(musicVolume 0.37; 사용자가 0.26에서 3dB 높임), 부드러운 덕킹; 승인된 두 트랙, current (기본값) 및 lofi. 거부됨: 시끄러운-조용한 펌핑, 너무 작아 들리지 않는 음악, 기타 4개 트랙예; 사용자가 트랙 선택, SOUND.md 참조
음향 효과귀로 승인된 engine/sfx.mjs 키트; 플라이인 whoosh는 다른 악센트보다 4dB 아래(사용자가 약간 크다고 생각). 새 영상에서는 켜짐(_render.sfx: true), 이전 영상에서는 꺼짐사용자가 큐에 s.sfx 추가; 엔진이 믹싱
오디오48 kHz 스테레오예; verify 가 확인
자막소프트, 절대 인코딩되지 않음; 사용자의 mpv는 작게 표시(sub-scale=0.7)예
한 줄 자막큐당 한 줄, 최대 42자, 동시에 두 큐 없음. 사용자는 ROS 2 세트의 비디오 1에서 두 줄을 봄예; verify 가 위반 큐 보고
겹침 없음텍스트나 그래픽이 다른 것을 덮지 않음check 가 텍스트에 대해 WARN, 나머지는 overlaps.md 및 사용자의 프레임 체크리스트
룩무언 마스코트와 자체 모델을 사용한 하나의 3D 클레이 룩; 곡선과 플롯은 어두운 배경의 Manim 파트 (사용자가 요청

…

[잘림: 번역을 위해]

관련 스킬