advisory-minutes
겟백 1:1 자문 세션(A 대표·B 원장)이 끝난 뒤 줌 녹화 전사록을 받아 노션 코칭 대시보드에 회의록을 올리고, 할 일 보드 등록·대시보드 문구 갱신·클라이언트 카톡 통보까지 처리할 때 읽을 것. "B 원장님 자문했어 노션에…
밤밤의 강연·라이브·기수 세션 녹화본(줌 클라우드·디스코드·맥 화면기록)을 자막판 영상으로 만들고 배포할 때 읽을 것. 어절 하이라이트 자막, 슬라이드별 타이틀 카드, 핵심 영역 확대, 주아체 일러스트, 얼굴 PIP, 질의응답 웹캠 레이아웃, 엔드카드에서 유튜브 업로드·디스코드 공지·7일 만료까지 한 파이프라인. \"녹화본 자막 달아줘\", \"강의 영상 편집해서 올려줘\", \"녹화본 디스코드에 업데이트해줘\", \"라이브 자막판 파이프라인\" 요청을 처리한다.
$ npx -y skills add bam-bam-2/solo-skills --skill lecture-recording-captions --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/lecture-recording-captionsContext preview
The summary Claude sees to decide when to auto-load this skill.
밤밤의 강연·라이브·기수 세션 녹화본(줌 클라우드·디스코드·맥 화면기록)을 자막판 영상으로 만들고 배포할 때 읽을 것. 어절 하이라이트 자막, 슬라이드별 타이틀 카드, 핵심 영역 확대, 주아체 일러스트, 얼굴 PIP, 질의응답 웹캠 레이아웃, 엔드카드에서 유튜브 업로드·디스코드 공지·7일 만료까지 한 파이프라인. \"녹화본 자막 달아줘\", \"강의 영상 편집해서 올려줘\", \"녹화본 디스코드에 업데이트해줘\", \"라이브 자막판 파이프라인\" 요청을 처리한다.
name: "lecture-recording-captions" description: "밤밤의 강연·라이브·기수 세션 녹화본(줌 클라우드·디스코드·맥 화면기록)을 자막판 영상으로 만들고 배포할 때 읽을 것. 어절 하이라이트 자막, 슬라이드별 타이틀 카드, 핵심 영역 확대, 주아체 일러스트, 얼굴 PIP, 질의응답 웹캠 레이아웃, 엔드카드에서 유튜브 업로드·디스코드 공지·7일 만료까지 한 파이프라인. \"녹화본 자막 달아줘\", \"강의 영상 편집해서 올려줘\", \"녹화본 디스코드에 업데이트해줘\", \"라이브 자막판 파이프라인\" 요청을 처리한다."
> **이 스킬이 시스템에 하는 일 (설치 전 확인)** > > - 로컬에서 `ffmpeg`과 음성 인식 모델을 돌립니다. CPU·디스크를 많이 씁니다. > - 녹화 파일을 읽고 자막·영상 파일을 새로 만듭니다. **원본은 수정하지 않습니다.** > - 유튜브 업로드 단계는 별도 인증이 필요하고, 기본값은 업로드하지 않는 것입니다.
결과물: 1920x1080 30fps mp4 하나. 1부(슬라이드 발표) + 2부(질의응답 웹캠) + 엔드카드. 겟백 팔레트(#0d0d0d / 라임 #D4F000 / 퍼플 #7B2FFF), 자막 나눔고딕 ExtraBold, 타이틀·일러스트 배달의민족 주아체(`assets/fonts/BMJUA_ttf.ttf`, 상업 사용 가능, 엔드카드에 출처 표기).
무거운 단계(전사·교정·렌더)는 전부 맥미니에서 돌린다(`macmini-offload` 스킬). 맥북에서는 크롭·축소 전처리만 videotoolbox로 한다.
두 경로가 갈린다. **소스 화면이 슬라이드로 고정되어 있는지** 먼저 본다(0단계 콘택트시트).
| | 판매용 풀 파이프라인 | 기수 공유용 경량 | |---|---|---| | 소스 조건 | 발표 내내 슬라이드 고정 | 화면이 슬라이드·브라우저·웹캠으로 계속 바뀜 | | 포함 | 자막 + 타이틀카드 + 확대 + 일러스트 + PIP | **자막 + 엔드카드만** | | 걸리는 시간 | 반나절 이상 | 2~3시간 |
기수 세션 녹화본은 보통 **줌 창 전체를 녹화**해서 맥 메뉴바·독·디스코드 사이드바가 다 찍힌다. 이런 소스에 슬라이드 구간표를 만들면 타이틀카드가 엉뚱한 화면에 뜨고 확대가 엉뚱한 데를 잡는다. **`runs`를 통짜 하나(`[[0, 끝, 1]]`)로 두고 `titles`·`zoom`·`illustrations`를 빈 객체로 두면** 자막과 엔드카드만 적용된다. 이 조합은 2026-09-07 7기 OT에서 실측됐다.
손실 없이 빠지는 것과 아닌 것을 구분한다. 자막은 복습 가치가 크므로 반드시 넣고, 타이틀카드·확대는 화면이 고정된 소스에서만 값을 한다.
1. 영상 소스와 음성 소스를 분리해 적는다. 맥 화면기록은 오디오가 없다. 2. 두 파일을 10분 간격으로 샘플링해 콘택트시트로 본다. 슬라이드가 언제 끝나는지, 화면공유가 언제 꺼지는지, 웹캠 타일이 어디 있는지, 참가자 이름·채팅이 어디 찍히는지 표시한다. 3. 오프셋은 "슬라이드 제목을 읽는 발화"와 그 슬라이드의 등장 시각으로 두 군데 이상 맞춰 확정한다. 이후 모든 시각은 **음성(전사) 타임라인**으로 통일한다. 4. 실제 발화 끝은 볼륨 측정으로 확인한다. 전사가 "하하하"만 찍혀도 말이 이어지고 있을 수 있다.
필요 구간만 잘라 뽑는다. 원본은 보내지 않는다.
`ssh localhost`로 nohup 실행하고, 중단할 땐 `pkill -f '[p]rep.sh'` 형식으로.
**줌 클라우드 녹화본이면 전사·교정 단계를 통째로 건너뛸 수 있다.** 줌이 `audio_transcript.transcript`(WEBVTT)를 같이 주고, 한국어 품질이 whisper 못지않다(2026-09-07 실측: 830큐, 밤밤 발화 정확). 절차는 `references/zoom-cloud-source.md` 참고.
1. `scripts/vtt_to_segs.py <transcript> segs_final.json` — WEBVTT → 세그먼트(긴 발화는 문장 단위로 분할) 2. 고유명사 교정 — 줌 전사도 브랜드명은 틀린다("갯배/겟배" → "겟백", "칠 기" → "7기"). 정규식 치환으로 한 번에 고친다. 3. `scripts/add_words.py segs_final.json` — **필수.** `make_video.py`는 어절 하이라이트를 위해 `s['words']`를 요구하는데 줌 전사는 문장 단위라 없다. 글자 수 비례로 어절 시간을 배분한다. 이걸 건너뛰면 `KeyError: 'words'`로 죽는다.
줌 녹화본이 없거나 품질이 나쁘면 기존 경로로 간다 — `scripts/transcribe_chunks.sh <audio> <outdir> "<고유명사 목록>"` → 10분 청크, 단어 타임스탬프. 그다음 `scripts/collect_tr.py <outdir>/tr <work>` → `segs_new.json` + 교정용 `chunks2/`. 10분당 글자 수가 고르지 않으면 환각이니 그 청크만 다시 돌린다.
`assets/fix_prompt.txt`를 작업 폴더에 복사하고 고유명사 사전을 이번 강연에 맞게 고친 뒤 `scripts/fix_run.sh <work>`. 끝나면 `scripts/apply_fix.py <work>` → `segs_final.json`.
`scripts/slide_runs.py base.mp4 <slides_dir> runs.json`으로 초안을 만들고, **반드시 프레임을 뽑아 눈으로 대조**해 손으로 고친다. 어두운 슬라이드끼리, 스크롤 중인 프레임은 자주 틀린다. 슬라이드를 앞뒤로 넘긴 구간은 정착한 시각을 시작으로 잡는다.
개념 5~6개만. `scripts/illust_card.py --out 두갈래.png --title "..." --line "1. ..." --line "2. ..." --warn "..." --note "..."`. 만든 뒤 콘택트시트로 글리프 누락(①·→)과 금지 표현을 확인한다.
`references/example-config.json`을 복사해 채운다. 핵심 필드:
`python3 scripts/make_video.py config.json` → `sub1/2/3.ass`, `render.sh`. 먼저 `render.sh`의 1부 명령을 `-t 60`으로 줄여 시험 렌더하고 프레임을 본 뒤 전체를 `run.sh start`로 돌린다. 1부와 2부는 별도 명령이라 문제 있는 쪽만 다시 뽑으면 된다.
최종본에서 다음 시각의 프레임을 뽑아 콘택트시트로 본다: 각 슬라이드 타이틀 카드 직후, 각 확대 구간 중간, 각 일러스트 표시 중, 1부→2부 경계 ±3초, 웹캠 등장 시점, 마지막 페이드, 엔드카드. 확인 항목:
`scp`로 artifacts에 가져오고(1.5GB ≈ 5분), 콘택트시트 한 장과 함께 구성·길이·바꾼 점을 보고한다. 자동 전사라 오타가 남을 수 있음을 밝히고, 시각을 알려주면 그 줄만 고쳐 다시 뽑을 수 있다고 말한다. config와 `segs_final.json`은 프로젝트 폴더에 보관한다.
기수 녹화본은 **디스코드에 파일을 올리지 않는다**(8MB 제한). 유튜브 unlisted로 올리고 링크만 건다.
1. **유튜브 업로드** — 맥미니 `~/Projects/getback/pipeline/youtube_uploader.py`의 `upload_video(path, title, desc, tags)`. 기본값이 `unlisted`다. 인증은 통합 토큰 `~/.config/get100/google_token.json`(`scripts/google_auth.py`). 718MB ≈ 1분. 2. **디스코드 공지** — 포럼 `#겟백-세션-녹화본`(id `<DISCORD_ID>`)에 **밤냥이 봇 명의로** `POST /channels/{forum}/threads`. 양식과 기준은 `references/discord-recording-post.md`. 3. **7일 만료는 자동** — 봇의 `recording_expiry.py`가 1시간마다 포럼을 훑어 본문에 `🗓 시청 기한: ~MM/DD`를 붙이고, 기한이 지나면 유튜브 링크를 지운다. **봇이 쓴 글에만 적용된다** — 밤밤 계정으로 올리면 안 붙는다. 기한은 `EXPIRY_DAYS` 상수(2026-09-08부터 7일). 나중에 다시 열려면 본문에 링크를 다시 넣으면 된다.
`references/pitfalls.md`에 실측에서 걸린 함정을 정리해 두었다. 막히면 먼저 그 파일을 본다.
1인 사업가 생산성 키트 — 직원 없이 58개를 자동화했고, 그중 바로 쓸 수 있는 AI 에이전트 스킬 38개(+실행 스크립트 19개)를 공개합니다
겟백 1:1 자문 세션(A 대표·B 원장)이 끝난 뒤 줌 녹화 전사록을 받아 노션 코칭 대시보드에 회의록을 올리고, 할 일 보드 등록·대시보드 문구 갱신·클라이언트 카톡 통보까지 처리할 때 읽을 것. "B 원장님 자문했어 노션에…
마크다운 원고를 실제 책처럼 보이는 PDF/EPUB 전자책으로 만들 때 사용. 표지, 타이틀 페이지, 판권(콜로폰) 페이지, 실제 쪽번호가 달린 목차, 장마다 러닝헤더가 붙는 본문까지 갖춘 '책스러운' 구성이 필요할 때 (단순…
CLI 기반 자동화에서 Claude를 우선 사용하고 계정 사용량 한도 초과 때만 Codex로 재실행하는 폴백을 구현하거나 점검할 때 사용
온라인 유료 커뮤니티 개설 전체 프로세스를 지원하는 에이전트 조직 스킬. 커뮤니티 기획부터 모집 카피, 노션 DB 세팅, 운영 SOP까지 한번에 처리. 오케스트레이터가 인터뷰를 진행하고 4개 전문 에이전트가 결과물을 순서대로…
Use Orca's computer-use CLI to inspect and operate local desktop app windows through accessibility trees, screenshots, and safe…
당근마켓 웹에서 넓은 지역을 훑어 매물을 찾을 때 사용. 당근 웹 검색은 "동 하나"로만 되기 때문에 구·시·전국 단위로 찾으려면 지역코드를 순회해야 한다. 대형가전·노트북처럼 매물이 드물어 한 동네에서는 안 나오는 물건을 찾을 때.