Skip to main content
應用是為不帶畫布的一鍵執行而打包的工作流程。它是你機器上的一個目錄,裡面放四樣 東西: 包住在 ComfyUI 使用者目錄下的 <user>/comfyui-mcp-panel/apps/<app-id>/ —— 故意不是工作流程目錄,這樣隱藏的應用 永遠不會出現在工作流程瀏覽器裡。
應用自成一層的原因:畫布是執行你已經信任的工作流程的錯誤介面。帶五個帶標籤欄位的表單 才是對的,也是手機或代理根本能驅動的唯一介面。
儲存和執行實作只有一份 —— 面板包的 HTTP 路由 (/comfyui_mcp_panel/apps/*)。桌面面板、手機 Apps 分頁,以及 apps_* MCP 工具都是它的用戶端,所以無論從哪啟動,應用行為都一樣。

要求

應用由面板包comfyui-mcp-panel)提供,不是單靠 MCP 伺服器。如果你 ComfyUI 上的 包早於這項功能,apps 配合 action:"list" 會以明確的 「此 ComfyUI 上的面板包早於 Apps 功能」 訊息失敗 —— 更新包並重新啟動 ComfyUI。

把工作流程轉換成應用

在面板裡,Apps 工具列按鈕(Civitai 旁邊)開啟應用網格。轉換當前開啟的工作流程會做 三件事:
  1. 如果工作流程已經帶著一份,就匯入 ComfyUI APP 模式設定,否則用啟發式挑選輸入 和輸出(提示控制項、種子、取樣器設定;SaveImage 類節點當輸出)。匯入的 APP 模式 輸入在任何節點型別上都會被尊重,所以自訂節點端點能熬過轉換。
  2. 掃描相依 —— 節點圖需要的模型和自訂節點包 —— 寫進 manifest.deps
  3. 以 API 格式快照提示。轉換時的控制項值變成每個輸入的表單 default
appMode.inputs 裡的每個輸入帶著 nodeIdwidgetlabel,以及 textnumbercombotoggleimagemodelkind;combo 還帶著 choices。執行表單就是 從這些算圖出來的 —— 桌面和手機都是。

隱藏工作流程

hideWorkflow 會把 workflow.json 從包裡完全拿掉,於是節點圖不會交給執行或安裝這個 應用的人。
hideWorkflow 是混淆,從來不是安全。 透過 ComfyUI 自己的 /history 執行應用的 人仍然能看到 API 提示,應用安裝的模型和自訂節點也會暴露節點圖的相依。把它當成 「別弄亂我的工作流程瀏覽器」,而不是保護一份你洩漏不起的節點圖。

執行應用

一次執行會把你的表單值打補丁進已存快照,再把結果排入佇列。補丁鍵是 "<nodeId>.<widget>" —— 例如 {"6.text": "a cat", "3.seed": 42}。鍵只在第一個點上切開,所以自己就 帶點的控制項名(LoRA 堆、lora_1.model)會保持完整。 打補丁是嚴格的:指向快照裡不存在的節點或輸入的鍵是硬錯誤,不是安靜跳過。對不上 意味著清單已經和快照脫節,大聲失敗比帶著過期值跑下去更好。你省略的輸入保留轉換時的 預設值。 執行回傳一個 prompt_id;輪詢它拿狀態(pendingrunningdone,如果 ComfyUI 從沒聽說過它則是 unknown),以及按每個輸出節點分組的輸出。

在 RunPod 執行個體上執行

面板的 Run on RunPod 路徑以幹跑模式重用同一套補丁引擎:面板要打好補丁的提示 但不在本機排入佇列,把釘死的相依推到執行個體上,再把提示排入佇列到那邊。
影像輸入的應用拒絕在執行個體上跑。上傳落在本機 ComfyUI 上,執行個體夠不到 —— 所以面板會誠實拒絕,而不是排入佇列一次會因缺檔案失敗的執行。

發布與 Explore

面板的 Explore 分頁是一個公共登錄庫(Cloudflare Worker,後面是 D1 + R2),帶 熱門 / 最新 / 最多星清單和搜尋。熱門是 7 天 stars * 3 + runs。發布會上傳整個包 —— 清單、提示、未隱藏時的工作流程、縮圖 —— 掛在以 sha256 為鍵的創作者身份下。 從 Explore 安裝時會先彈出相依同意對話框:應用的 deps報告的,從不靜默安裝。 你點一張卡片,不會因此在你機器上裝模型或自訂節點包。
pricing_jsonhosted_only 存在於清單 schema 裡,並原樣透傳,但沒有東西讀它們。 它們給一份僅設計階段的變現預留空間 —— 今天沒有付費應用行為。

apps MCP 工具

一個工具,五個動作,全是面板 Apps API 上的薄代理。它是無畫布的那一面:手機 App 和直接驅動的代理用的就是它。它在協調器的 call_tool 白名單上 —— list/get/ run_status 是隻讀的,run 帶著和 enqueue_workflow 一樣的風險姿態(它排入佇列的是使用者 顯式點過的任務)。

參數

action 是 schema 裡唯一必填的參數 —— 每個動作需要不同的子集,所以其餘在 schema 裡 都是選用的,是否存在由處理器強制,並點名它缺的欄位。 prompt_id 的形狀約束會強制兩次 —— 在 schema 邊界,以及在處理器內部再一次 —— 因為這個 id 會插進 URL 路徑。即使呼叫方繞過 schema,形狀像路徑穿越的「prompt id」也 絕不能到達 URL 構建器。 按工具生成的 schema 參考請看應用工具

從登錄庫匯入

action:"import" 在服務端拉取登錄庫包,並把它建立成本機應用。登錄庫 id 變成本機 id,所以再匯入一個你已經有的應用會報告 id 衝突,而不是複製一份。縮圖住在單獨的 登錄庫端點,會分開拉取並轉發,於是裝好的應用還留著卡片圖。 相依不會被安裝。工具回傳清單裡的 deps,好讓呼叫方報告它們,並讓使用者故意去裝。
registry_url 是允許清單,不是隨便一個 URL。拉取發生在伺服器上,所以任意 URL 會是 SSRF 原語 —— 回送或區域網地址,或重定向進其中一個的公網 URL。除非操作員透過 COMFYUI_MCP_REGISTRY_URLS(逗號分隔,給開發 / 預發用)把額外源加入允許清單,否則 只接受預設公共登錄庫。重定向會被直接拒絕,而不是跟隨。

限制與校驗

你實際會撞上的東西: 你會注意到的校驗:
  • 應用 id 必須是 uuid。 其他任何東西都會在路徑建好之前被拒絕,解析後的包路徑還會 再檢查是否落在應用根目錄之內。
  • 提示必須是 API 格式 —— 數位元組點 id 鍵,每個節點是 {class_type, inputs} 物件。 UI 格式的節點圖會被拒絕。
  • 除非設定了 hideWorkflow,否則需要 UI 工作流程
  • 建立已存在的應用是衝突,不是覆寫。
  • 部分清單更新真的是部分的。 發布或隱藏應用只發送它自己的欄位,不會抹掉你的名稱、 描述或 appMode
  • 未知清單鍵會被丟掉,除了保留的透傳欄位,這樣更舊的機器會忽略它不認識的欄位, 而不是失敗。
應用根目錄可用 COMFYUI_MCP_APPS_DIR 覆寫(主要用於測試);預設從 ComfyUI 自己的 使用者目錄派生,所以便攜安裝也能熬過去。

在手機上

手機 App 帶了一個真正的 Apps 分頁 —— 不是預覽。它有兩半:
  • My Apps —— 裝在你機器上的應用,透過橋接用 action:"list" 列出。點開一個會開啟 生成的執行表單,用 action:"run" 排入佇列,並每 2 秒輪詢 action:"run_status" (上限 30 分鐘),直到輸出算圖出來。
  • Explore —— 公共登錄庫,從手機直接走 HTTPS(沒有橋接那一跳,所以配對之前就能 瀏覽)。安裝走另一個方向:機器自己透過 action:"import" 拉取包。
這是手機能做、聊天做不到的最清楚的一件事 —— 跑一條真實工作流程,帶真實輸入,視野裡 完全沒有畫布。

參見