Communitygithub.com

KKcorps/lesson-film

YouTube용 나레이션 강의 영상을 제작합니다. 하나의 기술 메커니즘을 약 1~2분 안에 가르치며, 모든 프레임이 코드로 그려지고 점수가 계산됩니다. 집중력이 짧은 STEM 시청자를 대상으로 합니다.

lesson-film란 무엇인가요?

이 스킬은 '코드-필름' 스킬을 기반으로, 기술 메커니즘을 설명하는 YouTube 강의 영상을 만드는 데 특화되어 있습니다. 모든 장면이 코드로 렌더링되며, Kokoro TTS를 사용한 음성 내레이션, 정확한 자막, -14 LUFS 마스터링 및 음성 동기화 검증을 포함합니다. 워크플로우는 사실 확인(facts.md), 의도 카드(intent.md), 스크립트 작성, 음성 녹음, 장면 계획, 렌더링 및 최종 검증의 12단계로 구성됩니다. 특히 시청자의 이해 상태를 지속적으로 추적하고, 질문-답변 구조로 스크립트를 작성하며, 모든 단어가 음성과 화면에서 정확히 일치하도록 검증하는 것이 핵심입니다. 이 스킬은 STEM 관련 설명/강의 영상에 적합하며, 음악 비디오나 광고 같은 비내레이션 영상에는 사용하지 않습니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/KKcorps/inkreel/tree/main/skills/lesson-film

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

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

문서

강의 영화

강의 영화는 한 번의 시청으로 초보자가 설명할 수 있을 정도로 하나의 메커니즘을 잘 가르칩니다. 모든 그림은 코드로 그려지고, 내레이터의 목소리가 시계 역할을 하며, 음악은 목소리가 없는 틈새를 채웁니다. 이 스킬은 code-film 위에 위치합니다. 해당 스킬은 외형, 갤러리, 취향 및 결함 검사를 담당합니다. 이 스킬은 가르침, 단어, 목소리, 속도, 결말 및 YouTube 측면을 담당합니다.

작동 예시는 examples/parcel42-lesson/ 디렉토리에 있으며, Apache Pinot이 오래된 행을 숨기는 방법에 대한 130초 길이의 강의입니다. 이 스킬의 저자인 Kartik은 8번의 버전을 거친 후 "완벽하다"고 말했으며, 그 과정의 모든 메모는 이를 소유한 참조 파일에 저장되어 있습니다. 방법론에 대해서는 해당 README를 읽고, 외형에 대해서는 읽지 마십시오.

핵심: 시청자 추적

강의 영화는 대화의 절반이며, 시청자는 침묵 속에서 나머지 절반을 제공합니다. 매 순간 시청자는 세 가지를 가지고 있습니다:

  • 그들이 아는 것. 영화가 지금까지 보여주고 말한 것과 일상적인 지식뿐입니다. 소스 코드나 그것을 만들기 위해 읽은 내용이 아닙니다.
  • 그들이 묻는 것. 모든 그림과 모든 주장은 다음 질문을 제기합니다: "그럼 오래된 것은 어떻게 되나요?", "늦게 도착하면 어떻게 되나요?", "공간을 낭비하지 않나요?"
  • 그들이 믿는 것. 영화로만 구축된 메커니즘의 모델입니다. 잘못된 단어 하나가 잘못된 모델을 설치합니다. "Pinot은 절대 오래된 집을 허물지 않는다"는 아무것도 제거되지 않는다고 가르쳤고, 그런 다음 영화는 압축이 그것을 제거하는 모습을 보여주었습니다.

