comfyui-mcp 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/.beads/README.md +81 -0
  2. package/.beads/config.yaml +54 -0
  3. package/.beads/metadata.json +7 -0
  4. package/AGENTS.md +84 -0
  5. package/CLAUDE.md +48 -0
  6. package/README.md +22 -0
  7. package/dist/comfyui/client.d.ts +17 -0
  8. package/dist/comfyui/client.d.ts.map +1 -1
  9. package/dist/comfyui/client.js +39 -0
  10. package/dist/comfyui/client.js.map +1 -1
  11. package/dist/comfyui/types.d.ts +52 -0
  12. package/dist/comfyui/types.d.ts.map +1 -1
  13. package/dist/config.d.ts +4 -0
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +7 -1
  16. package/dist/config.js.map +1 -1
  17. package/dist/index.js +1 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/services/asset-registry.d.ts +64 -0
  20. package/dist/services/asset-registry.d.ts.map +1 -0
  21. package/dist/services/asset-registry.js +118 -0
  22. package/dist/services/asset-registry.js.map +1 -0
  23. package/dist/services/defaults-manager.d.ts +31 -0
  24. package/dist/services/defaults-manager.d.ts.map +1 -0
  25. package/dist/services/defaults-manager.js +128 -0
  26. package/dist/services/defaults-manager.js.map +1 -0
  27. package/dist/services/generate-image.d.ts +35 -0
  28. package/dist/services/generate-image.d.ts.map +1 -0
  29. package/dist/services/generate-image.js +63 -0
  30. package/dist/services/generate-image.js.map +1 -0
  31. package/dist/services/image-management.d.ts +16 -0
  32. package/dist/services/image-management.d.ts.map +1 -1
  33. package/dist/services/image-management.js +32 -0
  34. package/dist/services/image-management.js.map +1 -1
  35. package/dist/services/job-watcher.d.ts +5 -1
  36. package/dist/services/job-watcher.d.ts.map +1 -1
  37. package/dist/services/job-watcher.js +42 -3
  38. package/dist/services/job-watcher.js.map +1 -1
  39. package/dist/services/process-control.js +2 -2
  40. package/dist/services/process-control.js.map +1 -1
  41. package/dist/services/view-image.d.ts +17 -0
  42. package/dist/services/view-image.d.ts.map +1 -0
  43. package/dist/services/view-image.js +36 -0
  44. package/dist/services/view-image.js.map +1 -0
  45. package/dist/services/workflow-autoload.d.ts +41 -0
  46. package/dist/services/workflow-autoload.d.ts.map +1 -0
  47. package/dist/services/workflow-autoload.js +172 -0
  48. package/dist/services/workflow-autoload.js.map +1 -0
  49. package/dist/services/workflow-converter.d.ts +15 -0
  50. package/dist/services/workflow-converter.d.ts.map +1 -1
  51. package/dist/services/workflow-converter.js +333 -5
  52. package/dist/services/workflow-converter.js.map +1 -1
  53. package/dist/services/workflow-executor.d.ts.map +1 -1
  54. package/dist/services/workflow-executor.js +4 -2
  55. package/dist/services/workflow-executor.js.map +1 -1
  56. package/dist/tools/assets.d.ts +3 -0
  57. package/dist/tools/assets.d.ts.map +1 -0
  58. package/dist/tools/assets.js +128 -0
  59. package/dist/tools/assets.js.map +1 -0
  60. package/dist/tools/defaults.d.ts +3 -0
  61. package/dist/tools/defaults.d.ts.map +1 -0
  62. package/dist/tools/defaults.js +57 -0
  63. package/dist/tools/defaults.js.map +1 -0
  64. package/dist/tools/diagnostics.d.ts.map +1 -1
  65. package/dist/tools/diagnostics.js +14 -3
  66. package/dist/tools/diagnostics.js.map +1 -1
  67. package/dist/tools/generate-image.d.ts +3 -0
  68. package/dist/tools/generate-image.d.ts.map +1 -0
  69. package/dist/tools/generate-image.js +61 -0
  70. package/dist/tools/generate-image.js.map +1 -0
  71. package/dist/tools/image-management.d.ts.map +1 -1
  72. package/dist/tools/image-management.js +99 -11
  73. package/dist/tools/image-management.js.map +1 -1
  74. package/dist/tools/index.d.ts +1 -1
  75. package/dist/tools/index.d.ts.map +1 -1
  76. package/dist/tools/index.js +13 -1
  77. package/dist/tools/index.js.map +1 -1
  78. package/dist/tools/workflow-autoload.d.ts +9 -0
  79. package/dist/tools/workflow-autoload.d.ts.map +1 -0
  80. package/dist/tools/workflow-autoload.js +64 -0
  81. package/dist/tools/workflow-autoload.js.map +1 -0
  82. package/package.json +1 -1
  83. package/plugin/scripts/monitor-progress.mjs +9 -5
