感知色彩引擎

讓色彩像光一樣
自然運作。

OKYCT 是為自發光顯示器打造的零依賴感知色彩引擎。以 OKLab 極角定義色相、以 CIE 亮度錨定視明度,並用代數證明無障礙對比度——不靠猜測。

MIT 授權 · TypeScript · 零執行期依賴

為何選擇 OKYCT

四項保證,全部寫進數學裡。

01

感知色相,物理明度

色相取自 OKLab 極角,因此藍色在 CAM16 會偏紫的深藍區域依然保持藍色。明度直接錨定 CIE 1931 Y,讓亮度成為可量測的物理量,而不是感覺。

02

單變數牛頓求解器

由於 Y 對 OKLab 的 L 嚴格單調,只需一條解析導數即可在 5–7 次迭代內收斂,無需 CAM16 的巢狀二分搜尋,也沒有超越函數掃描。

03

尖峰錨定色域映射

超出色域的顏色會沿著等色相射線向尖峰折返。ΔH 在構造上恆為零,鮮紅永遠不會漂移成橘黃。

04

可以解出來的對比度

Tone 與 CIE Y 互為雙射,因此 WCAG 2.1 與 APCA 門檻都能以閉式代數反解。無障礙成為 O(1) 的約束條件,而不是事後稽核。

實測基準

OKYCT 在多項基準上全面領先。

以下每個數字都由 @sandlada/benchmark 在你的瀏覽器中即時測得——OKYCT、Google MCU、culori 共用協議 v2 種子色對標。

由當前種子色即時測得 · #1A73E8

#1A73E8拖動即時預覽 · 鬆開套用
評測項條件OKYCTCIE L* + okyctToRgbGoogle MCUHCT tone solveculoriOKLCH L* solve
明度準確度與共用 L* 目標最大偏差
  • 共用 CIE L* 色階:10、20、…、95(協議 v2)。
  • 以 p95 |實測 L* − 目標| 排名;越小越好。
  • OKYCT/culori:共用最近鄰 sRGB 量化;MCU:原生 8-bit ARGB。
T10–T95 色階p95 Δ0.14p95 Δ0.19p95 Δ0.24
平均色相漂移10 級色階平均值
  • 相對種子色的 OKLab Δh,權重 c/(c+0.1)。
  • 各級色階算術平均;近中性種子(CIELAB C* < 2)不參與色相排名。
  • 加權漂移越小越好。
T10–T95 色階0.08° w1.51° w0.12° w
最大色相漂移OKLab 加權漂移 p95
  • 與平均漂移相同的 OKLab 加權公式。
  • 取 10 級色階漂移的 95 分位。
  • p95 越小越好。
T10–T95 色階p95 0.24°p95 3.37°p95 0.24°
語義角色 AA淺/深 MD3 字底角色對(各 11 對)
  • 共用 MD3 角色 Tone 契約;culori 使用基準提供的 token 表。
  • 輸出 hex 上字壓底的 WCAG 2.1 對比度 ≥ 4.5:1(分淺/深)。
  • 僅作門檻:統計通過對數(淺/深各最多 11 對),不參與色相排名。
T10–T95 色階L 11/11 · D 11/11L 11/11 · D 11/11L 11/11 · D 11/11
求解耗時每 10 級色階
  • 當前種子下生成一整條 L* 色階的中位牆鐘時間。
  • 3 次預熱 + 20 次計時樣本。
  • 中位毫秒越小越好。
T10–T95 色階0.11 ms0.48 ms0.79 ms
核心命題

當螢幕開始自己發光,紙張時代的調色盤就不再成立。

既有的色貌模型是為反射光設計的。OKYCT 直接從像素的物理出發:以 OKLab 極平面描述色相、以 CIE 1931 Y 描述明度,中間則由嚴格單調的牛頓求解器銜接。最終得到一套在 OLED 上依然誠實、色域裁切零色相漂移,並且能直接證明對比度的色彩系統。

自發光物理

為自己發光的面板而設計。

OLED、AMOLED 與 MicroOLED 在暗部行為截然不同。OKYCT 提供的是硬體預設檔,而不是一套通用的「暗色模式」。

#000000T0

OLED · 真黑斷電

Tone 0

像素完全關斷,換取極致靜態對比度與最低待機功耗。

#000D28T4

AMOLED · 防黑拖影

Tone 4

以亞閾值偏壓維持有機層喚醒,在 120 Hz 下把階躍響應由 18.5 ms 壓縮至 1.6 ms,徹底消除果凍黑拖影。

#00163BT8

MicroOLED · XR

Tone 8 / 92

抬升暗部並柔性限幅高光峰值,消除近眼 Pancake 透鏡的內反射光暈。

光譜加權子像素功耗

P = 1.05·Rγ + 0.85·Gγ + 2.40·Bγ。藍色是最耗電、老化最快的通道,因此高危色相會被收斂並微偏青藍。

Ppixel = 1.05·Rγ + 0.85·Gγ + 2.40·Bγ
即時調色盤

一個種子色,十三級明度,涵蓋所有角色。

引擎此刻正在你的瀏覽器中運行。改變種子色,粒子、色階列與 Token 角色都會沿著同一條感知管線同步更新。

主色
次色
第三色
中性色
中性變體
Tone0 · 10 · 20 · 30 · 40 · 50 · 60 · 70 · 80 · 90 · 95 · 99 · 100
令牌

每個職責都有一個名字。

色階是明度。令牌是這個明度被派去擔任的職責。OKYCT 保留一小套角色:主色、表面、狀態。上面的種子色可以換,這些職責不變。

主色
操作控件停在文字仍能通過 WCAG 的明度上。種子色原本的亮度則放進容器裡展示。
表面
從 Dim 到 Highest 共五級,用來拉開層次。卡片和面板不靠投影。
狀態
錯誤、警告、成功與資訊各自帶著前景色,訊息和底色是一對。

亮色

主色
主色容器
次色
第三色
表面 Dim
容器 Low
表面容器
容器 High
容器 Highest
錯誤
警告
成功
資訊

暗色

主色
主色容器
次色
第三色
表面 Dim
容器 Low
表面容器
容器 High
容器 Highest
錯誤
警告
成功
資訊

交付經得起考驗的色彩。

OKYCT 以 MIT 授權釋出、零依賴,TypeScript 版本已可使用,Dart 與 Rust 實作正在路上。