사고를 기억하지 말고 스크립트로 만들어라 — 한 사이클 회고

같은 실수를 두 번 하면 그건 사람 문제가 아니라 시스템에 검사가 없는 것이다.

같은 실수를 두 번 했다면 그건 사람 문제가 아니라 시스템에 검사가 없는 것입니다. 한 사이클을 돌고 나서 업로드 절차와 무엇이 잘못됐는지, 그리고 그 사고들을 어떻게 스크립트로 바꿨는지 정리합니다.
업로드 — 제목·설명란·출처
제목은 훅 문장 그대로 씁니다. 이미 대본 단계에서 검증됐고, 첫 3초에 들리는 말과 제목이 같으면 시청자가 "내가 클릭한 그 영상"임을 즉시 확인합니다.
설명란은 접힌 상태로 두 줄만 보입니다. 그 두 줄에 훅과 반전을 같이 넣어 펼치게 만듭니다.
출처는 무료 원문 링크까지 답니다. 학술 주장을 다루는 채널은 여기서 신뢰가 갈립니다. 댓글에 "출처?"가 달리기 전에 막습니다. 서지사항은 반드시 검색으로 대조합니다 — DOI·연도·저널명을 기억으로 쓰지 않습니다. 하나만 틀리면 "출처를 달았는데 틀린" 최악이 됩니다.
합성 콘텐츠 고지
전 컷이 생성물이면 해당됩니다. 위치가 문제입니다 — 업로드 흐름의 '세부정보' 단계에서 기본으로 접혀 있습니다. 자세히 보기를 눌러야 변경된 콘텐츠 섹션이 나옵니다. 실제로 못 보고 올렸습니다.
게시 후에도 바꿀 수 있습니다.
YouTube 스튜디오 → 콘텐츠 → 동영상 → 세부정보 → 변경된 콘텐츠 → 예/아니요 → 저장판단 기준은 "사실적인가"입니다.
| 화면 | 고지 |
|---|---|
| 발광 도형·추상 렌더만 | 불필요 |
| 실제로 촬영된 적 없는 사실적 장면(교실, 초원, 사물, 동물) | 필요 |
| 실존 인물·특정 사건 조작 | 필요(애초에 만들지 않는다) |
애매하면 고지합니다. 라벨은 펼친 설명란에만 뜨므로 손해가 거의 없고, 안 하면 유튜브가 직접 붙이거나 제재합니다. 게다가 플로우 클립에는 SynthID가 박혀 있어 식별도 가능합니다.
한 사이클 실적
| 항목 | 값 |
|---|---|
| 클립 | 16개 · 재생성 0회 |
| 비용 | 192크레딧 · 5,568원(예산과 일치) |
| 완성본 | 71.08초 |
| 내보내기 | 4회 ← 유일한 비효율 |
| 공개 | 2026-08-19 |
무엇이 잘못됐나
| 실수 | 무엇을 배웠나 |
|---|---|
| 대본 수정 후 런북 재빌드를 두 번 놓침 | 사람이 두 번 다 잡았다. 사람이 기억할 일이 아니다 |
| 대본이 이상하다는 보고에 파일부터 안 보고 사과 | 원인은 크롬 자동 번역이었다. 파일은 멀쩡했다 |
| ✦ 워터마크를 편집기 탓으로 오진 | 원본을 먼저 확인했으면 3분이면 끝났다 |
SRT 생성 시 .replace('.', ',')를 문자열 전체에 적용 | 자막 본문의 마침표가 쉼표가 됐다 |
| 길이를 7% 줄이려다 어법을 깼다 | 압축된 대본은 단어가 아니라 블록 단위로 줄인다 |
| 낭독 속도를 추정 | 예산이 세 번 바뀌었다 |
크롬 자동 번역 사고
런북 HTML에는 영어 프롬프트가 한국어보다 많습니다. 크롬이 페이지 언어를 영어로 오판하고 한국어로 자동 번역하면, 원래 한국어인 나레이션까지 번역기를 한 번 더 통과해 문장이 깨집니다. 실제 변형입니다.
| 원문 | 번역 후 |
|---|---|
| 착시 | 표시 |
| 모서리 | 분포 |
| 곤충 | 심지어 |
| 대학생만 들여다봤다 | 유일하게 봉사하는 봉사 |
복사 버튼은 DOM의 보이는 텍스트를 집습니다 — 번역된 상태에서 누르면 번역문이 복사됩니다. 파일을 아무리 고쳐도 소용없습니다. 대응은 모든 코드 블록에 translate="no" + notranslate, 페이지에 <meta name="google" content="notranslate">, 그리고 헤더에 경고 배너를 넣는 것입니다.
"대본이 이상하다"는 보고를 받으면 파일부터 grep 한다.
사고를 스크립트로 바꾸기
한 사이클을 돌고 스킬에 넣은 것들입니다.
| 스크립트 | 무슨 사고를 막나 |
|---|---|
make_srt.py | 자동 캡션이 대본과 달라지는 것 · 어절 중간 줄바꿈 |
verify_export.py | 앞부분 유실 · 규격 오류 · 무음 · 끝부분 잘림 |
subtitle_contact_sheet.py | 자막 텍스트 변형 |
check_runbook.py | 대본 수정 후 재빌드 누락(mtime 비교) |
export_cuts.py | 캡컷 트리밍 오차 · 이미지 키프레임 수작업 |
build_runbook.py | 산출물이 다 나와야 문서가 생기던 것 → 매 단계 갱신 |
gen_image.py · check_images.py | 이미지를 한 장씩 웹에서 뽑던 것 |
원칙은 두 개입니다. 첫째, 사람이 기억할 일을 만들지 않습니다. "고쳤으면 재빌드하기"는 지침이 아니라 검사여야 합니다. 둘째, 회귀 테스트를 남깁니다. 잘렸던 내보내기 파일을 지우지 않고 두면 verify_export.py가 그걸 잡는지 언제든 확인할 수 있습니다.
도구가 스스로 틀렸다고 말하게 만들기
만든 검사가 자기 버그를 드러낸 사례가 둘 있었습니다.
verify_export.py가cuts/조각을 완성본으로 집었다 → 제외 목록에cuts·images추가subtitle_contact_sheet.py가 고정 밴드를 써서 자막이 잘린 시트를 냈다 → 중앙값 기반 자동 감지로 교체. 처음엔 최소·최대를 모았는데 발광 배경 한 프레임 때문에 밴드가 화면 절반으로 벌어졌다
검사 도구도 검사 대상입니다. 통과했다고 안심하기 전에 "이게 진짜 그걸 보고 있나"를 한 번 묻습니다.
규칙이 실측에 깨진 사례
| 처음 쓴 규칙 | 실측 | 고친 규칙 |
|---|---|---|
| 이미지 움직임은 "3초에 6% 이내" | 105% 팬은 5초에 34px — 안 보임 | 줌은 6%, 팬은 116% |
| 1.2배속은 4.86 음절/초 | 3편에서 6.68 | 배속은 편마다 잰다 |
| 워터마크는 Ultra 아니면 못 끈다 | 계정 메뉴에 토글이 있다 | 요금제 게이팅 + 화면이 최종 판단 |
셋 다 내가 먼저 쓴 규칙이 틀린 경우입니다. 규칙을 쓸 때 "무엇을 재서 이 값이 나왔나"를 같이 적어 두면, 나중에 다시 재서 고칠 수 있습니다.
검사 도구도 검사 대상이다.
규칙을 쓸 때 "무엇을 재서 이 값이 나왔나"를 같이 적는다. 그래야 나중에 고칠 수 있다.
스킬 구조
스킬 넷이 인수인계로 이어집니다. shorts-imagen은 3편에서 새로 갈라져 나왔습니다 — 이미지 생성은 프롬프트 문법도 검수 항목도 비용 구조도 영상과 달라, shorts-factory 안에 두면 SKILL.md가 비대해집니다.
shorts-topic-scout → shorts-factory → 런북(계속 갱신) → 제작 지원·검수
웹 조사·채점 기획~지시서 캡컷·검수·업로드
↕
shorts-imagen (정물 컷을 API로)
설계 원칙은 Progressive Disclosure입니다.
| 층 | 내용 | 로딩 |
|---|---|---|
| name + description | 트리거 | 항상 |
| SKILL.md | 프로세스·판단 기준 | 스킬 발동 시 |
| references/ | 도구별 상세 | 그 단계에 도달했을 때 |
| scripts/ | 결정적 작업 | 컨텍스트에 안 읽고 실행 |
SKILL.md는 173줄·127줄로 유지하고 세부는 전부 references로 내렸습니다. 스크립트는 읽지 않고 실행하므로 컨텍스트를 안 먹습니다.
가장 중요한 건 "왜"를 적는 것입니다. ALWAYS/NEVER 대문자보다 이유를 쓰면 엣지 케이스에서도 판단이 섭니다.
자동 캡션을 쓰지 않는 이유는 정확도가 아니라 출처다.
지침은 사람이 기억해야 하고, 검사는 기계가 한다.
다음 사이클
다음 편 소재는 이미 정해져 있습니다(최후통첩 게임, 10/10). 완벽한 1편보다 꾸준한 주기가 조회수를 만듭니다. 아쉬운 부분은 다음 편에서 고칩니다.
이 시리즈는 제가 실제로 만든 유튜브 쇼츠 한 편(완성본 보기)의 제작 기록입니다. 문화인류학·심리학 소재로 상식을 뒤집는 지식 쇼츠를 만듭니다.
발행 2026-08-19 · 최종 확인 2026-08-20(3편 반영)