@@ -0,0 +1,64 @@
1
+ import type { WorkflowJSON } from "../comfyui/types.js";
2
+ export interface AssetImage {
3
+ filename: string;
4
+ subfolder: string;
5
+ type: string;
6
+ url: string;
7
+ }
8
+ export interface AssetOutput {
9
+ node_id: string;
10
+ images: AssetImage[];
11
+ }
12
+ export interface AssetRecord {
13
+ assetId: string;
14
+ promptId: string;
15
+ nodeId: string;
16
+ filename: string;
17
+ subfolder: string;
18
+ type: string;
19
+ url: string;
20
+ workflow: WorkflowJSON;
21
+ createdAt: number;
22
+ }
23
+ export interface RegisterArgs {
24
+ promptId: string;
25
+ workflow: WorkflowJSON;
26
+ outputs: AssetOutput[];
27
+ }
28
+ export interface ListArgs {
29
+ limit?: number;
30
+ since?: number;
31
+ }
32
+ interface RegistryConfig {
33
+ ttlMs: number;
34
+ now: () => number;
35
+ }
36
+ export declare const AssetRegistry: {
37
+ /**
38
+ * Register all images produced by a completed prompt.
39
+ * Returns the AssetRecords created (one per image).
40
+ */
41
+ register({ promptId, workflow, outputs }: RegisterArgs): AssetRecord[];
42
+ /** Look up a record by id. Returns undefined for missing or expired. */
43
+ get(assetId: string): AssetRecord | undefined;
44
+ /** List records newest-first. */
45
+ list({ limit, since }?: ListArgs): AssetRecord[];
46
+ /** Remove expired records. Returns number pruned. */
47
+ prune(): number;
48
+ /** Test/diagnostic helper — wipe all records. */
49
+ clear(): void;
50
+ /** Test/diagnostic helper — override ttl and clock. */
51
+ configure(opts: Partial<RegistryConfig>): void;
52
+ /** Inspect current size (debug only). */
53
+ size(): number;
54
+ };
55
+ /**
56
+ * Apply a flat override map to every node input in a workflow.
57
+ * For each (key, value) in overrides, sets node.inputs[key] = value on any node
58
+ * that already has that input. Returns a new workflow; does not mutate input.
59
+ *
60
+ * Example: { cfg: 8, seed: 12345 } → updates KSampler-style nodes only.
61
+ */
62
+ export declare function applyOverrides(workflow: WorkflowJSON, overrides: Record<string, unknown> | undefined): WorkflowJSON;
63
+ export {};
64
+ //# sourceMappingURL=asset-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-registry.d.ts","sourceRoot":"","sources":["../../src/services/asset-registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AA6BD,eAAO,MAAM,aAAa;IACxB;;;OAGG;8CACuC,YAAY,GAAG,WAAW,EAAE;IAwBtE,wEAAwE;iBAC3D,MAAM,GAAG,WAAW,GAAG,SAAS;IAU7C,iCAAiC;4BACV,QAAQ,GAAQ,WAAW,EAAE;IAOpD,qDAAqD;aAC5C,MAAM;IAWf,iDAAiD;aACxC,IAAI;IAIb,uDAAuD;oBACvC,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAK9C,yCAAyC;YACjC,MAAM;CAGf,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC7C,YAAY,CAYd"}
@@ -0,0 +1,118 @@
1
+ import { createHash } from "node:crypto";
2
+ const DEFAULT_TTL_MS = (() => {
3
+ const raw = process.env.COMFYUI_ASSET_TTL_HOURS;
4
+ const hours = raw ? Number(raw) : 24;
5
+ return Number.isFinite(hours) && hours > 0 ? hours * 60 * 60 * 1000 : 24 * 60 * 60 * 1000;
6
+ })();
7
+ const state = {
8
+ records: new Map(),
9
+ config: { ttlMs: DEFAULT_TTL_MS, now: Date.now },
10
+ };
11
+ function makeAssetId(promptId, img) {
12
+ const hash = createHash("sha256")
13
+ .update(`${promptId}\0${img.filename}\0${img.subfolder}\0${img.type}`)
14
+ .digest("hex");
15
+ return `a_${hash.slice(0, 8)}`;
16
+ }
17
+ function deepCloneWorkflow(wf) {
18
+ return JSON.parse(JSON.stringify(wf));
19
+ }
20
+ function isExpired(record) {
21
+ return state.config.now() - record.createdAt >= state.config.ttlMs;
22
+ }
23
+ export const AssetRegistry = {
24
+ /**
25
+ * Register all images produced by a completed prompt.
26
+ * Returns the AssetRecords created (one per image).
27
+ */
28
+ register({ promptId, workflow, outputs }) {
29
+ const snapshot = deepCloneWorkflow(workflow);
30
+ const created = [];
31
+ for (const output of outputs) {
32
+ for (const img of output.images) {
33
+ const assetId = makeAssetId(promptId, img);
34
+ const record = {
35
+ assetId,
36
+ promptId,
37
+ nodeId: output.node_id,
38
+ filename: img.filename,
39
+ subfolder: img.subfolder,
40
+ type: img.type,
41
+ url: img.url,
42
+ workflow: snapshot,
43
+ createdAt: state.config.now(),
44
+ };
45
+ state.records.set(assetId, record);
46
+ created.push(record);
47
+ }
48
+ }
49
+ return created;
50
+ },
51
+ /** Look up a record by id. Returns undefined for missing or expired. */
52
+ get(assetId) {
53
+ const record = state.records.get(assetId);
54
+ if (!record)
55
+ return undefined;
56
+ if (isExpired(record)) {
57
+ state.records.delete(assetId);
58
+ return undefined;
59
+ }
60
+ return record;
61
+ },
62
+ /** List records newest-first. */
63
+ list({ limit, since } = {}) {
64
+ const all = [...state.records.values()].filter((r) => !isExpired(r));
65
+ const filtered = since !== undefined ? all.filter((r) => r.createdAt >= since) : all;
66
+ filtered.sort((a, b) => b.createdAt - a.createdAt);
67
+ return limit !== undefined ? filtered.slice(0, limit) : filtered;
68
+ },
69
+ /** Remove expired records. Returns number pruned. */
70
+ prune() {
71
+ let count = 0;
72
+ for (const [id, record] of state.records) {
73
+ if (isExpired(record)) {
74
+ state.records.delete(id);
75
+ count++;
76
+ }
77
+ }
78
+ return count;
79
+ },
80
+ /** Test/diagnostic helper — wipe all records. */
81
+ clear() {
82
+ state.records.clear();
83
+ },
84
+ /** Test/diagnostic helper — override ttl and clock. */
85
+ configure(opts) {
86
+ if (opts.ttlMs !== undefined)
87
+ state.config.ttlMs = opts.ttlMs;
88
+ if (opts.now !== undefined)
89
+ state.config.now = opts.now;
90
+ },
91
+ /** Inspect current size (debug only). */
92
+ size() {
93
+ return state.records.size;
94
+ },
95
+ };
96
+ /**
97
+ * Apply a flat override map to every node input in a workflow.
98
+ * For each (key, value) in overrides, sets node.inputs[key] = value on any node
99
+ * that already has that input. Returns a new workflow; does not mutate input.
100
+ *
101
+ * Example: { cfg: 8, seed: 12345 } → updates KSampler-style nodes only.
102
+ */
103
+ export function applyOverrides(workflow, overrides) {
104
+ const next = deepCloneWorkflow(workflow);
105
+ if (!overrides)
106
+ return next;
107
+ for (const node of Object.values(next)) {
108
+ if (!node.inputs)
109
+ continue;
110
+ for (const [key, value] of Object.entries(overrides)) {
111
+ if (key in node.inputs) {
112
+ node.inputs[key] = value;
113
+ }
114
+ }
115
+ }
116
+ return next;
117
+ }
118
+ //# sourceMappingURL=asset-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-registry.js","sourceRoot":"","sources":["../../src/services/asset-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export type DefaultSource = "config" | "env" | "runtime";
2
+ export interface ResolvedValue {
3
+ value: unknown;
4
+ source: DefaultSource;
5
+ }
6
+ interface ManagerConfig {
7
+ configPath: string;
8
+ env: Record<string, string | undefined>;
9
+ }
10
+ export declare const DefaultsManager: {
11
+ configure(opts: Partial<ManagerConfig>): void;
12
+ reset(): void;
13
+ getConfigPath(): string;
14
+ load(): Promise<void>;
15
+ /**
16
+ * Return the resolved view of all defaults, with source attribution.
17
+ * Precedence (lowest → highest): config → env → runtime.
18
+ */
19
+ getAll(): Record<string, ResolvedValue>;
20
+ get(key: string): ResolvedValue | undefined;
21
+ set(updates: Record<string, unknown>, opts?: {
22
+ persist?: boolean;
23
+ }): Promise<void>;
24
+ /**
25
+ * Fill missing or undefined fields in `args` from resolved defaults.
26
+ * Per-call args win — only undefined-or-missing keys get backfilled.
27
+ */
28
+ apply<T extends Record<string, unknown>>(args: T): T & Record<string, unknown>;
29
+ };
30
+ export {};
31
+ //# sourceMappingURL=defaults-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults-manager.d.ts","sourceRoot":"","sources":["../../src/services/defaults-manager.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,UAAU,aAAa;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CACzC;AAuCD,eAAO,MAAM,eAAe;oBACV,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;aAKpC,IAAI;qBAMI,MAAM;YAIT,OAAO,CAAC,IAAI,CAAC;IA0B3B;;;OAGG;cACO,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;aAc9B,MAAM,GAAG,aAAa,GAAG,SAAS;iBAKhC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,SACzB;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAC3B,OAAO,CAAC,IAAI,CAAC;IAahB;;;OAGG;UACG,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAQ/E,CAAC"}
@@ -0,0 +1,128 @@
1
+ import { readFile, writeFile, mkdir } from "node:fs/promises";
2
+ import { existsSync } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
+ import { homedir } from "node:os";
5
+ import { logger } from "../utils/logger.js";
6
+ const ENV_PREFIX = "COMFYUI_DEFAULT_";
7
+ function defaultConfigPath() {
8
+ const xdg = process.env.XDG_CONFIG_HOME;
9
+ const root = xdg && xdg.length > 0 ? xdg : join(homedir(), ".config");
10
+ return join(root, "comfyui-mcp", "config.json");
11
+ }
12
+ function defaultEnv() {
13
+ return process.env;
14
+ }
15
+ const state = {
16
+ cfg: { configPath: defaultConfigPath(), env: defaultEnv() },
17
+ configValues: {},
18
+ runtimeValues: {},
19
+ };
20
+ function parseEnvValue(raw) {
21
+ try {
22
+ return JSON.parse(raw);
23
+ }
24
+ catch {
25
+ return raw;
26
+ }
27
+ }
28
+ function envDefaults(env) {
29
+ const out = {};
30
+ for (const [key, val] of Object.entries(env)) {
31
+ if (!key.startsWith(ENV_PREFIX) || val === undefined)
32
+ continue;
33
+ const name = key.slice(ENV_PREFIX.length).toLowerCase();
34
+ if (name.length === 0)
35
+ continue;
36
+ out[name] = parseEnvValue(val);
37
+ }
38
+ return out;
39
+ }
40
+ export const DefaultsManager = {
41
+ configure(opts) {
42
+ if (opts.configPath !== undefined)
43
+ state.cfg.configPath = opts.configPath;
44
+ if (opts.env !== undefined)
45
+ state.cfg.env = opts.env;
46
+ },
47
+ reset() {
48
+ state.cfg = { configPath: defaultConfigPath(), env: defaultEnv() };
49
+ state.configValues = {};
50
+ state.runtimeValues = {};
51
+ },
52
+ getConfigPath() {
53
+ return state.cfg.configPath;
54
+ },
55
+ async load() {
56
+ state.runtimeValues = {};
57
+ if (!existsSync(state.cfg.configPath)) {
58
+ state.configValues = {};
59
+ return;
60
+ }
61
+ try {
62
+ const raw = await readFile(state.cfg.configPath, "utf-8");
63
+ const parsed = JSON.parse(raw);
64
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
65
+ state.configValues = parsed;
66
+ }
67
+ else {
68
+ logger.warn("Defaults config file is not a JSON object, ignoring", {
69
+ path: state.cfg.configPath,
70
+ });
71
+ state.configValues = {};
72
+ }
73
+ }
74
+ catch (err) {
75
+ logger.warn("Failed to parse defaults config file, ignoring", {
76
+ path: state.cfg.configPath,
77
+ error: err instanceof Error ? err.message : err,
78
+ });
79
+ state.configValues = {};
80
+ }
81
+ },
82
+ /**
83
+ * Return the resolved view of all defaults, with source attribution.
84
+ * Precedence (lowest → highest): config → env → runtime.
85
+ */
86
+ getAll() {
87
+ const merged = {};
88
+ for (const [k, v] of Object.entries(state.configValues)) {
89
+ merged[k] = { value: v, source: "config" };
90
+ }
91
+ for (const [k, v] of Object.entries(envDefaults(state.cfg.env))) {
92
+ merged[k] = { value: v, source: "env" };
93
+ }
94
+ for (const [k, v] of Object.entries(state.runtimeValues)) {
95
+ merged[k] = { value: v, source: "runtime" };
96
+ }
97
+ return merged;
98
+ },
99
+ get(key) {
100
+ return this.getAll()[key];
101
+ },
102
+ async set(updates, opts) {
103
+ for (const [k, v] of Object.entries(updates)) {
104
+ state.runtimeValues[k] = v;
105
+ }
106
+ if (opts?.persist) {
107
+ const merged = { ...state.configValues, ...updates };
108
+ state.configValues = merged;
109
+ const dir = dirname(state.cfg.configPath);
110
+ await mkdir(dir, { recursive: true });
111
+ await writeFile(state.cfg.configPath, JSON.stringify(merged, null, 2), "utf-8");
112
+ }
113
+ },
114
+ /**
115
+ * Fill missing or undefined fields in `args` from resolved defaults.
116
+ * Per-call args win — only undefined-or-missing keys get backfilled.
117
+ */
118
+ apply(args) {
119
+ const result = { ...args };
120
+ const resolved = this.getAll();
121
+ for (const [k, { value }] of Object.entries(resolved)) {
122
+ if (result[k] === undefined)
123
+ result[k] = value;
124
+ }
125
+ return result;
126
+ },
127
+ };
128
+ //# sourceMappingURL=defaults-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults-manager.js","sourceRoot":"","sources":["../../src/services/defaults-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { WorkflowJSON } from "../comfyui/types.js";
2
+ export interface GenerateImageArgs {
3
+ prompt: string;
4
+ negative_prompt?: string;
5
+ width?: number;
6
+ height?: number;
7
+ steps?: number;
8
+ cfg?: number;
9
+ sampler?: string;
10
+ scheduler?: string;
11
+ seed?: number;
12
+ checkpoint?: string;
13
+ batch_size?: number;
14
+ }
15
+ export interface GenerateImageDeps {
16
+ /** Resolve a checkpoint filename when none is given or defaulted. */
17
+ resolveCheckpoint: () => Promise<string | undefined>;
18
+ /** Submit the constructed workflow; returns the prompt id. */
19
+ enqueue: (workflow: WorkflowJSON) => Promise<{
20
+ prompt_id: string;
21
+ queue_remaining?: number;
22
+ }>;
23
+ }
24
+ export interface GenerateImageResult {
25
+ prompt_id: string;
26
+ queue_remaining?: number;
27
+ checkpoint: string;
28
+ }
29
+ /**
30
+ * Construct a txt2img workflow from `args` backfilled by DefaultsManager,
31
+ * auto-resolving a checkpoint if needed, then enqueue it. Reuses the existing
32
+ * workflow-composer txt2img template rather than building the node graph here.
33
+ */
34
+ export declare function generateImage(args: GenerateImageArgs, deps: GenerateImageDeps): Promise<GenerateImageResult>;
35
+ //# sourceMappingURL=generate-image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-image.d.ts","sourceRoot":"","sources":["../../src/services/generate-image.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKxD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACrD,8DAA8D;IAC9D,OAAO,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/F;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAgBD;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,iBAAiB,EACvB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,mBAAmB,CAAC,CA6C9B"}
@@ -0,0 +1,63 @@
1
+ import { createWorkflow } from "./workflow-composer.js";
2
+ import { DefaultsManager } from "./defaults-manager.js";
3
+ import { ValidationError } from "../utils/errors.js";
4
+ // Keys the DefaultsManager may supply for image generation.
5
+ const DEFAULTABLE_KEYS = [
6
+ "negative_prompt",
7
+ "width",
8
+ "height",
9
+ "steps",
10
+ "cfg",
11
+ "sampler",
12
+ "scheduler",
13
+ "seed",
14
+ "checkpoint",
15
+ "batch_size",
16
+ ];
17
+ /**
18
+ * Construct a txt2img workflow from `args` backfilled by DefaultsManager,
19
+ * auto-resolving a checkpoint if needed, then enqueue it. Reuses the existing
20
+ * workflow-composer txt2img template rather than building the node graph here.
21
+ */
22
+ export async function generateImage(args, deps) {
23
+ // Backfill only the defaultable knobs; prompt is always caller-supplied.
24
+ const argsRecord = args;
25
+ const seed = {};
26
+ for (const key of DEFAULTABLE_KEYS) {
27
+ const v = argsRecord[key];
28
+ if (v !== undefined)
29
+ seed[key] = v;
30
+ }
31
+ const resolved = DefaultsManager.apply(seed);
32
+ let checkpoint = resolved.checkpoint;
33
+ if (!checkpoint) {
34
+ checkpoint = await deps.resolveCheckpoint();
35
+ }
36
+ if (!checkpoint) {
37
+ throw new ValidationError("No checkpoint specified, defaulted, or found locally. " +
38
+ "Pass `checkpoint`, set a default via set_defaults, or download one with download_model.");
39
+ }
40
+ const workflow = createWorkflow("txt2img", {
41
+ checkpoint,
42
+ positive_prompt: args.prompt,
43
+ negative_prompt: resolved.negative_prompt,
44
+ width: resolved.width,
45
+ height: resolved.height,
46
+ steps: resolved.steps,
47
+ cfg: resolved.cfg,
48
+ seed: resolved.seed,
49
+ sampler_name: resolved.sampler,
50
+ scheduler: resolved.scheduler,
51
+ });
52
+ const batchSize = resolved.batch_size;
53
+ if (batchSize !== undefined && batchSize !== 1) {
54
+ for (const node of Object.values(workflow)) {
55
+ if (node.class_type === "EmptyLatentImage") {
56
+ node.inputs.batch_size = batchSize;
57
+ }
58
+ }
59
+ }
60
+ const { prompt_id, queue_remaining } = await deps.enqueue(workflow);
61
+ return { prompt_id, queue_remaining, checkpoint };
62
+ }
63
+ //# sourceMappingURL=generate-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-image.js","sourceRoot":"","sources":["../../src/services/generate-image.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AA6BrD,4DAA4D;AAC5D,MAAM,gBAAgB,GAAG;IACvB,iBAAiB;IACjB,OAAO;IACP,QAAQ;IACR,OAAO;IACP,KAAK;IACL,SAAS;IACT,WAAW;IACX,MAAM;IACN,YAAY;IACZ,YAAY;CACJ,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAuB,EACvB,IAAuB;IAEvB,yEAAyE;IACzE,MAAM,UAAU,GAAG,IAA0C,CAAC;IAC9D,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,SAAS;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE7C,IAAI,UAAU,GAAG,QAAQ,CAAC,UAAgC,CAAC;IAC3D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,eAAe,CACvB,wDAAwD;YACtD,yFAAyF,CAC5F,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,SAAS,EAAE;QACzC,UAAU;QACV,eAAe,EAAE,IAAI,CAAC,MAAM;QAC5B,eAAe,EAAE,QAAQ,CAAC,eAAqC;QAC/D,KAAK,EAAE,QAAQ,CAAC,KAA2B;QAC3C,MAAM,EAAE,QAAQ,CAAC,MAA4B;QAC7C,KAAK,EAAE,QAAQ,CAAC,KAA2B;QAC3C,GAAG,EAAE,QAAQ,CAAC,GAAyB;QACvC,IAAI,EAAE,QAAQ,CAAC,IAA0B;QACzC,YAAY,EAAE,QAAQ,CAAC,OAA6B;QACpD,SAAS,EAAE,QAAQ,CAAC,SAA+B;KACpD,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAgC,CAAC;IAC5D,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QAC/C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,UAAU,KAAK,kBAAkB,EAAE,CAAC;gBAC3C,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;AACpD,CAAC"}
@@ -28,4 +28,20 @@ export declare function listOutputImages(options?: {
28
28
  limit?: number;
29
29
  pattern?: string;
30
30
  }): Promise<OutputImage[]>;
