--- name: importing-subgraphs description: "Imports and registers subgraph blueprints into the ComfyUI workflow_templates repository. Handles placing blueprint JSON files, adding thumbnails, running the import/sync pipeline, and validating results. Use when asked to: import a subgraph, add a blueprint, register a blueprint, add a subgraph blueprint, import a subgraph blueprint, contribute a subgraph, add a new node component, publish a blueprint, upload a subgraph, create a blueprint, onboard a subgraph, add a reusable node. Triggers on: import subgraph, add blueprint, subgraph blueprint, new blueprint, register blueprint, blueprint import." --- # Importing Subgraph Blueprints Subgraph blueprints are pre-built ComfyUI node components stored in `blueprints/` and shipped via the `comfyui-subgraph-blueprints` package. ## Rules - **Never** modify scripts, build tooling, or CI configuration. - **Always** validate after changes (Step 4). - Blueprint filenames **must** be `snake_case` — the import script handles renaming automatically. - Use double-quotes `"` in all JSON files. - Blueprint JSON **must** contain a `definitions.subgraphs` array with at least one entry. --- ## Step 1 — Obtain the Blueprint JSON Two sources: **Option A — Import from an external directory:** ```bash python scripts/blueprints/import_blueprints.py --source /path/to/external/blueprints/ ``` The script copies all `*.json` files (skipping `index*.json`) into `blueprints/`, renames them to `snake_case`, regenerates `blueprints/index.json`, and updates `blueprints_bundles.json`. **Option B — Manual placement (single file):** 1. Export the subgraph from ComfyUI (Save → Export workflow JSON). 2. Copy the `.json` file to `blueprints/` with a `snake_case` name, e.g. `my_blueprint.json`. 3. Run the import script (no `--source` needed) to normalize and regenerate index + bundles: ```bash python scripts/blueprints/import_blueprints.py ``` ### Required blueprint JSON structure The file must contain `definitions.subgraphs[0]` with these fields: | Field | Required | |-------|----------| | `name` | yes — display name shown in the node palette | | `inputs` | yes — exposed input slots | | `outputs` | yes — exposed output slots | | `nodes` | yes — internal ComfyUI nodes | --- ## Step 2 — Add a Thumbnail (Optional) Thumbnail files live in `blueprints/` and follow the naming pattern: ``` {blueprint_name}-1.webp # primary (required for thumbnail display) {blueprint_name}-2.webp # secondary (optional, for compare/hover effects) ``` - Convert to **webp** format (lossy ~65% quality). - The import script sets `"mediaSubtype": "webp"` in `index.json` automatically. --- ## Step 3 — Embed Model Metadata (Recommended) For every model-loading node inside `definitions.subgraphs[0].nodes` (e.g. `UNETLoader`, `VAELoader`, `CLIPLoader`), add a `"models"` array to the node's `"properties"`: ```json "properties": { "Node name for S&R": "UNETLoader", "cnr_id": "comfy-core", "ver": "0.3.40", "models": [ { "name": "flux1-dev.safetensors", "url": "https://huggingface.co/.../resolve/main/flux1-dev.safetensors?download=true", "hash": "", "hash_type": "SHA256", "directory": "diffusion_models" } ] } ``` The `name` field **must exactly match** the corresponding `widgets_values` entry. The import script surfaces model names automatically in `index.json` (limited to first 5). --- ## Step 4 — Sync to Packages After `import_blueprints.py` succeeds, push assets into the package directory and regenerate the manifest: ```bash python scripts/sync/sync_blueprints.py ``` This writes `packages/core/src/comfyui_workflow_templates_core/blueprints_manifest.json` and copies all blueprint files into `packages/blueprints/src/comfyui_subgraph_blueprints/blueprints/`. --- ## Step 5 — Validate ```bash python scripts/validate/validate_blueprints.py ``` Checks: - JSON syntax for all blueprint files - `index.json` against `index.schema.json` - Blueprint structure (`definitions.subgraphs` present with required fields) - `blueprints_bundles.json` consistency with files on disk Fix all errors before continuing. CI will fail if bundles or manifests are out of sync. --- ## Step 6 — Bump Version Increment the `version` field in the root `pyproject.toml`. CI uses this to detect changes and publishes affected packages to PyPI. --- ## Common Requests | User says | Agent action | |-----------|--------------| | "Import blueprints from this folder" | Step 1 Option A, then Steps 4–6 | | "Add this subgraph JSON as a blueprint" | Step 1 Option B, then Steps 4–6 | | "Add a thumbnail for blueprint X" | Step 2 only, then re-run Step 4 | | "Embed model info into this blueprint" | Step 3 only, then re-run Steps 1, 4, 5 | | "Validate blueprints" | Step 5 only | | "Sync blueprints to packages" | Step 4 only | | "Why does the index not have my blueprint?" | Check filename is snake_case, re-run `import_blueprints.py` | --- ## File Quick-Reference | File / Dir | Purpose | |------------|---------| | `blueprints/` | Blueprint JSON files and thumbnail images | | `blueprints/index.json` | Generated metadata index (do not edit manually) | | `blueprints/index.schema.json` | JSON schema for index validation | | `blueprints_bundles.json` | Generated list of all blueprint IDs | | `scripts/blueprints/import_blueprints.py` | Normalize filenames, generate index.json and bundles | | `scripts/sync/sync_blueprints.py` | Generate manifest, copy assets to package directories | | `scripts/validate/validate_blueprints.py` | Validate all blueprints and consistency checks | | `pyproject.toml` | Root package version (bump before PR) | | `packages/blueprints/` | `comfyui-subgraph-blueprints` package (generated assets) | | `packages/core/.../blueprints_manifest.json` | Generated manifest consumed by the Python API |