В шрифтовой файл поместили нейросеть!Точнее, одну из версий LLaMA на 15 миллионов параметров (довольно небольшую), дообученную на генерацию сказочных историй.
Устройство экспериментальное, но довольно простое. Оно основано на том, что любой шрифт перед тем, как показать на экране, надо «отрендерить»: посчитать лигатуры, применить все OpenType правила и вывести конечное растровое изображение. Этот процесс называется шейпинг. Распространённый шейпер
HarfBuzz имеет модификацию, позволяющую выполнить произвольный WASM-код непосредственно во время шейпинга (то есть, попросту, во время набора текста). [
Для справки: WASM, или веб-ассемблер — это способ выполнить эффективный низкоуровневый код, запущенный, например, прямо в браузере. В WASM можно скомпилировать почти любой компилируемый язык, такой как C++ или Rust.]
Тут-то и появляется встроенный в шрифт движок, передающий написанное как промпт в модель (которая тоже находится в самом шрифтовом файле), и формирующий ответ как сложную лигатуру. Управление простое — запуск захардкоден на «Once upon a time» и 70 восклицательных знаков. Это запускает движок, который убирает 70 набранных «!», а каждый последующий меняет на предложение от нейронки.
Подробнее и демонстрация:
https://fuglede.github.io/llama.ttf/Это, конечно, кликбейт (впрочем, слишком нёрдовский, чтобы сработать). А вот действительно интересной технологией тут является та самая реализация шейпера HarfBuzz с возможностью встраивания WASM-инструкций. Она даёт возможность, по сути, вмешиваться в сам процесс формирования вывода (то есть того, как должен работать набор вашим шрифтом) с помощью почти любого языка программирования, а не только определять OpenType правила на очень ограниченном в возможностях микроязыке OpenType фич (впрочем, обманутые рекламой пользователи
Glyphs.app даже этого обычно не делают). Собственно, для выхода за ограничения возможностей GSUB и GPOS таблиц wasm-harfbuzz и появился, как реакция на
выступление Джона Хадсона о невозможности набора на некоторых языках исключительно существующими шрифтовыми технологиями.
Хадсон даже заявил, что, на его взгляд, OpenType основан на неподходящей парадигме (на идее позиционирования прямоугольников). И это, кстати, в 2014 году! Что ж, в 2023 году Behdad Esfahbod приступил к реализации экспериментальной версии шейпера (напомню, что Бехдад — это человек, на котором держится шейпинг почти всего цифрового мира, от Chrome до приложений Adobe) и вот мы уже некоторое время как имеем возможность создавать действительно программируемые шрифты, хоть и «в песочнице». Нейронка внутри — пока что маленькая (и немного желатиновая) вишенка, появившаяся буквально 3 дня назад. Ещё есть
тетрис внутри шрифтового файла и
анимация из 6000 кадров (
репозиторий с кодом и слайдами, и конкретно шрифтовой файл
тетриса, на случай если вы захотите поиграть). Конечно, есть и более практичные примеры, среди которых, например, решение проблемы арабских языков (о которой говорил Джон Хадсон), первый полноценный набор египетских иероглифов, а также шрифт, включающий в себя другой шрифт (и расставляющий по второму вариативные точечки) и КАЛЬКУЛЯТОР. И настоящая вишенка — параметрический кернинг прямо в процессе набора (на основе bubblekern от Тоши Омагари)! Всё это
здесь, включая шрифтовые файлы.
Current state. В данный момент wasm-harfbuzz не поставляется в стандартные сборки. Из полностью готовых вариантов есть, например,
специальный билд FontGoggles (к сожалению, только под mac на arm-архитектуре), в котором можно поиграться с шрифтовыми файлами. Как альтернатива — самостоятельно собрать HarfBuzz из исходников с нужными флагами (подробности есть на странице llama.ttf)
Также авторы призывают экспериментировать с технологией, но уточняют, что вряд ли она станет повсеместной в ближайшие несколько лет (как было, например, с
многомерной вариативностью, которая, тем не менее, постепенно разворачивается в принятые стандарты).
Картинок не будет.