Skip to main content
Glama

comfyui-loop-mcp

Оно не просто управляет ComfyUI — оно выполняет цикл: submit → get_result → get_image (LOOK) → compare_images → loop_record, с храповым механизмом (лучшее на данный момент + реестр) на диске

MCP-сервер с поддержкой цикла (loop-aware) для вашего собственного ComfyUI. Он не просто вызывает API — он выполняет цикл: build → run → look → critique → fix, пока результат не будет соответствовать заданию.

Граф, работающий с нулём node_errors, — это valid, not correct. Искажённые руки, смещённый фон, жёсткая матовая кромка, видимый шов тайлов — ничего из этого не видно в журнале ошибок. Это видно только в пикселях. Поэтому каждое описание инструмента, каждый ответ инструмента и собственные инструкции сервера заставляют модель смотреть перед тем, как объявить граф готовым.

Та часть, которой нет ни у кого: храповик — это инструмент, а не предложение. Большинство инструментов для агентов управляют ComfyUI. Этот управляет циклом — длинный цикл получает сжатие контекста, и в тот момент, когда это происходит, забытый "лучший на данный момент" исчезает: храповик молча перестаёт вращаться, модель повторяет изменения, которые она уже отвергла, и может выдать регрессию в качестве финального ответа. Так что лучший граф и журнал находятся на диске, а не в памяти модели. Откат — это вызов инструмента, а не акт воспоминания.

loop_start ─▶ submit ─▶ get_result ─▶ get_image ─▶ compare_images ─▶ loop_record ─┐
     ▲                                   (LOOK)      (what moved?)    (ratchet)   │
     └───────────────────  revert to best, try something else  ◀─────────────────┘
                                                          ↓ can't name a defect?
                                           loop_finish + loop_report → sign-off

Метод поставляется с сервером. Цикловой промпт и навык Claude Code находятся в comfy_loop/docs/ и упакованы в wheel, поэтому comfy_loop / comfy_skill / comfy_install подаются дословно из любого места установки сервера — один источник, нечего синхронизировать. (Они зародились в comfyui-onboarding-prompt, который больше не поддерживается; этот репозиторий — их теперешний дом.)


Как это соотносится с собственными MCP-серверами Comfy

ComfyUI поставляет два официальных сервера, и этот — третий, созданный рядом с ними — независимо и с противоположного конца задачи.