31
+ /**
32
+ * Fetch a generated image from ComfyUI via HTTP /view endpoint.
33
+ * Does NOT require COMFYUI_PATH — works with remote ComfyUI instances.
34
+ */
35
+ export declare function getOutputImage(filename: string, type?: "output" | "input" | "temp", subfolder?: string): Promise<{
36
+ base64: string;
37
+ mimeType: string;
38
+ filename: string;
39
+ }>;
40
+ /**
41
+ * Upload a local image to ComfyUI via HTTP multipart POST.
42
+ * Falls back to HTTP when COMFYUI_PATH is not available (remote ComfyUI).
43
+ */
44
+ export declare function uploadImageAuto(sourcePath: string, filename?: string): Promise<{
45
+ filename: string;
46
+ }>;
31
47
  //# sourceMappingURL=image-management.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"image-management.d.ts","sourceRoot":"","sources":["../../src/services/image-management.ts"],"names":[],"mappings":"AAwBA;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAyB7C;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAqCnF;AA2ED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAuCzB"}
1
+ {"version":3,"file":"image-management.d.ts","sourceRoot":"","sources":["../../src/services/image-management.ts"],"names":[],"mappings":"AAwBA;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAyB7C;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAqCnF;AA2ED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAuCzB;AAKD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,QAAQ,GAAG,OAAO,GAAG,MAAiB,EAC5C,SAAS,SAAK,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAGjE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB/B"}
@@ -179,4 +179,36 @@ export async function listOutputImages(options) {
179
179
  images.sort((a, b) => b.modified.localeCompare(a.modified));
180
180
  return images.slice(0, limit);
181
181
  }
