@optima-chat/gen-cli 1.0.0 → 1.0.1
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
package/dist/services/api.js
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
2
|
-
import FormData from 'form-data';
|
|
3
|
-
import { getConfig } from './config.js';
|
|
4
|
-
export class ComfyAPIClient {
|
|
5
|
-
client;
|
|
6
|
-
constructor() {
|
|
7
|
-
const config = getConfig();
|
|
8
|
-
this.client = axios.create({
|
|
9
|
-
baseURL: config.server,
|
|
10
|
-
timeout: config.timeout,
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
async getSystemStats() {
|
|
14
|
-
const response = await this.client.get('/system_stats');
|
|
15
|
-
return response.data;
|
|
16
|
-
}
|
|
17
|
-
async getQueue() {
|
|
18
|
-
const response = await this.client.get('/queue');
|
|
19
|
-
return response.data;
|
|
20
|
-
}
|
|
21
|
-
async submitWorkflow(workflow) {
|
|
22
|
-
const response = await this.client.post('/prompt', { prompt: workflow });
|
|
23
|
-
return response.data;
|
|
24
|
-
}
|
|
25
|
-
async getHistory(promptId) {
|
|
26
|
-
const url = promptId ? `/history/${promptId}` : '/history';
|
|
27
|
-
const response = await this.client.get(url);
|
|
28
|
-
return response.data;
|
|
29
|
-
}
|
|
30
|
-
async clearQueue() {
|
|
31
|
-
const response = await this.client.post('/queue', { clear: true });
|
|
32
|
-
return response.data;
|
|
33
|
-
}
|
|
34
|
-
async deleteQueueItem(itemId) {
|
|
35
|
-
const response = await this.client.post('/queue', { delete: [itemId] });
|
|
36
|
-
return response.data;
|
|
37
|
-
}
|
|
38
|
-
async interrupt() {
|
|
39
|
-
const response = await this.client.post('/interrupt');
|
|
40
|
-
return response.data;
|
|
41
|
-
}
|
|
42
|
-
async listModels(folder) {
|
|
43
|
-
const url = folder ? `/models/${folder}` : '/models';
|
|
44
|
-
const response = await this.client.get(url);
|
|
45
|
-
return response.data;
|
|
46
|
-
}
|
|
47
|
-
async getObjectInfo(nodeClass) {
|
|
48
|
-
const url = nodeClass ? `/object_info/${nodeClass}` : '/object_info';
|
|
49
|
-
const response = await this.client.get(url);
|
|
50
|
-
return response.data;
|
|
51
|
-
}
|
|
52
|
-
async uploadImage(file, filename) {
|
|
53
|
-
const formData = new FormData();
|
|
54
|
-
formData.append('image', file, filename);
|
|
55
|
-
formData.append('overwrite', 'true');
|
|
56
|
-
const response = await this.client.post('/upload/image', formData, {
|
|
57
|
-
headers: formData.getHeaders(),
|
|
58
|
-
timeout: 120000, // 2 分钟超时,用于大文件上传
|
|
59
|
-
});
|
|
60
|
-
return response.data;
|
|
61
|
-
}
|
|
62
|
-
async downloadImage(filename, subfolder = '', type = 'output') {
|
|
63
|
-
const params = new URLSearchParams({
|
|
64
|
-
filename,
|
|
65
|
-
subfolder,
|
|
66
|
-
type,
|
|
67
|
-
});
|
|
68
|
-
const response = await this.client.get(`/view?${params.toString()}`, {
|
|
69
|
-
responseType: 'arraybuffer',
|
|
70
|
-
timeout: 120000, // 2 分钟超时,用于大文件下载
|
|
71
|
-
});
|
|
72
|
-
return Buffer.from(response.data);
|
|
73
|
-
}
|
|
74
|
-
async getOutputFiles(promptId) {
|
|
75
|
-
const history = await this.getHistory(promptId);
|
|
76
|
-
const data = history[promptId];
|
|
77
|
-
if (!data || !data.outputs) {
|
|
78
|
-
return [];
|
|
79
|
-
}
|
|
80
|
-
const files = [];
|
|
81
|
-
// 遍历所有输出节点
|
|
82
|
-
for (const nodeId in data.outputs) {
|
|
83
|
-
const output = data.outputs[nodeId];
|
|
84
|
-
// 检查图片输出
|
|
85
|
-
if (output.images) {
|
|
86
|
-
for (const image of output.images) {
|
|
87
|
-
files.push({
|
|
88
|
-
filename: image.filename,
|
|
89
|
-
subfolder: image.subfolder || '',
|
|
90
|
-
type: image.type || 'output',
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
// 检查视频输出
|
|
95
|
-
if (output.gifs) {
|
|
96
|
-
for (const gif of output.gifs) {
|
|
97
|
-
files.push({
|
|
98
|
-
filename: gif.filename,
|
|
99
|
-
subfolder: gif.subfolder || '',
|
|
100
|
-
type: gif.type || 'output',
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
return files;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
//# sourceMappingURL=api.js.map
|
package/dist/services/api.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
export interface BFLSubmitParams {
|
|
2
|
-
prompt: string;
|
|
3
|
-
input_image?: string;
|
|
4
|
-
input_image_2?: string;
|
|
5
|
-
input_image_3?: string;
|
|
6
|
-
input_image_4?: string;
|
|
7
|
-
input_image_5?: string;
|
|
8
|
-
input_image_6?: string;
|
|
9
|
-
input_image_7?: string;
|
|
10
|
-
input_image_8?: string;
|
|
11
|
-
width?: number;
|
|
12
|
-
height?: number;
|
|
13
|
-
seed?: number;
|
|
14
|
-
safety_tolerance?: number;
|
|
15
|
-
output_format?: 'jpeg' | 'png';
|
|
16
|
-
}
|
|
17
|
-
export interface BFLSubmitResponse {
|
|
18
|
-
id: string;
|
|
19
|
-
polling_url: string;
|
|
20
|
-
status?: string;
|
|
21
|
-
cost?: number;
|
|
22
|
-
input_mp?: number;
|
|
23
|
-
output_mp?: number;
|
|
24
|
-
}
|
|
25
|
-
export interface BFLPollResponse {
|
|
26
|
-
status: 'Pending' | 'Ready' | 'Error' | 'Request Moderated' | 'Content Moderated' | 'Task not found';
|
|
27
|
-
result?: {
|
|
28
|
-
sample?: string;
|
|
29
|
-
prompt?: string;
|
|
30
|
-
seed?: number;
|
|
31
|
-
start_time?: number;
|
|
32
|
-
end_time?: number;
|
|
33
|
-
duration?: number;
|
|
34
|
-
};
|
|
35
|
-
progress?: number;
|
|
36
|
-
}
|
|
37
|
-
export interface PollOptions {
|
|
38
|
-
interval?: number;
|
|
39
|
-
timeout?: number;
|
|
40
|
-
onProgress?: (status: string, progress?: number) => void;
|
|
41
|
-
}
|
|
42
|
-
export declare class BFLClient {
|
|
43
|
-
private client;
|
|
44
|
-
constructor(apiKey: string);
|
|
45
|
-
/**
|
|
46
|
-
* 提交图像生成/编辑任务 (FLUX.2 Pro)
|
|
47
|
-
*/
|
|
48
|
-
submit(params: BFLSubmitParams): Promise<BFLSubmitResponse>;
|
|
49
|
-
/**
|
|
50
|
-
* 获取任务结果
|
|
51
|
-
*/
|
|
52
|
-
getResult(taskId: string): Promise<BFLPollResponse>;
|
|
53
|
-
/**
|
|
54
|
-
* 轮询等待结果
|
|
55
|
-
*/
|
|
56
|
-
poll(taskIdOrUrl: string, options?: PollOptions): Promise<BFLPollResponse>;
|
|
57
|
-
/**
|
|
58
|
-
* 将本地图像转换为 base64 data URL
|
|
59
|
-
*/
|
|
60
|
-
imageToBase64(filePath: string): Promise<string>;
|
|
61
|
-
/**
|
|
62
|
-
* 下载图像到本地
|
|
63
|
-
*/
|
|
64
|
-
downloadImage(url: string, outputDir: string, filename?: string): Promise<string>;
|
|
65
|
-
private sleep;
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=bfl-api.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bfl-api.d.ts","sourceRoot":"","sources":["../../src/services/bfl-api.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,gBAAgB,CAAC;IACrG,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1D;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,MAAM;IAW1B;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKjE;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAOzD;;OAEG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAoDpF;;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;IAoBvF,OAAO,CAAC,KAAK;CAGd"}
|
package/dist/services/bfl-api.js
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
2
|
-
import * as fs from 'fs/promises';
|
|
3
|
-
import * as path from 'path';
|
|
4
|
-
export class BFLClient {
|
|
5
|
-
client;
|
|
6
|
-
constructor(apiKey) {
|
|
7
|
-
this.client = axios.create({
|
|
8
|
-
baseURL: 'https://api.bfl.ai/v1',
|
|
9
|
-
headers: {
|
|
10
|
-
'x-key': apiKey,
|
|
11
|
-
'Content-Type': 'application/json',
|
|
12
|
-
},
|
|
13
|
-
timeout: 120000,
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* 提交图像生成/编辑任务 (FLUX.2 Pro)
|
|
18
|
-
*/
|
|
19
|
-
async submit(params) {
|
|
20
|
-
const response = await this.client.post('/flux-2-pro', params);
|
|
21
|
-
return response.data;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* 获取任务结果
|
|
25
|
-
*/
|
|
26
|
-
async getResult(taskId) {
|
|
27
|
-
const response = await this.client.get('/get_result', {
|
|
28
|
-
params: { id: taskId },
|
|
29
|
-
});
|
|
30
|
-
return response.data;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* 轮询等待结果
|
|
34
|
-
*/
|
|
35
|
-
async poll(taskIdOrUrl, options = {}) {
|
|
36
|
-
const { interval = 1000, timeout = 300000, // 5 分钟
|
|
37
|
-
onProgress, } = options;
|
|
38
|
-
const startTime = Date.now();
|
|
39
|
-
while (true) {
|
|
40
|
-
// 检查超时
|
|
41
|
-
if (Date.now() - startTime > timeout) {
|
|
42
|
-
throw new Error('BFL polling timeout exceeded');
|
|
43
|
-
}
|
|
44
|
-
// 获取状态 - 支持完整 URL 或 taskId
|
|
45
|
-
let result;
|
|
46
|
-
if (taskIdOrUrl.startsWith('http://') || taskIdOrUrl.startsWith('https://')) {
|
|
47
|
-
// 使用完整 URL
|
|
48
|
-
const response = await axios.get(taskIdOrUrl, { timeout: this.client.defaults.timeout });
|
|
49
|
-
result = response.data;
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
// 使用 taskId
|
|
53
|
-
result = await this.getResult(taskIdOrUrl);
|
|
54
|
-
}
|
|
55
|
-
// 通知进度
|
|
56
|
-
onProgress?.(result.status, result.progress);
|
|
57
|
-
// 完成
|
|
58
|
-
if (result.status === 'Ready') {
|
|
59
|
-
return result;
|
|
60
|
-
}
|
|
61
|
-
// 失败
|
|
62
|
-
if (result.status === 'Error') {
|
|
63
|
-
throw new Error('BFL generation failed');
|
|
64
|
-
}
|
|
65
|
-
if (result.status === 'Request Moderated' || result.status === 'Content Moderated') {
|
|
66
|
-
throw new Error(`BFL content moderation: ${result.status}`);
|
|
67
|
-
}
|
|
68
|
-
if (result.status === 'Task not found') {
|
|
69
|
-
throw new Error('BFL task not found');
|
|
70
|
-
}
|
|
71
|
-
// 等待后继续轮询
|
|
72
|
-
await this.sleep(interval);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* 将本地图像转换为 base64 data URL
|
|
77
|
-
*/
|
|
78
|
-
async imageToBase64(filePath) {
|
|
79
|
-
const absolutePath = path.resolve(filePath);
|
|
80
|
-
const buffer = await fs.readFile(absolutePath);
|
|
81
|
-
const base64 = buffer.toString('base64');
|
|
82
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
83
|
-
const mimeType = ext === '.png' ? 'image/png' : 'image/jpeg';
|
|
84
|
-
return `data:${mimeType};base64,${base64}`;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* 下载图像到本地
|
|
88
|
-
*/
|
|
89
|
-
async downloadImage(url, outputDir, filename) {
|
|
90
|
-
// 确保输出目录存在
|
|
91
|
-
await fs.mkdir(outputDir, { recursive: true });
|
|
92
|
-
// 下载图像
|
|
93
|
-
const response = await axios.get(url, {
|
|
94
|
-
responseType: 'arraybuffer',
|
|
95
|
-
timeout: 120000, // 2 分钟
|
|
96
|
-
});
|
|
97
|
-
// 确定文件名
|
|
98
|
-
const finalFilename = filename || `bfl_${Date.now()}.png`;
|
|
99
|
-
const outputPath = path.join(outputDir, finalFilename);
|
|
100
|
-
// 写入文件
|
|
101
|
-
await fs.writeFile(outputPath, response.data);
|
|
102
|
-
return outputPath;
|
|
103
|
-
}
|
|
104
|
-
sleep(ms) {
|
|
105
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
//# sourceMappingURL=bfl-api.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bfl-api.js","sourceRoot":"","sources":["../../src/services/bfl-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
export interface DashScopeSubmitParams {
|
|
2
|
-
prompt?: string;
|
|
3
|
-
negativePrompt?: string;
|
|
4
|
-
imgUrl: string;
|
|
5
|
-
audioUrl?: string;
|
|
6
|
-
resolution?: '720P' | '1080P';
|
|
7
|
-
duration?: 5 | 10 | 15;
|
|
8
|
-
promptExtend?: boolean;
|
|
9
|
-
audio?: boolean;
|
|
10
|
-
shotType?: 'single' | 'multi';
|
|
11
|
-
watermark?: boolean;
|
|
12
|
-
seed?: number;
|
|
13
|
-
}
|
|
14
|
-
export interface DashScopeSubmitResponse {
|
|
15
|
-
output: {
|
|
16
|
-
task_id: string;
|
|
17
|
-
task_status: string;
|
|
18
|
-
};
|
|
19
|
-
request_id: string;
|
|
20
|
-
}
|
|
21
|
-
export interface DashScopeTaskResult {
|
|
22
|
-
output: {
|
|
23
|
-
task_id: string;
|
|
24
|
-
task_status: 'PENDING' | 'RUNNING' | 'SUCCEEDED' | 'FAILED' | 'CANCELED' | 'UNKNOWN';
|
|
25
|
-
video_url?: string;
|
|
26
|
-
orig_prompt?: string;
|
|
27
|
-
actual_prompt?: string;
|
|
28
|
-
submit_time?: string;
|
|
29
|
-
end_time?: string;
|
|
30
|
-
};
|
|
31
|
-
usage?: {
|
|
32
|
-
duration?: number;
|
|
33
|
-
SR?: number;
|
|
34
|
-
video_count?: number;
|
|
35
|
-
};
|
|
36
|
-
request_id: string;
|
|
37
|
-
}
|
|
38
|
-
export interface PollOptions {
|
|
39
|
-
interval?: number;
|
|
40
|
-
timeout?: number;
|
|
41
|
-
onProgress?: (status: string) => void;
|
|
42
|
-
}
|
|
43
|
-
export declare class DashScopeClient {
|
|
44
|
-
private client;
|
|
45
|
-
private baseUrl;
|
|
46
|
-
constructor(apiKey: string);
|
|
47
|
-
/**
|
|
48
|
-
* 提交视频生成任务 (wan2.6-i2v)
|
|
49
|
-
*/
|
|
50
|
-
submit(params: DashScopeSubmitParams): Promise<DashScopeSubmitResponse>;
|
|
51
|
-
/**
|
|
52
|
-
* 获取任务结果
|
|
53
|
-
*/
|
|
54
|
-
getResult(taskId: string): Promise<DashScopeTaskResult>;
|
|
55
|
-
/**
|
|
56
|
-
* 轮询等待结果
|
|
57
|
-
*/
|
|
58
|
-
poll(taskId: string, options?: PollOptions): Promise<DashScopeTaskResult>;
|
|
59
|
-
/**
|
|
60
|
-
* 将本地图像转换为 base64 data URL
|
|
61
|
-
*/
|
|
62
|
-
imageToBase64(filePath: string): Promise<string>;
|
|
63
|
-
/**
|
|
64
|
-
* 下载视频到本地
|
|
65
|
-
*/
|
|
66
|
-
downloadVideo(url: string, outputDir: string, filename?: string): Promise<string>;
|
|
67
|
-
private sleep;
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=dashscope-api.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dashscope-api.d.ts","sourceRoot":"","sources":["../../src/services/dashscope-api.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;QACrF,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;CACpB;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,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAA2C;gBAE9C,MAAM,EAAE,MAAM;IAY1B;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAiC7E;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAW7D;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA6CnF;;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;IAoBvF,OAAO,CAAC,KAAK;CAGd"}
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
2
|
-
import * as fs from 'fs/promises';
|
|
3
|
-
import * as path from 'path';
|
|
4
|
-
export class DashScopeClient {
|
|
5
|
-
client;
|
|
6
|
-
baseUrl = 'https://dashscope.aliyuncs.com/api/v1';
|
|
7
|
-
constructor(apiKey) {
|
|
8
|
-
this.client = axios.create({
|
|
9
|
-
baseURL: this.baseUrl,
|
|
10
|
-
headers: {
|
|
11
|
-
'Authorization': `Bearer ${apiKey}`,
|
|
12
|
-
'Content-Type': 'application/json',
|
|
13
|
-
'X-DashScope-Async': 'enable',
|
|
14
|
-
},
|
|
15
|
-
timeout: 30000,
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* 提交视频生成任务 (wan2.6-i2v)
|
|
20
|
-
*/
|
|
21
|
-
async submit(params) {
|
|
22
|
-
const requestBody = {
|
|
23
|
-
model: 'wan2.6-i2v',
|
|
24
|
-
input: {
|
|
25
|
-
prompt: params.prompt,
|
|
26
|
-
negative_prompt: params.negativePrompt,
|
|
27
|
-
img_url: params.imgUrl,
|
|
28
|
-
audio_url: params.audioUrl,
|
|
29
|
-
},
|
|
30
|
-
parameters: {
|
|
31
|
-
resolution: params.resolution || '1080P',
|
|
32
|
-
duration: params.duration || 5,
|
|
33
|
-
prompt_extend: params.promptExtend ?? true,
|
|
34
|
-
audio: params.audio ?? true,
|
|
35
|
-
shot_type: params.shotType || 'single',
|
|
36
|
-
watermark: params.watermark ?? false,
|
|
37
|
-
seed: params.seed,
|
|
38
|
-
},
|
|
39
|
-
};
|
|
40
|
-
// 移除 undefined 值
|
|
41
|
-
if (!requestBody.input.prompt)
|
|
42
|
-
delete requestBody.input.prompt;
|
|
43
|
-
if (!requestBody.input.negative_prompt)
|
|
44
|
-
delete requestBody.input.negative_prompt;
|
|
45
|
-
if (!requestBody.input.audio_url)
|
|
46
|
-
delete requestBody.input.audio_url;
|
|
47
|
-
if (requestBody.parameters.seed === undefined)
|
|
48
|
-
delete requestBody.parameters.seed;
|
|
49
|
-
const response = await this.client.post('/services/aigc/video-generation/video-synthesis', requestBody);
|
|
50
|
-
return response.data;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* 获取任务结果
|
|
54
|
-
*/
|
|
55
|
-
async getResult(taskId) {
|
|
56
|
-
// 查询任务不需要 X-DashScope-Async 头
|
|
57
|
-
const response = await axios.get(`${this.baseUrl}/tasks/${taskId}`, {
|
|
58
|
-
headers: {
|
|
59
|
-
'Authorization': this.client.defaults.headers['Authorization'],
|
|
60
|
-
},
|
|
61
|
-
timeout: 30000,
|
|
62
|
-
});
|
|
63
|
-
return response.data;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* 轮询等待结果
|
|
67
|
-
*/
|
|
68
|
-
async poll(taskId, options = {}) {
|
|
69
|
-
const { interval = 15000, // DashScope 建议 15 秒轮询一次
|
|
70
|
-
timeout = 600000, // 10 分钟超时(视频生成较慢)
|
|
71
|
-
onProgress, } = options;
|
|
72
|
-
const startTime = Date.now();
|
|
73
|
-
while (true) {
|
|
74
|
-
// 检查超时
|
|
75
|
-
if (Date.now() - startTime > timeout) {
|
|
76
|
-
throw new Error('DashScope polling timeout exceeded');
|
|
77
|
-
}
|
|
78
|
-
// 获取状态
|
|
79
|
-
const result = await this.getResult(taskId);
|
|
80
|
-
const status = result.output.task_status;
|
|
81
|
-
// 通知进度
|
|
82
|
-
onProgress?.(status);
|
|
83
|
-
// 完成
|
|
84
|
-
if (status === 'SUCCEEDED') {
|
|
85
|
-
return result;
|
|
86
|
-
}
|
|
87
|
-
// 失败
|
|
88
|
-
if (status === 'FAILED') {
|
|
89
|
-
throw new Error('DashScope video generation failed');
|
|
90
|
-
}
|
|
91
|
-
if (status === 'CANCELED') {
|
|
92
|
-
throw new Error('DashScope task was canceled');
|
|
93
|
-
}
|
|
94
|
-
if (status === 'UNKNOWN') {
|
|
95
|
-
throw new Error('DashScope task status unknown');
|
|
96
|
-
}
|
|
97
|
-
// 等待后继续轮询
|
|
98
|
-
await this.sleep(interval);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* 将本地图像转换为 base64 data URL
|
|
103
|
-
*/
|
|
104
|
-
async imageToBase64(filePath) {
|
|
105
|
-
const absolutePath = path.resolve(filePath);
|
|
106
|
-
const buffer = await fs.readFile(absolutePath);
|
|
107
|
-
const base64 = buffer.toString('base64');
|
|
108
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
109
|
-
const mimeType = ext === '.png' ? 'image/png' : 'image/jpeg';
|
|
110
|
-
return `data:${mimeType};base64,${base64}`;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* 下载视频到本地
|
|
114
|
-
*/
|
|
115
|
-
async downloadVideo(url, outputDir, filename) {
|
|
116
|
-
// 确保输出目录存在
|
|
117
|
-
await fs.mkdir(outputDir, { recursive: true });
|
|
118
|
-
// 下载视频
|
|
119
|
-
const response = await axios.get(url, {
|
|
120
|
-
responseType: 'arraybuffer',
|
|
121
|
-
timeout: 300000, // 5 分钟(视频文件较大)
|
|
122
|
-
});
|
|
123
|
-
// 确定文件名
|
|
124
|
-
const finalFilename = filename || `dashscope_${Date.now()}.mp4`;
|
|
125
|
-
const outputPath = path.join(outputDir, finalFilename);
|
|
126
|
-
// 写入文件
|
|
127
|
-
await fs.writeFile(outputPath, response.data);
|
|
128
|
-
return outputPath;
|
|
129
|
-
}
|
|
130
|
-
sleep(ms) {
|
|
131
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
//# sourceMappingURL=dashscope-api.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dashscope-api.js","sourceRoot":"","sources":["../../src/services/dashscope-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export interface TTSSynthesizeParams {
|
|
2
|
-
text: string;
|
|
3
|
-
voice?: string;
|
|
4
|
-
languageType?: string;
|
|
5
|
-
}
|
|
6
|
-
export interface TTSSynthesizeResult {
|
|
7
|
-
audioUrl: string;
|
|
8
|
-
}
|
|
9
|
-
export declare const TTS_VOICES: readonly ["Cherry", "Serena", "Chelsie", "Aria", "Bella", "Vivian", "Jennifer", "Katerina", "Breeze", "Maple", "Sakura", "Ethan", "Aiden", "Brandon", "Ryan", "Luke", "Leo"];
|
|
10
|
-
export declare class DashScopeTTSClient {
|
|
11
|
-
private client;
|
|
12
|
-
private baseUrl;
|
|
13
|
-
constructor(apiKey: string);
|
|
14
|
-
/**
|
|
15
|
-
* 文本转语音
|
|
16
|
-
*/
|
|
17
|
-
synthesize(params: TTSSynthesizeParams): Promise<TTSSynthesizeResult>;
|
|
18
|
-
/**
|
|
19
|
-
* 下载音频到本地
|
|
20
|
-
*/
|
|
21
|
-
downloadAudio(url: string, outputPath: string): Promise<string>;
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=dashscope-tts-api.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dashscope-tts-api.d.ts","sourceRoot":"","sources":["../../src/services/dashscope-tts-api.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAGD,eAAO,MAAM,UAAU,8KAMb,CAAC;AAEX,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAA2C;gBAE9C,MAAM,EAAE,MAAM;IAW1B;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAoB3E;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAYtE"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
2
|
-
import * as fs from 'fs/promises';
|
|
3
|
-
import * as path from 'path';
|
|
4
|
-
// qwen3-tts-flash 支持的声音列表
|
|
5
|
-
export const TTS_VOICES = [
|
|
6
|
-
// 女声
|
|
7
|
-
'Cherry', 'Serena', 'Chelsie', 'Aria', 'Bella', 'Vivian', 'Jennifer', 'Katerina',
|
|
8
|
-
'Breeze', 'Maple', 'Sakura',
|
|
9
|
-
// 男声
|
|
10
|
-
'Ethan', 'Aiden', 'Brandon', 'Ryan', 'Luke', 'Leo',
|
|
11
|
-
];
|
|
12
|
-
export class DashScopeTTSClient {
|
|
13
|
-
client;
|
|
14
|
-
baseUrl = 'https://dashscope.aliyuncs.com/api/v1';
|
|
15
|
-
constructor(apiKey) {
|
|
16
|
-
this.client = axios.create({
|
|
17
|
-
baseURL: this.baseUrl,
|
|
18
|
-
headers: {
|
|
19
|
-
'Authorization': `Bearer ${apiKey}`,
|
|
20
|
-
'Content-Type': 'application/json',
|
|
21
|
-
},
|
|
22
|
-
timeout: 60000,
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* 文本转语音
|
|
27
|
-
*/
|
|
28
|
-
async synthesize(params) {
|
|
29
|
-
const response = await this.client.post('/services/aigc/multimodal-generation/generation', {
|
|
30
|
-
model: 'qwen3-tts-flash',
|
|
31
|
-
input: {
|
|
32
|
-
text: params.text,
|
|
33
|
-
voice: params.voice || 'Cherry',
|
|
34
|
-
},
|
|
35
|
-
});
|
|
36
|
-
const audioUrl = response.data?.output?.audio?.url;
|
|
37
|
-
if (!audioUrl) {
|
|
38
|
-
throw new Error('DashScope TTS: 未返回音频 URL');
|
|
39
|
-
}
|
|
40
|
-
return { audioUrl };
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* 下载音频到本地
|
|
44
|
-
*/
|
|
45
|
-
async downloadAudio(url, outputPath) {
|
|
46
|
-
const dir = path.dirname(outputPath);
|
|
47
|
-
await fs.mkdir(dir, { recursive: true });
|
|
48
|
-
const response = await axios.get(url, {
|
|
49
|
-
responseType: 'arraybuffer',
|
|
50
|
-
timeout: 60000,
|
|
51
|
-
});
|
|
52
|
-
await fs.writeFile(outputPath, response.data);
|
|
53
|
-
return outputPath;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=dashscope-tts-api.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dashscope-tts-api.js","sourceRoot":"","sources":["../../src/services/dashscope-tts-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAY7B,0BAA0B;AAC1B,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,KAAK;IACL,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU;IAChF,QAAQ,EAAE,OAAO,EAAE,QAAQ;IAC3B,KAAK;IACL,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK;CAC1C,CAAC;AAEX,MAAM,OAAO,kBAAkB;IACrB,MAAM,CAAgB;IACtB,OAAO,GAAG,uCAAuC,CAAC;IAE1D,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,MAAM,EAAE;gBACnC,cAAc,EAAE,kBAAkB;aACnC;YACD,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,MAA2B;QAC1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACrC,iDAAiD,EACjD;YACE,KAAK,EAAE,iBAAiB;YACxB,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,QAAQ;aAChC;SACF,CACF,CAAC;QAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC;QACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,GAAW,EAAE,UAAkB;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YACpC,YAAY,EAAE,aAAa;YAC3B,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
|