Commit Graph

6 Commits

Author SHA1 Message Date
475b7b0f71 process_bg_template을 bg_analyze/bg_draft로 분할
댓글 매칭을 받아쓰기 다음 단계에 끼워 넣으려면 파이프라인이 "받아쓰기까지"에서
한 번 멈출 수 있어야 한다. 다운로드~asr(bg_analyze)과 장면분할~draft(bg_draft)
두 조각으로 나누고, 기존 동작을 완전히 보존하는 얇은 래퍼(process_bg_template)로
다시 감쌌다. 이벤트 스트림을 분할 전/후로 떠서 문자 단위로 비교해 11개 이벤트가
완전히 동일함을 확인했다(state 이벤트는 밖으로 새지 않음).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 17:28:54 +09:00
aab2a3199b 컷별 자막 추출 헬퍼 함수 추가 (captions_for_places)
받아쓰기(ASR) 결과에서 컷 구간별로 자막을 이어붙이는 순수 함수.
- 시간축 겹침 판정: 닿기만(경계) 제외, 조금이라도 겹치면 포함
- 공백 정규화: 여러 칸 → 공백 하나
- 토큰 제한: cap 문자에서 자르기 (Gemini 효율)
- 테스트 모두 통과 (경계 규칙·공백·길이·엣지 케이스)

다음 단계(2단)에서 세 탭이 모두 호출할 예정.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 17:12:01 +09:00
c39b72518f 컷별 카드 장수 공식을 floor로 통일 — round와 어긋나 카드가 조용히 버려지던 문제 수정
recommend.quotas_for()는 round, pipeline._cards_by_cut()의 컷당 장수 상한은 floor를
써서 둘이 어긋났다. 5초 컷처럼 round가 floor보다 큰 쪽으로 갈리는 컷은 UI가 카드
2장을 고르게 하고도 빌드 단계에서 상한(1장)에 걸려 뒤 1장이 로그 없이 버려졌다.
사용자 결정에 따라 floor로 통일(카드 한 장이 항상 3초 이상 — 기존
_load_comment_cards 규칙과 동일)하고, 무음 제거로 컷이 압축돼 여전히 카드가
버려지는 경우(이건 불가피)를 컷별 배치 로그에 표시해 더 이상 조용히 사라지지
않게 했다. 관련 설계/계획 문서의 공식·테스트 기대값도 floor 기준으로 맞췄다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 15:05:14 +09:00
499223a125 카드 배치를 무음 제거 뒤로 옮겨 3초 약속을 지킨다
카드 시간을 무음 제거 **전** 타임라인에서 만들고 _remap_caps 로 압축하고 있었다.
자막은 그게 맞다(발화 시각을 따라가야 하니까). 하지만 카드는 다르다:

- cards_fixed=True 는 "카드는 정확히 3초"라는 절대 길이 약속이라 압축하면 깨진다.
  컷 한가운데가 무음이면 3.0초짜리가 2.0초로 눌린다.
- fixed=False 에서도 3초 하한이 사라져 있었다. 기존 _load_comment_cards 는
  n = max(1, int(dur // 3)) 으로 카드당 3초를 보장하는데 _cards_by_cut 엔 그게 없었고,
  quota 는 **원본** 컷 길이로 계산되므로 무음이 절반인 24초 컷은 8장 → 압축 12초 →
  장당 1.5초가 됐다.

고친 방식:
- _remap_placements() 추가 — 카드는 '시간'이 아니라 '컷 구간 자체'를 옮긴다.
- _cards_by_cut 호출을 무음 제거 블록 뒤로 옮기고 압축된 구간·timeline_dur 로 계산.
  무음 제거가 꺼져 있으면 card_places = placements 그대로다.
- _cards_by_cut 에 컷당 장수 상한 min(len, max(1, floor(컷길이/min_sec))) 추가.
  초과분은 버린다 — _load_comment_cards 와 같은 규칙.
- 이제 필요 없어진 cut_cards 의 _remap_caps 호출 제거.

기존 탭(process_bg_template)과 _load_comment_cards 는 손대지 않았다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 14:12:31 +09:00
0a0b43efc2 댓글 카드를 컷 구간 안에 배치하는 경로 추가
_load_comment_cards를 _card_paths/_load_comment_cards/_cards_by_cut로 분리했다.
자동 탭은 카드가 어느 컷 소속인지(card_cuts)만 넘기면 그 컷 구간 안에서 균등
배치되어, 한 컷의 카드가 모자라도 다음 컷 카드가 앞으로 밀리지 않는다(기존
전체 균등 배치의 약점). 카드 시간은 무음 제거 전 placements 직후에 계산하고,
자막과 동일하게 _remap_caps()로 재매핑한다 — 카드 튜플(start,end,path)이
자막 튜플(start,end,text)과 모양이 같아 그대로 재사용 가능하다. card_cuts가
없으면 기존 _load_comment_cards 폴백으로 떨어져 파일/유튜브 구간 탭은 영향
없다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 12:18:33 +09:00
bf1b387d6d chore: git 저장소 초기화 (기존 코드 스냅샷)
컷별 댓글 추천 작업을 태스크 단위로 되돌릴 수 있게 버전관리를 시작한다.
.gitignore 로 영상·캐시(.downloads 2.7G, .comments 72M, .media 28M)와
비밀키(.gemini_key)를 제외했다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 11:36:05 +09:00