영화를 만드는 것은 음성과 그림을 함께, 매 순간 그 모델을 실행하는 것입니다:

  1. 그들이 가진 질문에 답하라. 늦은 편지는 규칙 바로 뒤에오고, "그리고 어두운 집들은?"은 질문 바로 뒤에 옵니다.
  2. 당신이 발표하기 전에 그들이 도착하게 하라. 그림은 음성이 이름을 부르기 한 박자 전에 증거를 보여줍니다. 제목, 레이블 또는 챕터 이름은 질문이 제기되기 전에 절대 답을 제공하지 않습니다.
  3. 실을 절대 끊지 마라. 무언가를 약속하는 대사는 다음 그림을 소유합니다. "두 개의 스위치가 뒤집힌다" 이후 화면에 나타나는 다음 것은 스위치입니다.
  4. 각 단어를 사용하기 전에 전달하라. 화면의 모든 용어는 그림이 그것을 보여주는 곳에서 한 번 소리 내어 말해지며, 어떤 것도 첫 번째 줄에 도달하지 않습니다. 세상의 사물이 먼저 오고, 그 다음에 용어가 명명됩니다. 그 명명 줄 밖에서 문장은 하나의 세계에 머뭅니다: 꽃은 성장을 멈췄고, 절대 "닫혔다"고 하지 않습니다. 한 영화는 "segment 7"이라는 단어를 말하지 않고 거리 표지판에 표시했습니다.
  5. 코드가 아닌 메커니즘을 가르쳐라. 시청자가 검색할 실제 이름만 보여주고(validDocIds), 기계에 레이블을 붙이는 함수 이름은 절대 보여주지 마십시오.

참조 파일의 모든 규칙은 이 다섯 가지 중 하나가 적용된 것입니다. 규칙이 다른 규칙과 충돌하는 것처럼 보이거나 어떤 경우도 다루지 않는 것 같으면 시청자 모델을 실행하여 결정하십시오.

메모는 결코 한 인스턴스에 관한 것이 아닙니다. 당신이 영화를 만드는 사람이 한 순간을 가리킬 때, 그들은 모델이 깨진 한 곳을 가리키는 것입니다. 같은 방식으로 깨진 다른 모든 곳을 찾아 모두 고치고 개수를 보고하십시오. Kartik의 "고통스러운 박자"는 채움과 딸깍 소리와 찰칵 소리였습니다. 그의 누락된 글자는 고정된 프레임에서 시간이 정해진 모든 이벤트였으며, 이것이 shiftcheck.py가 존재하는 이유입니다. 그의 "잘못된 구절"은 모든 절대적인 단어였으며, 이것이 scriptcheck.py가 이들을 나열하는 이유입니다.

설정

이 스킬이 작동하려면 동일한 스킬 폴더에 code-film이 설치되어 있어야 합니다. 빌드, 게이트, 캡처, 심 및 사운드 검사와 필기체는 모두 거기에서 가져오며, 모든 스크립트는 거기 또는 $CODE_FILM에서 찾습니다.

bash assets/setup.sh를 한 번 실행하십시오. code-film의 doctor를 확인한 다음, Kokoro, soundfile, faster-whisper 및 spaCy 영어 모델을 포함하는 Python 3.12 가상 환경을 ~/.cache/lesson-film/venv에 구축하고 ffmpeg에 loudnorm이 있는지 확인합니다.

좋은 결과의 기준

  • 초보자가 다시 말할 수 있습니다. 그들의 두 문장은 의도 카드의 핵심 문장과 일치하며, 실제 용어가 올바른 위치에 있습니다.
  • 한 사람이 당신에게 설명하는 것처럼 들립니다. 각 문장은 다음 문장으로 이어지고, 각 장면 전환은 살아있는 질문을 전달합니다. 그림 없이 스크립트를 소리 내어 읽어보십시오. 레이블 목록처럼 들리면 완료된 것이 아닙니다(reference/words.md).
  • 숨을 쉽니다. 시청자는 다음 변화가 일어나기 전에 각 변화를 볼 시간이 있습니다. Kartik은 초당 0.36 컷의 64초 컷을 "너무 빠르다"고 발견했습니다. 승인된 컷은 초당 0.16 컷으로 130초 동안 실행되며, 음성은 정상 속도와 실제 호흡을 사용합니다(reference/pace-and-ending.md).
  • 모든 주장은 사실이며 확인되었습니다. 그림을 그리기 전에 주장을 소스에 대해 facts.md에 작성하십시오. 그림은 정확히 그 상태를 보여줍니다.
  • 그림은 단어에 따라 변합니다. 각 사물은 음성이 그것을 명명하는 순간 나타납니다. 움직임과 색상은 오직 설명되는 부분에만 위치합니다(reference/teaching.md).
  • 부드럽게 시작하고 천천히 끝납니다. 누구나 받아들일 수 있는 첫 줄, 그림과 음악이 이미 실행 중인 상태, 질문으로 끝나는 콜드 오프닝, 그런 다음 약 5초 정도의 타이틀 스팅, Kurzgesagt가 하는 방식입니다. "시작이 갑작스럽다"는 시청자가 만나지 못한 캐릭터로 영화를 시작한 것에 대한 Kartik의 메모였습니다(reference/pace-and-ending.md).
  • 멈추는 것이 아니라 끝납니다. 요약, 보상, 오프닝에 답하는 마지막 줄, 홈 코드, 그리고 그림과 소리가 몇 초에 걸쳐 함께 사라집니다. "결말이 갑작스럽다"는 다시는 듣지 말아야 할 메모입니다.
  • 결함이 없습니다. 깜빡임 없음, 팝 없음, 클리핑 없음, -14 LUFS의 음량, 모든 단어가 들림.

