comfyui-mcp
Version:
Local-first, agent-native control plane for ComfyUI — MCP server + autonomous sidebar agent that drives your live graph in natural language on ANY LLM: Claude/ChatGPT/Gemini on your subscription (no API key), free local models via Ollama (fully offline),
34 lines (30 loc) • 1.45 kB
JavaScript
// Slice ONE pipeline out of a toggle-template pack workflow into a standalone,
// activated graph. Thin CLI wrapper around the shared sliceWorkflow() service
// (src/services/workflow-slicer.ts) — the same implementation that
// get_workflow (action:"slice") and panel_slice_workflow use.
//
// node scripts/slice-pipeline.mjs <src/workflow.json> <out.json> "<grpA>,<grpB>,..."
//
// Group args are case-insensitive substrings of group titles whose output nodes
// seed the slice (shared post-proc like UPSCALE/GRAIN/SHARP are pulled in
// automatically via the closure). Verify the result with verify-render.mjs.
import { readFileSync, writeFileSync } from "node:fs";
import { sliceWorkflow } from "../dist/services/workflow-slicer.js";
const [src, out, groupCsv] = process.argv.slice(2);
if (!src || !out || !groupCsv) {
console.error('usage: slice-pipeline.mjs <src.json> <out.json> "<grp substrs csv>"');
process.exit(2);
}
try {
const wf = JSON.parse(readFileSync(src, "utf8"));
const { workflow, stats } = sliceWorkflow(wf, groupCsv.split(","));
writeFileSync(out, JSON.stringify(workflow, null, 2));
console.log(
`${out}: ${stats.nodes} nodes (un-bypassed ${stats.unbypassed}), ${stats.links} links, ` +
`${stats.subgraphs} subgraphs | seeds=${stats.seeds} bad_links=${stats.badLinks} orphan_gets=${stats.orphanGets}`,
);
} catch (err) {
console.error(err.message);
process.exit(1);
}