Files
chzzk-bypass/README.md
Claude (chzzk-bypass owner) 9a07bf87a7 v1.1.3: livePlaybackJson 내부 meta/live 도 패치 (cosmetic UI only)
발견: live-detail 의 outer boolean (timeMachineActive, timeMachinePlayback)
두 개를 true 로 만들어도 재생바가 안 뜸. 외부 자료
(jaesung9507/nvver playback.go) 확인 결과, 플레이어는 livePlaybackJson 내부의
meta.liveRewind / meta.duration / live.timeMachine 을 보고 UI 를 결정함.
이 필드들은 omitempty 라서 DVR ON 일 때만 응답에 존재.

수정:
- patchLiveDetailData 에서 livePlaybackJson 을 파싱해 meta.liveRewind=true,
  meta.duration 보강 (1h 기본), live.timeMachine=true 주입 후 재직렬화.
- 깨진 live-playback-json 외부 호출은 이전 커밋에서 이미 제거됨.

근본적 한계 (README 에 명시):
- 이건 cosmetic 패치다. CDN 의 DVR window 는 스트리머가 타임머신을 켰을 때만
  서버가 프로비저닝하므로, 스트리머가 꺼둔 라이브는 HLS 매니페스트에 과거
  segment 자체가 없음. 재생바가 떠도 실제 seek 은 동작 안 할 가능성 높음.
- live-playback-json 엔드포인트가 timeMachine-off 채널에서 404 인 것도 같은
  이유. Streamlink/ChzzkDownloader 도 timeMachineActive 일 때만 부름.
- 진짜 force-timemachine 은 서버 사이드(CDN) 의 결정이라 클라이언트에서
  근본적으로 우회 불가.

manifest 버전 1.1.2 → 1.1.3, README 한계 명시.
2026-05-28 14:33:14 +09:00

4.3 KiB

Chzzk Bypass

치지직(CHZZK) 시청 환경을 개선하는 Chrome / Edge / Whale 용 확장 프로그램 (Manifest V3).

기능

1. 그리드 우회 (1080p 시청)

navigator.userAgent, navigator.platform, navigator.userAgentData 를 Mac 으로 위장해, 치지직이 윈도우에서 1080p 시청 시 요구하는 그리드(Grid) 설치 없이 1080p 화질을 시청할 수 있게 합니다.

구현: content.js

2. 타임머신 강제 활성화 (되감기 UI, cosmetic)

스트리머가 타임머신을 끄고 방송 중인 라이브에서도 플레이어의 되감기 (seek) 바 UI 를 띄우려 시도합니다.

동작 방식:

  1. api.chzzk.naver.com/service/v3.2/channels/{id}/live-detail 응답을 window.fetchXMLHttpRequest 양쪽에서 가로챕니다. 치지직 React 앱은 axios 기반이라 실제 요청이 XHR 로 나가므로 XHR 후킹이 필수입니다.
  2. 응답 본문의 content.timeMachineActive, content.timeMachinePlayback 두 플래그를 true 로 만듭니다.
  3. 내부의 livePlaybackJson (JSON 문자열) 을 파싱해서 meta.liveRewind = true, meta.duration 보강, live.timeMachine = true 를 주입한 뒤 다시 직렬화합니다. 이 필드들이 플레이어가 seek 바 UI 를 켤지 결정하는 트리거입니다.

중요한 한계 (반드시 읽으세요)

이건 UI 만 켜는 cosmetic 패치 입니다. 치지직의 DVR window 는 스트리머가 타임머신을 켰을 때만 CDN 이 프로비저닝하기 때문에, 스트리머가 꺼둔 라이브의 HLS 매니페스트에는 과거 시점의 segment 자체가 존재하지 않습니다. 따라서:

  • 재생바가 떠도 실제 되감기는 동작하지 않을 가능성이 매우 높습니다 (누르면 live edge 로 튕기거나 segment not found 가 뜸).
  • 진짜 되감기를 살리려면 CDN 이 만들어 둔 DVR 매니페스트가 있어야 하는데, service/v1/channels/{id}/live-playback-json 엔드포인트는 스트리머가 타임머신을 켜둔 채널에서만 200 을 돌려주고 꺼둔 채널에서는 404 입니다 (실측 확인).

참고: Streamlink chzzk 플러그인timeMachineActive 가 true 일 때만 live-playback-json 을 부릅니다. Choonholic/ChzzkDownloader--stream force-timemachine 옵션도 마찬가지로 서버-사이드 (CORS 무관) 에서 동일 엔드포인트를 강제로 두드릴 뿐, 서버가 DVR 을 안 만들었다면 똑같이 실패합니다.

구현: timemachine.js

진단 모드

응답 구조를 직접 들여다보고 싶으면 devtools 콘솔에서:

localStorage.setItem('chzzk-bypass:debug', '1')

치고 새로고침하면 [chzzk-bypass:timemachine] DEBUG live-detail content after patch: {...} 로 패치된 content + livePlaybackJson 파싱 결과가 통째로 찍힙니다.

설치

  1. 이 저장소를 git clone 또는 ZIP 다운로드해 임의의 폴더에 둡니다.
  2. Chrome 계열 브라우저에서 chrome://extensions 접속.
  3. 우상단 개발자 모드 활성화.
  4. 압축해제된 확장 프로그램을 로드합니다 클릭 → 위 폴더 선택.
  5. 치지직(https://chzzk.naver.com) 새로고침.

파일 구조

manifest.json     확장 정의 (MV3)
content.js        그리드 우회 (UA / platform / UA-CH 위장)
timemachine.js    타임머신 강제 활성화 (fetch 후킹)
popup.html/css/js 툴바 팝업
icons/            확장 아이콘

동작 확인

브라우저 devtools 콘솔에서 다음 로그를 확인할 수 있습니다.

  • [chzzk-bypass:timemachine] hooks installed (fetch + XHR) — 후킹 성공
  • [chzzk-bypass:timemachine] XHR live-detail intercepted for <channelId> — XHR 가로채기 진입
  • [chzzk-bypass:timemachine] forcing timeMachine ON for <channelId> — 패치 적용
  • [chzzk-bypass:timemachine] livePlaybackJson swapped for DVR manifest — 매니페스트 교체 성공

면책

본 확장은 학습 및 개인 사용 목적의 우회 도구입니다. 사용에 따른 모든 책임은 사용자에게 있으며, 치지직 약관 및 관련 법령을 준수하여 사용하시기 바랍니다.