Commit Graph

9 Commits

Author SHA1 Message Date
005beba4c3 하이라이트 조립 — build_highlight_cuts() 모드 분기 구현
통짜 모드(컷 1개 + 자막 없음)는 시각 슬롯으로 배정, 컷 있는 모드는 Gemini 추천.
is_whole() 판별, _whole_picks() 슬롯 채우기, build_highlight_cuts() 조립.
import에 match_slots, top_liked 추가.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 12:07:48 +09:00
88768020bf docs: 계획서 Task 4 예시 except 튜플의 예외 누출 수정
리뷰에서 잡힌 구멍이 계획서 참고 코드에도 그대로 있었다. str.format 의
ValueError 와 .decode 의 UnicodeDecodeError(= ValueError 서브클래스)가
빠져 있어, 그대로 옮기면 "어떤 실패에도 예외 없음" 계약이 깨진다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 12:05:05 +09:00
ee30e87bb4 예외 처리 개선: ValueError와 UnicodeDecodeError 추가
- str.format() 예외 처리에 ValueError 추가 (템플릿 중괄호 불균형)
- .decode(utf-8) 예외 처리에 ValueError 추가 (UnicodeDecodeError는 ValueError 서브클래스)
- URLError/TimeoutError는 이미 OSError 서브클래스이므로 정리 (주석 추가)
- ai_pick_cuts는 모든 실패에 예외 없이 {} 반환하는 계약 이행

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 12:02:36 +09:00
7cb70cc33a Gemini 텍스트 호출로 컷별 댓글 추천 구현
correct.py의 텍스트 호출 패턴을 따라 ai_pick_cuts() 및 헬퍼 함수(_candidate_lines, _cut_lines, _parse_ai)를 추가했다.
- 목차 댓글 필터링(MAX_TIMES 기준)
- 좋아요순 정렬
- 응답 파싱 시 형식 오류는 조용히 버림
- 모든 실패(키 없음, 타임아웃, JSON 깨짐 등)에 {} 반환

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 11:56:08 +09:00
8367219b7f 컷별 댓글 추천 프롬프트 파일 로더 구현
- RECOMMEND_PATH 상수 추가 (프롬프트/댓글_추천.md)
- DEFAULT_RECOMMEND 기본 프롬프트 추가 ({cuts}, {comments}, {k} 치환자 포함)
- load_recommend() 함수 구현 (없으면 기본값으로 생성 후 읽기, load_step1()과 같은 패턴)

사용자가 메모장에서 프롬프트를 직접 수정할 수 있도록 설계.
Task 4에서 .format(cuts=…, comments=…, k=…)으로 채워져 Gemini에 전달됨.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 11:50:12 +09:00
df8bc7baec 컷별 댓글 배정 순수 로직 — quotas_for, build_cut_picks
배정 규칙(타임스탐프 우선·중복 제거·Gemini 폴백)을 댓글 수집·HTTP 처리와
분리해 순수 함수로 구현. 기준 카드 길이 3초(CARD_SEC)로 컷별 쿼터 계산.
타임스탠프 매칭은 match_ranges() 이용, Gemini 없이 검증 가능.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 11:44:59 +09:00
47362a814e match_slots() 함수 구현 — 구간 슬롯 배정 기능
통짜 모드에서 영상 구간을 n개 슬롯으로 나누고 각 슬롯에 댓글을 배정하는 순수 함수를 추가했다.
- match_ranges()를 활용해 슬롯 시간대와 매칭되는 댓글을 찾음
- 좋아요 높은 댓글부터 슬롯에 배정 (슬롯당 최대 1개)
- 한 댓글이 여러 슬롯에 중복되지 않도록 관리
- exclude 집합으로 사전에 제외된 댓글 처리

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 11:39:39 +09:00
2d12bd0fac docs: 계획의 Global Constraints 를 git 초기화 반영해 갱신
git 저장소가 아니라 커밋 단계가 없다고 적혀 있었으나, 저장소를 만들었으므로
태스크마다 커밋하도록 바꾼다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 11:36:40 +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