182
+ import { fetchImage, uploadImageHttp } from "../comfyui/client.js";
183
+ import { readFile as nodeReadFile } from "node:fs/promises";
184
+ /**
185
+ * Fetch a generated image from ComfyUI via HTTP /view endpoint.
186
+ * Does NOT require COMFYUI_PATH — works with remote ComfyUI instances.
187
+ */
188
+ export async function getOutputImage(filename, type = "output", subfolder = "") {
189
+ const result = await fetchImage(filename, type, subfolder);
190
+ return { ...result, filename };
191
+ }
192
+ /**
193
+ * Upload a local image to ComfyUI via HTTP multipart POST.
194
+ * Falls back to HTTP when COMFYUI_PATH is not available (remote ComfyUI).
195
+ */
196
+ export async function uploadImageAuto(sourcePath, filename) {
197
+ const resolvedFilename = filename ?? basename(sourcePath);
198
+ const ext = extname(resolvedFilename).toLowerCase();
199
+ const allowed = [".png", ".jpg", ".jpeg", ".webp", ".bmp", ".gif", ".tiff", ".tif"];
200
+ if (!allowed.includes(ext)) {
201
+ throw new ValidationError(`Unsupported image format "${ext}". Supported: ${allowed.join(", ")}`);
202
+ }
203
+ const data = await nodeReadFile(sourcePath);
204
+ const mimeMap = {
205
+ ".png": "image/png", ".jpg": "image/jpeg", ".jpeg": "image/jpeg",
206
+ ".webp": "image/webp", ".bmp": "image/bmp", ".gif": "image/gif",
207
+ ".tiff": "image/tiff", ".tif": "image/tiff",
208
+ };
209
+ const mimeType = mimeMap[ext] ?? "application/octet-stream";
210
+ logger.info("Uploading image to ComfyUI via HTTP", { sourcePath, resolvedFilename });
211
+ const result = await uploadImageHttp(resolvedFilename, data, mimeType);
212
+ return { filename: result.name };
213
+ }
182
214
  //# sourceMappingURL=image-management.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"image-management.js","sourceRoot":"","sources":["../../src/services/image-management.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,eAAe,EAAc,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,SAAS,WAAW;IAClB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,IAAI,eAAe,CACvB,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,YAAY;IACnB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,IAAI,eAAe,CACvB,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAAkB,EAClB,QAAiB;IAEjB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,gBAAgB,GAAG,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE1D,qBAAqB;IACrB,MAAM,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC;IACpD,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACpF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,eAAe,CACvB,6BAA6B,GAAG,iBAAiB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtE,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IACpD,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;IAE5E,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,eAAe,CACvB,yBAAyB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CACpE,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC1D,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,SAAiB;IAEjB,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7C,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,eAAe,CACvB,4FAA4F,CAC7F,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,MAAM,GAA6E,EAAE,CAAC;IAE5F,6EAA6E;IAC7E,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE1C,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;QACvC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACvC,MAAM,IAAI,eAAe,CACvB,iJAAiJ,CAClJ,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAOD;;;GAGG;AACH,SAAS,kBAAkB,CAAC,MAAc;IACxC,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,uBAAuB;IACvB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,eAAe,CAAC,sBAAsB,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,iBAAiB;IAEjC,OAAO,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5E,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;QAExC,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM;YAAE,MAAM;QAEnC,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACzB,sBAAsB;YACtB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;gBACjB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YAChC,0FAA0F;YAC1F,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;gBACjB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC5D,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBAC1C,qEAAqE;gBACrE,IAAI,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,gDAAgD;gBAC7E,sCAAsC;gBACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBAC3C,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;oBACjB,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC;oBACxB,4CAA4C;oBAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;oBAC5C,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;wBAClB,SAAS,GAAG,QAAQ,GAAG,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC1C,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;oBAC1B,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9D,CAAC;gBACD,uEAAuE;YACzE,CAAC;QACH,CAAC;QAED,IAAI,SAAS,KAAK,MAAM;YAAE,MAAM;QAEhC,+DAA+D;QAC/D,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AASD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAGtC;IACC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAEhD,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAClC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QAEhE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE,SAAS;YAC7B,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;aACnC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE5D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"image-management.js","sourceRoot":"","sources":["../../src/services/image-management.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { WorkflowJSON } from "../comfyui/types.js";
