Claude Code로 만든 데스크탑용 차원 이동 케이블 TV
Interdimensional Cable TV that floats on my desktop while Claude Code works
핵심 요약
Claude Code API를 활용해 데스크탑 위에서 실시간으로 AI 생성 콘텐츠를 방영하는 CRT TV를 구현함.
- AI TV 구현 — Claude Code의 function-hooks API로 데스크탑 위에서 작동하는 CRT TV를 만듦.
- 창의적 콘텐츠 — AI가 직접 시나리오, 캐릭터, 픽셀 아트, 음향 효과까지 실시간으로 생성함.
- 지속적 서사 — 세션 간 메모를 유지하여 캐릭터와 스토리가 이어지는 연속성을 확보함.
- 저렴한 비용 — 프롬프트 캐싱을 활용해 시간당 약 1.4달러의 저렴한 비용으로 운영됨.
오늘 밤에 Claude Code의 새로운 모드(function-hooks 플러그인 API) 써서 이거 만들었다. 내 바탕화면 위에 항상 떠 있는 토끼 귀 달린 작은 CRT TV인데, "감독"이 내키는 대로 아무거나 막 틀어준다. 감독은 Sonnet 5.5를 저전력으로 돌리면서 딱 한 마디만 입력해 뒀다. "네가 창작의 모든 권한을 가져. 아무도 네 기획안 검토 안 해."
하는 짓
-
광고, 법정 드라마, 자연 다큐, 자아를 가진 가구들끼리 벌이는 텔레노벨라까지, 모든 세그먼트를 밑바닥부터 새로 쓴다. 감독이 채널, 형식, 출연진, 캐릭터 목소리, 픽셀 아트, 카메라 효과, 뉴스 자막까지 다 정함.
-
세그먼트 사이, 그리고 세션 사이에도 개인 메모를 남겨서 개그 코드나 스토리 라인이 계속 이어진다. 첫날 밤에는 비행선 위에 탄 토네이도 판사("JUDGE GUST: BLIMP COURT")를 만들어내더니, 자기 메모에다가 항소심은 더 큰 토네이도가 맡을 거라고 적어놨더라.
-
내가 터미널에서 뭐 하는지도 실시간으로 다 보고 있다. TV가 화면을 너무 많이 차지한다고 투덜댔더니, "EMERGENCY: FILL THE SPACE"를 틀고, 그다음엔 "CORNER V. SHAREHOLDERS"를 내보내더라. 마지막엔 Sven이라는 놈이 내 구석탱이에 사는 라자냐 값으로 300달러 청구하는 광고까지 나옴. 유령 등대지기는 덤이다.
-
캐릭터들이 진짜로 말도 한다. 각자 Windows SAPI 음성을 쓰는데 높낮이랑 속도도 다 다르고, 자막은 대사가 끝날 때까지 기다려준다. 효과음(슬픈 트롬본, 웃음소리, 에어혼, 노이즈, 대기 음악)은 오디오 파일 없이 전부 코드로 합성함.
작동 원리
-
감독은 픽셀을 직접 그리지 않는다. 100x75 캔버스 위에 JSON 도형(원, 다각형, 큼직한 텍스트, 소용돌이치는 포털, 불, 비)으로 장면을 짜고
bob,blink,talk같은 애니메이션 태그를 붙인다.talk태그가 붙으면 캐릭터가 말할 때만 입이 움직임. -
모드 안에 있는 래스터라이저가 이걸 128x96, 10fps로 그려내는데, CRT 효과(스캔라인, 비네팅, VHS 색 번짐, 글리치, 채널 전환 노이즈, 전원 끌 때 점으로 사라지는 효과)까지 다 들어감.
-
첫 버전은 터미널 안에서 하프 블록 문자로 렌더링했었다(셀 하나당 2픽셀, 전경/배경 트루컬러). 보기엔 좋았는데 화면을 너무 잡아먹어서, 지금은 PowerShell로 실행되는 테두리 없는 항상 위에 떠 있는 C# WinForms 창으로 바꿨다. 어디든 끌어다 놓을 수 있고, 마우스 휠로 크기 조절도 되고, TV 노브도 작동함.
-
현재 영상이 나오는 동안 다음 세그먼트를 미리 써두니까 방송 끊길 일이 거의 없다. 가끔 끊기면 컬러바랑 PLEASE STAND BY가 뜬다.
비용
로그 기록 13개 세그먼트 기준:
-
세그먼트당 입력 토큰 약 4.1k, 그중 3.0k는 프롬프트 캐시에서 처리
-
세그먼트당 출력 토큰 약 1.7k
-
세그먼트 하나 쓰는 데 약 12초
-
세그먼트당 약 $0.02, 시간당 70개 세그먼트니까 API 가격으로 치면 TV 한 시간 보는 데 대략 $1.40 정도. 비용의 86%가 출력에서 나오고, 캐싱 덕분에 입력 비용은 3분의 1 수준으로 줄었다.
-
지금까지 48개 세그먼트 돌렸고 총 $0.95 썼다. 45분 동안 아무 활동 없으면 슬립 타이머가 알아서 꺼줌.


