Reddit

Five months ago I started a self-hosted app for e-ink dashboards. Today: 900+ stars, 29 contributors and ~400 servers running it.

전자잉크 대시보드용 셀프호스팅 앱을 만든 지 5개월, 별 900개와 기여자 29명, 약 400개 서버

Tesserae는 브라우저에서 전자잉크 대시보드를 만들고 서버에서 패널별 화면을 렌더링해 MQTT나 HTTP로 보내는 오픈소스 앱입니다. 패널별 색상 처리와 기기 지원을 서버와 플러그인으로 나눴으며, 선택형 집계 기능을 켠 서버만 세어도 최근 30일간 395대가 활동했습니다.

에디터 노트

서버 렌더링과 패널별 바이트 변환은 다양한 기기를 한 인스턴스에서 다루려는 구조와 맞물립니다. 특히 편집기와 실물 화면이 같은 렌더링 경로를 쓴다는 설명은 화면 불일치를 줄이는 구체적인 설계입니다. 반면 위젯의 호스트 제한은 네트워크 연결만 통제하며, 프로세스 격리까지 제공하지 않습니다. 게시물도 신뢰 근거를 PR 검토로 한정합니다. 활동 서버 수는 선택형 집계에 동의한 설치만 반영하고, 기기 목록에도 실물 확인 전인 TBD가 섞여 있습니다. 따라서 기여자와 병합 PR 수는 생태계의 참여를 보여주지만 전체 설치 규모나 모든 패널의 검증 상태와 같은 뜻은 아닙니다.

AI 요약

Tesserae는 전자잉크(e-ink) 패널용 셀프호스팅 대시보드입니다. 브라우저에서 위젯 격자, 자유 배치 캔버스 또는 HTML/CSS/JS로 화면을 만들면 서버가 패널 해상도에 맞춰 렌더링하고 MQTT나 HTTP로 한 대 이상의 기기에 보냅니다. AGPL-3.0-or-later로 공개하며 Docker, Home Assistant App 등으로 설치합니다. 계정은 필요하지 않습니다.

서버에서 렌더링하고 패널 형식으로 전송

편집기 미리보기와 실제 화면은 같은 URL을 headless Chromium(Playwright)으로 열어 패널 해상도에 맞춰 캡처합니다. 따라서 편집기와 기기의 브라우저 차이로 화면이 달라지는 문제를 줄입니다. 서버는 패널의 실제 측정 색상 팔레트에 맞춰 Floyd-Steinberg 디더링을 적용한 뒤, Spectra 6용 4비트나 흑백 1비트, 4비트 그레이스케일 등 기기가 요구하는 바이트 형식으로 변환합니다.

기기는 가능한 한 얇은 클라이언트로 둡니다. Raspberry Pi처럼 상시 동작하는 기기에는 MQTT로 화면을 푸시하고, ESP32 배터리 기기는 REST로 프레임을 가져옵니다. ESP32는 ETag를 이용해 변경되지 않은 화면이면 304 응답만 받고, 배터리와 신호 세기를 서버에 보낸 뒤 절전합니다. 시각은 기기에서 SNTP로 맞추지 않고 HTTP Date 헤더에서 가져옵니다.

플러그인, 호환 기기와 보안 범위

위젯, 테마, 렌더러, 전송 방식, 기기 유형은 각각 디렉터리 기반 플러그인으로 확장합니다. 서버가 패널별 프레임을 미리 만들기 때문에 펌웨어는 화면 데이터를 패널에 전달하는 역할에 집중하고, 새 패널 지원에는 보드 설정과 드라이버를 추가합니다. Seeed, Inky, Waveshare, M5Stack, Xteink, KOReader 기기와 TRMNL BYOS 등 여러 경로를 지원합니다. 표의 확인 표시는 실제 하드웨어에서 화면을 확인했다는 뜻이며, TBD는 클라이언트와 설정은 있지만 실물 확인이 끝나지 않았다는 뜻입니다.