1
2
  export interface CompletionNotification {
2
3
  prompt_id: string;
3
4
  status: "success" | "error" | "interrupted";
@@ -16,6 +17,7 @@ export interface CompletionNotification {
16
17
  subfolder: string;
17
18
  type: string;
18
19
  url: string;
20
+ asset_id?: string;
19
21
  }>;
20
22
  }>;
21
23
  cached_nodes: string[];
@@ -23,8 +25,10 @@ export interface CompletionNotification {
23
25
  export declare const JobWatcher: {
24
26
  /**
25
27
  * Start monitoring a prompt_id for completion via WS + polling dual-track.
28
+ * Optionally pass the submitted workflow so completed outputs can be
29
+ * registered with the AssetRegistry for view_image / regenerate.
26
30
  */
27
- watch(promptId: string): void;
31
+ watch(promptId: string, workflow?: WorkflowJSON): void;
28
32
  /**
29
33
  * Stop monitoring a prompt_id.
30
34
  */
@@ -1 +1 @@
1
- {"version":3,"file":"job-watcher.d.ts","sourceRoot":"","sources":["../../src/services/job-watcher.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,aAAa,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,OAAO,EAAE,KAAK,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,KAAK,CAAC;YACZ,QAAQ,EAAE,MAAM,CAAC;YACjB,SAAS,EAAE,MAAM,CAAC;YAClB,IAAI,EAAE,MAAM,CAAC;YACb,GAAG,EAAE,MAAM,CAAC;SACb,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAqND,eAAO,MAAM,UAAU;IACrB;;OAEG;oBACa,MAAM,GAAG,IAAI;IA2G7B;;OAEG;sBACe,MAAM,GAAG,IAAI;IAS/B;;OAEG;kBACW,MAAM,EAAE;IAItB;;OAEG;uBACsB,OAAO,CAAC,IAAI,CAAC;IA4BtC,oCAAoC;;CAIrC,CAAC"}
1
+ {"version":3,"file":"job-watcher.d.ts","sourceRoot":"","sources":["../../src/services/job-watcher.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIxD,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,aAAa,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,OAAO,EAAE,KAAK,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,KAAK,CAAC;YACZ,QAAQ,EAAE,MAAM,CAAC;YACjB,SAAS,EAAE,MAAM,CAAC;YAClB,IAAI,EAAE,MAAM,CAAC;YACb,GAAG,EAAE,MAAM,CAAC;YACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AA2PD,eAAO,MAAM,UAAU;IACrB;;;;OAIG;oBACa,MAAM,aAAa,YAAY,GAAG,IAAI;IA4GtD;;OAEG;sBACe,MAAM,GAAG,IAAI;IAS/B;;OAEG;kBACW,MAAM,EAAE;IAItB;;OAEG;uBACsB,OAAO,CAAC,IAAI,CAAC;IA4BtC,oCAAoC;;CAIrC,CAAC"}