이것은 판단이며 규칙이 아닙니다. 카드가 이유를 말할 때 하나를 어기십시오.

워크플로우

이것을 노트에 복사하고 각 줄을 완료할 때마다 보고하십시오. 방법을 말하지 않고는 줄을 체크할 수 없습니다.

[ ] 0 참조       공유한 경우에만. 클립, 스틸 또는 HTML 페이지. 어떤 형태인지, 무엇을 하는지, 어떤 격차를 메울 수 있는지, 무엇을 가져가고 남길지 보고하십시오.
[ ] 1 사실       facts.md가 소스에 대해 작성됨. 주장과 각각이 확인된 위치를 보고하십시오.
[ ] 2 의도       assets/intent.md를 <piece>.intent.md에 복사, 핵심 문장, 느낌, 질문, 추측. 보고하십시오.
[ ] 3 갤러리     code-film의 reference/gallery.md, 가장 가까운 두세 개의 영화. 무엇을 가져가고 무엇을 복사하지 않을지 보고하십시오.
[ ] 4 스케치     세 가지 새로운 이야기, 각각 키트(sketch.py)로 그려진 완성된 스틸, 하나는 당신이 살 수 있는 세상, 예제나 공유 참조에서 가져오지 않은 것. sketchcheck.py에서 BLOCK이 없어야 하며, 그런 다음 시트에 따라 판단됨. 보여주십시오. 각 이야기의 라인, 세 가지 판단 답변 및 선택을 보고하십시오.
[ ] 5 단어       <piece>.chain.txt에 전체 스크립트를 한 단락으로 작성, 그런 다음 "용어", "사물" 및 "기술"로 줄을 나눔. 단락 전에, 각 용어의 사물과 각 실제 상태에 대한 세계의 동사를 작성하십시오. scriptcheck.py에서 BLOCK이 없어야 함. 그 맵, 한 번 소리 내어 읽은 스크립트, 모든 경첩, 각 REVIEW에 대한 결정을 보고하십시오.
[ ] 6 음성       <piece>.lines.json -> voice.py -> heard.py --write. 길이와 들린 각 단어 또는 그 이유를 보고하십시오.
[ ] 7 계획       장면들, 각각 그것을 변경하는 단어와 그들이 공유하는 세계 상태에 연결됨. 각 용어를 보여주는 세상의 사물과 각 실제 상태에 대한 세계의 동사와 함께 계획을 보고하십시오.
[ ] 8 빌드       assets/template/에서 페이지. 장면은 초안에서 먼저 단독으로 확인됨. 본 후 다시 그린 것을 보고하십시오.
[ ] 9 사운드      assets/score_template.py에서 <piece>.score.py. 코드, 틈새의 곡, 세계 내 소리를 보고하십시오.
[ ] 10 렌더링    assets/build.sh. 먼저 DRAFT=1. 숫자를 보고하십시오.
[ ] 11 검증      아래 세 레이어 모두. 각각 보고하십시오.
[ ] 12 전달      각 빌드마다 새 파일, 덮어쓰지 마십시오. YouTube용 마스터, 보낼 30 MB 미만의 작은 미리보기.

