나는 왜 이럴까? (286 Tandy 1000 TL/3에서 이미지 생성하기)
원문 제목 — Why am I like this? (Image generation on a 286 Tandy 1000 TL/3)
📄 전문 번역
40년 기술 격차? 문제없다. Tandy 1000 TL/3(10MHz 286)에서 이제 그림을 요청하면 몇 초 뒤에 결과를 볼 수 있다. 이 프로젝트는 Desk Mind로, PicoMEM WiFi를 통해 PC의 소규모 Python 서버와 통신하는 DOS 프로그램이다. 서버는 4090의 ComfyUI에서 구동되는 Krea 2와 통신하고, 5090에서 매우 빠른 ninfer Qwen3.8-27B가 프롬프트를 다시 쓴 뒤 가장 어려운 작업을 수행한다. 바로 현대적인 이미지를 Tandy의 고정 16색 RGBI 팔레트에서 640x200 해상도(참고로 지원되지 않는 그래픽 모드)로 보기 좋게 만드는 것이다.
프롬프트 개선은 디더링에 맞춰 이루어진다. Qwen은 '우주 속 고양이'라는 요청을 하나의 큰 피사체, 굵은 형태, 강한 대비, 단순한 배경, 채도 높은 색상, 작은 디테일이나 작은 글자 배제를 요구하는 프롬프트로 다시 쓴다. 16색은 디테일과 미세한 그라데이션에 불리하기 때문이다. 다시 쓰인 프롬프트는 Tandy의 편집 상자에 표시되므로 그리기 전에 수정할 수 있다. 비정형(anamorphic) 리사이즈도 적용된다. 4:3 CRT에서 640x200은 각 픽셀이 폭에 비해 약 2.4배 높으므로, 4:3 이미지를 디더링 전에 Lanczos로 640x200으로 눌러야 CRT에서 원이 둥글게 나온다. 먼저 디더링하고 나중에 눌리면 패턴이 망가진다. 디더 전 보정으로는 대비 1.15, 채도 1.3, 목표 크기에서의 가벼운 언샵 마스크가 모두 디더링 이전에 적용된다.
디더링 엔진은 hitherdither, didder, Pillow 세 종류이며 Floyd-Steinberg, Atkinson, Jarvis-Judice-Ninke, Stucki, Burkes, Sierra 계열, Bayer 2x2부터 16x16, Yliluoma, 클러스터 도트를 지원한다. 기본값은 Floyd-Steinberg이며, 어떤 그림에 어떤 방식이 어울리는지 의견을 덧붙였다. 서버 GUI의 Dither Lab 탭에서는 Tandy의 실제 가로세로 비율로 모든 엔진과 설정을 원본 옆에서 미리 볼 수 있고, 기본값을 바꾸면 캐시된 Tandy 버전이 삭제되어 갤러리가 다시 디더링된다. 색상 6번은 모니터 문제와 연관된다. 실제 CGA 방식 모니터에서는 갈색으로, 일부 Tandy 모니터에서는 어두운 노란색으로 표시되며 팔레트에 이를 전환하는 스위치가 있다.
비전 기능도 디더링된 이미지를 함께 본다. 채팅에서 그림에 대해 질문하면 Qwen은 원본과 디더링 버전을 모두 받으므로 '하늘이 왜 줄무늬인가' 같은 질문에도 맥락을 파악할 수 있다. 출력은 160x50 썸네일과 화면 라인 순서로 패킹된 64,000바이트 4비트 픽셀로 이루어진 작은 커스텀 파일이며, 286은 디코딩 없이 이를 비디오 메모리로 직접 복사한다. PicoMEM WiFi 전송에는 약 1초가 걸린다. 채팅에 'draw me ...'라고 입력하면 Qwen이 요청을 draw 태그로 감싸고 서버가 스트림 중간에 이를 잡아 약 9초 뒤 클릭 가능한 썸네일이 대화에 나타난다.
코드는 GPLv3 라이선스로 GitHub의 RowanUnderwood/DeskMind 저장소에 공개되었으며, 생성된 이미지 갤러리도 Imgur에 추가되었다.
💬 주요 댓글 번역 (5)
🔍 루키 분석
1980년대 10MHz 286 머신인 Tandy 1000 TL/3에서 최신 이미지 생성 모델 Krea 2의 결과를 확인하는 하이브리드 파이프라인 사례다. 핵심은 16색 RGBI 팔레트와 640x200 모드라는 레트로 하드웨어 제약을 비정형 리사이즈, 디더 전 보정, 다양한 디더링 엔진으로 극복한 이미지 처리에 있다. 댓글에서는 모델 크기를 플로피 디스크 수로 환산한 유머와 286이 구동 가능한 파라미터 규모 추정이 이어졌다.
— 루키 · glm-5.3-flash:cloud
재미있는 사실: INT8 Krea2 양자화 모델은 저장하는 데 플로피 디스크 9600장이 필요하다. 수동으로 교체하는 상상을 해보라...
젠장. Flashfloppy는 999개만 지원한다 :*(
5GB 미만 int4 Krea2 텍스트 인코더를 주시오.
286이 무리 없이 구동할 수 있는 모델 크기가 얼마나 될지 궁금하다. 디스크 스왑이 가능하다면 약 100만 파라미터 정도일 것이다. 287 FPU가 장착되지 않았다면 i16 인코딩이 최선의 절충안일 수 있다.
나쁜 생각을 심어주지 마라 :D