@optima-chat/gen-cli 1.0.0 → 1.0.2
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/dist/index.js +0 -0
- package/package.json +1 -1
- package/dist/backends/bfl.d.ts +0 -18
- package/dist/backends/bfl.d.ts.map +0 -1
- package/dist/backends/bfl.js +0 -130
- package/dist/backends/bfl.js.map +0 -1
- package/dist/backends/comfyui.d.ts +0 -10
- package/dist/backends/comfyui.d.ts.map +0 -1
- package/dist/backends/comfyui.js +0 -121
- package/dist/backends/comfyui.js.map +0 -1
- package/dist/backends/index.d.ts +0 -24
- package/dist/backends/index.d.ts.map +0 -1
- package/dist/backends/index.js +0 -59
- package/dist/backends/index.js.map +0 -1
- package/dist/backends/types.d.ts +0 -99
- package/dist/backends/types.d.ts.map +0 -1
- package/dist/backends/types.js +0 -2
- package/dist/backends/types.js.map +0 -1
- package/dist/backends/video-dashscope.d.ts +0 -10
- package/dist/backends/video-dashscope.d.ts.map +0 -1
- package/dist/backends/video-dashscope.js +0 -108
- package/dist/backends/video-dashscope.js.map +0 -1
- package/dist/backends/video-index.d.ts +0 -23
- package/dist/backends/video-index.d.ts.map +0 -1
- package/dist/backends/video-index.js +0 -57
- package/dist/backends/video-index.js.map +0 -1
- package/dist/commands/download.d.ts +0 -3
- package/dist/commands/download.d.ts.map +0 -1
- package/dist/commands/download.js +0 -169
- package/dist/commands/download.js.map +0 -1
- package/dist/commands/edit.d.ts +0 -3
- package/dist/commands/edit.d.ts.map +0 -1
- package/dist/commands/edit.js +0 -155
- package/dist/commands/edit.js.map +0 -1
- package/dist/commands/generate.d.ts +0 -3
- package/dist/commands/generate.d.ts.map +0 -1
- package/dist/commands/generate.js +0 -135
- package/dist/commands/generate.js.map +0 -1
- package/dist/commands/init.d.ts +0 -3
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -144
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/interrupt.d.ts +0 -3
- package/dist/commands/interrupt.d.ts.map +0 -1
- package/dist/commands/interrupt.js +0 -54
- package/dist/commands/interrupt.js.map +0 -1
- package/dist/commands/model.d.ts +0 -3
- package/dist/commands/model.d.ts.map +0 -1
- package/dist/commands/model.js +0 -82
- package/dist/commands/model.js.map +0 -1
- package/dist/commands/node.d.ts +0 -3
- package/dist/commands/node.d.ts.map +0 -1
- package/dist/commands/node.js +0 -148
- package/dist/commands/node.js.map +0 -1
- package/dist/commands/queue.d.ts +0 -3
- package/dist/commands/queue.d.ts.map +0 -1
- package/dist/commands/queue.js +0 -199
- package/dist/commands/queue.js.map +0 -1
- package/dist/commands/system.d.ts +0 -3
- package/dist/commands/system.d.ts.map +0 -1
- package/dist/commands/system.js +0 -85
- package/dist/commands/system.js.map +0 -1
- package/dist/commands/workflow.d.ts +0 -3
- package/dist/commands/workflow.d.ts.map +0 -1
- package/dist/commands/workflow.js +0 -244
- package/dist/commands/workflow.js.map +0 -1
- package/dist/services/api.d.ts +0 -23
- package/dist/services/api.d.ts.map +0 -1
- package/dist/services/api.js +0 -108
- package/dist/services/api.js.map +0 -1
- package/dist/services/bfl-api.d.ts +0 -67
- package/dist/services/bfl-api.d.ts.map +0 -1
- package/dist/services/bfl-api.js +0 -108
- package/dist/services/bfl-api.js.map +0 -1
- package/dist/services/dashscope-api.d.ts +0 -69
- package/dist/services/dashscope-api.d.ts.map +0 -1
- package/dist/services/dashscope-api.js +0 -134
- package/dist/services/dashscope-api.js.map +0 -1
- package/dist/services/dashscope-tts-api.d.ts +0 -23
- package/dist/services/dashscope-tts-api.d.ts.map +0 -1
- package/dist/services/dashscope-tts-api.js +0 -56
- package/dist/services/dashscope-tts-api.js.map +0 -1
- package/dist/services/fashn-api.d.ts +0 -57
- package/dist/services/fashn-api.d.ts.map +0 -1
- package/dist/services/fashn-api.js +0 -84
- package/dist/services/fashn-api.js.map +0 -1
- package/dist/services/groq-api.d.ts +0 -18
- package/dist/services/groq-api.d.ts.map +0 -1
- package/dist/services/groq-api.js +0 -30
- package/dist/services/groq-api.js.map +0 -1
- package/dist/services/websocket.d.ts +0 -33
- package/dist/services/websocket.d.ts.map +0 -1
- package/dist/services/websocket.js +0 -217
- package/dist/services/websocket.js.map +0 -1
- package/dist/utils/workflow.d.ts +0 -17
- package/dist/utils/workflow.d.ts.map +0 -1
- package/dist/utils/workflow.js +0 -81
- package/dist/utils/workflow.js.map +0 -1
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
export type TryonCategory = 'auto' | 'tops' | 'bottoms' | 'one-pieces';
|
|
2
|
-
export type TryonMode = 'performance' | 'balanced' | 'quality';
|
|
3
|
-
export type TryonGarmentPhotoType = 'auto' | 'flat-lay' | 'model';
|
|
4
|
-
export interface TryonParams {
|
|
5
|
-
model_image: string;
|
|
6
|
-
garment_image: string;
|
|
7
|
-
category?: TryonCategory;
|
|
8
|
-
mode?: TryonMode;
|
|
9
|
-
garment_photo_type?: TryonGarmentPhotoType;
|
|
10
|
-
num_samples?: number;
|
|
11
|
-
output_format?: 'png' | 'jpeg';
|
|
12
|
-
seed?: number;
|
|
13
|
-
}
|
|
14
|
-
export interface FashnRunResponse {
|
|
15
|
-
id: string;
|
|
16
|
-
status: string;
|
|
17
|
-
}
|
|
18
|
-
export interface FashnStatusResponse {
|
|
19
|
-
id: string;
|
|
20
|
-
status: 'starting' | 'processing' | 'completed' | 'failed';
|
|
21
|
-
output?: string[];
|
|
22
|
-
error?: {
|
|
23
|
-
name: string;
|
|
24
|
-
message: string;
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
export interface PollOptions {
|
|
28
|
-
interval?: number;
|
|
29
|
-
timeout?: number;
|
|
30
|
-
onProgress?: (status: string) => void;
|
|
31
|
-
}
|
|
32
|
-
export declare class FashnClient {
|
|
33
|
-
private client;
|
|
34
|
-
constructor(apiKey: string);
|
|
35
|
-
/**
|
|
36
|
-
* 提交虚拟试穿任务
|
|
37
|
-
*/
|
|
38
|
-
run(params: TryonParams): Promise<FashnRunResponse>;
|
|
39
|
-
/**
|
|
40
|
-
* 获取任务状态
|
|
41
|
-
*/
|
|
42
|
-
getStatus(id: string): Promise<FashnStatusResponse>;
|
|
43
|
-
/**
|
|
44
|
-
* 轮询等待结果
|
|
45
|
-
*/
|
|
46
|
-
poll(id: string, options?: PollOptions): Promise<FashnStatusResponse>;
|
|
47
|
-
/**
|
|
48
|
-
* 将本地图像转换为 base64 data URL
|
|
49
|
-
*/
|
|
50
|
-
imageToBase64(filePath: string): Promise<string>;
|
|
51
|
-
/**
|
|
52
|
-
* 下载图像到本地
|
|
53
|
-
*/
|
|
54
|
-
downloadImage(url: string, outputDir: string, filename?: string): Promise<string>;
|
|
55
|
-
private sleep;
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=fashn-api.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fashn-api.d.ts","sourceRoot":"","sources":["../../src/services/fashn-api.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC;AACvE,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,CAAC;AAC/D,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;AAElE,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,kBAAkB,CAAC,EAAE,qBAAqB,CAAC;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3D,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,MAAM;IAW1B;;OAEG;IACG,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQzD;;OAEG;IACG,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAKzD;;OAEG;IACG,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA8B/E;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAStD;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAevF,OAAO,CAAC,KAAK;CAGd"}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
2
|
-
import * as fs from 'fs/promises';
|
|
3
|
-
import * as path from 'path';
|
|
4
|
-
export class FashnClient {
|
|
5
|
-
client;
|
|
6
|
-
constructor(apiKey) {
|
|
7
|
-
this.client = axios.create({
|
|
8
|
-
baseURL: 'https://api.fashn.ai/v1',
|
|
9
|
-
headers: {
|
|
10
|
-
'Authorization': `Bearer ${apiKey}`,
|
|
11
|
-
'Content-Type': 'application/json',
|
|
12
|
-
},
|
|
13
|
-
timeout: 120000,
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* 提交虚拟试穿任务
|
|
18
|
-
*/
|
|
19
|
-
async run(params) {
|
|
20
|
-
const response = await this.client.post('/run', {
|
|
21
|
-
model_name: 'tryon-v1.6',
|
|
22
|
-
inputs: params,
|
|
23
|
-
});
|
|
24
|
-
return response.data;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* 获取任务状态
|
|
28
|
-
*/
|
|
29
|
-
async getStatus(id) {
|
|
30
|
-
const response = await this.client.get(`/status/${id}`);
|
|
31
|
-
return response.data;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* 轮询等待结果
|
|
35
|
-
*/
|
|
36
|
-
async poll(id, options = {}) {
|
|
37
|
-
const { interval = 2000, timeout = 300000, onProgress, } = options;
|
|
38
|
-
const startTime = Date.now();
|
|
39
|
-
while (true) {
|
|
40
|
-
if (Date.now() - startTime > timeout) {
|
|
41
|
-
throw new Error('FASHN polling timeout exceeded');
|
|
42
|
-
}
|
|
43
|
-
const result = await this.getStatus(id);
|
|
44
|
-
onProgress?.(result.status);
|
|
45
|
-
if (result.status === 'completed') {
|
|
46
|
-
return result;
|
|
47
|
-
}
|
|
48
|
-
if (result.status === 'failed') {
|
|
49
|
-
const errMsg = result.error ? `${result.error.name}: ${result.error.message}` : 'Unknown error';
|
|
50
|
-
throw new Error(`FASHN try-on failed: ${errMsg}`);
|
|
51
|
-
}
|
|
52
|
-
await this.sleep(interval);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* 将本地图像转换为 base64 data URL
|
|
57
|
-
*/
|
|
58
|
-
async imageToBase64(filePath) {
|
|
59
|
-
const absolutePath = path.resolve(filePath);
|
|
60
|
-
const buffer = await fs.readFile(absolutePath);
|
|
61
|
-
const base64 = buffer.toString('base64');
|
|
62
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
63
|
-
const mimeType = ext === '.png' ? 'image/png' : 'image/jpeg';
|
|
64
|
-
return `data:${mimeType};base64,${base64}`;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* 下载图像到本地
|
|
68
|
-
*/
|
|
69
|
-
async downloadImage(url, outputDir, filename) {
|
|
70
|
-
await fs.mkdir(outputDir, { recursive: true });
|
|
71
|
-
const response = await axios.get(url, {
|
|
72
|
-
responseType: 'arraybuffer',
|
|
73
|
-
timeout: 120000,
|
|
74
|
-
});
|
|
75
|
-
const finalFilename = filename || `tryon_${Date.now()}.png`;
|
|
76
|
-
const outputPath = path.join(outputDir, finalFilename);
|
|
77
|
-
await fs.writeFile(outputPath, response.data);
|
|
78
|
-
return outputPath;
|
|
79
|
-
}
|
|
80
|
-
sleep(ms) {
|
|
81
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
//# sourceMappingURL=fashn-api.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fashn-api.js","sourceRoot":"","sources":["../../src/services/fashn-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export interface TranscribeParams {
|
|
2
|
-
filePath: string;
|
|
3
|
-
model?: string;
|
|
4
|
-
language?: string;
|
|
5
|
-
}
|
|
6
|
-
export interface TranscribeResult {
|
|
7
|
-
text: string;
|
|
8
|
-
}
|
|
9
|
-
export declare class GroqClient {
|
|
10
|
-
private apiKey;
|
|
11
|
-
private baseUrl;
|
|
12
|
-
constructor(apiKey: string);
|
|
13
|
-
/**
|
|
14
|
-
* 语音识别(ASR)
|
|
15
|
-
*/
|
|
16
|
-
transcribe(params: TranscribeParams): Promise<TranscribeResult>;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=groq-api.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"groq-api.d.ts","sourceRoot":"","sources":["../../src/services/groq-api.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAoC;gBAEvC,MAAM,EAAE,MAAM;IAI1B;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAsBtE"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
2
|
-
import FormData from 'form-data';
|
|
3
|
-
import * as fs from 'fs';
|
|
4
|
-
export class GroqClient {
|
|
5
|
-
apiKey;
|
|
6
|
-
baseUrl = 'https://api.groq.com/openai/v1';
|
|
7
|
-
constructor(apiKey) {
|
|
8
|
-
this.apiKey = apiKey;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* 语音识别(ASR)
|
|
12
|
-
*/
|
|
13
|
-
async transcribe(params) {
|
|
14
|
-
const form = new FormData();
|
|
15
|
-
form.append('file', fs.createReadStream(params.filePath));
|
|
16
|
-
form.append('model', params.model || 'whisper-large-v3-turbo');
|
|
17
|
-
if (params.language) {
|
|
18
|
-
form.append('language', params.language);
|
|
19
|
-
}
|
|
20
|
-
const response = await axios.post(`${this.baseUrl}/audio/transcriptions`, form, {
|
|
21
|
-
headers: {
|
|
22
|
-
'Authorization': `Bearer ${this.apiKey}`,
|
|
23
|
-
...form.getHeaders(),
|
|
24
|
-
},
|
|
25
|
-
timeout: 60000,
|
|
26
|
-
});
|
|
27
|
-
return { text: response.data.text };
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=groq-api.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"groq-api.js","sourceRoot":"","sources":["../../src/services/groq-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAYzB,MAAM,OAAO,UAAU;IACb,MAAM,CAAS;IACf,OAAO,GAAG,gCAAgC,CAAC;IAEnD,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,MAAwB;QACvC,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,wBAAwB,CAAC,CAAC;QAC/D,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAC/B,GAAG,IAAI,CAAC,OAAO,uBAAuB,EACtC,IAAI,EACJ;YACE,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;gBACxC,GAAG,IAAI,CAAC,UAAU,EAAE;aACrB;YACD,OAAO,EAAE,KAAK;SACf,CACF,CAAC;QAEF,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from 'events';
|
|
2
|
-
export interface ProgressData {
|
|
3
|
-
value: number;
|
|
4
|
-
max: number;
|
|
5
|
-
node?: string | null;
|
|
6
|
-
prompt_id?: string;
|
|
7
|
-
}
|
|
8
|
-
export interface ExecutingData {
|
|
9
|
-
node: string | null;
|
|
10
|
-
prompt_id: string;
|
|
11
|
-
}
|
|
12
|
-
export interface ExecutedData {
|
|
13
|
-
node: string;
|
|
14
|
-
output: any;
|
|
15
|
-
prompt_id: string;
|
|
16
|
-
}
|
|
17
|
-
export declare class ComfyWebSocket extends EventEmitter {
|
|
18
|
-
private ws;
|
|
19
|
-
private clientId;
|
|
20
|
-
private reconnectAttempts;
|
|
21
|
-
private maxReconnectAttempts;
|
|
22
|
-
constructor(clientId?: string);
|
|
23
|
-
connect(): Promise<void>;
|
|
24
|
-
private handleMessage;
|
|
25
|
-
disconnect(): void;
|
|
26
|
-
isConnected(): boolean;
|
|
27
|
-
getClientId(): string;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* 监听特定 prompt_id 的执行进度
|
|
31
|
-
*/
|
|
32
|
-
export declare function monitorProgress(promptId: string, onProgress?: (current: number, total: number, message: string) => void, onComplete?: () => void): Promise<void>;
|
|
33
|
-
//# sourceMappingURL=websocket.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/services/websocket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,oBAAoB,CAAK;gBAErB,QAAQ,CAAC,EAAE,MAAM;IAKvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqD9B,OAAO,CAAC,aAAa;IAiCrB,UAAU;IAOV,WAAW,IAAI,OAAO;IAItB,WAAW,IAAI,MAAM;CAGtB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,EACtE,UAAU,CAAC,EAAE,MAAM,IAAI,GACtB,OAAO,CAAC,IAAI,CAAC,CAmHf"}
|
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
import WebSocket from 'ws';
|
|
2
|
-
import { EventEmitter } from 'events';
|
|
3
|
-
import { getConfig } from './config.js';
|
|
4
|
-
export class ComfyWebSocket extends EventEmitter {
|
|
5
|
-
ws = null;
|
|
6
|
-
clientId;
|
|
7
|
-
reconnectAttempts = 0;
|
|
8
|
-
maxReconnectAttempts = 3;
|
|
9
|
-
constructor(clientId) {
|
|
10
|
-
super();
|
|
11
|
-
this.clientId = clientId || `comfy-cli-${Date.now()}`;
|
|
12
|
-
}
|
|
13
|
-
async connect() {
|
|
14
|
-
const config = getConfig();
|
|
15
|
-
const serverUrl = new URL(config.server);
|
|
16
|
-
// 构建 WebSocket URL
|
|
17
|
-
const protocol = serverUrl.protocol === 'https:' ? 'wss:' : 'ws:';
|
|
18
|
-
const wsUrl = `${protocol}//${serverUrl.host}/ws?clientId=${this.clientId}`;
|
|
19
|
-
return new Promise((resolve, reject) => {
|
|
20
|
-
try {
|
|
21
|
-
this.ws = new WebSocket(wsUrl);
|
|
22
|
-
// 添加连接超时
|
|
23
|
-
const connectTimeout = setTimeout(() => {
|
|
24
|
-
if (this.ws && this.ws.readyState !== WebSocket.OPEN) {
|
|
25
|
-
this.ws.terminate();
|
|
26
|
-
reject(new Error('WebSocket connection timeout'));
|
|
27
|
-
}
|
|
28
|
-
}, 10000); // 10秒超时
|
|
29
|
-
this.ws.on('open', () => {
|
|
30
|
-
clearTimeout(connectTimeout);
|
|
31
|
-
this.reconnectAttempts = 0;
|
|
32
|
-
this.emit('connected');
|
|
33
|
-
resolve();
|
|
34
|
-
});
|
|
35
|
-
this.ws.on('message', (data) => {
|
|
36
|
-
try {
|
|
37
|
-
const message = JSON.parse(data.toString());
|
|
38
|
-
this.handleMessage(message);
|
|
39
|
-
}
|
|
40
|
-
catch (error) {
|
|
41
|
-
this.emit('error', new Error(`Failed to parse message: ${error}`));
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
this.ws.on('error', (error) => {
|
|
45
|
-
clearTimeout(connectTimeout);
|
|
46
|
-
this.emit('error', error);
|
|
47
|
-
reject(error);
|
|
48
|
-
});
|
|
49
|
-
this.ws.on('close', () => {
|
|
50
|
-
clearTimeout(connectTimeout);
|
|
51
|
-
this.emit('disconnected');
|
|
52
|
-
this.ws = null;
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
reject(error);
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
handleMessage(message) {
|
|
61
|
-
const { type, data } = message;
|
|
62
|
-
switch (type) {
|
|
63
|
-
case 'status':
|
|
64
|
-
this.emit('status', data);
|
|
65
|
-
break;
|
|
66
|
-
case 'progress':
|
|
67
|
-
this.emit('progress', data);
|
|
68
|
-
break;
|
|
69
|
-
case 'executing':
|
|
70
|
-
this.emit('executing', data);
|
|
71
|
-
break;
|
|
72
|
-
case 'executed':
|
|
73
|
-
this.emit('executed', data);
|
|
74
|
-
break;
|
|
75
|
-
case 'execution_start':
|
|
76
|
-
this.emit('execution_start', data);
|
|
77
|
-
break;
|
|
78
|
-
case 'execution_cached':
|
|
79
|
-
this.emit('execution_cached', data);
|
|
80
|
-
break;
|
|
81
|
-
case 'execution_success':
|
|
82
|
-
this.emit('execution_success', data);
|
|
83
|
-
break;
|
|
84
|
-
case 'execution_error':
|
|
85
|
-
this.emit('execution_error', data);
|
|
86
|
-
break;
|
|
87
|
-
default:
|
|
88
|
-
this.emit('message', message);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
disconnect() {
|
|
92
|
-
if (this.ws) {
|
|
93
|
-
this.ws.close();
|
|
94
|
-
this.ws = null;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
isConnected() {
|
|
98
|
-
return this.ws !== null && this.ws.readyState === WebSocket.OPEN;
|
|
99
|
-
}
|
|
100
|
-
getClientId() {
|
|
101
|
-
return this.clientId;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* 监听特定 prompt_id 的执行进度
|
|
106
|
-
*/
|
|
107
|
-
export async function monitorProgress(promptId, onProgress, onComplete) {
|
|
108
|
-
const ws = new ComfyWebSocket();
|
|
109
|
-
return new Promise(async (resolve, reject) => {
|
|
110
|
-
let currentStep = 0;
|
|
111
|
-
let totalSteps = 0;
|
|
112
|
-
let hasStarted = false;
|
|
113
|
-
let hasCompleted = false;
|
|
114
|
-
let timeout;
|
|
115
|
-
let completionCheckTimeout = null;
|
|
116
|
-
// 设置所有事件监听器
|
|
117
|
-
ws.on('connected', () => {
|
|
118
|
-
onProgress?.(0, 100, 'WebSocket 已连接,等待执行...');
|
|
119
|
-
});
|
|
120
|
-
ws.on('status', (data) => {
|
|
121
|
-
// 接收到初始状态消息
|
|
122
|
-
if (!hasStarted) {
|
|
123
|
-
onProgress?.(0, 100, '等待任务开始...');
|
|
124
|
-
}
|
|
125
|
-
// 检查队列是否为空且任务已完成
|
|
126
|
-
if (hasStarted && !hasCompleted && data.status?.exec_info?.queue_remaining === 0) {
|
|
127
|
-
if (currentStep === totalSteps && totalSteps > 0) {
|
|
128
|
-
hasCompleted = true;
|
|
129
|
-
clearTimeout(timeout);
|
|
130
|
-
if (completionCheckTimeout)
|
|
131
|
-
clearTimeout(completionCheckTimeout);
|
|
132
|
-
ws.disconnect();
|
|
133
|
-
onComplete?.();
|
|
134
|
-
resolve();
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
ws.on('progress', (data) => {
|
|
139
|
-
// 只处理我们的 prompt_id 的消息
|
|
140
|
-
if (data.prompt_id !== promptId) {
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
hasStarted = true;
|
|
144
|
-
if (data.max > 0) {
|
|
145
|
-
currentStep = data.value;
|
|
146
|
-
totalSteps = data.max;
|
|
147
|
-
const percent = Math.round((currentStep / totalSteps) * 100);
|
|
148
|
-
onProgress?.(currentStep, totalSteps, `处理中: ${percent}%`);
|
|
149
|
-
// 如果达到最大步数,设置一个延迟检查
|
|
150
|
-
if (currentStep === totalSteps) {
|
|
151
|
-
if (completionCheckTimeout)
|
|
152
|
-
clearTimeout(completionCheckTimeout);
|
|
153
|
-
completionCheckTimeout = setTimeout(() => {
|
|
154
|
-
if (!hasCompleted) {
|
|
155
|
-
hasCompleted = true;
|
|
156
|
-
clearTimeout(timeout);
|
|
157
|
-
ws.disconnect();
|
|
158
|
-
onComplete?.();
|
|
159
|
-
resolve();
|
|
160
|
-
}
|
|
161
|
-
}, 2000); // 等待2秒确认完成
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
ws.on('executing', (data) => {
|
|
166
|
-
// 只处理我们的 prompt_id 的消息
|
|
167
|
-
if (data.prompt_id !== promptId) {
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
hasStarted = true;
|
|
171
|
-
if (data.node === null) {
|
|
172
|
-
// 执行完成
|
|
173
|
-
hasCompleted = true;
|
|
174
|
-
clearTimeout(timeout);
|
|
175
|
-
if (completionCheckTimeout)
|
|
176
|
-
clearTimeout(completionCheckTimeout);
|
|
177
|
-
ws.disconnect();
|
|
178
|
-
onComplete?.();
|
|
179
|
-
resolve();
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
ws.on('execution_error', (data) => {
|
|
183
|
-
if (data.prompt_id === promptId) {
|
|
184
|
-
clearTimeout(timeout);
|
|
185
|
-
if (completionCheckTimeout)
|
|
186
|
-
clearTimeout(completionCheckTimeout);
|
|
187
|
-
ws.disconnect();
|
|
188
|
-
reject(new Error(`执行失败: ${JSON.stringify(data)}`));
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
ws.on('error', (error) => {
|
|
192
|
-
clearTimeout(timeout);
|
|
193
|
-
if (completionCheckTimeout)
|
|
194
|
-
clearTimeout(completionCheckTimeout);
|
|
195
|
-
ws.disconnect();
|
|
196
|
-
reject(error);
|
|
197
|
-
});
|
|
198
|
-
// 超时保护
|
|
199
|
-
timeout = setTimeout(() => {
|
|
200
|
-
if (ws.isConnected()) {
|
|
201
|
-
if (completionCheckTimeout)
|
|
202
|
-
clearTimeout(completionCheckTimeout);
|
|
203
|
-
ws.disconnect();
|
|
204
|
-
reject(new Error('执行超时'));
|
|
205
|
-
}
|
|
206
|
-
}, 5 * 60 * 1000); // 5分钟超时
|
|
207
|
-
// 连接 WebSocket
|
|
208
|
-
try {
|
|
209
|
-
await ws.connect();
|
|
210
|
-
}
|
|
211
|
-
catch (error) {
|
|
212
|
-
clearTimeout(timeout);
|
|
213
|
-
reject(error);
|
|
214
|
-
}
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
|
-
//# sourceMappingURL=websocket.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/services/websocket.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/workflow.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 从 workflow 中提取所有 {{variable}} 变量
|
|
3
|
-
*/
|
|
4
|
-
export declare function extractVariables(workflow: any): string[];
|
|
5
|
-
/**
|
|
6
|
-
* 替换 workflow 中的变量
|
|
7
|
-
*/
|
|
8
|
-
export declare function replaceVariables(workflow: any, values: Record<string, any>): any;
|
|
9
|
-
/**
|
|
10
|
-
* 加载 workflow 文件
|
|
11
|
-
*/
|
|
12
|
-
export declare function loadWorkflow(workflowPath: string): any;
|
|
13
|
-
/**
|
|
14
|
-
* 获取内置 workflow 路径
|
|
15
|
-
*/
|
|
16
|
-
export declare function getBuiltinWorkflowPath(name: string): string;
|
|
17
|
-
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/utils/workflow.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,EAAE,CAmBxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAwBhF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,GAAG,CAatD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM3D"}
|
package/dist/utils/workflow.js
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
/**
|
|
5
|
-
* 从 workflow 中提取所有 {{variable}} 变量
|
|
6
|
-
*/
|
|
7
|
-
export function extractVariables(workflow) {
|
|
8
|
-
const variables = new Set();
|
|
9
|
-
const regex = /\{\{(\w+)\}\}/g;
|
|
10
|
-
const traverse = (obj) => {
|
|
11
|
-
if (typeof obj === 'string') {
|
|
12
|
-
let match;
|
|
13
|
-
while ((match = regex.exec(obj)) !== null) {
|
|
14
|
-
variables.add(match[1]);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
else if (Array.isArray(obj)) {
|
|
18
|
-
obj.forEach(traverse);
|
|
19
|
-
}
|
|
20
|
-
else if (obj && typeof obj === 'object') {
|
|
21
|
-
Object.values(obj).forEach(traverse);
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
traverse(workflow);
|
|
25
|
-
return Array.from(variables);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* 替换 workflow 中的变量
|
|
29
|
-
*/
|
|
30
|
-
export function replaceVariables(workflow, values) {
|
|
31
|
-
const result = JSON.parse(JSON.stringify(workflow));
|
|
32
|
-
const traverse = (obj) => {
|
|
33
|
-
if (typeof obj === 'string') {
|
|
34
|
-
return obj.replace(/\{\{(\w+)\}\}/g, (match, varName) => {
|
|
35
|
-
if (varName in values) {
|
|
36
|
-
return String(values[varName]);
|
|
37
|
-
}
|
|
38
|
-
return match;
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
else if (Array.isArray(obj)) {
|
|
42
|
-
return obj.map(traverse);
|
|
43
|
-
}
|
|
44
|
-
else if (obj && typeof obj === 'object') {
|
|
45
|
-
const newObj = {};
|
|
46
|
-
for (const [key, value] of Object.entries(obj)) {
|
|
47
|
-
newObj[key] = traverse(value);
|
|
48
|
-
}
|
|
49
|
-
return newObj;
|
|
50
|
-
}
|
|
51
|
-
return obj;
|
|
52
|
-
};
|
|
53
|
-
return traverse(result);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* 加载 workflow 文件
|
|
57
|
-
*/
|
|
58
|
-
export function loadWorkflow(workflowPath) {
|
|
59
|
-
const fullPath = path.resolve(workflowPath);
|
|
60
|
-
if (!fs.existsSync(fullPath)) {
|
|
61
|
-
throw new Error(`Workflow file not found: ${fullPath}`);
|
|
62
|
-
}
|
|
63
|
-
try {
|
|
64
|
-
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
65
|
-
return JSON.parse(content);
|
|
66
|
-
}
|
|
67
|
-
catch (error) {
|
|
68
|
-
throw new Error(`Failed to parse workflow file: ${error}`);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* 获取内置 workflow 路径
|
|
73
|
-
*/
|
|
74
|
-
export function getBuiltinWorkflowPath(name) {
|
|
75
|
-
// 从项目根目录的 workflows 目录加载
|
|
76
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
77
|
-
const __dirname = path.dirname(__filename);
|
|
78
|
-
const projectRoot = path.resolve(__dirname, '../../');
|
|
79
|
-
return path.join(projectRoot, 'workflows', name);
|
|
80
|
-
}
|
|
81
|
-
//# sourceMappingURL=workflow.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/utils/workflow.ts"],"names":[],"mappings":"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"}
|