TECH 으로 돌아가기
TECH HACKER NEWS 오늘 7분 읽기 25 READS

작은 전자잉크 리더의 줄무늬를 AI와 함께 추적하기

작은 전자잉크 리더의 줄무늬를 AI와 함께 추적하기
SOURCE IMAGE · HACKER NEWS

손바닥만 한 전자잉크 리더를 둘러싼 이 이야기는 단순한 가젯 후기가 아니다. 저자는 스마트폰이 독서를 편하게 만든 동시에, 알림 하나에도 쉽게 밀려나는 취약한 습관으로 바꿔놓았다고 진단한다. 그 대안으로 최근 등장한 초소형 전자잉크 리더 중 하나인 Xteink X3를 구입했고, 오픈소스 펌웨어 CrossPoint를 곧바로 올려 책과 커스텀 폰트를 넣었다. 여기까지는 흔한 취미의 영역이지만, 화면을 만지는 과정에서 드러난 결함들과 이를 파고드는 방식이 실무자에게 더 흥미로운 대목이다.

첫 이상 징후는 절전 화면에 넣은 회색조 이미지였다. 기기는 4단계 회색을 지원한다고 했지만, 어두운 회색이 사실상 검정으로, 밝은 회색은 거의 흰색으로 표현됐다. 저자는 테스트 이미지를 만들어 이것이 착시가 아니라 실제 렌더링 문제임을 확인했다. 여기에 뷰어 앱에서는 이전 화면 내용이 옅게 남는 잔상(고스팅)이 겹쳤고, 같은 이미지라도 절전 화면에서는 이 문제가 없었다. 서로 다른 두 렌더러가 다른 판단을 내리고 있다는 신호였다. 그리고 두 경우 모두 비트맵 파일에는 없던 미세한 세로 줄무늬가 사진에 나타났다.

전자잉크가 회색을 만드는 방식

문제의 뿌리를 이해하려면 전자잉크의 동작 원리를 알아야 한다. 전자잉크는 전압 펄스로 흑백 안료 입자를 움직이고, 전원이 꺼져도 그 상태가 유지된다. 갱신이 불완전하거나 전압이 부족하면 이전 이미지의 흔적이 남는다. CrossPoint는 회색조 이미지를 그릴 때 회색 픽셀조차 일단 검정으로 깔아둔 흑백 기반을 만든 뒤, 짧은 전압 파형으로 선택된 픽셀을 흰색 쪽으로 부분적으로 밀어내는 '넛지(nudge)' 단계를 거친다. 구동 시간의 차이가 진한 회색과 옅은 회색을 만들어낸다. 뷰어 앱은 빠른 흑백 갱신만 하고 이 넛지를 건너뛰고 있었고, 이 부분은 비교적 쉽게 고쳐졌다.

반면 줄무늬는 훨씬 끈질겼다. 저자는 전자잉크도 ESP32 개발도 CrossPoint도 잘 모르는 상태에서, 요즘 방식대로 AI 도구의 힘을 빌렸다. 처음 쓴 Codex의 GPT-6 Astra는 자신이 사용한 플로이드-스타인버그 디더링을 원인으로 지목했다가, 알고리즘을 바꿔도 달라지지 않자 파형 쪽으로 방향을 틀었다. 2차원 FFT로 반복 패턴을 정량화한 시도 자체는 영리했지만, 문제는 디더링이 만들어내는 고주파 잡음이 FFT에서 강한 신호로 잡힌다는 점이었다. 결국 Astra는 저자가 말하는 넓은 띠 대신, 화면에는 없는 2픽셀짜리 미세 디더 무늬를 짚어냈다. 두 사람이 서로 다른 패턴을 보고 있었던 셈이다.

측정 대상을 먼저 합의하기

관점을 바꾸기 위해 저자는 Claude Code의 Fable 5.1로 옮겼다. Fable은 이미지 처리의 함정을 피해, 각 열의 밝기를 200행 높이의 슬라이딩 창으로 평균 내는 코드를 짰다. 디더 질감은 평균으로 지워지고, 세로로 이어지는 밝기 차이만 살아남게 하는 접근이었다. 이렇게 하자 줄무늬가 눈에 띄게 드러났다. 다만 Fable도 디더링, 비트 깊이 등으로 몇 차례 헛다리를 짚었다. 결정적 진전은 저자의 제안으로 만든 테스트 패턴이었다. 네 단계 색을 채운 평면, 회색과 흑백을 섞은 영역, 체커보드, 가로세로 선을 담은 이 이미지는 '정답'을 알고 비교할 수 있는 자를 제공했고, 줄무늬 주기가 실제로는 8픽셀임을 확인시켜 주었다. 휴대폰의 후처리가 줄무늬 진폭을 약 70퍼센트 과장한다는 사실도 드러나, 이후로는 원본 DNG 파일을 썼다.

이 과정에서 앞서 우회했던 문제가 다시 확인됐다. 4단계라던 화면은 명백히 3단계만 표시하고 있었다. Fable이 이를 지나가는 말처럼 언급했을 때 저자가 멈춰 세워 파고들게 한 점이 인상적이다. 원인은 CrossPoint와 드라이버가 어두운 회색을 요청하는 방식에 대한 불일치였다. CrossPoint는 픽셀당 2비트를 보내 네 개의 파형 테이블 중 하나를 고르는데, 어두운 회색용으로 아무 동작도 하지 않는 테이블을 지목하고 있었다. Fable은 이를 바로잡아 freeink-sdk에 PR을 올렸고, 되살아난 어두운 회색은 텍스트 안티앨리어싱까지 개선했다. 처음에 느꼈던 '무성의한' 폰트 렌더링의 정체가 여기 있었다.

실무적으로 이 사례가 주는 교훈은 분명하다. 최신 AI 코딩 도구는 FFT 적용이나 컬럼 평균 같은 분석 코드를 빠르게 짜내지만, 무엇을 측정하는지에 대한 합의가 없으면 그럴듯한 유령을 쫓으며 값비싼 토큰과 시간을 태운다. 저자가 반복해서 개입해 가설을 검증하고, 실물 기기를 자석식 충전기 덕에 손쉽게 재플래시·촬영하며 실험 루프를 돌린 점, 그리고 정답을 아는 테스트 패턴과 원본 데이터를 도입한 점이 진짜 진전을 만들었다. 하드웨어가 얽힌 문제에서 사람의 관찰과 실험 설계가 여전히 중심에 있음을 보여준다.

한계도 남는다. 어두운 회색 버그와 뷰어의 넛지 누락은 해결됐지만, 정작 조사를 촉발한 세로 줄무늬 자체는 이 기록의 시점까지 명쾌하게 규명되지 않았다. 프레임 수와 줄무늬 주기의 연관 가설은 파형 길이를 7프레임에서 10프레임으로 늘리고 구동 펄스 사이에 휴지를 넣어봐도 재현되지 않아 배제됐다. 다만 밝은 회색 픽셀이 다른 색조의 이웃과 만날 때 줄무늬가 실린다는 단서가 확보됐고, 제조사의 4단계 이미지 모드인 XTH4 파형이 아직 시도해볼 카드로 남아 있다. 값싼 기기와 오픈소스, 그리고 AI 보조가 만나면 비전문가도 펌웨어 깊숙이 들어갈 수 있지만, 그 여정이 항상 깔끔한 결말로 끝나지는 않는다는 점 또한 이 이야기가 정직하게 보여주는 부분이다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://www.serpentine.com/posts/2026/x3-stripes/
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기
처리 중...