Comfy-Org/comfy-mcp (первый коммит 2026-07-01, на один день позже этого, хотя он вышел в публичный доступ раньше) управляет локальным ComfyUI через comfy-cli: все инструменты сводятся к бинарному comfy и разбирают его JSON-обёртку. Comfy Cloud MCP (https://cloud.comfy.org/mcp) — это удалённый HTTP-сервер, который выполняет граф на GPU от Comfy. Оба поддерживаются и сопровождаются командой ComfyUI.

Этот говорит HTTP к /prompt и /object_info напрямую — никакого CLI, никакого аккаунта, ничего устанавливать, кроме httpx, — и тратит свою поверхность на ту половину работы, что начинается после выполнения графа.

Реальная разница

Их локальный сервер относится к установке ComfyUI как к вещи, которой нужно управлять: запустить её, остановить, переключить на другую версию, войти, потратить кредиты на хостинговые партнёрские модели, хвосты журнала, следить за пакетами. Это действительно более широкая поверхность, чем у этого репозитория, и это та поверхность, которой платформенному вендору лучше всего владеть — она двигается, когда движется ComfyUI, comfy-cli или партнёрские API. Если вам нужно запускать и поддерживать мою установку, используйте их.

Этот рассматривает вывод как вещь, которой нужно управлять — потому что именно эта часть была на нашей ответственности. Он родился из собственной продакшн-работы Alienrobot (Alienrobot), где граф, который запускается, является началом работы, а не её концом. Здесь ничего не запускает процесс и не тратит кредит. Вместо этого: возвращайте пиксели модели, дифф-два прохода в изображение, где дрейф не может спрятаться, оцените то, что бриф действительно спрашивает, и держите лучшее на данный момент на диске, чтобы сжатый контекст не мог потерять его. Этой части нет ни у кого — не потому, что сложно вызвать /view, а потому, что "заставить агента смотреть и не дать ему построить на регрессе" — это дисциплина, а не конечная точка.Хорошо, я переведу текст с en-US на ru-RU, сохраняя все структуры, имена и ссылки. Поехали# comfyui-loop-mcp

Он не просто управляет ComfyUI — он выполняет цикл: submit → get_result → get_image (LOOK) → compare_images → loop_record, с храповиком (лучшее на данный момент + реестр) на диске

MCP-сервер с поддержкой цикла для вашего собственного ComfyUI. Он не просто вызывает API — он выполняет цикл: build → run → look → critique → fix, пока результат не потечёт, доводя работу до соответствия брифу.

Граф, который работает с нулём node_errors, — это валиден, а не значит верный. Искажённые руки, отодвинутый фон, жёсткое матовое ребро, видимый шов тайла — ничего из этого нет в журнале ошибок. Это видно только в пикселях. Поэтому каждое описание инструмента, каждый ответ инструмента и собственные инструкции сервера заставляют модель смотреть перед тем, как объявить граф готовым.

Та часть, которой нет ни у кого: храповик — это инструмент, а не предложение. Большинство инструментов для агентов управляют ComfyUI. А это управляет циклом — длинный цикл получает сжаттие контекста, и в тот же момент забытый запомненный "лучший на данный момент" исчезает: храповик беззвучно перестаёт щёлкаться, модель повторяет изменения, которые она уже отвергла, и может отдать вам регрессию как финальный ответ. Так что лучший граф и журнал живут на диске, а не в памяти модели. Откат — это вызов инструмента, а не акт воспоминания.

loop_start ─▶ submit ─▶ get_result ─▶ get_image ─▶ compare_images ─▶ loop_record ─┐
     ▲                                   (LOOK)      (what moved?)    (ratchet)   │
     └───────────────────  revert to best, try something else  ◀─────────────────┘
                                                          ↓ can't name a defect?
                                           loop_finish + loop_report → sign-off

Метод поставляется с сервером. Цикловой промпт и навык Claude Code живут в comfy_loop/docs/ и упаковываются в wheel, поэтому comfy_loop / comfy_skill / comfy_install подаются дословно из любого места установки сервера — один источник, ничего не нужно синхронизировать. (Родились в comfyui-llm-onboarding-промпте, который больше не поддерживается; этот репозиторий — их теперешний дом.)


Related MCP server: ComfyPilot

Как он соотносится с собственными MCP-серверами Comfy

ComfyUI поставляет два официальных сервера, и этот — третья вещь, построенная рядом с ними — независимо, и с другого конца проблемы.

Comfy-Odm-comfy (первый коммит 2026-07-01, на один день позже этого, хотя он вышел публично раньше) управляет локальным ComfyUI через comfy-cli: каждый инструмент вызывает бинарный файл comfy и разбирает его JSON-оболочку. Comfy Cloud MCP (https://cloud.comfy.org/mcp) — это удалённая HTTP-служба, которая выполняет граф на GPU от Comfy. Оба построены и поддерживаются командой ComfyUI.

Этот говорит HTTP к /prompt и /object_info напрямую — без CLI, никакого аккаунта, ничего устанавливать, кроме httpx, — и тратит свою площадь на ту половину работы, которая начинается после выполнения графа.

Разница на самом деле

Их локальный сервер считает установку ComfyUI целью: запустить, остановить, переключить версию, зайти, потратить кредиты на хостинговых партнёров, хвосты журнала, поддерживать пакеты. Это действительно более широкий полок, чем у этого репозитория, и именно ту поверхность, владеть которой платформенный вендор лучше всего способен — она движется каждый раз, когда двигаются ComfyUI, comfy-cli или партнёрские API. Если вам нужно запустить и поддерживать мою установку, используйте его.

Этот рассматривает вывод как вещь, которой нужно управлять — потому что это часть, за которую наш мяч. Он родился из собственных производственных работ Alienrobot (где граф, который выполняется до, а не конец работы. Здесь ничего не запускает процесс и не тратит кредиты. Вместо этого: верните пиксели модели, прогоните два прохода в изображение, где дрейф не может спрятаться, оцените то, что бриф действительно просит, и держите лучшее на данный момент на диске, чтобы сжатый контекст не мог потерять. Этой части нет ни у кого — не потому, что сложно вызывать /view, а потому, что "заставить агента смотреть и не дать ему построить на регрессе" — это такая дисциплина, а не конечная точка.

этот репозиторий

Comfy-Org/comfy-mcp

Общается с ComfyUI через

его HTTP API (/prompt, /object_info, /view)

субпроцессы comfy-cli (comfy … --json)

Дополнительная зависимость

нет (httpx, pillow)

comfy-cli ≥ 1.14 и установка, о которой он знает

Видит ComfyUI, который вы не устанавливали

да — всё, до чего добирается URL, включая машину, на которой у вас нет доступа к шеллу

частично; некоторые инструменты по своей конструкции работают только локально

Посмотреть результат

get_image, get_video_frame — пиксели возвращаются в модель

fetch_outputs(inline_images=True)

Оценить результат

compare_images (режим разности), image_diff_stats, measure_image (швы тайлов / резкость), video_temporal_stats

Оставить лучший

loop_*: храповик + журнал на диске, откат — вызов инструмента

Исследовать параметр

loop_sweep — один вход, N значений, один вызов, фиксируется в прогоне

vary_workflow — декартово произведение значений слотов в файлы

Проверить граф перед запуском

check_workflow — отсутствующие пакеты, отсутствующие файлы моделей, незаданные обязательные входы, мёртвые связи, нет узла вывода — в одном ответе

validate_workflow + workflow_deps + шаблон local_check

Шаблоны подграфов

разворачиваются и переподключаются (вынесенные виджеты сохраняются)

разворачиваются на стороне клиента

Стоимость обнаружения в токенах

компактная нотация узлов (экономия 93% относительно object_info, 987 узлов); графы FlowZip ~72% дешевле litegraph

не заявленная цель

Установить недостающее

ComfyUI-Manager: install_node_pack, install_model, restart_comfyui, update_comfyui

реестровый install_node, download_model (в фоне, с возможностью отмены), полное обновление/смена версии

От нуля до запуска

это делает агент: comfy_install — промпт, заполняемый с этой машины (существующая установка, этот Python, ускоритель этой машины), и любой неудачный вызов возвращает команды запуска/установки

говорит вам выполнить comfy install в терминале; launch_comfyui / stop_comfyui / switch_comfyui_version управляют уже существующей установкой

Запускать процесс ComfyUI

нет — только перезапуск (через Manager); шеллом владеет агент

субпроцессы comfy-cli, поэтому да

Облачные/партнёрские модели, аккаунты, кредиты

нет, намеренно

auth_login, partner_generate, шлюзы согласия на траты

Управление заданиями

submit_workflow, job_status, cancel_job, get_queue, interrupt

один инструмент job: status / wait / watch / cancel / queue

Поверхность MCP

43 инструмента + 2 промпта + 3 ресурса

39 инструментов

Размер / лицензия

~3 700 строк, MIT

~16 000 строк, AGPL-3.0-or-later или коммерческая

Разработано

Alienrobot — создан для нашей собственной VFX/генеративной работы и используется в ней

команда ComfyUI, вместе с самой платформой

Объём обязательств

цикл: обнаружение, преобразование и оценка результата

вся установка: жизненный цикл, аккаунты, партнёрские API, пакеты

Что выбрать

  • Нет GPUCloud MCP. Ничто локальное не сравнится с оборудованием, которого у вас нет.

  • «Установи, запусти и поддерживай в работе»Comfy-Org/comfy-mcp. Жизненный цикл, партнёрские модели, фоновые загрузки, закрепление версий.

  • «Первый результат работает, а наметанный глаз его отвергает»этот. Шесть пальцев, поплывший фон, жёсткая кромка матов, заметный шов тайла, клип, который кипит. Это цикл, и это сервер, построенный целиком вокруг него.

Они сочетаются: ничто не мешает запускать оба, и имена инструментов не конфликтуют. (А вот имена пакетов конфликтовали — этот тоже короткое время назывался comfy-mcp, и это проигрышный спор с людьми, которым принадлежит пространство имён ComfyUI. Отсюда comfyui-loop-mcp; импортируемый пакет — comfy_loop, и оба можно устанавливать бок о бок.)

Что мы не будем добавлять

Целиком перенимать список функций конкурента — так получаются два посредственных инструмента. То, что здесь взято от них, — это то, что нужно циклу: предполётная проверка, статус заданий, чтение хвоста логов, запас VRAM, обновления. Что остаётся за рамками — намеренно:

  • Аккаунты, кредиты, облачные партнёрские модели. Суть в том, что «ничего не покидает вашу машину, без регистрации, без счётчика». Кредитный шлюз противоречит этому. Если вам нужны Kling или Veo, их сервер делает это правильно, со шлюзами согласия, которые этому репозиторию незачем изобретать заново.

  • Запуск и остановка процесса ComfyUI. HTTP-клиент не может запустить сервер, который не запущен, а направлять его на машину, на которой у вас нет доступа к шеллу, — это поддерживаемый случай, а не крайний. restart_comfyui (через Manager) — честный предел, но «не могу» — не то же самое, что «не поможет»: агент обычно имеет шелл, поэтому недоступный сервер возвращает команды установки/запуска для этой машины и ожидает, что агент их выполнит. Ни этот сервер, ни сервер Comfy-Org не устанавливают ComfyUI за вас (их вариант указывает вам на comfy install в терминале); разница в том, что здесь инструкции возвращаются через вызов инструмента и адресованы тому, кто может по ним действовать.

  • Сохранение / публикация / воспроизведение воркфлоу как сервис. save_workflow отдаёт вам файл, прошедший проверку round-trip. Где он живёт после этого — ваше дело.

Три примитива MCP в привязке к циклу

Первобытный

Что он открывает

Шаг цикла

Инструменты

check_comfyui, list_nodes, get_node, list_models, search_models, search_templates, get_template

Открой, не угадывай

find_missing_nodes, install_node_pack, install_model, restart_comfyui, update_comfyui

Расширь (установи, что нужно шаблону)

check_workflow

Проверь до того, как будет задействован GPU

inflate_workflow, flowzip_to_api

Сожми (токены, экономные графы)

template_slots, run_template

Запусти заведомо" good template" с переопределениями (без графа в контексте)

upload_image, submit_workflow

Сборка → Запуск

get_result, get_image (возвращает реальное изображение)

Смотри

loop_start, loop_record, loop_sweep, loop_best, loop_ledger, loop_finish, loop_report

Рэтчет + журнал, на диске

system_status, get_queue, job_status, cancel_job, interrupt, free_vram, comfyui_logs

Контроль

Подсказки

comfy_loop (полный метод), comfy_skill (компактный), comfy_install (bootstrap)

Вся дисциплина, одна команда

Ресурсы

comfyui://object_info (live), comfyui://loop-method, comfyui://skill

Доки + правда

Три вещи делают его циклом, а не просто API-обёрткой:

  1. get_image возвращает отображаемый результат модели — это шаг, который делает «взгляд» реальным. Модель видит реальные пиксели.

  2. Ответы инструментов продвигают цикл. submit_workflow при успехе говорит "верно, не точно — теперь СМОТРИ"; при отклонении говорит "это не итерация — фупукни и дай-верной исправь и повторно отправь." get_result заканчивается директивой: "не останавливайся здесь — ПОСМОТРИ, Затем поменяй один параметр или объяви, что краткое выполнено."

  3. Инструкции сервера несут политику предпочтения цикла (см.ниже), которую клиент внедряет при подключении.

Политика предпочтения цикла (инструкции сервера)

При рукопожатии сервер говорит агенту когда зацикливаться, а когда нет:

  • ВСЕГДА делай открытие из живого, актуального API перед записью; проверь выполнением; node_errors — это не итерации — исправь и отправь снова.

  • ПРЕДПОЧИТАЙ ЦИКЛ всегда, когда натренированный глаз может отвергнуть результат — композиция/количество, качество сходства, матовый/кромка, апскейл/реставрация, текстура швов, временная стабильность видео, «сделай правильно».

  • RATCHET — держи лучшее; сохраняй изменение только если оно побило прежнее, иначе откатись и куй другое другое; поворотный параметр → схема → работа на плапе. Проверка на объективном тесте только там, где есть определение; иначе — действуй на глаз.

  • SKIP цикл только для механических задач (конвертация формата, чистый API и нулевой API'news) and текст: * — Let's keep the original URL! Wait, construct: SKIP зацикливайся только для механических задач (конвертация формата, чистый API-запрос, или когда пользователь явно хочет просто исполняемый граф).

  • Когда не уверен, сделай как минимум один проход «посмотри-и-критикуй», прежде чем объявить готовым.

Механизм Rachet/ledger/pivot адаптирован из автоцикла Карпатого, настроен для субъективной работы с изображениями (объективный граф только там, где есть; человек чек-поинт для подписи, а не бег навсегда). Эти строки политики живут в серверных instructions + ответы инструментов; полный метод живёт в comfy_loop фразе, который служит репозиторию loop дока слабо.

MCP не может заставить поведение — он показывает возможности и подсказки. Именно поэтому цикл становить сильный, хорошо ограниченный дефолт, который агенту многократно повторяют языках. Для генеральной гарантии в Claude установи тот же текст как всегда включённый скилл:

mkdir -p ~/.claude/skills/comfyui-workflows
cp comfy_loop/docs/SKILL.md ~/.claude/skills/comfyui-workflows/

Skill = вечновключённая дисциплина, MCP = инструменты, которыми он управляет. Это тот же файл, который comfy_skill иконостал, позволяет им не различаться — и он отзывает к comfy_install для загрузки, а не собственный устаревший рецепт.


Инструмент

Discover

Инструмент

Аргументы

Возвращает

check_comfyui

Шаг 0 цикла и настоящая предварительная проверка. Если ничего не отвечает, возвращается что при этом сделать — применительно к этой машине: запустить найденную установку, создать новую или открыть туннель для удалённого URL (см. Устранение неполадок). Если ответ приходит, она всё равно называет, что стоит между текущим состоянием и рабочим рендером: torch на CPU (любой рендер работает, ~50x медленнее, и ничто не сообщает об ошибке), нет весов на диске (полностью функциональный ComfyUI, который не может отрендерить ничего), нет ComfyUI-Manager (с двумя командами для исправления, поскольку restart_comfyui сам является маршрутом Manager). В остальных случаях — количество узлов, версии ComfyUI/torch, свободная/общая VRAM по каждому устройству, наличие ComfyUI-Manager (нет Manager = нет установок, нет перезапуска) и занята ли очередь — либо явный ответ «недоступен».

list_nodes

keyword=""

Узлы, у которых класс или отображаемое имя совпадает (строгое надмножество поиска только по классам в скилле). При опущенном keyword возвращается количество.

get_node

class_name, verbose=False

Интерфейс одного узла в компактном виде @Name +req:T ?opt:T -out:T (примерно на 90 % меньше токенов); verbose=True — полный JSON (значения по умолчанию, мин/макс).

list_models

class_name, input_name=""

Фактические файлы моделей, которые загрузчик предлагает на диске (источник истины), считанные из его перечисления; поддерживается и устаревший список, и кодировка COMBO. Имя файла никогда не выдумывается.

search_models

keyword="", model_type=""

Каталог загружаемых моделей (список ComfyUI-Manager) — найти чекпоинты/LoRAs/VAEs/апскейлеры, которых у вас ещё нет; для каждого результата указано, установлен ли он уже. Установка через install_model.

search_templates

keyword="", source="online"

online (по умолчанию): полный открытый каталог (Comfy-Org/workflow_templates, ~550), поиск по имени/названию/описанию вживается из GitHub — без установки. installed — только то, что есть в этой установке ComfyUI.

get_template

name, pack="", source="online", fmt="flowzip"

Получает шаблон. fmt="flowzip" (по умолчанию) — компактный текст FlowZip (в среднем ~72 % меньше, чем сырой JSON litegraph); fmt="json" — полный litegraph. В любом случае это litegraph — преобразуйте через flowzip_to_api перед отправкой. Онлайн-шаблон может требовать узлы или модели, которых у вас нет, — проверьте через find_missing_nodes.

inflate_workflow

flowzip

Разворачивает текст FlowZip обратно в полный JSON litegraph.

flowzip_to_api

flowzip

Преобразует FlowZip/litegraph → формат API/prompt для submit_workflow: разрешает связи, сопоставляет значения виджетов с поименными входами (с приведением типов) и прослеживает транзитные соединения Reroute до реального источника — у Reroute нет backend-класса, поэтому связь, указывающую на него, нужно переподключить, иначе API-граф будет ссылаться на несуществующий узел (отвязанные и циклические цепочки попадают в отчёт, а не вызывают сбой). Субграфы разворачиваются, а не пропускаются: их внутренности приходят в неймспейсе <instance>:<inner>, переподключаются через границу, с сохранёнными вынесенными значениями виджетов. Неизвестные классы по-прежнему пропускаются и фиксируются в отчёте. Проверьте результат перед запуском; check_workflow поймает остальное, прежде чем вы потратите GPU-минуту.

template_slots

name, source="online", pack=""

Перечисляет переопределяемые входы шаблона (node_id → параметры + текущие значения) без загрузки полного графа, включая параметры внутри субграфов. Также возвращает текст собственных Note/MarkdownNote автора, где и живут триггерные слова и нужные веса, и приводит его как недоверенные данные, а не как указания.

run_template

name, overrides={}, source="online", pack=""

Запускает проверенный шаблон с переопределениями {node_id: {input: value}} — получение → преобразование → применение → отправка, не загружая граф в контекст. Затем get_result/get_image. Шаблоны с субграфами тоже работают — их внутренности разворачиваются по пути.

Расширение (установить то, что требует шаблон, — требуется ComfyUI-Manager на хосте)

Инструмент

Аргументы

Результат

find_missing_nodes

name, pack="", source="online", workflow=None

Сверяет классы узлов с /object_info и сопоставляет каждый отсутствующий узел с ID устанавливаемого пакета. Работает с шаблоном или с уже имеющимся у вас workflow (в формате API или litegraph), рекурсивно обходя подграфы. Только чтение.

install_node_pack

pack_id, version="latest"

Устанавливает пакет через очередь ComfyUI-Manager (доверенный реестр, без произвольного кода). Затем требуется перезапуск.

install_model

name

Загружает модель из каталога (из search_models) в правильную папку models/<type>/ через Manager. Перезапуск не нужен — проверьте с помощью list_models.

restart_comfyui

Перезапускает ComfyUI (через Manager), чтобы новые узлы зарегистрировались в /object_info. Честно сообщает об ошибке: HTTP ответ не означает, что перезапуск произошёл.

update_comfyui

target="comfyui"|"nodes"|"all"

Обновляет ядро ComfyUI и/или все установленные пакеты через очередь Manager, затем сообщает, что требуется перезапуск. Запускает сторонний код — сначала скажите об этом. Не в середине цикла: это переносит поведение узлов под храповик, ранние проходы которого измерялись на старом коде.

Проверка — всё, что можно узнать до того, как в дело вступает GPU

Инструмент

Аргументы

Результат

check_workflow

workflow (словарь API или litegraph)

Один ответ на вопрос «запустится ли это на этой машине»: классы узлов, которых у вас нет (разрешаются в ID пакетов в том же проходе), имена файлов моделей, которых нет в списке этого загрузчика (с ближайшим, что у вас есть), не заданные обязательные входы, соединения, указывающие на отсутствующие узлы, значения вне объявленного диапазона узла и граф без выходного узла — который запускается зелёным и не даёт ничего посмотреть. /prompt тоже находит их: по одной на каждый запрос, и отсутствующий чекпойнт выглядит точно так же, как отсутствующий пакет. Чисто здесь означает правильную структуру, а не корректность — вам всё равно нужно смотреть на пиксели.

Сборка → Запуск → Просмотр

Инструмент

Аргументы

Результат

upload_image

path, overwrite=True

Загружает локальное изображение в каталог input/ ComfyUI; возвращает имя, которое нужно указать в узле LoadImage.

submit_workflow

workflow (словарь в формате API), client_id

При успехе: prompt_id + подсказка «теперь СМОТРИ». При неудаче: node_errors + подсказка «исправьте этот узел и отправьте снова».

get_result

prompt_id, timeout_s=120

Опрашивает /history; возвращает filename/subfolder/type каждого вывода, сообщает, сколько узлов было обслужено из кэша (при фиксированных зернах повторно выполняются только узлы ниже по потоку от вашего изменения — итерации намеренно дёшевы) + указание смотреть и итерировать. Выполнение, прерванное на середине, возвращается как узел, вызвавший сбой, и его исключение (при OOM даётся подсказка «free_vram, затем снизьте разрешение») вместо вводящего в заблуждение «завершено, но выходные данные не созданы».

get_image

filename, subfolder="", image_type="output"

Фактическое изображение, возвращаемое модели, чтобы она могла оценить пиксели.

compare_images

filename_a, filename_b, mode="side_by_side"|"difference", amplify=1.0

Сравнение в виде изображения. difference = 0.5+0.5*(a−b): идентичные области отображаются ровным средне-серым, так что отклонения, незаметные глазу, бросаются в глаза. У MCP-клиента нет командной оболочки для ffmpeg — без этого «сравнить свои результаты» невыполнимо.

image_diff_stats

filename_a, filename_b

Средняя/максимальная абсолютная разница + % изменённых пикселей — контроль «я изменил только то, что хотел». Ловит «мелкую правку», которая незаметно переписывает кадр.

measure_image

filename, metric="sharpness"|"tile_seam"|"brightness"

Объективная оценка для храповика, когда в постановке задачи есть объективный тест. tile_seam сравнивает стык при зацикливании с внутренним стыком (~1.0 = действительно тайлы, >2 = настоящий шов — то, что глаз пропускает); sharpness = энергия краёв, растёт с реальной детализацией и падает, когда проход лишь смягчил изображение.

video_info

filename, subfolder=""

Размеры, fps и количество кадров для видеовыхода. Вызывайте его перед индексацией кадров — вам нужен диапазон, и нужно знать, одинаковой ли длины два клипа, которые вы собираетесь сравнивать.

get_video_frame

filename, frame=0, subfolder=""

Один кадр видеовыхода по индексу кадра, возвращаемый как изображение. Видеочасть get_image: get_result уже сообщает о gifs/videos, но все остальные инструменты LOOK работают только с Pillow и не могут декодировать mp4 — поэтому для графов VHS/AnimateDiff/WAN команда «вызовите get_image и СМОТРИ» была невыполнима.

compare_video_frames

filename_a, filename_b, frame=0, mode="side_by_side"|"difference", amplify=1.0

То же сравнение, но на одном и том же индексе кадра в обоих клипах. Сравнение по временно́й метке незаметно ломается, как только длины расходятся (ограничение кадров, обрезка, другой fps) — вы с полной уверенностью сравниваете два не связанных между собой момента. При несовпадении числа кадров предупреждение впечатывается в изображение, а не остаётся текстом, который можно пробежать глазами.

video_temporal_stats

filename, stride=1, max_frames=120, roi=None

Нестабильность от кадра к кадру в виде числа — объективный критерий для вопроса «не кипит ли оно?», чего не может показать ни один отдельный кадр. Это наивная разница между соседними кадрами, поэтому реальное движение учитывается: используйте её на ОДНОМ И ТОМ ЖЕ клипе до/после изменения или передайте roi на область, которая должна быть статичной. Проверено на известной паре (сырой покадровый своп 3.53 → сглаживание оптическим потоком 2.38).

Цикл как устойчивое состояние — храповик — это инструмент, а не упражнение на память. Длинный цикл сжимается; если лучший на данный момент результат и журнал живут только в контексте модели, храповик молча перестаёт срабатывать, модель повторяет изменения, которые уже отвергла, и может выдать регрессию как финальный результат. Поэтому они живут на диске.

Инструмент

Аргументы

Результат

loop_start

brief, gate=""

Открывает запуск → run_id. gate — это объективный тест, если он есть в брифе ("должно бесшовно тайлиться", "ровно 3 яблока").

loop_record

run_id, change, outcome, graph=None, score=None

Записывает проход и применяет храповик. "better" сохраняет этот граф как новый лучший (откатываемый). "worse"/"same" сразу возвращают лучший граф, так что откат — это один вызов, плюс список уже опробованных изменений, чтобы не повторять тупик. Если оба прохода имеют объективный score, число переопределяет вердикт — модель, которая хочет закончить работу, назовёт регрессию "better".

loop_sweep

run_id, workflow, node_id, input_name, values

Прогоняет один и тот же граф по не более чем 8 значениям одного входа за один вызов — для значений, до которых не достучаться рассуждением (denoise, cfg, strength). Всё остальное держится одинаковым, так что результаты отличаются ровно одной переменной. Таблица значение → prompt_id записывается в запуск, так что сжатая модель восстанавливает её из loop_ledger, а не перезапускает свип. Свип создаёт один записанный проход, а не N.

loop_best

run_id

Лучший на данный момент граф. Источник истины после сжатия — он, а не ваши воспоминания.

loop_ledger

run_id

Журнал цикла только на добавление: каждый проход, что изменилось, что это дало. Восстанавливает нить после сжатия; это также журнал, который вы передаёте пользователю при сдаче.

loop_finish

run_id, summary=""

Закрывает запуск на контрольной точке сходимости; возвращает финальный журнал + лучший граф для предъявления при сдаче.

loop_report

run_id, out_path=""

Отрисовывает весь запуск одной самодостаточной HTML-страницей — каждый проход, что было сохранено, что откачено, миниатюры встроены в base64, так что она открывается при выключенном ComfyUI. Финальное изображение ничего не доказывает; именно выброшенные проходы показывают, что цикл сошёлся.

Доставка

Инструмент

Аргументы

Результат

save_workflow

workflow (API dict), name="", save=True

API → UI/litegraph, чтобы человек мог открыть и отредактировать его; сохраняется в список воркфлоу ComfyUI. Проверка round-trip: результат конвертируется обратно в API и сравнивается с вашим входом, потому что widgets_values позиционен и незаметная ошибка на единицу сдвигает параметры — правдоподобный, но неверный файл хуже, чем никакой.

Управление

Инструмент

Аргументы

Результат

system_stats

Устройство / VRAM (полезно при настройке разрешения/батча или после OOM).

get_queue

Что выполняется и что в очереди.

job_status

prompt_id

Где находится один запуск без блокировки: в очереди (с его позицией), выполняется, завершён с N результатами — или ошибка выполнения, которая его остановила. То, что нужно, когда в полёте несколько запусков — например, loop_sweep.

cancel_job

prompt_id=""

Убирает один ожидающий запуск из очереди или прерывает его, если этот id сейчас выполняется. Без id очищает очередь ожидания, не трогая выполняющуюся задачу. interrupt — грубая версия.

interrupt

Отменяет текущий запуск.

free_vram

unload_models=True

Выгружает модели и сбрасывает кэш исполнителя (POST /free). Собственная дешевизна цикла здесь работает против вас — кэшированные проходы занимают VRAM, — так что это дешёвый вариант, который стоит попробовать, прежде чем переписывать граф, словивший OOM. Не мгновенно (выполняется на следующей итерации воркера очереди) и не может затронуть VRAM другого процесса; подтвердите через system_stats.

comfyui_logs

lines=60, grep=""

Отдаёт последние строки собственного лога ComfyUI, где сбои сами себя объясняют: трейсбек внутри узла, OOM, кастомный узел, не импортировавшийся при запуске (и именно поэтому его класс отсутствует в object_info).

Промпты: comfy_loop (полный автономный метод) и comfy_skill (компактный навык) — оба подаются дословно из markdown репозитория, плюс comfy_install — рецепт начальной настройки, сгенерированный под машину, на которой работает сервер: установка, если она уже есть; интерпретатор, из которого собирать venv (собственный интерпретатор сервера, так что Python никогда не является обязательным условием для решения задачи); наличие comfy-cli и git; и сборка torch, которая действительно нужна ускорителю этой машины (CUDA / ROCm / MPS / нет). Сервер ничего из этого выполнить не может; агент может — и именно к нему это обращено. Ресурсы: comfyui://object_info (актуальный полный дамп), comfyui://loop-method, comfyui://skill.


Посмотрите, как цикл работает в действии

Полностью выполнен через этот MCP-сервер на реальном ComfyUI (RTX 4090, SD1.5), бриф: "чёткое, резко сфокусированное студийное макрофото одного красного яблока на тёплом деревянном столе, тонкая текстура кожицы, богатая детализация". Сид зафиксирован на 42, так что каждый проход меняет ровно одну ручку, и эффект можно приписать именно ей. Объективная метрика — дисперсия лапласиана (стандартная мера резкости/фокуса).

Пять проходов цикла слева направо: мягкое плоское яблоко становится чётким, насыщенным, с богатой текстурой

Проход

Одно изменение

Резкость (varLap)

Вердикт на глаз

1

базовый — 6 steps, cfg 2.5

425

Мягкое, плоское, матовое. Самое слабое.

2

steps 6 → 24

1204

Резче — но высокое число объясняется текстурой дерева, кожица яблока всё ещё пластиковая.

3

cfg 2.5 → 7.5

515

Яблоко становится насыщеннее (цветастее, на кожице крапинки) — метрика падает, потому что фон смягчился.

4

euler → dpmpp_2m + karras

740

Победитель. Чёткий блик, видны лентицели, правдоподобное дерево.

5

steps 24 → 36

661

≈ проход 4. Убывающая отдача → стоп.

Урок, на котором построен цикл, зафиксирован вживую: метрика достигла пика на проходе 2, но проход 2 — не лучшее изображение — его оценка оказалась завышена из‑за фоновой текстуры, а не из‑за деталей яблока. Победитель (проход 4) был выбран взглядом. Зелёное число — валидное, а не верное. (example_apple.png — это результат прохода 4.)

…и вторая половина: когда ошибается модель

Яблоко показывает, почему нельзя слепо доверять метрике. Этот запуск показывает, почему нельзя слепо доверять модели — а это и есть вся причина, по которой храповик это инструмент, а не пометка в промпте.

Задача: «бесшовная тайловая текстура брусчатки — без видимого шва на стыке краёв», с объективным контролем (measure_imagetile_seam). Сид одинаковый на всех проходах, так что каждый проход меняет ровно одну вещь. Каждая текстура ниже размножена 2×2 — шву совершенно негде спрятаться.

Три прохода, размноженные 2×2: базовый вариант со швами, циклический тайлинг устраняет швы, x_only возвращает шов и откатывается

Проход

Одно изменение

tile_seam

Храповик

1

базовый SDXL

h 1.77 · v 1.23 → пограничный

оставлен (первый)

2

SeamlessTile + MakeCircularVAE

h 0.78 · v 1.12 → бесшовно

НОВЫЙ РЕКОРД

3

tilingx_only

h 1.03 · v 1.56 → швы вернулись

ОТКАТЕН

На проходе 3 модель сообщила loop_record, что результат — "better". Это было не так: x_only тайлит по горизонтали и оставляет вертикальный стык сломанным — на правом изображении это видно: камни срезаны ровно у горизонтального шва. Объективный показатель пересил заявление, восстановил проход 2 и вернул хороший граф обратно.

Это тот сбой, для предотвращения которого и существует этот сервер: агент, который хочет закончить, назовёт регрессию улучшением. Если бы «лучший результат на данный момент» жил в контексте модели, а не на диске, эта регрессия стала бы финальным ответом.


Установка

Короткая версия: попросите своего агента сделать это. Вставьте это в Claude Code (или любой MCP-клиент с оболочкой) и остановитесь:

Настройте ComfyUI loop MCP из https://github.com/huikku/comfyui-loop-mcp — зарегистрируйте его у моего клиента, а также установите и запустите ComfyUI, если он ещё не запущен.

У него есть всё необходимое, чтобы сделать это без вас: регистрация сервера — это одна команда claude mcp add, а после подключения промпт comfy_install возвращает бутstrap для вашей машины — существующий ComfyUI для запуска, интерпретатор, из которого собрать venv, сборку torch, которая действительно нужна вашей видеокарте, ComfyUI-Manager и место, куда класть модели. Затем check_comfyui называет всё недостающее (нет weightsuous, torch на CPU, нет Manager) как то, что агенту нужно исправить, а не чем-то просто ответственность.

Если вы предпочтёте вставить конфиг, а не читать описания, — сервер запускается прямо из GitHub: ничего не нужно клонировать, ничего не нужно pip install:

{
  "mcpServers": {
    "comfyui": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/huikku/comfyui-loop-mcp", "comfyui-loop-mcp"],
      "env": { "COMFYUI_URL": "http://localhost:8188" }
    }
  }
}

Claude Code — одной строкой:

claude mcp add comfyui -- uvx --from git+https://github.com/huikku/comfyui-loop-mcp comfyui-loop-mcp

Склонируйте репозиторий вместо этого, и .mcp.json уже на месте — Claude Code предложит сервер при первом открытии, вообще без команд. После добавления переподключите клиент; MCP-серверы считываются в момент подключения.

Для разработки на нём:

git clone https://github.com/huikku/comfyui-loop-mcp && cd comfyui-loop-mcp
pip install -e .            # or: uv tool install --editable .

Требуется Python ≥ 3.10 и доступный ComfyUI. Устанавливает mcp[cli], httpx, anyio, pillow. Работает с MCP SDK 1.x и 2.x — в 2.0 FastMCP переименован в MCPServer, а хелпер Image перенесён, и сервер импортирует его в любом случае.

Раньше было установлено как comfy-mcp? Это имя принадлежит серверу Comfy-Org на PyPI, поэтому этот сервер теперь называется comfyui-loop-mcp (импортируемый пакет — comfy_loop, команда — comfyui-loop-mcp). Сначала выполните pip uninstall comfy-mcp и обновите конфигурацию MCP-клиента. Уже имеющиеся на диске прогоны цикла находятся автоматически — старый каталог ~/.comfy-mcp/runs продолжает использоваться, пока вы не укажете COMFY_LOOP_STATE_DIR в другом месте.

Всегда активная дисциплина (Claude Code)

Метод также устанавливается как навык, поэтому он загружается по триггерным словам, а не ждёт, пока его попросят — попросите агента сделать это тоже, либо:

mkdir -p ~/.claude/skills/comfyui-workflows
cp comfy_loop/docs/SKILL.md ~/.claude/skills/comfyui-workflows/

Файл используется тот же самый, что раздаёт промпт comfy_skill, так что навык и сервер не могут разойтись.

Конфигурация

Переменная окружения

По умолчанию

Назначение

COMFYUI_URL

http://localhost:8188

Ваш сервер ComfyUI

COMFYUI_ONBOARDING_DIR

корень репозитория над этим пакетом

Каталог, где промпты comfy_loop / comfy_skill читают свою разметку

COMFYUI_TEMPLATES_REF

main

Git-ссылка на Comfy-Org/workflow_templates, которую считывает онлайн-каталог шаблонов

COMFYUI_TEMPLATES_LIVE

не задано

Задайте 1, чтобы получать самый свежий индекс каталога из GitHub вместо встроенного сжатого снимка

COMFY_LOOP_STATE_DIR

~/.comfyui-loop-mcp/runs

Где живут храповик и журнал. Откат к прежнему ~/.comfy-mcp/runs (до переименования), если запуски циклов уже там

Подключение к удалённому ComfyUI

ComfyUI обычно привязывается к 127.0.0.1, поэтому ComfyUI на другой машине недоступен по сети по умолчанию. Два варианта:

  • SSH-туннель (проще всего, ComfyUI остаётся закрытым): пробросьте порт и оставьте COMFYUI_URL на localhost:

    ssh -N -L 8188:localhost:8188 your-remote-host
    # COMFYUI_URL stays http://localhost:8188
  • Привяжите ComfyUI к сети и указывайтесь на него напрямую (делайте это только в доверительной сети — это открывает API без аутентификации):

    python main.py --listen 0.0.0.0 --port 8188
    # COMFYUI_URL=http://<remote-ip>:8188

Использование

  1. В вашем агенте загрузите промпт comfy_loop (или позвольте ему прочитать ресурс comfyui://loop-method), чтобы подтянуть полный метод. Если ваш клиент внедряет инструкции сервера, политика «предпочитать цикл» уже активна.

  2. Поставьте цель. Потом он выполнит check_comfyuilist_nodes / get_node / list_models → построит JSON-схему API → submit_workflowget_resultget_image, затем будет критиковать и повторять — по одному изменению за проход — пока не сможет назвать ни одного дефекта, после чего представит результат на утверждение.

Устранение неполадок

  • «ComfyUI is NOT reachable» — ответ — это набор инструкций, а не жалоба, но они адресованы агенту, у которого есть оболочка, которой у этого сервера нет: агент ищет ComfyUI на этой машине ($COMFYUI_PATH, рабочую область comfy-cli, ~/ComfyUI, ~/comfy, ~/code, ~/github, /opt) и либо возвращает команду запуска с использованием собственного venv-python этой установки, либо, если установки нет, дает последовательность клонирование + venv + Manager + запуск. Если COMFYUI_URLудалённый, он намеренно не предлагает установить всё локально — от этого просто останется второй, лишний ComfyUI на той машине, — а вместо этого выдаёт SSH-туннель. Такой ответ возвращает каждый инструмент, а не только check_comfyui; совет приложен на транспортном уровне.

  • «Node/model not found» — установите пак/модель на стороне ComfyUI, затем перезапустите ComfyUI, чтобы /object_info увидел его (до этого момента API устаревший).

  • get_image returns nothing — убедитесь, что в графе есть узел SaveImage / PreviewImage; get_result перечисляет то, что было реально создано.

  • install_node_pack заблокирован / ничего не делает — инструментам установки нужен ComfyUI-Manager на хосте, и уровень безопасности Manager должен разрешать установку через API. После установки restart_comfyui обязателен, чтобы /object_info показал новые узлы.

  • find_missing_nodes выбирает «не тот» пак — несколько паков могут экспортировать узел с одинаковым именем; при совпадении берётся первый найденный в реестре. Если установка не даёт нужный класс, проверьте выбранный пак и установите явно правильный.

Лицензия

MIT.

Install Server
A
license - permissive license
B
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • MCP server for Hailuo (MiniMax) AI video generation

  • MCP server for Luma Dream Machine AI video generation

  • MCP server for Flux AI image generation

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/huikku/comfyui-loop-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server