Об этом проекте

Hueclid — это инструмент с открытым исходным кодом, который преобразует скриншоты или фотографии в доступные UI-палитры. В отличие от типичных генераторов палитр, которые извлекают доминирующие цвета и останавливаются на этом, Hueclid рассматривает генерацию палитры как задачу оптимизации с ограничениями, создавая набор ролей дизайн-системы — фон, поверхность, текст, основное действие, опасность и другие, — которые проверяются друг относительно друга на контраст с использованием APCA (Accessible Perceptual Contrast Algorithm), а не более старого коэффициента контраста WCAG 2. Основной алгоритм, называемый ACCORD, ищет палитру, которая остается верной фактическим цветам исходного изображения, одновременно удовлетворяя всем ограничениям контраста в направленном графе ролей. Он использует CP-SAT (Constraint Programming with SAT) для точного решения, что означает, что результат либо доказуемо корректен, либо доказуемо неосуществим, с четким указанием того, какое ограничение является проблемой, когда допустимой палитры не существует. Проект находится на ранней стадии, но у него есть работающий бэкенд FastAPI и фронтенд Next.js, размещенный публично по адресу hueclid.cinexg.com. Цветовая математика реализована и проверена: преобразование sRGB в CIELAB, разница цветов CIEDE2000 (проверена на эталонных данных Sharma et al. 2005), Oklab и Oklch (проверены на эталонных матрицах CSS Color 4), гейминг в Oklch, гистограммное бинирование в Lab-пространстве и извлечение палитры с помощью взвешенного k-means. Кэш гистограммных бинов Lab-пространства на базе Postgres создан для приема наборов данных, проверен на наборах Rico, Enrico и WebUI с более чем 100 000 реальных скриншотов. Проект отличается от смежных работ, таких как Colorgorical и Palettailor, тем, что рассматривает APCA как жесткое ограничение внутри генерации (а не как постфильтр), генерирует типизированные роли дизайн-системы с направленным графом ограничений (а не плоский набор различимых цветов) и решает этап выбора с ограничениями точно (а не через стохастический поиск).