ComfyUI Subgraphs, Subgraph Blueprints, and App Mode: creating/publishing subgraphs, why Blueprint instances are snapshots not live refs, turning a workflow into a form UI. Use when deciding how to package a workflow stage.
Scanned 9/3/2026
Install to Claude Code
npx -y skills add laurigates/claude-plugins --skill comfy-subgraphs-app-mode --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Comfy Subgraphs App Mode?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/laurigates-comfy-subgraphs-app-mode)More formats (shields.io, HTML) on the badges page.
---
created: 2026-07-07
modified: 2026-07-07
reviewed: 2026-07-07
name: comfy-subgraphs-app-mode
description: >-
ComfyUI Subgraphs, Subgraph Blueprints, and App Mode: creating/publishing subgraphs, why Blueprint instances are snapshots not live refs, turning a workflow into a form UI. Use when deciding how to package a workflow stage.
allowed-tools: Bash, Read, Grep, Glob
---
# comfy-subgraphs-app-mode
Three frontend features for reusing and simplifying workflows, each
**version-gated**:
| Feature | Frontend gate |
|---|---|
| Subgraphs (group → super-node) | 1.24.3+ |
| Subgraph **Parameters Panel** ("Edit Subgraph Widgets") | 0.3.66+ |
| Subgraph **Blueprints** (publish to node library) | 1.27.7+ |
| **App Mode** (a.k.a. "linear mode") | 1.41.13+ |
Check the running frontend if any of these ever appear missing:
```sh
<venv>/bin/python -c "import comfyui_frontend_package as p; print(p.__version__)"
```
The editor-side mechanics (the JSON shape of `definitions.subgraphs[]` and
its internal link table) live in **`comfy-workflow-json`** — that skill is
the authority for **programmatic** subgraph edits. This skill is about the
**interactive** features and what they mean for reuse.
## When to Use This Skill
| Use this skill when... | Use instead when... |
|---|---|
| Deciding whether to package part of a workflow as a subgraph, Blueprint, or App Mode UI | Editing the JSON shape of a subgraph programmatically -> `comfy-workflow-json` |
## Subgraphs — the basics
A subgraph packages selected nodes into a single collapsible "super node"
with exposed input/output slots. Authoring is interactive:
- **Create**: select nodes → click the subgraph icon in the selection
toolbox. ComfyUI auto-exposes the relevant inputs/outputs.
- **Edit**: double-click empty space *inside* the subgraph (not on a
widget), or use its edit button. A navigation bar shows the current
level; **Esc** or the nav bar exits. Right-click a slot to
rename/delete/disconnect; the slot labeled **1** is the spare for adding
a new connection.
- **Parameters Panel** (0.3.66+): select the subgraph and click **Edit
Subgraph Widgets** to reorder/hide its surfaced widgets *without*
entering it.
- **Nesting**: subgraphs can contain subgraphs; the nav bar tracks depth.
- **Unpack**: right-click → **Unpack subgraph** (or the toolbox button)
flattens it back to loose nodes.
- **Bypass / color / rename**: a subgraph behaves like any node.
A plain subgraph lives **inside one workflow's JSON**
(`definitions.subgraphs[]`). Copy-pasting it into another workflow carries
the definition along — reuse-by-copy-paste, fine for one-off porting but
not a library.
## Subgraph Blueprints — the reusable "library of stages"
This is the answer to "can I reuse a stage across many workflows."
**Blueprints** promote a subgraph into the **node library** so it can be
dragged or searched into any workflow like a built-in node.
- **Publish**: select the subgraph → click the **book (publish)** icon in
the selection toolbox, or selection-toolbox menu → **Add Subgraph to
Library**. Name it in the dialog (the subgraph's name is the default).
It then appears in the node library, searchable and draggable.
- **Reuse**: drag or search the blueprint into any workflow. Add as many
instances as you like.
- **Manage**: edit/delete blueprints from the dedicated button in the node
library (panel section labeled "Comfy Blueprints").
### The one caveat that changes how you use them
**Instances are isolated snapshots, not live references.** Each placed
instance is an independent copy you can edit freely; editing one does
**not** affect the others — and crucially, **editing the master blueprint
does not propagate to instances already dropped into workflows.** The docs
are explicit that "link instances, synchronous editing" are *not yet*
supported.
Practical consequences:
- Treat a blueprint like a **stamp/palette entry**, not a symbol with live
instances. It's "insert a fresh copy of this stage," not "reference one
canonical stage everywhere."
- **Versioning is manual.** Improve a stage → re-publish (new name, or
overwrite — the frontend warns on overwrite). Existing workflows keep
their old embedded copy until you delete the instance and drop the new
one in. There is no "update all instances."
- Good blueprint candidates are **stable, rarely-churning stages** (a
standard sampler pass, a diffusion core, a reference-latent block, a
standard upscale-and-save tail). Volatile experiment stages are poor
candidates — you'll be re-stamping constantly.
### Where blueprints live on disk
Publishing goes through the **userdata API** (`POST
/userdata/<file>/publish`), so blueprints are stored **server-side**
(under `user/default/` on a self-hosted install) — shared across every
browser and workflow hitting that install, not trapped in one browser's
local storage. They survive a service restart; they do **not** live in any
individual workflow's JSON.
## App Mode — workflow → simple app UI
App Mode (the frontend's internal name is **linear mode**) hides the node
graph behind a purpose-built input/output panel: you pick which node
inputs become user controls and which outputs get displayed, and end users
just fill the form and hit **Run**. Available on both self-hosted and
Comfy Cloud installs.
- **Enter**: top-left icon → **Enter app mode**, or the breadcrumb dropdown
at the top of the canvas.
- **App Builder** (opens automatically the first time, 4 steps):
1. **Select Inputs** — click nodes to expose as controls (prompts,
sliders, image uploads, model pickers). They preview in the right
panel.
2. **Select Outputs** — choose which Preview/Save nodes show in the
final UI.
3. **Preview** — verify the assembled layout.
4. **Set Default View** — choose whether the workflow opens in **App** or
**Node Graph** mode, then **Apply**.
- **Run UI**: right-side input panel, a Run button, a left sidebar
(rebuild, assets, workflow panel), a Cancel-this-run button during
execution, and queue/results toggles. Collapses to a tab view on
narrow/mobile screens.
- **Save**: `Ctrl/Cmd + S` like any workflow.
- **Share**: left-sidebar **Share** → **Create a link** generates a URL
encoding the workflow, layout, and node bindings. **Share links are
Comfy-Cloud-only** — on a self-hosted install you can build and run apps,
but a "Create a link" share won't produce a publicly reachable URL.
### App config is stored *in the workflow JSON*
App Mode persists under `extra.linearMode` and `extra.linearData` in the
workflow JSON (alongside `extra.ds`, `extra.frontendVersion`, etc.). This
matters for **programmatic edits**: any transform script that round-trips
a workflow must **preserve the `extra` block**, or it silently strips the
app configuration. If you rebuild a workflow from scratch in a builder
script, the app config is gone and has to be reconfigured in the UI. See
`comfy-workflow-json`.
## Decision: blueprint vs app mode vs neither
| Goal | Use |
|---|---|
| Reuse the same *stage* (sampler pass, edit core) across many workflows | **Subgraph Blueprint** (re-stamp; manual version bumps) |
| Tidy one big workflow into readable super-nodes | **Subgraph** (no publish) |
| Hand a non-graph user a fill-the-form UI on a finished workflow | **App Mode** |
| Share that app UI as a public URL | App Mode **on Comfy Cloud** (self-hosted can't mint share links) |
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!