내가 왜 이러고 살까? (286 Tandy 1000 TL/3에서 전체 채팅 및 이미지 생성 구현)
Why am I like this? (Full Chat and Image generation on a 286 Tandy 1000 TL/3)
핵심 요약
40년 된 286 PC를 최신 AI 모델과 연결해 채팅과 이미지 생성을 구현한 기술적 도전기입니다.
- 기술적 구현 — 286 PC에서 mTCP와 PicoMEM 카드를 통해 로컬 서버와 통신함
- AI 모델 활용 — Qwen3.8-27B와 Krea 2를 서버에서 구동하여 텍스트와 이미지를 처리함
- 최적화 작업 — 16색 디더링과 80컬럼 텍스트 모드에 맞춰 데이터를 실시간 변환함
- 커뮤니티 반응 — '단순 터미널일 뿐'이라는 비판과 '직접 클라이언트를 만든 대단한 시도'라는 칭찬이 공존함

40년의 기술 격차? 문제없음! Tandy는 네이티브 DOS 프로그램인 DeskMind를 돌림. WiFi(mTCP가 포함된 PicoMEM 2 카드)를 통해 내 PC에 있는 작은 파이썬 서버랑 통신하는 방식임. 그 서버가 Qwen3.8-27B(5090에서 NInfer 구동)랑 Krea 2(4090에서 ComfyUI 구동)를 돌리는 구조지. 286은 JSON, base64, PNG 같은 거 구경도 못 함. 그냥 비디오 메모리에 바로 때려 박을 수 있는 텍스트 줄이랑 그림만 받는 거임.
툴 콜링 없이 채팅에서 바로 그림 그리기. 시스템 프롬프트가 Qwen한테 그림 요청은 <draw>...</draw> 태그로 감싸라고 시켜둠. 서버가 스트림 중간에 이 태그를 낚아채서 Krea 2를 돌리고, 디더링 처리한 다음 'picture ready'라는 줄을 쏴주는 식임. "286 AI 로고 그려줘"라고 치면 엔터 누르고 썸네일 뜨기까지 9초 정도 걸림.
Qwen Vision은 Tandy가 뭘 보고 있는지 다 알고 있음. 사진에 대해 물어보면 Qwen은 원본이랑 16색 디더링 버전 둘 다 받으니까 "왜 하늘이 줄무늬처럼 보여?" 같은 질문에도 맥락 파악이 가능함. 마지막으로 띄운 사진은 후속 질문을 위해 계속 컨텍스트에 남아있고.
모델도 자기가 어디 사는지 잘 알고 있음. 시스템 프롬프트에 자기가 80컬럼 16색짜리 286 안에서 돌아가고 있다는 걸 박아놨거든. 그래서 답변도 짧고 깔끔한 ASCII로만 내뱉고, 게임 물어보면 Wolfenstein 3D나 Commander Keen 같은 거 추천해 줌.
1990년대 화면에 맞게 스트리밍 정리도 함. 추론 과정은 다 쳐내고, 마크다운은 실시간으로 제거하고, 유니코드는 코드 페이지 437로 변환함(글머리 기호는 CP437 블록 문자로 바뀜). 토큰 하나하나마다 286이 화면 다시 그리는 짓 안 하게 48자 정도 되는 줄로 묶어서 보냄.
요청별 추론 강도: 채팅은 낮음(2초 안에 답변 시작), 이미지 프롬프트 재작성은 중간 정도.
디더링에 최적화된 프롬프트 "강화": 굵은 형태, 강한 대비, 단순한 배경. 재작성된 프롬프트는 그림 그리기 전에 Tandy의 편집 상자에 먼저 뜨고, 규칙 자체도 Tandy에서 직접 수정할 수 있음.
- A Dither Lab: 서버 GUI에 있는 기능인데 Floyd-Steinberg, Atkinson, Bayer, Yliluoma 등등을 Tandy의 실제 화면 비율로 미리 볼 수 있음.
수치: Krea 2는 1024x768 기준으로 8단계에 10초 정도 걸리는데, 목표는 640x200임. 64,000바이트짜리 사진을 PicoMEM WiFi로 쏘는 데 1초 정도 걸림(56-79 KB/s).
코드 (GPLv3): https://github.com/RowanUnderwood/DeskMind

