/storytelling
┌──────────────────────┐
│ [4:12] [cover] [comments] │ 카드 세 개, 모두 한 번에
│ I made this carousel │ 검은색 제목, 1-2줄
│ in a few minutes │
│ and it's doing well │ 작은 흰색 부제목
│ (face) │ 한 번에 찍어 약간 확대
│ entire carousel │ TikTok 자막
└──────────────────────┘
처음 사용
이 스킬의 폴더는 Claude Code가 로드할 때 표시하는 "기본 디렉터리(Base directory)"입니다.
SKILL_DIR="<이 스킬의 기본 디렉터리>" # Claude Code가 "Base directory for this skill"로 출력한 경로
KIT=$(python3 -c 'import os,sys;print(os.path.realpath(os.path.join(sys.argv[1],"..","..","kit")))' "$SKILL_DIR")
PY="$KIT/.venv/bin/python"; [ -x "$PY" ] || bash "$KIT/setup.sh"
방글라 클립. 화자가 방글라어로 말하는 경우, 첫 번째 words 호출 전에 REEL_LANGUAGE=bn을 설정하세요 (export하거나 명령어 앞에 붙이세요). 그러면 Whisper가 방글라어를 번역하지 않고 받아쓰게 됩니다. 모든 화면 텍스트(제목, 레이블, 항목)도 방글라어로 작성하고, 시간은 words가 출력한 방글라어 단어에 정확히 맞추세요. 방글라어는 같은 크기에서 영어보다 더 넓게 표시되므로, 헤드라인은 2~4단어로 유지하고 접촉 시트(contact sheet)에서 넘침을 확인하세요. Whisper는 종종 방글라어 철자를 잘못 쓰는데(예: "ঢাকার মেয়র"를 "ধাকার মেওর"로 표기): 명세서(spec)를 작성하기 전에 선택한 구간의 단어를 읽고, <clip>.transcript.json에서 철자를 직접 수정하세요 (word만 변경하고 start/end는 유지). 그런 다음 words를 다시 실행하여 자막과 앵커가 수정된 단어를 사용하도록 하세요. 긴 음성 구간이 words에서 누락된 경우, transcript를 삭제하고 words를 다시 실행하세요. 그러면 transcriber가 건너뛴 구간을 다시 확인합니다. 클립이 9:16이 아닌 경우(예: 정사각형 1080x1080 휴대폰 영상), 첫 프레임을 확인하세요. 단순히 자르면 얼굴이 화면을 가득 채우고 시각 자료를 가릴 수 있으므로, 사용자에게 알리고 9:16으로 녹화할 것을 제안하세요.
GROQ_API_KEY가 설정되어야 전사할 수 있습니다. ffmpeg와 Node가 필요합니다.
단계
- 클립. 모든 9:16 토킹 헤드(talking head) 영상.
- 단어(words).
"$PY" "$KIT/reel.py" words <video>를 실행합니다. 각 문장을[ends …]와 함께 한 줄씩 출력하므로(마지막 단어가 끝나는 시간), 이를end로 사용하세요. 작은 이야기를 들려주거나 증거를 보여주는 4초에서 8초 사이의 연속된 구간 하나를 선택하세요. 여러 조각을 이어 붙이지 마세요. 점프 컷이 이상하게 보입니다. - 명세서(spec).
<clip>.storytelling.json을 아래와 같이 작성하세요. 명세서의 경로는 명세서 파일 기준 상대 경로입니다. 세 개의 카드는 그림으로 보여주는 이야기입니다: 노력, 대상, 결과. - 빌드.
"$PY" "$SKILL_DIR/build.py" <spec.json>을 실행합니다. - 확인.
<out>.sheet.jpg를 확인하세요:- 카드와 제목이 상단 220px을 넘지 않아야 합니다.
- 자막이 입을 가리지 않아야 합니다 (
caption_top을 조정, 기본값 1385). - 제목이 해당 줄에 맞게 표시되어야 합니다.
- mp4 경로를 전달하세요.
명세서(spec)
{
"video": "my-clip.mp4", "start": 42.3, "end": 47.8,
"zoom": 1.3,
"cards": [
{"type": "stat", "label": "TIME SPENT", "value": "4:12", "unit": "minutes"},
{"type": "cover", "image": "my-photo.jpg", "text": "the best *ai tools*\nto use when\nyou're *young and broke*"},
{"type": "comments", "title": "Comments", "rows": [["sarah.creates", "CAROUSEL"], ["mike.builds", "CAROUSEL!!"]]}
],
"title": ["I made this carousel", "in a few minutes"],
"subtitle": "and it's doing extremely well"
}
cards는 정확히 3개를 가지며, 각각 다음 중 하나입니다:
image:{"src": "photo.jpg"}형태의 정사각형 사진.cover: 캐러셀 표지로,image와text로 구성 (*word*는 노란색으로 표시,\n은 줄바꿈). 천천히 움직입니다.stat:label,value,unit및 링(ring).value가 숫자("250","10,000") 또는 시간("4:12")이면 숫자가 올라갑니다.ring(0~1)은 링이 채워지는 정도입니다.
comments: 최대 4개의[handle, text]행.text:{"big": "3×", "small": "more saves"}형태.
기타 필드:
title: 1~2줄, 각 줄 최대 약 22자.subtitle: 짧은 한 줄.zoom: 테이크가 확대된 정도. 기본값 1.3, 1은 확대 없음.
감각
- 모든 것이 첫 0.3초 안에 동시에 나타납니다. 절대 하나씩 나타나지 않습니다.
- 제목은 한 번에 이야기를 전달합니다. 부제목은 결과(보상)입니다.
- 카드는 실제 사물(사용자 자신의 게시물, 숫자, 스크린샷)을 보여줍니다. 댓글 행과 핸들(handles)은 사용자가 제공한 실제 것이어야 합니다. 사용자가 제공한 것이 없으면, 사람을 지어내지 말고
text또는stat카드를 대신 사용하세요.