커뮤니티 위젯은 검토된 카탈로그에서 버전 고정 tarball을 내려받고 SHA-256과 스키마를 확인합니다. 위젯이 필요한 네트워크 호스트를 선언하지 않으면 소켓 단계에서 연결을 거부합니다. 다만 위젯은 프로세스 안에서 실행되므로 샌드박스는 아니며, 카탈로그 PR 검토가 신뢰의 기준이라고 문서에 밝힙니다.

운영 정보와 프로젝트 규모

온라인 기능은 기본적으로 꺼져 있으며 첫 실행 때 선택을 요청합니다. 켜면 업데이트 확인, 익명 설치 수, 버전과 플랫폼 등을 포함한 일일 집계 하트비트를 Tesserae 서버로 보냅니다. 계정이나 서드파티 분석은 없고, 기기별 배터리와 RSSI 정보는 로컬에 둡니다. 테스트는 pytest 2,400여 건과 커버리지 80% 기준을 적용하고 ruff와 엄격한 mypy 검사를 CI에서 실행합니다. 작성자는 Claude Code를 이용했다고 밝혔으며, 코드 검토와 하드웨어 테스트, 출시 결정은 직접 맡는다고 설명합니다.

게시물은 별 900개 이상, 기여자 29명, 최근 30일간 활동 서버 약 400대를 성과로 제시합니다. 댓글의 작성자가 밝힌 세부 수치는 별 909개, 활동 서버 395대, 외부 기여자의 병합 PR 86건, 커뮤니티 카탈로그 위젯 88개입니다. 서버 수는 선택형 업데이트 확인을 켠 설치만 집계하므로 실제 수보다 적을 수 있다고 덧붙였습니다. 색상 패널의 실제 새로고침은 약 15초이며 게시물 영상은 이를 빠르게 편집한 장면입니다.

Reddit 반응

  • @frankynov — 정말 재미있는 취미이자 빠져들기 쉬운 작업이고 유용합니다. 계속 개선하고 사용자 의견을 듣고 새 기능을 추가해 주셔서 감사합니다. ESP32 프로그래밍에 깊이 들어가고 싶지 않거나 그럴 수 없는 사람도 전자잉크를 접하기 쉬워졌습니다.
    • @xDaftTurtle — 고맙습니다, Franky. 당신의 지원이 없었다면 Tesserae는 지금 모습에 이르지 못했을 겁니다.
  • @QuanTradin — 5개월 동안 기여자 29명이라는 수치가 자랑할 만합니다. 별은 쉽게 누르지만 외부인의 병합 PR은 다릅니다. 그중 몇 건이 위젯 갤러리를 통해 들어왔나요?
  • @Alarmed_Bill_9616 — 패널별 정확한 크기와 색상에 맞춰 렌더링하는 부분은 다들 건너뛰곤 합니다. 3색 패널은 서버에서 디더링하나요, 기기에 맡기나요?
    • @xDaftTurtle — 전부 서버에서 처리합니다. 패널이 기본 지원하는 형식으로 미리 디더링하고 색을 양자화한 뒤 bin 파일로 묶습니다.
  • @powleads — 5개월 만에 전자잉크 대시보드 프로젝트가 별 900개를 얻은 건 대단합니다. 오픈소스 하드웨어 프로젝트에서 실제 기여를 끌어내기 어려운데, 이런 흐름을 보게 되어 좋습니다.
  • @xDaftTurtle — 저도 여전히 반응에 놀라고 있습니다.
  • @xDaftTurtle — 집에 있는 전자잉크 패널에 달력, 날씨, Home Assistant 정보를 띄우고 싶어 Tesserae를 시작했습니다. 5개월 만에 909개 별, 최근 30일간 활동 서버 395대, 기여자 29명과 외부 기여자가 병합한 PR 86건을 기록했습니다. 실물에서 확인한 패널은 23종이고, 44개국에서 사용합니다. 실제 컬러 패널 새로고침은 약 15초이며 영상에서는 빠르게 편집했습니다.

원문: GitHub / 번역·요약: Trawling