1단계에서 5단계까지가 강의가 승부를 가르는 곳입니다. 특히 5단계: 먼저 산문으로 스크립트를 쓴 다음 줄로 자릅니다. 먼저 자르는 것이 스크립트가 자막 더미가 되는 방법입니다.

검증

전달 노트에 세 레이어를 모두 별도로 보고하십시오.

  • 결함 차단. build.sh는 scriptcheck.py (모든 용어가 말해짐, 첫 줄에 없음, 존재하는 연결) 및 code-film의 check.py 및 seamcheck.py를 실행하고, -14 LUFS 통합, 실제 피크 -1.5 dBTP로 마스터링하고 YouTube 사양(reference/youtube.md)으로 인코딩합니다.
  • 강의가 측정됩니다. verify.py는 카드의 길이, 속도 및 사운드를 확인합니다. heard.py는 음성을 전사하고 어떤 단어가 들리지 않았는지와 사운드가 큐 시간보다 얼마나 늦는지 말합니다. wordsync.py는 그림이 연결된 모든 단어에서 움직임이 발생하는지 확인합니다. shiftcheck.py는 음성을 2초 뒤로 이동시켜 영화를 렌더링하고 변경되는 장면이 있으면 실패로 표시합니다. 이것이 고정된 프레임에서 시간이 정해진 이벤트가 나타나는 방식입니다. captions.py는 동일한 큐에서 정확한 SRT를 작성합니다.
  • 시청 테스트는 당신의 몫이고, 그 다음은 상대방의 몫입니다. 초보자로서 다시 말해보십시오. 접촉 시트의 모든 타일 이름을 말하십시오. 소리를 끄고 시청하십시오. 그림 없이 스크립트를 소리 내어 읽으십시오. 마지막 10초를 단독으로 판단하십시오. 그런 다음 귀로 음성 확인과 같이 확인하지 않은 것을 솔직히 말하십시오.

언제 무엇을 읽을지

각 파일을 한 번의 호출로 전체를 읽고, 읽을 때 토큰이 잘렸다고 표시되면 해당 파일을 단독으로 다시 읽으십시오. code-film의 "언제 무엇을 읽을지"는 일괄 읽기의 비용을 설명합니다.

  • 참조를 공유할 때, code-film의 reference/references.md를 읽으십시오. 세 가지 형식을 모두 다룹니다. 클립과 스틸은 ffmpeg로 분해됩니다. HTML 페이지(우리 것이든 그들의 것이든)는 code-film의 assets/refpage.mjs를 통해 전달되며, 이는 페이지 그리기를 감시하고 팔레트, 마크, 레이어 및 오디오 키트를 보고하고 MP4를 작성하여 클립 검사도 실행할 수 있도록 합니다.
  • 사실과 의도 카드 전에, reference/teaching.md를 읽으십시오.
  • 스케치 전에, 이 스킬의 reference/sketches.md와 자체 reference/traps.md의 스토리 섹션을 읽으십시오. 그런 다음 code-film의 reference/story.md에서 "먼저 모양을 선택하라"와 "무엇이 지속되는가"를 읽고 code-film의 reference/traps-story.md를 읽으십시오.
  • 스크립트 한 줄을 쓰기 전에, reference/words.md를 읽으십시오.
  • 오프닝이나 결말을 계획할 때, 그리고 음성의 속도, 호흡 및 유지를 설정할 때, reference/pace-and-ending.md를 읽으십시오.
  • 음성을 만들거나 수정할 때, reference/voice.md를 읽으십시오.
  • 장면을 계획하거나, 헬퍼로 분할하거나, 페이지를 빌드할 때, reference/film.md와 code-film의 reference/moves.md를 읽으십시오. 후자는 두 그림 사이의 이동을 소유합니다.
  • 사운드를 만들 때, reference/sound.md와 code-film의 reference/sound.md(악기용) 및 reference/traps-sound.md를 읽으십시오.
  • 첫 번째 렌더링 전과 렌더링에 대한 메모가 있을 때, reference/traps.md를 읽으십시오.
  • 게시하기 전에, reference/youtube.md를 읽으십시오.
  • 규칙의 출처가 필요하거나 누군가 스킬이 특정 작업을 수행하는 이유를 물을 때, reference/research.md를 읽으십시오: 증거, 효과 크기 및 링크.
  • 외형, 취향 및 인쇄 마감을 위해, code-film의 gallery.md, taste.md 및 press.md를 읽고, 마감을 조정하기 전에 traps-print.md를 읽으십시오.

