치지직(Naver 라이브) 채팅을 실시간으로 보면서 원하는 채팅을 클릭하면 OBS 브라우저 소스에 10초(커스텀 가능)간 표시되는 오버레이 툴입니다. Claude Sonnet 4.6을 사용하여 개발되었습니다.
| 페이지 | URL | 용도 |
|---|---|---|
| 관리자 | http://localhost:5173/ |
채팅 목록 보기 + 클릭으로 선택 |
| 디스플레이 | http://localhost:5173/display.html |
OBS 브라우저 소스로 추가 (기본 스타일) |
| 레트로 디스플레이 | http://localhost:5173/retro.html |
OBS 브라우저 소스로 추가 (8비트 픽셀 스타일) |
npm installnpm run devVite 클라이언트(포트 5173)와 Socket.io 서버(포트 3001)가 동시에 실행됩니다.
npm run build
npm start관리자 페이지 상단 입력창에 치지직 채널 URL 또는 채널 ID를 붙여넣고 연결 버튼을 누릅니다.
https://chzzk.naver.com/live/c0d9723cbb75dc223c6aa8a9d4f56002
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
이 32자리 hex 값이 채널 ID
방송 중인 채널만 연결 가능합니다.
채팅 목록에서 원하는 채팅을 클릭하면 디스플레이 화면에 10초간 표시됩니다.
관리자 화면 하단의 컨트롤 바를 통해 디스플레이에 표시되는 화면을 실시간으로 조작할 수 있습니다.
- 표시 시간: 디스플레이 화면에 픽된 채팅이 머무는 시간을 초 단위로 지정합니다. 기본값은 10초입니다.
- 크기: 디스플레이의 전체 크기를 배율로 조절합니다 (0.5배 ~ 3.0배).
- 닉네임 토글 (
👤 / 👻): 디스플레이 상의 닉네임 표시 여부를 전환합니다. 관리자 화면의 채팅 목록은 영향 없이 항상 닉네임이 표시됩니다.
- OBS에서 소스 추가 → 브라우저 선택
- URL: 기본 스타일의 경우
http://localhost:5173/display.html(또는 배포된 서버 주소 +/display), 레트로 스타일의 경우http://localhost:5173/retro.html(또는/retro) 입력 - 너비:
1920, 높이:1080 - 사용자 지정 CSS 칸에 아래 내용 입력 (보통 기본값이라 안 해도 됨):
body { background: transparent !important; }
일반 공개 채널은 쿠키 없이 연결됩니다. 성인 인증이 필요한 채널은 Naver 로그인 쿠키를 입력해야 합니다.
관리자 페이지 쿠키 입력창 옆 도움말 버튼을 눌러 가이드를 확인하세요.
NID_AUT=xxxxx; NID_SES=yyyyy
입력한 쿠키는 브라우저 localStorage에 저장되어 다음 실행 시 자동으로 불러옵니다.
ChzzkChat_PickUI/
├── server/
│ ├── index.ts # Express + Socket.io 서버
│ └── chzzkClient.ts # 치지직 WebSocket 클라이언트 (직접 구현)
├── src/
│ ├── shared/
│ │ ├── types.ts # 공유 TypeScript 타입
│ │ ├── socket.ts # Socket.io 클라이언트 싱글톤
│ │ ├── MessageContent.tsx # 이모티콘 렌더링 컴포넌트
│ │ └── BaseDisplayApp.tsx # 디스플레이 공통 로직 컨테이너
│ ├── admin/
│ │ ├── App.tsx
│ │ └── components/
│ │ ├── ConnectForm.tsx # 채널 연결 폼
│ │ ├── ChatList.tsx # 채팅 목록 (자동 스크롤)
│ │ └── ChatMessage.tsx # 채팅 행 (React.memo)
│ └── display/
│ ├── App.tsx
│ └── components/
│ └── PickedMessage.tsx # 애니메이션 채팅 버블 (기본)
│ └── retro/
│ ├── main.tsx
│ ├── App.tsx
│ └── components/
│ └── PickedMessageRetro.tsx # 8비트 레트로 애니메이션 채팅 버블
├── index.html # 관리자 진입점
├── display.html # 디스플레이 진입점 (투명 배경)
└── retro.html # 레트로 디스플레이 진입점 (투명 배경)
| 이벤트 | 방향 | 내용 |
|---|---|---|
chat:connect |
관리자 → 서버 | 채널 연결 요청 |
chat:disconnect |
관리자 → 서버 | 채널 연결 해제 |
chat:message |
서버 → 관리자 | 실시간 채팅 메시지 |
server:status |
서버 → 전체 | 연결 상태 변경 |
message:pick |
관리자 → 서버 | 채팅 선택 |
display:show |
서버 → 디스플레이 | 선택된 채팅 표시 |
display:config |
서버 → 디스플레이 | 닉네임 표시 설정 |
| 레이어 | 기술 |
|---|---|
| 서버 | Node.js + TypeScript + Express + Socket.io |
| 치지직 연동 | 직접 WebSocket 구현 (wss://kr-ss3.chat.naver.com/chat) |
| 프론트엔드 | React 18 + TypeScript + Vite (multi-entry) |
| 스타일 | Tailwind CSS |
| 애니메이션 | Framer Motion |
