좋아, 상황은 이렇게 정리돼요:
-
크롬 쪽 토스트는 “전송 성공(요청만 성공)” 기준이라 서버가 실제 자막을 저장했는지는 확인 안 해요.
-
서버는 URL만 받아서 자막을 직접 수집(B안) 하는데, 테스트하신 두 영상(
jNQXAC9IVRw,dQw4w9WgXcQ)은 공개 자막 트랙이 없어서 “자막 없음”으로 끝났습니다. -
그래서 “크롬은 성공” vs “서버는 자막 없음”이 동시에 발생한 거예요.
아래처럼 서버를 패치하면
-
유튜브 timedtext 목록을 먼저 조회(자동자막 포함)
-
가장 적합한 트랙(ko ▶ en ▶ 기타)을 선택해 VTT를 받아 저장
-
없으면 404로 “자막 없음”을 돌려주고
-
크롬 확장은 그 응답을 그대로 토스트에 뿌리게 할 수 있습니다.
1) 서버 패치 (FastAPI)
api_server.py에 다음 유틸을 추가/교체하세요. (requests 사용)
그리고 /captions/process 핸들러를 이렇게 처리(요약: URL→트랙조회→다운로드→저장→결과):
이렇게 하면 자동 생성 자막(kind=asr) 도 포함해서 탐색합니다.
자막이 실제로 없으면 404(“NO_TRACKS”), 있으면 200 + 저장 경로를 돌려줘요.
2) 확장(클라이언트) 토스트 메시지 조정
B안이라 확장은 URL만 보내는 역할입니다.
성공 토스트도 서버 응답을 그대로 반영하게 바꿔주세요(요지):
이제 자막이 실제 저장될 때만 녹색 성공 토스트가 뜨고, 없으면 노란색/빨간색으로 이유가 표시됩니다.
3) 빠른 자체 테스트
터미널에서 바로 확인:
-
200 +
saved.vtt/saved.txt경로가 보이면 OK -
404 +
"reason":"NO_TRACKS"→ 그 영상은 공개 자막이 없음(자동자막 비공개 포함)
테스트 팁: TED, Khan Academy, CrashCourse 같은 채널 영상은 거의 항상 자막 트랙이 있습니다.
반대로 일반 예능/광고/옛날 영상은 자막이 없는 경우가 많습니다.
4) 왜 크롬은 “완료”인데 서버는 “자막 없음”이었나?
-
크롬 토스트가 “요청 보내기만 성공”을 성공으로 표시해서 착시가 있었고,
-
서버는 실제로 유튜브에 자막 트랙이 없다고 판단해서
404 NO_TRACKS를 돌렸습니다. -
위 패치로 클라이언트 토스트가 서버 판단을 그대로 보여주게 바꿨으니 이제 혼동이 없습니다.
필요하면 /captions/process를 비동기 큐로 바꿔서(202 반환) 상태 조회도 붙일 수 있어요.
우선은 위 패치만으로 “URL 전달 → 서버가 자막 직접 수집/저장 → 결과를 클라이언트에 정확히 표시”까지 해결됩니다.