@vibesdotdev/integrations-comfyui 0.0.0-stage → 1.0.0-rc.4
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.
- package/LICENSE +126 -0
- package/README.md +39 -2
- package/dist/ai/index.d.ts +4 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +4 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/provider.consumer.plugin.d.ts +6 -0
- package/dist/ai/provider.consumer.plugin.d.ts.map +1 -0
- package/dist/ai/provider.consumer.plugin.js +122 -0
- package/dist/ai/provider.consumer.plugin.js.map +1 -0
- package/dist/ai/provider.plugin.d.ts +3 -0
- package/dist/ai/provider.plugin.d.ts.map +1 -0
- package/dist/ai/provider.plugin.js +3 -0
- package/dist/ai/provider.plugin.js.map +1 -0
- package/dist/ai/providers/comfyui/comfyui.provider.impl.d.ts +20 -0
- package/dist/ai/providers/comfyui/comfyui.provider.impl.d.ts.map +1 -0
- package/dist/ai/providers/comfyui/comfyui.provider.impl.js +104 -0
- package/dist/ai/providers/comfyui/comfyui.provider.impl.js.map +1 -0
- package/dist/ai/providers/comfyui/detection/index.d.ts +2 -0
- package/dist/ai/providers/comfyui/detection/index.d.ts.map +1 -0
- package/dist/ai/providers/comfyui/detection/index.js +2 -0
- package/dist/ai/providers/comfyui/detection/index.js.map +1 -0
- package/dist/ai/providers/comfyui/detection/system.d.ts +6 -0
- package/dist/ai/providers/comfyui/detection/system.d.ts.map +1 -0
- package/dist/ai/providers/comfyui/detection/system.js +44 -0
- package/dist/ai/providers/comfyui/detection/system.js.map +1 -0
- package/dist/ai/providers/comfyui/http.d.ts +4 -0
- package/dist/ai/providers/comfyui/http.d.ts.map +1 -0
- package/dist/ai/providers/comfyui/http.js +36 -0
- package/dist/ai/providers/comfyui/http.js.map +1 -0
- package/dist/ai/providers/comfyui/index.d.ts +4 -0
- package/dist/ai/providers/comfyui/index.d.ts.map +1 -0
- package/dist/ai/providers/comfyui/index.js +4 -0
- package/dist/ai/providers/comfyui/index.js.map +1 -0
- package/dist/ai/providers/comfyui/recommendations.d.ts +24 -0
- package/dist/ai/providers/comfyui/recommendations.d.ts.map +1 -0
- package/dist/ai/providers/comfyui/recommendations.js +101 -0
- package/dist/ai/providers/comfyui/recommendations.js.map +1 -0
- package/dist/ai/providers/local/image/comfyui/config/config.comfyui.descriptor.d.ts +4206 -0
- package/dist/ai/providers/local/image/comfyui/config/config.comfyui.descriptor.d.ts.map +1 -0
- package/dist/ai/providers/local/image/comfyui/config/config.comfyui.descriptor.js +43 -0
- package/dist/ai/providers/local/image/comfyui/config/config.comfyui.descriptor.js.map +1 -0
- package/dist/ai/providers/local/image/comfyui/config/schemas/index.d.ts +2 -0
- package/dist/ai/providers/local/image/comfyui/config/schemas/index.d.ts.map +1 -0
- package/dist/ai/providers/local/image/comfyui/config/schemas/index.js +2 -0
- package/dist/ai/providers/local/image/comfyui/config/schemas/index.js.map +1 -0
- package/dist/ai/providers/local/image/comfyui/index.d.ts +5 -0
- package/dist/ai/providers/local/image/comfyui/index.d.ts.map +1 -0
- package/dist/ai/providers/local/image/comfyui/index.js +4 -0
- package/dist/ai/providers/local/image/comfyui/index.js.map +1 -0
- package/dist/ai/providers/local/image/comfyui/provider.comfyui.descriptor.d.ts +183 -0
- package/dist/ai/providers/local/image/comfyui/provider.comfyui.descriptor.d.ts.map +1 -0
- package/dist/ai/providers/local/image/comfyui/provider.comfyui.descriptor.js +53 -0
- package/dist/ai/providers/local/image/comfyui/provider.comfyui.descriptor.js.map +1 -0
- package/dist/ai/specs/comfyui-prompt/comfyui-prompt.spec.descriptor.d.ts +37 -0
- package/dist/ai/specs/comfyui-prompt/comfyui-prompt.spec.descriptor.d.ts.map +1 -0
- package/dist/ai/specs/comfyui-prompt/comfyui-prompt.spec.descriptor.js +34 -0
- package/dist/ai/specs/comfyui-prompt/comfyui-prompt.spec.descriptor.js.map +1 -0
- package/dist/ai/specs/comfyui-prompt/comfyui-prompt.spec.impl.d.ts +75 -0
- package/dist/ai/specs/comfyui-prompt/comfyui-prompt.spec.impl.d.ts.map +1 -0
- package/dist/ai/specs/comfyui-prompt/comfyui-prompt.spec.impl.js +239 -0
- package/dist/ai/specs/comfyui-prompt/comfyui-prompt.spec.impl.js.map +1 -0
- package/dist/config/comfyui.config.descriptor.d.ts +79 -0
- package/dist/config/comfyui.config.descriptor.d.ts.map +1 -0
- package/dist/config/comfyui.config.descriptor.js +50 -0
- package/dist/config/comfyui.config.descriptor.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/comfyui.d.ts +98 -0
- package/dist/schemas/comfyui.d.ts.map +1 -0
- package/dist/schemas/comfyui.js +69 -0
- package/dist/schemas/comfyui.js.map +1 -0
- package/package.json +101 -4
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `comfyui-prompt` impl.
|
|
3
|
+
*
|
|
4
|
+
* Encodes `ImageGenerationRequest` into ComfyUI's graph-execution
|
|
5
|
+
* dialect: builds the canonical text-to-image workflow graph
|
|
6
|
+
* (CheckpointLoaderSimple → CLIPTextEncode positive/negative →
|
|
7
|
+
* EmptyLatentImage → KSampler → VAEDecode → SaveImage) and submits it
|
|
8
|
+
* as `POST {baseUrl}/prompt`. Execution is asynchronous: the decoder
|
|
9
|
+
* reads `{prompt_id}` from the submission response, polls
|
|
10
|
+
* `GET {baseUrl}/history/{prompt_id}` a bounded number of times, and
|
|
11
|
+
* decodes the history entry's node outputs into
|
|
12
|
+
* `{baseUrl}/view?filename=…&subfolder=…&type=…` image URLs. The
|
|
13
|
+
* bytes are never fetched here — results are URL references (the
|
|
14
|
+
* fal-run reference convention; a1111 differs only because its wire
|
|
15
|
+
* response carries inline base64 rather than file references).
|
|
16
|
+
*/
|
|
17
|
+
import { CapabilityError } from '@vibesdotdev/kernel';
|
|
18
|
+
import { fetchAIProvider } from '@vibesdotdev/ai/providers-runtime/client';
|
|
19
|
+
import { concatAll } from '@vibesdotdev/ai/specs/interfaces';
|
|
20
|
+
import { ComfyUIGraphSchema, ComfyUIHistorySchema, ComfyUISubmissionSchema, ComfyUIPromptSpecOptionsSchema, ComfyuiSettingsSchema, ComfyUIConnectionSchema } from "../../../schemas/comfyui.js";
|
|
21
|
+
import { loadComfyuiSettings } from "../../../config/comfyui.config.descriptor.js";
|
|
22
|
+
import { readComfyUIResponse } from "../../providers/comfyui/http.js";
|
|
23
|
+
import descriptor from "./comfyui-prompt.spec.descriptor.js";
|
|
24
|
+
export {} from "../../../schemas/comfyui.js";
|
|
25
|
+
/** Legacy explicit-subpath constants. The lifecycle deadline bounds network time. */
|
|
26
|
+
export const HISTORY_POLL_MAX_ATTEMPTS = 60;
|
|
27
|
+
export const HISTORY_POLL_DELAY_MS = ComfyuiSettingsSchema.parse({}).pollDelayMs;
|
|
28
|
+
/** Stable node ids of the canonical text-to-image graph. */
|
|
29
|
+
export const GRAPH_NODE_IDS = {
|
|
30
|
+
checkpoint: '1',
|
|
31
|
+
positive: '2',
|
|
32
|
+
negative: '3',
|
|
33
|
+
latent: '4',
|
|
34
|
+
sampler: '5',
|
|
35
|
+
decode: '6',
|
|
36
|
+
save: '7'
|
|
37
|
+
};
|
|
38
|
+
const DEFAULT_STEPS = 20;
|
|
39
|
+
const DEFAULT_CFG = 7;
|
|
40
|
+
const DEFAULT_WIDTH = 512;
|
|
41
|
+
const DEFAULT_HEIGHT = 512;
|
|
42
|
+
const DEFAULT_SAMPLER = 'euler';
|
|
43
|
+
const DEFAULT_SCHEDULER = 'normal';
|
|
44
|
+
/**
|
|
45
|
+
* Build the canonical ComfyUI text-to-image graph in `/prompt` API
|
|
46
|
+
* format: nodes keyed by id, each `{class_type, inputs}`, connections
|
|
47
|
+
* as `[nodeId, outputIndex]`. CheckpointLoaderSimple outputs are
|
|
48
|
+
* MODEL(0) / CLIP(1) / VAE(2); the wire model id is the checkpoint
|
|
49
|
+
* file name.
|
|
50
|
+
*/
|
|
51
|
+
export function buildTextToImageGraph(request, checkpointName) {
|
|
52
|
+
const ids = GRAPH_NODE_IDS;
|
|
53
|
+
// KSampler has no server-side "random seed" sentinel; absent seeds
|
|
54
|
+
// are drawn here so the submitted graph is always concrete.
|
|
55
|
+
const seed = request.seed ?? Math.floor(Math.random() * 1_000_000_000);
|
|
56
|
+
return ComfyUIGraphSchema.parse({
|
|
57
|
+
[ids.checkpoint]: {
|
|
58
|
+
class_type: 'CheckpointLoaderSimple',
|
|
59
|
+
inputs: { ckpt_name: checkpointName }
|
|
60
|
+
},
|
|
61
|
+
[ids.positive]: {
|
|
62
|
+
class_type: 'CLIPTextEncode',
|
|
63
|
+
inputs: { text: request.prompt, clip: [ids.checkpoint, 1] }
|
|
64
|
+
},
|
|
65
|
+
[ids.negative]: {
|
|
66
|
+
class_type: 'CLIPTextEncode',
|
|
67
|
+
inputs: { text: request.negativePrompt ?? '', clip: [ids.checkpoint, 1] }
|
|
68
|
+
},
|
|
69
|
+
[ids.latent]: {
|
|
70
|
+
class_type: 'EmptyLatentImage',
|
|
71
|
+
inputs: {
|
|
72
|
+
width: request.width ?? DEFAULT_WIDTH,
|
|
73
|
+
height: request.height ?? DEFAULT_HEIGHT,
|
|
74
|
+
batch_size: request.numImages ?? 1
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
[ids.sampler]: {
|
|
78
|
+
class_type: 'KSampler',
|
|
79
|
+
inputs: {
|
|
80
|
+
seed,
|
|
81
|
+
steps: request.steps ?? DEFAULT_STEPS,
|
|
82
|
+
cfg: request.guidanceScale ?? DEFAULT_CFG,
|
|
83
|
+
sampler_name: DEFAULT_SAMPLER,
|
|
84
|
+
scheduler: DEFAULT_SCHEDULER,
|
|
85
|
+
denoise: 1,
|
|
86
|
+
model: [ids.checkpoint, 0],
|
|
87
|
+
positive: [ids.positive, 0],
|
|
88
|
+
negative: [ids.negative, 0],
|
|
89
|
+
latent_image: [ids.latent, 0]
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
[ids.decode]: {
|
|
93
|
+
class_type: 'VAEDecode',
|
|
94
|
+
inputs: { samples: [ids.sampler, 0], vae: [ids.checkpoint, 2] }
|
|
95
|
+
},
|
|
96
|
+
[ids.save]: {
|
|
97
|
+
class_type: 'SaveImage',
|
|
98
|
+
inputs: { filename_prefix: 'vibes', images: [ids.decode, 0] }
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
export class ComfyUIPromptSpec {
|
|
103
|
+
runtime;
|
|
104
|
+
settings;
|
|
105
|
+
descriptor = descriptor;
|
|
106
|
+
options;
|
|
107
|
+
constructor(runtime, options = {}, settings = ComfyuiSettingsSchema.parse({})) {
|
|
108
|
+
this.runtime = runtime;
|
|
109
|
+
this.settings = settings;
|
|
110
|
+
this.options = ComfyUIPromptSpecOptionsSchema.parse(options);
|
|
111
|
+
}
|
|
112
|
+
encodeRequest(request, context) {
|
|
113
|
+
if (!isImageRequest(request)) {
|
|
114
|
+
throw new CapabilityError('ComfyUI only encodes image requests', 'INVALID_INPUT', {
|
|
115
|
+
reason: 'comfyui-modality-unsupported', retryable: false
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
const connection = this.runtime.query('ai/provider/connection')
|
|
119
|
+
.withId(context.providerId).descriptors()[0];
|
|
120
|
+
const { clientId } = ComfyUIConnectionSchema.parse({
|
|
121
|
+
clientId: this.settings.clientId, ...connection?.configuration
|
|
122
|
+
});
|
|
123
|
+
const body = { prompt: buildTextToImageGraph(request, context.wireModelId), client_id: clientId };
|
|
124
|
+
return {
|
|
125
|
+
method: 'POST', path: '/prompt',
|
|
126
|
+
headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
|
|
127
|
+
body,
|
|
128
|
+
streaming: false
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
async *decodeResponse(chunks, request, context) {
|
|
132
|
+
try {
|
|
133
|
+
if (!isImageRequest(request)) {
|
|
134
|
+
throw new CapabilityError('ComfyUI only decodes image requests', 'INVALID_INPUT', {
|
|
135
|
+
reason: 'comfyui-modality-unsupported', retryable: false
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
const settings = await loadComfyuiSettings(this.runtime);
|
|
139
|
+
const delayMs = this.options.pollDelayMs ?? settings.pollDelayMs;
|
|
140
|
+
const legacyDeadline = this.options.pollMaxAttempts === undefined
|
|
141
|
+
? settings.timeoutMs
|
|
142
|
+
: Math.min(settings.timeoutMs, this.options.pollMaxAttempts * Math.max(delayMs, 1));
|
|
143
|
+
const result = await this.runtime.lifecycle.wait(async (signal) => {
|
|
144
|
+
const parts = [];
|
|
145
|
+
for await (const chunk of chunks) {
|
|
146
|
+
signal.throwIfAborted();
|
|
147
|
+
if (chunk.kind === 'error')
|
|
148
|
+
throw chunk.error;
|
|
149
|
+
if (chunk.kind === 'headers' && (chunk.status < 200 || chunk.status >= 300)) {
|
|
150
|
+
throw new CapabilityError('ComfyUI prompt submission failed', 'UNAVAILABLE', {
|
|
151
|
+
reason: 'comfyui-http-failed', retryable: false,
|
|
152
|
+
details: { status: chunk.status }
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
if (chunk.kind === 'bytes')
|
|
156
|
+
parts.push(chunk.data);
|
|
157
|
+
if (chunk.kind === 'end')
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
if (parts.length === 0) {
|
|
161
|
+
throw new CapabilityError('ComfyUI returned an empty prompt response', 'INVALID_INPUT', {
|
|
162
|
+
reason: 'comfyui-response-empty', retryable: false
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
let submission;
|
|
166
|
+
try {
|
|
167
|
+
submission = ComfyUISubmissionSchema.parse(JSON.parse(new TextDecoder().decode(concatAll(parts))));
|
|
168
|
+
}
|
|
169
|
+
catch (cause) {
|
|
170
|
+
throw new CapabilityError('ComfyUI returned an invalid prompt response', 'INVALID_INPUT', {
|
|
171
|
+
reason: 'comfyui-response-invalid', retryable: false, cause
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
if (submission.error !== undefined || Object.keys(submission.node_errors ?? {}).length > 0) {
|
|
175
|
+
throw new CapabilityError('ComfyUI rejected the submitted graph', 'INVALID_INPUT', {
|
|
176
|
+
reason: 'comfyui-prompt-rejected', retryable: false
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
const promptId = submission.prompt_id;
|
|
180
|
+
if (!promptId) {
|
|
181
|
+
throw new CapabilityError('ComfyUI response is missing prompt_id', 'INVALID_INPUT', {
|
|
182
|
+
reason: 'comfyui-prompt-id-missing', retryable: false
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
const base = context.endpointBase.replace(/\/+$/, '');
|
|
186
|
+
// Observe asynchronous completion under one lifecycle-owned deadline.
|
|
187
|
+
// HTTP, parsing and execution failures are never retried.
|
|
188
|
+
while (!signal.aborted) {
|
|
189
|
+
const history = await readComfyUIResponse(await fetchAIProvider({ runtime: this.runtime }, `${base}/history/${encodeURIComponent(promptId)}`, {
|
|
190
|
+
headers: { Accept: 'application/json' }, signal
|
|
191
|
+
}), ComfyUIHistorySchema);
|
|
192
|
+
const entry = history[promptId];
|
|
193
|
+
if (entry?.status?.status_str === 'error') {
|
|
194
|
+
throw new CapabilityError('ComfyUI execution failed', 'UNAVAILABLE', {
|
|
195
|
+
reason: 'comfyui-execution-failed', retryable: false
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
if (entry && entry.status?.completed !== false) {
|
|
199
|
+
const images = Object.values(entry.outputs ?? {}).flatMap((output) => (output.images ?? []).map((image) => `${base}/view?${new URLSearchParams(image).toString()}`));
|
|
200
|
+
if (images.length === 0) {
|
|
201
|
+
throw new CapabilityError('ComfyUI completed without output images', 'NOT_FOUND', {
|
|
202
|
+
reason: 'comfyui-images-missing', retryable: false
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
const result = {
|
|
206
|
+
id: `${context.providerId}.${context.variantId}.${Date.now()}`,
|
|
207
|
+
timestamp: new Date(), images,
|
|
208
|
+
seeds: request.seed === undefined ? undefined : [request.seed],
|
|
209
|
+
metadata: { modelVersion: context.wireModelId, promptId }
|
|
210
|
+
};
|
|
211
|
+
return result;
|
|
212
|
+
}
|
|
213
|
+
await this.runtime.lifecycle.delay(delayMs, signal);
|
|
214
|
+
}
|
|
215
|
+
signal.throwIfAborted();
|
|
216
|
+
throw new CapabilityError('ComfyUI completion was cancelled', 'CANCELLED', {
|
|
217
|
+
reason: 'comfyui-cancelled', retryable: false
|
|
218
|
+
});
|
|
219
|
+
}, {
|
|
220
|
+
timeoutMs: this.options.timeoutMs ?? legacyDeadline,
|
|
221
|
+
reason: 'comfyui prompt submission and history completion',
|
|
222
|
+
signal: request.signal
|
|
223
|
+
});
|
|
224
|
+
const event = { kind: 'result', result };
|
|
225
|
+
// SAFETY: isImageRequest established this decode serves an image request for M.
|
|
226
|
+
yield event;
|
|
227
|
+
}
|
|
228
|
+
catch (cause) {
|
|
229
|
+
const error = cause instanceof CapabilityError ? cause : new CapabilityError('ComfyUI request failed', 'UNAVAILABLE', {
|
|
230
|
+
reason: 'comfyui-request-failed', retryable: false, cause
|
|
231
|
+
});
|
|
232
|
+
yield { kind: 'error', error };
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
function isImageRequest(request) {
|
|
237
|
+
return request.modality === 'image';
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=comfyui-prompt.spec.impl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comfyui-prompt.spec.impl.js","sourceRoot":"","sources":["../../../../src/ai/specs/comfyui-prompt/comfyui-prompt.spec.impl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ComfyUI settings — the `integrations.comfyui` config manifest.
|
|
3
|
+
*/
|
|
4
|
+
import { type ComfyuiSettings } from '../schemas/comfyui.ts';
|
|
5
|
+
export { ComfyuiSettingsSchema, type ComfyuiSettings } from '../schemas/comfyui.ts';
|
|
6
|
+
import { type RuntimeRef } from '@vibesdotdev/kernel';
|
|
7
|
+
export declare const COMFYUI_DEFAULT_BASE_URL: string;
|
|
8
|
+
export declare const COMFYUI_SETTINGS_MANIFEST_ID = "integrations.comfyui";
|
|
9
|
+
export declare const comfyuiSettingsManifest: {
|
|
10
|
+
id: string;
|
|
11
|
+
schema: import("zod/v4").ZodObject<{
|
|
12
|
+
baseUrl: import("zod/v4").ZodDefault<import("zod/v4").ZodURL>;
|
|
13
|
+
clientId: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
|
|
14
|
+
timeoutMs: import("zod/v4").ZodDefault<import("zod/v4").ZodNumber>;
|
|
15
|
+
pollDelayMs: import("zod/v4").ZodDefault<import("zod/v4").ZodNumber>;
|
|
16
|
+
}, import("zod/v4/core").$strip>;
|
|
17
|
+
};
|
|
18
|
+
export declare function loadComfyuiSettings(runtime: RuntimeRef): Promise<ComfyuiSettings>;
|
|
19
|
+
export declare const comfyuiSettingsDescriptor: {
|
|
20
|
+
kind: "config/manifest";
|
|
21
|
+
id: string;
|
|
22
|
+
name: string;
|
|
23
|
+
namespace: string;
|
|
24
|
+
description: string;
|
|
25
|
+
tier: string;
|
|
26
|
+
category: string;
|
|
27
|
+
schema: import("zod/v4").ZodObject<{
|
|
28
|
+
baseUrl: import("zod/v4").ZodDefault<import("zod/v4").ZodURL>;
|
|
29
|
+
clientId: import("zod/v4").ZodOptional<import("zod/v4").ZodString>;
|
|
30
|
+
timeoutMs: import("zod/v4").ZodDefault<import("zod/v4").ZodNumber>;
|
|
31
|
+
pollDelayMs: import("zod/v4").ZodDefault<import("zod/v4").ZodNumber>;
|
|
32
|
+
}, import("zod/v4/core").$strip>;
|
|
33
|
+
fields: {
|
|
34
|
+
clientId: {
|
|
35
|
+
ui: {
|
|
36
|
+
label: string;
|
|
37
|
+
component: string;
|
|
38
|
+
group: string;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
pollDelayMs: {
|
|
42
|
+
ui: {
|
|
43
|
+
label: string;
|
|
44
|
+
component: string;
|
|
45
|
+
group: string;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
baseUrl: {
|
|
49
|
+
ui: {
|
|
50
|
+
label: string;
|
|
51
|
+
component: string;
|
|
52
|
+
group: string;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
timeoutMs: {
|
|
56
|
+
ui: {
|
|
57
|
+
label: string;
|
|
58
|
+
component: string;
|
|
59
|
+
group: string;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
groups: {
|
|
64
|
+
id: string;
|
|
65
|
+
label: string;
|
|
66
|
+
}[];
|
|
67
|
+
allowedAdapters: string[];
|
|
68
|
+
defaultAdapter: string;
|
|
69
|
+
scope: string;
|
|
70
|
+
customTables: boolean;
|
|
71
|
+
version: number;
|
|
72
|
+
internal: boolean;
|
|
73
|
+
context: {
|
|
74
|
+
surfaces: string[];
|
|
75
|
+
};
|
|
76
|
+
enabled: true;
|
|
77
|
+
};
|
|
78
|
+
export default comfyuiSettingsDescriptor;
|
|
79
|
+
//# sourceMappingURL=comfyui.config.descriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comfyui.config.descriptor.d.ts","sourceRoot":"","sources":["../../src/config/comfyui.config.descriptor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAEpF,OAAO,EAAuC,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE3F,eAAO,MAAM,wBAAwB,QAA0C,CAAC;AAEhF,eAAO,MAAM,4BAA4B,yBAAyB,CAAC;AAEnE,eAAO,MAAM,uBAAuB;;;;;;;;CAAsE,CAAC;AAE3G,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,UAAU,GACjB,OAAO,CAAC,eAAe,CAAC,CAU1B;AAED,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwBpC,CAAC;AAEH,eAAe,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ComfyUI settings — the `integrations.comfyui` config manifest.
|
|
3
|
+
*/
|
|
4
|
+
import { ComfyuiSettingsSchema } from "../schemas/comfyui.js";
|
|
5
|
+
export { ComfyuiSettingsSchema } from "../schemas/comfyui.js";
|
|
6
|
+
import { ConfigManifest } from '@vibesdotdev/config';
|
|
7
|
+
import { CapabilityError, createRuntimeAsset } from '@vibesdotdev/kernel';
|
|
8
|
+
export const COMFYUI_DEFAULT_BASE_URL = ComfyuiSettingsSchema.parse({}).baseUrl;
|
|
9
|
+
export const COMFYUI_SETTINGS_MANIFEST_ID = 'integrations.comfyui';
|
|
10
|
+
export const comfyuiSettingsManifest = { id: COMFYUI_SETTINGS_MANIFEST_ID, schema: ComfyuiSettingsSchema };
|
|
11
|
+
export async function loadComfyuiSettings(runtime) {
|
|
12
|
+
if (!runtime.hasKind('config/manifest'))
|
|
13
|
+
return ComfyuiSettingsSchema.parse({});
|
|
14
|
+
try {
|
|
15
|
+
return await ConfigManifest.forRuntime(runtime, COMFYUI_SETTINGS_MANIFEST_ID).load();
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
if (error instanceof CapabilityError && error.reason === 'config-manifest-unregistered') {
|
|
19
|
+
return ComfyuiSettingsSchema.parse({});
|
|
20
|
+
}
|
|
21
|
+
throw error;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export const comfyuiSettingsDescriptor = createRuntimeAsset({
|
|
25
|
+
kind: 'config/manifest',
|
|
26
|
+
id: COMFYUI_SETTINGS_MANIFEST_ID,
|
|
27
|
+
name: 'ComfyUI',
|
|
28
|
+
namespace: 'integrations',
|
|
29
|
+
description: 'ComfyUI local image-generation connection settings',
|
|
30
|
+
tier: 'user',
|
|
31
|
+
category: 'integrations',
|
|
32
|
+
schema: ComfyuiSettingsSchema,
|
|
33
|
+
fields: {
|
|
34
|
+
clientId: { ui: { label: 'Client ID', component: 'text', group: 'comfyui' } },
|
|
35
|
+
pollDelayMs: { ui: { label: 'History interval (ms)', component: 'number', group: 'comfyui' } },
|
|
36
|
+
baseUrl: { ui: { label: 'Server URL', component: 'text', group: 'comfyui' } },
|
|
37
|
+
timeoutMs: { ui: { label: 'Timeout (ms)', component: 'number', group: 'comfyui' } }
|
|
38
|
+
},
|
|
39
|
+
groups: [{ id: 'comfyui', label: 'ComfyUI' }],
|
|
40
|
+
allowedAdapters: ['storage.localdb', 'storage.json'],
|
|
41
|
+
defaultAdapter: 'storage.localdb',
|
|
42
|
+
scope: 'auto',
|
|
43
|
+
customTables: false,
|
|
44
|
+
version: 1,
|
|
45
|
+
internal: false,
|
|
46
|
+
context: { surfaces: ['cli', 'tui'] },
|
|
47
|
+
enabled: true
|
|
48
|
+
});
|
|
49
|
+
export default comfyuiSettingsDescriptor;
|
|
50
|
+
//# sourceMappingURL=comfyui.config.descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comfyui.config.descriptor.js","sourceRoot":"","sources":["../../src/config/comfyui.config.descriptor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,qBAAqB,EAAwB,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAwB,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAmB,MAAM,qBAAqB,CAAC;AAE3F,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;AAEhF,MAAM,CAAC,MAAM,4BAA4B,GAAG,sBAAsB,CAAC;AAEnE,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,EAAE,EAAE,4BAA4B,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;AAE3G,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,OAAmB;IAEnB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;QAAE,OAAO,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChF,IAAI,CAAC;QACJ,OAAO,MAAM,cAAc,CAAC,UAAU,CAAkB,OAAO,EAAE,4BAA4B,CAAC,CAAC,IAAI,EAAE,CAAC;IACvG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,KAAK,YAAY,eAAe,IAAI,KAAK,CAAC,MAAM,KAAK,8BAA8B,EAAE,CAAC;YACzF,OAAO,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,kBAAkB,CAAC;IAC3D,IAAI,EAAE,iBAAiB;IACvB,EAAE,EAAE,4BAA4B;IAChC,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,cAAc;IACzB,WAAW,EAAE,oDAAoD;IACjE,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,qBAAqB;IAC7B,MAAM,EAAE;QACP,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QAC7E,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QAC9F,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QAC7E,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;KACnF;IACD,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC7C,eAAe,EAAE,CAAC,iBAAiB,EAAE,cAAc,CAAC;IACpD,cAAc,EAAE,iBAAiB;IACjC,KAAK,EAAE,MAAM;IACb,YAAY,EAAE,KAAK;IACnB,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;IACrC,OAAO,EAAE,IAAI;CACb,CAAC,CAAC;AAEH,eAAe,yBAAyB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
export declare const ComfyUIConnectionSchema: z.ZodObject<{
|
|
3
|
+
baseUrl: z.ZodDefault<z.ZodURL>;
|
|
4
|
+
clientId: z.ZodOptional<z.ZodString>;
|
|
5
|
+
timeout: z.ZodDefault<z.ZodNumber>;
|
|
6
|
+
}, z.core.$strip>;
|
|
7
|
+
export type ComfyUIConnection = z.infer<typeof ComfyUIConnectionSchema>;
|
|
8
|
+
export declare const ComfyuiSettingsSchema: z.ZodObject<{
|
|
9
|
+
baseUrl: z.ZodDefault<z.ZodURL>;
|
|
10
|
+
clientId: z.ZodOptional<z.ZodString>;
|
|
11
|
+
timeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
12
|
+
pollDelayMs: z.ZodDefault<z.ZodNumber>;
|
|
13
|
+
}, z.core.$strip>;
|
|
14
|
+
export type ComfyuiSettings = z.infer<typeof ComfyuiSettingsSchema>;
|
|
15
|
+
export declare const ComfyUIPromptSpecOptionsSchema: z.ZodObject<{
|
|
16
|
+
timeoutMs: z.ZodOptional<z.ZodNumber>;
|
|
17
|
+
pollDelayMs: z.ZodOptional<z.ZodNumber>;
|
|
18
|
+
pollMaxAttempts: z.ZodOptional<z.ZodNumber>;
|
|
19
|
+
}, z.core.$strict>;
|
|
20
|
+
export type ComfyUIPromptSpecOptions = z.infer<typeof ComfyUIPromptSpecOptionsSchema>;
|
|
21
|
+
export declare const ComfyUIHealthOptionsSchema: z.ZodObject<{
|
|
22
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
23
|
+
signal: z.ZodOptional<z.ZodInstanceOf<AbortSignal>>;
|
|
24
|
+
}, z.core.$strip>;
|
|
25
|
+
export declare const ComfyUISystemStatsSchema: z.ZodObject<{
|
|
26
|
+
system: z.ZodObject<{}, z.core.$loose>;
|
|
27
|
+
devices: z.ZodArray<z.ZodObject<{}, z.core.$loose>>;
|
|
28
|
+
}, z.core.$strip>;
|
|
29
|
+
export declare const ComfyUICheckpointsSchema: z.ZodObject<{
|
|
30
|
+
CheckpointLoaderSimple: z.ZodObject<{
|
|
31
|
+
input: z.ZodObject<{
|
|
32
|
+
required: z.ZodObject<{
|
|
33
|
+
ckpt_name: z.ZodTuple<[z.ZodArray<z.ZodString>], z.ZodType<import("@vibesdotdev/kernel/bootstrap").JsonValue, import("@vibesdotdev/kernel/bootstrap").JsonValue, z.core.$ZodTypeInternals<import("@vibesdotdev/kernel/bootstrap").JsonValue, import("@vibesdotdev/kernel/bootstrap").JsonValue>>>;
|
|
34
|
+
}, z.core.$strip>;
|
|
35
|
+
}, z.core.$strip>;
|
|
36
|
+
}, z.core.$strip>;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
export declare const ComfyUISubmissionSchema: z.ZodObject<{
|
|
39
|
+
prompt_id: z.ZodOptional<z.ZodString>;
|
|
40
|
+
error: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
41
|
+
message: z.ZodString;
|
|
42
|
+
}, z.core.$strip>]>>;
|
|
43
|
+
node_errors: z.ZodOptional<z.ZodType<import("@vibesdotdev/kernel/schemas/json").JsonObject, import("@vibesdotdev/kernel/schemas/json").JsonObject, z.core.$ZodTypeInternals<import("@vibesdotdev/kernel/schemas/json").JsonObject, import("@vibesdotdev/kernel/schemas/json").JsonObject>>>;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
export declare const ComfyUIImageSchema: z.ZodObject<{
|
|
46
|
+
filename: z.ZodString;
|
|
47
|
+
subfolder: z.ZodDefault<z.ZodString>;
|
|
48
|
+
type: z.ZodDefault<z.ZodString>;
|
|
49
|
+
}, z.core.$strip>;
|
|
50
|
+
export declare const ComfyUIHistoryEntrySchema: z.ZodObject<{
|
|
51
|
+
status: z.ZodOptional<z.ZodObject<{
|
|
52
|
+
status_str: z.ZodEnum<{
|
|
53
|
+
error: "error";
|
|
54
|
+
success: "success";
|
|
55
|
+
}>;
|
|
56
|
+
completed: z.ZodOptional<z.ZodBoolean>;
|
|
57
|
+
messages: z.ZodOptional<z.ZodArray<z.ZodTuple<[z.ZodString, z.ZodType<import("@vibesdotdev/kernel/bootstrap").JsonValue, import("@vibesdotdev/kernel/bootstrap").JsonValue, z.core.$ZodTypeInternals<import("@vibesdotdev/kernel/bootstrap").JsonValue, import("@vibesdotdev/kernel/bootstrap").JsonValue>>], null>>>;
|
|
58
|
+
}, z.core.$strip>>;
|
|
59
|
+
outputs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
60
|
+
images: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
61
|
+
filename: z.ZodString;
|
|
62
|
+
subfolder: z.ZodDefault<z.ZodString>;
|
|
63
|
+
type: z.ZodDefault<z.ZodString>;
|
|
64
|
+
}, z.core.$strip>>>;
|
|
65
|
+
}, z.core.$strip>>>;
|
|
66
|
+
}, z.core.$strip>;
|
|
67
|
+
export declare const ComfyUIHistorySchema: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
68
|
+
status: z.ZodOptional<z.ZodObject<{
|
|
69
|
+
status_str: z.ZodEnum<{
|
|
70
|
+
error: "error";
|
|
71
|
+
success: "success";
|
|
72
|
+
}>;
|
|
73
|
+
completed: z.ZodOptional<z.ZodBoolean>;
|
|
74
|
+
messages: z.ZodOptional<z.ZodArray<z.ZodTuple<[z.ZodString, z.ZodType<import("@vibesdotdev/kernel/bootstrap").JsonValue, import("@vibesdotdev/kernel/bootstrap").JsonValue, z.core.$ZodTypeInternals<import("@vibesdotdev/kernel/bootstrap").JsonValue, import("@vibesdotdev/kernel/bootstrap").JsonValue>>], null>>>;
|
|
75
|
+
}, z.core.$strip>>;
|
|
76
|
+
outputs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
77
|
+
images: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
78
|
+
filename: z.ZodString;
|
|
79
|
+
subfolder: z.ZodDefault<z.ZodString>;
|
|
80
|
+
type: z.ZodDefault<z.ZodString>;
|
|
81
|
+
}, z.core.$strip>>>;
|
|
82
|
+
}, z.core.$strip>>>;
|
|
83
|
+
}, z.core.$strip>>;
|
|
84
|
+
export type ComfyUIHistoryEntry = z.infer<typeof ComfyUIHistoryEntrySchema>;
|
|
85
|
+
export declare const ComfyUIGraphSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
86
|
+
class_type: z.ZodString;
|
|
87
|
+
inputs: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodTuple<[z.ZodString, z.ZodNumber], null>]>>;
|
|
88
|
+
}, z.core.$strip>>;
|
|
89
|
+
export type ComfyUIGraph = z.infer<typeof ComfyUIGraphSchema>;
|
|
90
|
+
/** Only a refused TCP connection confirms that this optional local service is absent. */
|
|
91
|
+
export declare const ComfyUIAbsentServiceSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
92
|
+
code: z.ZodLiteral<"ECONNREFUSED">;
|
|
93
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
94
|
+
cause: z.ZodObject<{
|
|
95
|
+
code: z.ZodLiteral<"ECONNREFUSED">;
|
|
96
|
+
}, z.core.$strip>;
|
|
97
|
+
}, z.core.$strip>]>;
|
|
98
|
+
//# sourceMappingURL=comfyui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comfyui.d.ts","sourceRoot":"","sources":["../../src/schemas/comfyui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAG5B,eAAO,MAAM,uBAAuB;;;;iBAIlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,qBAAqB;;;;;iBAKhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,8BAA8B;;;;kBAKhC,CAAC;AACZ,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEtF,eAAO,MAAM,0BAA0B;;;iBAGrC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;iBAGnC,CAAC;AACH,eAAO,MAAM,wBAAwB;;;;;;;;iBAQnC,CAAC;AACH,eAAO,MAAM,uBAAuB;;;;;;iBAIlC,CAAC;AACH,eAAO,MAAM,kBAAkB;;;;iBAI7B,CAAC;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;iBASyC,CAAC;AAChF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;kBAAkD,CAAC;AACpF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,eAAO,MAAM,kBAAkB;;;kBAK5B,CAAC;AACJ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,yFAAyF;AACzF,eAAO,MAAM,0BAA0B;;;;;;mBAGrC,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
import { JsonObjectSchema, JsonValueSchema } from '@vibesdotdev/kernel/schemas/json';
|
|
3
|
+
export const ComfyUIConnectionSchema = z.object({
|
|
4
|
+
baseUrl: z.url({ protocol: /^https?$/ }).default('http://localhost:8188'),
|
|
5
|
+
clientId: z.string().min(1).optional(),
|
|
6
|
+
timeout: z.number().int().positive().default(60_000)
|
|
7
|
+
});
|
|
8
|
+
export const ComfyuiSettingsSchema = z.object({
|
|
9
|
+
baseUrl: ComfyUIConnectionSchema.shape.baseUrl,
|
|
10
|
+
clientId: ComfyUIConnectionSchema.shape.clientId,
|
|
11
|
+
timeoutMs: ComfyUIConnectionSchema.shape.timeout,
|
|
12
|
+
pollDelayMs: z.number().int().nonnegative().default(1000)
|
|
13
|
+
});
|
|
14
|
+
export const ComfyUIPromptSpecOptionsSchema = z.object({
|
|
15
|
+
timeoutMs: z.number().int().positive().optional(),
|
|
16
|
+
pollDelayMs: z.number().int().nonnegative().optional(),
|
|
17
|
+
/** Compatibility input: converted to a real total deadline, never a request count. */
|
|
18
|
+
pollMaxAttempts: z.number().int().positive().optional()
|
|
19
|
+
}).strict();
|
|
20
|
+
export const ComfyUIHealthOptionsSchema = z.object({
|
|
21
|
+
timeout: z.number().int().positive().optional(),
|
|
22
|
+
signal: z.instanceof(AbortSignal).optional()
|
|
23
|
+
});
|
|
24
|
+
export const ComfyUISystemStatsSchema = z.object({
|
|
25
|
+
system: z.object({}).passthrough(),
|
|
26
|
+
devices: z.array(z.object({}).passthrough())
|
|
27
|
+
});
|
|
28
|
+
export const ComfyUICheckpointsSchema = z.object({
|
|
29
|
+
CheckpointLoaderSimple: z.object({
|
|
30
|
+
input: z.object({
|
|
31
|
+
required: z.object({
|
|
32
|
+
ckpt_name: z.tuple([z.array(z.string().min(1))]).rest(JsonValueSchema)
|
|
33
|
+
})
|
|
34
|
+
})
|
|
35
|
+
})
|
|
36
|
+
});
|
|
37
|
+
export const ComfyUISubmissionSchema = z.object({
|
|
38
|
+
prompt_id: z.string().min(1).optional(),
|
|
39
|
+
error: z.union([z.string().min(1), z.object({ message: z.string() })]).optional(),
|
|
40
|
+
node_errors: JsonObjectSchema.optional()
|
|
41
|
+
});
|
|
42
|
+
export const ComfyUIImageSchema = z.object({
|
|
43
|
+
filename: z.string().min(1),
|
|
44
|
+
subfolder: z.string().default(''),
|
|
45
|
+
type: z.string().min(1).default('output')
|
|
46
|
+
});
|
|
47
|
+
export const ComfyUIHistoryEntrySchema = z.object({
|
|
48
|
+
status: z.object({
|
|
49
|
+
status_str: z.enum(['success', 'error']),
|
|
50
|
+
completed: z.boolean().optional(),
|
|
51
|
+
messages: z.array(z.tuple([z.string(), JsonValueSchema])).optional()
|
|
52
|
+
}).optional(),
|
|
53
|
+
outputs: z.record(z.string(), z.object({
|
|
54
|
+
images: z.array(ComfyUIImageSchema).optional()
|
|
55
|
+
})).optional()
|
|
56
|
+
}).refine((entry) => entry.status !== undefined || entry.outputs !== undefined);
|
|
57
|
+
export const ComfyUIHistorySchema = z.record(z.string(), ComfyUIHistoryEntrySchema);
|
|
58
|
+
export const ComfyUIGraphSchema = z.record(z.string(), z.object({
|
|
59
|
+
class_type: z.string(),
|
|
60
|
+
inputs: z.record(z.string(), z.union([
|
|
61
|
+
z.string(), z.number(), z.boolean(), z.tuple([z.string(), z.number()])
|
|
62
|
+
]))
|
|
63
|
+
}));
|
|
64
|
+
/** Only a refused TCP connection confirms that this optional local service is absent. */
|
|
65
|
+
export const ComfyUIAbsentServiceSchema = z.union([
|
|
66
|
+
z.object({ code: z.literal('ECONNREFUSED') }),
|
|
67
|
+
z.object({ cause: z.object({ code: z.literal('ECONNREFUSED') }) })
|
|
68
|
+
]);
|
|
69
|
+
//# sourceMappingURL=comfyui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comfyui.js","sourceRoot":"","sources":["../../src/schemas/comfyui.ts"],"names":[],"mappings":"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"}
|