설명 영상
사용자가 개념 학습을 돕는 영상을 만듭니다. 새로운 도구와 달리, 이 대화와 프로젝트를 이미 알고 있다는 큰 장점이 있습니다. 이 지식을 활용하세요.
엔진은 ~/.claude/skills/clayducation/engine/ 에 있습니다. 이 파일에서 make 는 다음을 의미합니다:
node ~/.claude/skills/clayducation/engine/make.mjs <명령어> <프로젝트-디렉토리>
0단계: 먼저 질문하기 (스킬 시작 시마다)
사용자가 /clayducation 를 입력했거나 말로 영상을 요청했든, 첫 번째로 해야 할 일은 아래 질문들을 AskUserQuestion(클릭 가능한 옵션 포함)으로 하는 것입니다. 사용자 메시지나 이 대화에서 이미 답변된 질문은 건너뜁니다(예: "뉴스릴처럼" 은 룩을, "lo-fi 음악과 함께" 는 음악을 답변한 것입니다). 추천 옵션을 먼저 제시하고 "(Recommended)" 라고 표시하세요. 네 질문을 모두 한 번의 호출로 질문하세요(도구는 최대 4개까지 허용). 주제 자체가 명확하지 않고 건너뛴 질문이 없으면, 주제에 대해 먼저 별도 호출로 질문하세요.
| 질문 | 헤더 | 옵션 (첫 번째 = 기본값) |
|---|---|---|
| 영상에 어떤 룩을 사용할까요? | 룩 | 클레이 3D: 부드러운 클레이 룩 하나, 무언의 마스코트가 작업 수행 · 클래식 2D, 혼합: 각 파트마다 다른 2D 스타일 · 클래식 2D, 단일 스타일: 사용자가 지정 (뉴스릴, 화이트보드 등) |
| 영상 대상과 길이는 어떻게 될까요? | 시청자 | 시험 복습, 표준: 강의 표기법, 계산된 숫자, 시험 함정, 5 |
| 언제 확인을 드릴까요? | 체크포인트 | 한 번에: 완성된 영상으로 돌아오기 · 스토리보드 후: 계획을 보여주고 승인 대기 · 첫 룩 후: 첫 프레임을 보여주고 대기 |
| 어떤 음악을 사용할까요? | 음악 | 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 숫자가 있으며, 모든 이미지의 숫자가 순서대로 있어야 게이트가 열립니다:- 편집.
script.md를 변경했다면make voice를 실행합니다. 영상에 Manim 파트가 있고manim_scenes.py또는 음성을 변경했다면make manim을 실행합니다:make look은 Manim 프레임을 그리지만 생성하지는 않습니다. make look <dir>: 변경된 각 장면의 모든 프레임을 측정하고, 근접 프레임과 움직이는 부분을 그립니다. 모두 읽으세요. 그런 다음make look <dir> --ok <숫자>를 실행합니다. 이것이 없으면make build가 중지됩니다. 이미 읽고 확인한 것과 동일한 프레임과 레이블이 있는 이미지는 READ BEFORE를 표시하며 숫자가 필요 없습니다(모든 이미지가 이전에 읽은 것일 때--ok -). 모든 새 이미지를 읽으세요. 스트립에도 동일한 규칙이 적용됩니다.make build <dir>. 충돌이 있으면 중지됩니다.build/review/moving.md의 모든 스트립을 읽으세요. 그런 다음make look <dir> --moving-ok <숫자>를 실행합니다.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 파트 (사용자가 요청 |
…
[잘림: 번역을 위해]