포스터·패키지·명함… QR이 안 들어가는 데가 없는데, 공들인 디자인 위에 마지막으로 흑백 네모를 얹는 건 늘 아쉬웠어요. 그런데 QR이 그렇게 생긴 데는 이유가 있습니다 — 1994년의 카메라와 연산으로 «어떻게든 읽히게» 만든 결과거든요.
그 제약이 지금은 많이 풀렸습니다. 카메라도 연산도 넉넉해졌죠. 그래서 인식 성능만 더 쫓는 대신 눈에 들어오는 쪽으로 한번 만들어 봤어요. QR을 대체하려는 게 아니라, 옆자리를 하나 만드는 겁니다.
QR은 그 시절의 최선이었습니다. 흑백 두 값, 정사각 모듈, 큰 파인더 — 전부 «성능이 빠듯한 카메라로도 읽히게» 하려는 선택이었어요. 그 제약 아래서는 미감을 포기하는 게 합리적이었습니다.
그 전제가 바뀌었어요. 지금 폰 카메라는 그때와 비교가 안 되고, 실시간 영상 처리도 브라우저 안에서 됩니다. 그러면 남는 여유를 밀도에 더 쓸 게 아니라 보이는 것에 써도 되지 않을까 — 그게 이걸 만든 이유입니다.
대신 밀도는 포기했습니다. 마름모 셀은 정사각 모듈보다 면적 효율이 불리해요. 이 포맷은 밀도 경쟁을 하지 않습니다. 많이 담아야 하면 QR이 맞아요.
어디에 얹을지에 따라 고르면 됩니다. 셋 다 같은 데이터 계약을 공유하고 실루엣만 달라요. 아래 코드에는 전부 https://tl.estre.so 가 들어 있어요.
세 면이 각각 n×n 격자. 한 덩어리라 간판·굿즈에 어울립니다.
가장 기본형. 중앙 파인더를 중심으로 마름모 셀이 깔립니다.
육각 코어에 코너 패치를 더해 정삼각형이 됩니다.
순 페이로드는 ECC-M 기준이에요. 세 타입 모두 폴백 QR 을 함께 인쇄할 수 있어서, TL 코드를 못 읽는 환경에서도 최소한의 경로가 남습니다.
육각 셀을 rhombille 타일링으로 T·L·R 세 면으로 나눕니다.
세 면의 휘도에 순위를 매기면 3! = 6가지 — base-6 digit 하나입니다.
GF(211) 소수체 위의 Reed–Solomon 으로 오류를 정정합니다.
단조 변환에 불변합니다. 전역 조명 변화·감마·프린터 톤 매핑처럼 단조 증가하는 톤 변형은 순서를 바꾸지 못합니다. 순서만 보존되면 값이 삽니다.
렌더러가 자유롭습니다. 데이터 계약이 "면 사이의 순서 + 최소 분리폭" 뿐이라, 그 안에서 색·질감·면 그라데이션·애니메이션이 전부 열려 있습니다. 그 자유도가 이 포맷의 핵심이에요.
다만 «자동으로 예뻐지는» 건 아닙니다. 자유로워지는 것은 계약이지 결과가 아니에요. 그 안에서 무엇을 그릴지는 여전히 만드는 사람 몫입니다.
디코더는 개발 중입니다. 아래는 실기기 촬영 사진으로 잰 현재 상태예요 — 합성 테스트가 아니라 실제 스마트폰 카메라 결과입니다.
| 타입 | 실사진 복호 | 복호 시간 | 실시간 스캔 |
|---|---|---|---|
| Type Y — 단일 큐브 | 3 / 3 | 약 0.4초 | 쓸 만함 |
| Type O — 육각 필드 | 3 / 3 | 약 1.1초 | 개선 중 |
| Type A — 삼각 실루엣 | 2 / 3 | 약 0.8초 | 개선 중 |
| 중앙 QR 변형 (세 타입 공통) | 8 / 9 | — | 개선 중 |
복호 시간이 실시간 스캔 체감을 지배합니다. 스캐너는 프레임을 약 0.3초 간격으로 보는데 한 번 읽는 데 몇 초가 걸리면 그동안 프레임이 버려져서, 정확도와 무관하게 “어쩌다 한 번 읽히는” 느낌이 됩니다. 그래서 지금은 속도가 최우선 과제예요.
촬영 조건도 크게 작용합니다. 실측에서 셀당 9픽셀이 복호 하한이었고, 같은 거리라도 초광각 렌즈로 찍으면 코드가 작게 담겨 이 선 아래로 내려갔어요 (초광각 7.6px 실패 / 광각 9.1px 성공). 스캐너에 렌즈 선택을 넣어 둔 이유입니다.
중앙 QR 변형은 QR 블록이 중앙 파인더 자리를 대신하는 형태예요. 진입점이 없어 한동안 못 읽었는데, QR 자신의 파인더를 기준점으로 삼는 경로를 넣어 이제 읽힙니다.
측정 2026-08-11 · 표본은 스마트폰 3개 센서(초광각·광각·망원)로 찍은 사진 9장 · 짧은 변 1440px 기준. 표본이 작아 성공률이 아니라 현재 상태로 읽어 주세요.
포맷 스펙과 레퍼런스 구현은 Apache License 2.0 으로 공개돼 있습니다. 바닐라 JavaScript, 빌드 툴체인 없음, 런타임 의존성 0 — 단일 HTML 파일로 동작합니다.
디코더만 구현해도 적합 구현입니다. 확산은 읽는 쪽부터 시작하니까요.
| 사이트 | 역할 | 상태 |
|---|---|---|
| tlcube.estre.so | 생성기 | 동작 |
| tlscan.estre.so | 스캐너 | 개발 중 — 현황 › |
| tl.estre.so | 소개 허브 | 여기 |