بنقرة واحدة
youtube-subtitle-rules
YouTube 자막 번역 룰 (파이프라인, cue 병합, rolling 번역, 캐시). youtube/ 디렉토리 수정 시 참조.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
YouTube 자막 번역 룰 (파이프라인, cue 병합, rolling 번역, 캐시). youtube/ 디렉토리 수정 시 참조.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
페이지 번역 룰 (text detection, injection, batch, cache). text-detector.ts, translator.ts, constants.ts 수정 시 참조.
상태 머신·보호 장치·Observer 룰. content.ts, observer.ts, background.ts 수정 시 참조.
b3rys translate 크롬 확장을 GitHub에서 설치하고 API 키 설정·사용법까지 끝까지 안내한다. 사용자가 `/b3translate`을 실행하거나, repo URL을 붙여넣거나, "b3rys 번역 확장 설치/사용법"을 요청하면 사용.
선택 번역 팝업 룰 (단어/문장 모드, UI, 캐시). selection-popup.ts, llm-helpers.ts 수정 시 참조.
| name | youtube-subtitle-rules |
| description | YouTube 자막 번역 룰 (파이프라인, cue 병합, rolling 번역, 캐시). youtube/ 디렉토리 수정 시 참조. |
videoId + lang으로 매칭 (subtitle-fetcher.ts)
— YouTube는 SPA라 interceptedData Map이 영상 전환 후에도 살아남는다. lang=만으로
매칭하면 이전 영상의 cue가 다음 영상에 로드된다 (새 타임라인 위의 옛 자막 = "자막
꼬임", 새로고침해야 사라짐). 추가 규칙: tlang= 있는 응답은 YouTube 자동번역이므로 제외 ·
bridge는 status 200만 인터셉트 (503 body 캐싱 금지) · 파싱 실패 payload는 버리고 다음
전략 진행 · 전환/클릭 시 pruneInterceptedTracks(videoId) · v= 없는 URL은 현재 영상으로
태깅하지 않는다 (오태깅=오자막, 미태깅=단순 미스)videoId를 검증 (isPlayerResponseFor())
— bridge(ytInitialPlayerResponse) · script 태그 파싱 · page HTML fetch. SPA 전환 후에도
MAIN world 값과 초기 페이지의 inline script가 DOM에 남아 이전 영상을 가리킨다 (실측:
videoId=ZvDkJsKE80k, expected=0mDjeG8K-cg). 검증 없이 쓰면 이전 영상의
captionTracks[].baseUrl로 직접 fetch → 또 이전 자막. videoDetails 없는 응답도 거부.lang 정확 일치 → base 폴백 순서 (en↔en-CA는 허용, zh-Hant↔zh-Hans는 금지),
kind는 같은 쪽을 우선하되 다른 쪽만 있으면 쓰고 downloadSubtitles가 isAsr로 알려준다.
ASR을 manual로 오판하면 병합·문장부호 보정을 건너뛰어 단어 2~3개 조각 자막이 그대로 나온다
(사용자 CC 기본값이 자동 생성일 때 발생).splitCuesAtSentences() — 문장 경계에서 cue를 자름
(?<=[.!?;:])\s+(?=[A-Z]) — 문장 끝 기호 뒤 공백 + 대문자 시작이면 분리.은 문장 끝이 아님 → ABBREV_RE/DOTTED_ABBREV_RE 매칭 시 임시 치환 후 분리 → 복원deoverlapCues() — YouTube ASR raw cue의 시간 겹침 제거 (병합 전 전처리)
mergeCues()와 mergeCuesTwoLine() 모두 병합 전 적용mergeCues() — 짧은 cue들을 합쳐서 번역 적정 크기로 만듦
PostProcessConfig)refineForcedBreak): 한도로 끊길 때 BreakRefiner 전략 체인으로 자연스러운 지점 선택 — ① 중앙 근처 쉼표 ② 기능어 꼬리 제거("...of your |" 방지). 끝이 이미 문장부호면 그대로. leftover는 비례 타이밍으로 다음 chunk에 승계. 새 휴리스틱은 FORCED_BREAK_REFINERS 배열에만 추가 (merge 루프 무수정)Gap-aware LEAD (postProcessCues에서 적용)
docs/decisions.md AD-006 참조Map<videoId, Map<original, translated>>)currentVideoId !== 페이지 videoId면 그리지 않는다 (subtitle-overlay.ts 안전망) —
yt-navigate-finish가 누락돼 teardown이 안 된 경우에도 이전 영상 자막이 보이지 않게 하는 최후 방어선