Каждый раз, когда я вижу еще один graph.json от очередного визуального редактора AI-пайплайнов, меня дергается глаз. Этот файл жив только внутри одной программы. Перенеси его к коллеге — всё сломается. А если он использует другую версию ComfyUI или LangFlow? Пиши заново.
Команда BoojumRoute Lab решила эту проблему — они выпустили SnarkRoute, открытый конструктор нодовых редакторов, который не просто рисует графы, а упаковывает AI-воркфлоу в портабельный формат route.yaml. Заодно придумали Open Route Protocol (ORP) — спецификацию, которая позволяет разным нодовым редакторам понимать друг друга. Звучит как утопия? Давайте смотреть.
Три слона, на которых держится SnarkRoute
Первое: сам конструктор. Это веб-приложение (но можно собрать и нативный билд через Tauri), где вы перетаскиваете ноды, соединяете их по портам, настраиваете параметры. Ничего нового, скажете вы. А вот второе — Open Route Protocol. Это JSON-схема, которая описывает не только граф, но и типы данных на каждом порту, конфигурацию нод, метаданные о среде выполнения. Третье — реестр нод. Пакеты нод ставятся через npm или pip, после чего автоматически доступны в редакторе.
Важно: SnarkRoute не заменяет рантайм — он генерирует портабельный манифест. А исполнять его можно хоть через llama.cpp (в том числе через Router Mode), хоть через Docker с вашим любимым оркестратором.
Как это выглядит изнутри: ноды, порты, типы
Главная идея — строгая типизация данных между нодами. Никаких «соедини всё со всем». Каждый выход порта имеет схему (например, image/png или application/x-ndjson). Если типы не совпадают — редактор подсветит красным. Жизнь стала проще, когда не надо гадать, что за тензор прилетел в соседнюю ноду.
Пример сборки простого пайплайна: загрузка текста → токенизация → генерация через модель → постобработка. В SnarkRoute это выглядит так:
# route.yaml (фрагмент)
routes:
- id: gen-pipeline
nodes:
- id: reader
type: builtin/text-file
config:
path: input.txt
- id: tokenizer
type: twitter-huggingface/tokenizer
inputs:
text: reader.text
config:
model: deepseek-ai/DeepSeek-R1
- id: llm
type: community/llama-cpp
inputs:
tokens: tokenizer.input_ids
config:
ctx: 4096
temperature: 0.7
- id: formatter
type: builtin/json-output
inputs:
result: llm.choices[0].text
Обратите внимание на поле type — формат author/package. Это не просто строка, а ссылка на реестр. Пакет twitter-huggingface/tokenizer может быть установлен из npm или PyPI, и SnarkRoute сам подтянет зависимости.
Не путайте с Nemotron-Orchestrator — там про роутинг между моделями, а здесь про портабельные воркфлоу.
Сравнение: чем SnarkRoute убивает ComfyUI и LangFlow?
ComfyUI — король генерации изображений. Но попробуйте взять его граф и запустить на сервере без GUI. Граф хранится в проприетарном JSON, завязанном на внутренние id. SnarkRoute же выгружает route.yaml, который можно читать, редактировать и исполнять на любой платформе с ORP-совместимым рантаймом. LangFlow (теперь часть DataStax) больше заточен под бизнес-логику и работу с базами — там ноды тяжеловесные, а портабельность хромает.
Сравним по ключевым точкам:
| Параметр | SnarkRoute | ComfyUI | LangFlow |
|---|---|---|---|
| Формат графа | route.yaml (ORP) | Проприетарный JSON | JSON + модульное API |
| Типизация портов | Строгая, с JSON Schema | Динамическая (runtime) | Типы через Python-классы |
| Рантайм | Любой (плагин/CLI) | Встроенный (PyTorch/ONNX) | LangChain/Docker |
| Открытость | Полный open-source (MIT) | Open-source (GPL) | Open-source (Apache 2.0) |
| Портабельность | Высокая (YAML + реестр) | Низкая (зависит от GUI) | Средняя (требует API) |
На практике: если вы пишете свой тул для MLOps и хотите встроить редактор в веб-интерфейс — SnarkRoute перекрывает эту потребность сразу. Не нужно изобретать свой протокол. Просто ставите SnarkRoute как npm-пакет, описываете ноды, и получаете готовый редактор.
Кому это реально нужно (и кому — нет)
Если вы пилите свой стартап по AI-генерации и вам надоело каждый раз переписывать вьюшки для графов — берите SnarkRoute. Если вы инженер в крупной компании и хотите стандартизировать обмен пайплайнами между командами — это ваш молоток. Если же вы просто рисуете картинки в Stable Diffusion — оставайтесь в ComfyUI, там больше готовых нод.
Особенно интересен SnarkRoute для тех, кто комбинирует локальные модели с облачными: вы описываете воркфлоу в YAML, а рантайм сам решает, где запустить ту или иную ноду (под капотом можно использовать ClawRouter для маршрутизации).
Подводные камни
Без них не обошлось. Во-первых, экосистема нод пока маленькая — в реестре меньше сотни пакетов. Придется писать свои врапперы. Во-вторых, ORP — это черновик v0.2, и коллизия нейминга еще не урегулирована (как быть, если два пакета назовутся одинаково?). Разработчики обещают схему разрешения через DID (децентрализованные идентификаторы) к концу 2026 года. В-третьих, документация грешит неполнотой: как сделать кастомную ноду для специфичного рантайма написано в стиле Coder-link — конфиг есть, а подробностей мало.
Но это open-source, так что вилы в руки — и фикс на GitHub.
Резюме для тех, кто листает ленту
SnarkRoute не пытается заменить все визуальные редакторы. Он скорее про формат и протокол, как Markdown для документов. Если вы устали от vendor lock-in и хотите, чтобы ваши AI-пайплайны жили своей жизнью, а не умирали вместе с закрытием страницы — присмотритесь. Еще один плюс: он прекрасно дружит с Lemonade OmniRouter, объединяя текстовые, аудио и видеомодели в одном YAML-файле.
И последнее: я не советую использовать SnarkRoute для продакшен-нагрузки до версии 1.0 (сейчас v0.4.2). Лучший сценарий — прототипирование и внутренние инструменты. Но если вы возьмете его за основу и начнете коммитить свои ноды, то к зиме получите собственный отказоустойчивый редактор. А это уже не шутки.