파일

파일설명
assets/setup.sh일회성 설정: 음성 및 청취 가상 환경, 그리고 검사
assets/intent.md강의 의도 카드, code-film의 카드와 가르침 라인 포함
assets/voice.pyKokoro로 <piece>.lines.json을 읽고, 박자 그리드에 줄을 배치하고, 음성과 큐를 작성
assets/heard.pyWhisper로 음성을 전사하고, 누락된 단어와 지연 시간을 보고, --write는 큐에 지연 시간을 저장
assets/saytest.pyKokoro가 잘못 발음하는 단어의 재철자를 시도하고 Whisper가 올바르게 듣는 것을 말함
assets/captions.py, assets/wordsync.py큐에서 SRT 생성, 각 연결된 단어에서 움직임이 발생하는지 확인
assets/shiftcheck.py모든 장면이 고정된 프레임이 아닌 음성에서 시간이 정해졌는지 확인
assets/scriptcheck.py스크립트 검사: 용어가 말해짐, 첫 줄에 없음, 각 용어의 사물이 용어보다 먼저 말해짐, 존재하는 연결, 읽을 절대 단어, 화면에 표시되었지만 말해지지 않은 단어, 세상과 실제 시스템을 혼합하는 문장 목록
assets/sketchcheck.py, assets/barsheet.pycode-film의 스케치 검사, 이 스킬의 승인된 프레임, 예제의 마을 및 템플릿의 스텁으로 실행됨. 그리고 심사 시트를 재구축하는 스크립트
assets/score_template.py각 줄의 배경음, 틈새의 곡, 상태 변경 시 세계 내 소리, 음성 아래 16 dB 덕킹, 페이드 아웃 아웃트로
assets/build.sh페이지, 게이트, 병렬 캡처, 심, 점수, -14 LUFS 마스터, 인코딩, 자막, 접촉 시트, 모든 검사
assets/template/복사할 페이지: assemble.py, film/kit.js (세계가 없는 공예: 잉크, 점, 가장자리, 빛, 필기체, 인쇄 마감), film/core.js (음성 시계, 레이어, 카메라, 다이브 및 아이리스 이동), film/main.js, film/SCENES.md, 하나의 대체 객체를 구축하는 예제 장면, 세 가지 이야기 스틸을 위한 sketch.py 및 sketches/sketch.js
reference/stills/승인된 강의의 프레임, 캡션 포함, 산문만으로는 전달되지 않는 두 가지 규칙(오프닝 및 엔딩 비트, 단어에 따라 변하는 그림)용. 또한 자신의 세 가지가 존재한 후에만 열리는 스케치 심사 시트 sketch-bar.jpg 및 sent-back.jpg
examples/parcel42-lesson/승인된 강의의 전체 소스, 음성 트랙, 볼 영화 미리보기 링크, README, 접촉 시트 및 썸네일

병렬 캡처는 code-film(assets/capture-range.mjs, assets/capture-par.sh)에 있습니다. 긴 영화에는 필요하기 때문입니다.

이 스킬 변경하기

의도와 판단을 명시하고 결과를 의도와 비교하여 확인하십시오. 누군가 승인한 새로운 강의는 두 번째 예제가 되며, 이 파일에 작동 이유에 대한 설명이 추가됩니다. 학습된 교훈은 그것을 소유하는 하나의 참조 파일에 들어가고, 다른 모든 파일은 한 줄로 그곳을 가리킵니다.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