@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.
Files changed (98) hide show
  1. package/dist/index.js +0 -0
  2. package/package.json +1 -1
  3. package/dist/backends/bfl.d.ts +0 -18
  4. package/dist/backends/bfl.d.ts.map +0 -1
  5. package/dist/backends/bfl.js +0 -130
  6. package/dist/backends/bfl.js.map +0 -1
  7. package/dist/backends/comfyui.d.ts +0 -10
  8. package/dist/backends/comfyui.d.ts.map +0 -1
  9. package/dist/backends/comfyui.js +0 -121
  10. package/dist/backends/comfyui.js.map +0 -1
  11. package/dist/backends/index.d.ts +0 -24
  12. package/dist/backends/index.d.ts.map +0 -1
  13. package/dist/backends/index.js +0 -59
  14. package/dist/backends/index.js.map +0 -1
  15. package/dist/backends/types.d.ts +0 -99
  16. package/dist/backends/types.d.ts.map +0 -1
  17. package/dist/backends/types.js +0 -2
  18. package/dist/backends/types.js.map +0 -1
  19. package/dist/backends/video-dashscope.d.ts +0 -10
  20. package/dist/backends/video-dashscope.d.ts.map +0 -1
  21. package/dist/backends/video-dashscope.js +0 -108
  22. package/dist/backends/video-dashscope.js.map +0 -1
  23. package/dist/backends/video-index.d.ts +0 -23
  24. package/dist/backends/video-index.d.ts.map +0 -1
  25. package/dist/backends/video-index.js +0 -57
  26. package/dist/backends/video-index.js.map +0 -1
  27. package/dist/commands/download.d.ts +0 -3
  28. package/dist/commands/download.d.ts.map +0 -1
  29. package/dist/commands/download.js +0 -169
  30. package/dist/commands/download.js.map +0 -1
  31. package/dist/commands/edit.d.ts +0 -3
  32. package/dist/commands/edit.d.ts.map +0 -1
  33. package/dist/commands/edit.js +0 -155
  34. package/dist/commands/edit.js.map +0 -1
  35. package/dist/commands/generate.d.ts +0 -3
  36. package/dist/commands/generate.d.ts.map +0 -1
  37. package/dist/commands/generate.js +0 -135
  38. package/dist/commands/generate.js.map +0 -1
  39. package/dist/commands/init.d.ts +0 -3
  40. package/dist/commands/init.d.ts.map +0 -1
  41. package/dist/commands/init.js +0 -144
  42. package/dist/commands/init.js.map +0 -1
  43. package/dist/commands/interrupt.d.ts +0 -3
  44. package/dist/commands/interrupt.d.ts.map +0 -1
  45. package/dist/commands/interrupt.js +0 -54
  46. package/dist/commands/interrupt.js.map +0 -1
  47. package/dist/commands/model.d.ts +0 -3
  48. package/dist/commands/model.d.ts.map +0 -1
  49. package/dist/commands/model.js +0 -82
  50. package/dist/commands/model.js.map +0 -1
  51. package/dist/commands/node.d.ts +0 -3
  52. package/dist/commands/node.d.ts.map +0 -1
  53. package/dist/commands/node.js +0 -148
  54. package/dist/commands/node.js.map +0 -1
  55. package/dist/commands/queue.d.ts +0 -3
  56. package/dist/commands/queue.d.ts.map +0 -1
  57. package/dist/commands/queue.js +0 -199
  58. package/dist/commands/queue.js.map +0 -1
  59. package/dist/commands/system.d.ts +0 -3
  60. package/dist/commands/system.d.ts.map +0 -1
  61. package/dist/commands/system.js +0 -85
  62. package/dist/commands/system.js.map +0 -1
  63. package/dist/commands/workflow.d.ts +0 -3
  64. package/dist/commands/workflow.d.ts.map +0 -1
  65. package/dist/commands/workflow.js +0 -244
  66. package/dist/commands/workflow.js.map +0 -1
  67. package/dist/services/api.d.ts +0 -23
  68. package/dist/services/api.d.ts.map +0 -1
  69. package/dist/services/api.js +0 -108
  70. package/dist/services/api.js.map +0 -1
  71. package/dist/services/bfl-api.d.ts +0 -67
  72. package/dist/services/bfl-api.d.ts.map +0 -1
  73. package/dist/services/bfl-api.js +0 -108
  74. package/dist/services/bfl-api.js.map +0 -1
  75. package/dist/services/dashscope-api.d.ts +0 -69
  76. package/dist/services/dashscope-api.d.ts.map +0 -1
  77. package/dist/services/dashscope-api.js +0 -134
  78. package/dist/services/dashscope-api.js.map +0 -1
  79. package/dist/services/dashscope-tts-api.d.ts +0 -23
  80. package/dist/services/dashscope-tts-api.d.ts.map +0 -1
  81. package/dist/services/dashscope-tts-api.js +0 -56
  82. package/dist/services/dashscope-tts-api.js.map +0 -1
  83. package/dist/services/fashn-api.d.ts +0 -57
  84. package/dist/services/fashn-api.d.ts.map +0 -1
  85. package/dist/services/fashn-api.js +0 -84
  86. package/dist/services/fashn-api.js.map +0 -1
  87. package/dist/services/groq-api.d.ts +0 -18
  88. package/dist/services/groq-api.d.ts.map +0 -1
  89. package/dist/services/groq-api.js +0 -30
  90. package/dist/services/groq-api.js.map +0 -1
  91. package/dist/services/websocket.d.ts +0 -33
  92. package/dist/services/websocket.d.ts.map +0 -1
  93. package/dist/services/websocket.js +0 -217
  94. package/dist/services/websocket.js.map +0 -1
  95. package/dist/utils/workflow.d.ts +0 -17
  96. package/dist/utils/workflow.d.ts.map +0 -1
  97. package/dist/utils/workflow.js +0 -81
  98. package/dist/utils/workflow.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"video-dashscope.js","sourceRoot":"","sources":["../../src/backends/video-dashscope.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- import type { VideoBackend } from './types.js';
2
- export type VideoBackendType = 'auto' | 'dashscope' | 'comfyui';
3
- export { VideoBackend, VideoParams, VideoResult } from './types.js';
4
- export { DashScopeVideoBackend } from './video-dashscope.js';
5
- /**
6
- * 获取 DashScope API Key(优先环境变量,其次配置文件)
7
- */
8
- export declare function getDashScopeApiKey(): string | undefined;
9
- /**
10
- * 获取视频生成后端
11
- *
12
- * - auto: 有 DashScope API Key 则用 DashScope,否则用 ComfyUI
13
- * - dashscope: 强制使用 DashScope(需要 API Key)
14
- * - comfyui: 强制使用 ComfyUI
15
- *
16
- * API Key 优先级: 环境变量 DASHSCOPE_API_KEY > 配置文件 dashscope.apiKey
17
- */
18
- export declare function getVideoBackend(type?: VideoBackendType): VideoBackend;
19
- /**
20
- * 获取当前会使用的视频后端名称
21
- */
22
- export declare function getCurrentVideoBackendName(type?: VideoBackendType): 'dashscope' | 'comfyui';
23
- //# sourceMappingURL=video-index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"video-index.d.ts","sourceRoot":"","sources":["../../src/backends/video-index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAEvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,gBAAgB,GAAG,YAAY,CAyBrE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,CAAC,EAAE,gBAAgB,GAAG,WAAW,GAAG,SAAS,CAe3F"}
@@ -1,57 +0,0 @@
1
- import { getConfig } from '../services/config.js';
2
- import { DashScopeVideoBackend } from './video-dashscope.js';
3
- export { DashScopeVideoBackend } from './video-dashscope.js';
4
- /**
5
- * 获取 DashScope API Key(优先环境变量,其次配置文件)
6
- */
7
- export function getDashScopeApiKey() {
8
- return process.env.DASHSCOPE_API_KEY || getConfig().dashscope?.apiKey;
9
- }
10
- /**
11
- * 获取视频生成后端
12
- *
13
- * - auto: 有 DashScope API Key 则用 DashScope,否则用 ComfyUI
14
- * - dashscope: 强制使用 DashScope(需要 API Key)
15
- * - comfyui: 强制使用 ComfyUI
16
- *
17
- * API Key 优先级: 环境变量 DASHSCOPE_API_KEY > 配置文件 dashscope.apiKey
18
- */
19
- export function getVideoBackend(type) {
20
- const cfg = getConfig();
21
- const backendType = type || cfg.preferVideoBackend || 'auto';
22
- // 强制使用 DashScope
23
- if (backendType === 'dashscope') {
24
- const apiKey = getDashScopeApiKey();
25
- if (!apiKey) {
26
- throw new Error('DashScope API key not configured. Set DASHSCOPE_API_KEY env or run: comfy config set dashscope.apiKey <key>');
27
- }
28
- return new DashScopeVideoBackend(apiKey);
29
- }
30
- // 强制使用 ComfyUI(返回 null,由调用方处理)
31
- if (backendType === 'comfyui') {
32
- return null; // ComfyUI 视频后端由 video.ts 原有逻辑处理
33
- }
34
- // 自动选择:优先 DashScope
35
- const apiKey = getDashScopeApiKey();
36
- if (apiKey) {
37
- return new DashScopeVideoBackend(apiKey);
38
- }
39
- return null; // 回退到 ComfyUI
40
- }
41
- /**
42
- * 获取当前会使用的视频后端名称
43
- */
44
- export function getCurrentVideoBackendName(type) {
45
- const cfg = getConfig();
46
- const backendType = type || cfg.preferVideoBackend || 'auto';
47
- if (backendType === 'dashscope') {
48
- return 'dashscope';
49
- }
50
- if (backendType === 'comfyui') {
51
- return 'comfyui';
52
- }
53
- // auto
54
- const apiKey = getDashScopeApiKey();
55
- return apiKey ? 'dashscope' : 'comfyui';
56
- }
57
- //# sourceMappingURL=video-index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"video-index.js","sourceRoot":"","sources":["../../src/backends/video-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAM7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;AACxE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,IAAuB;IACrD,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,MAAM,WAAW,GAAG,IAAI,IAAI,GAAG,CAAC,kBAAkB,IAAI,MAAM,CAAC;IAE7D,iBAAiB;IACjB,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,6GAA6G,CAAC,CAAC;QACjI,CAAC;QACD,OAAO,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,+BAA+B;IAC/B,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAW,CAAC,CAAC,gCAAgC;IACtD,CAAC;IAED,oBAAoB;IACpB,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,IAAW,CAAC,CAAC,cAAc;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAuB;IAChE,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,MAAM,WAAW,GAAG,IAAI,IAAI,GAAG,CAAC,kBAAkB,IAAI,MAAM,CAAC;IAE7D,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;IACP,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,OAAO,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1C,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerDownloadCommand(program: Command): void;
3
- //# sourceMappingURL=download.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/commands/download.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QAyKvD"}
@@ -1,169 +0,0 @@
1
- import * as path from 'path';
2
- import * as fs from 'fs';
3
- import ora from 'ora';
4
- import { ComfyAPIClient } from '../services/api.js';
5
- import { success, error } from '../utils/logger.js';
6
- import { outputSuccess, outputError, isPrettyMode } from '../utils/output.js';
7
- import { addEnhancedHelp } from '../utils/helpText.js';
8
- export function registerDownloadCommand(program) {
9
- const cmd = program
10
- .command('download')
11
- .description('下载生成的图像或视频 - 根据 Prompt ID 下载 ComfyUI 生成的文件')
12
- .argument('<prompt_id>', 'Prompt ID(从 generate/edit/video 命令获取)')
13
- .option('-o, --output <path>', '输出文件路径或目录')
14
- .action(async (promptId, options) => {
15
- const pretty = isPrettyMode(options);
16
- try {
17
- const client = new ComfyAPIClient();
18
- // 获取输出文件列表
19
- let files;
20
- if (pretty) {
21
- const spinner = ora('正在获取输出文件...').start();
22
- files = await client.getOutputFiles(promptId);
23
- if (files.length === 0) {
24
- spinner.fail('未找到输出文件');
25
- outputError('NO_OUTPUT_FILES', `Prompt ID: ${promptId} 没有生成任何文件`, options);
26
- }
27
- spinner.succeed(`找到 ${files.length} 个文件`);
28
- }
29
- else {
30
- files = await client.getOutputFiles(promptId);
31
- if (files.length === 0) {
32
- outputError('NO_OUTPUT_FILES', `Prompt ID: ${promptId} 没有生成任何文件`, options);
33
- }
34
- }
35
- const downloadedFiles = [];
36
- // 下载所有文件
37
- for (let i = 0; i < files.length; i++) {
38
- const file = files[i];
39
- if (pretty) {
40
- const downloadSpinner = ora(`正在下载 (${i + 1}/${files.length}): ${file.filename}`).start();
41
- try {
42
- // 下载文件
43
- const buffer = await client.downloadImage(file.filename, file.subfolder, file.type);
44
- // 确定输出路径
45
- let outputPath;
46
- if (options.output) {
47
- // 如果指定了输出路径
48
- if (files.length === 1) {
49
- // 只有一个文件,直接使用指定路径
50
- outputPath = options.output;
51
- }
52
- else {
53
- // 多个文件,将指定路径作为目录
54
- const dir = options.output;
55
- if (!fs.existsSync(dir)) {
56
- fs.mkdirSync(dir, { recursive: true });
57
- }
58
- outputPath = path.join(dir, file.filename);
59
- }
60
- }
61
- else {
62
- // 默认保存到 ./output 目录
63
- const outputDir = './output';
64
- if (!fs.existsSync(outputDir)) {
65
- fs.mkdirSync(outputDir, { recursive: true });
66
- }
67
- outputPath = path.join(outputDir, file.filename);
68
- }
69
- // 确保输出目录存在
70
- const outputDir = path.dirname(outputPath);
71
- if (!fs.existsSync(outputDir)) {
72
- fs.mkdirSync(outputDir, { recursive: true });
73
- }
74
- // 保存文件
75
- fs.writeFileSync(outputPath, buffer);
76
- downloadSpinner.succeed(`已下载: ${outputPath}`);
77
- downloadedFiles.push(outputPath);
78
- }
79
- catch (err) {
80
- downloadSpinner.fail(`下载失败: ${file.filename}`);
81
- error(`错误: ${err}`);
82
- }
83
- }
84
- else {
85
- // JSON 模式:直接下载,不显示进度
86
- const buffer = await client.downloadImage(file.filename, file.subfolder, file.type);
87
- let outputPath;
88
- if (options.output) {
89
- if (files.length === 1) {
90
- outputPath = options.output;
91
- }
92
- else {
93
- const dir = options.output;
94
- if (!fs.existsSync(dir)) {
95
- fs.mkdirSync(dir, { recursive: true });
96
- }
97
- outputPath = path.join(dir, file.filename);
98
- }
99
- }
100
- else {
101
- const outputDir = './output';
102
- if (!fs.existsSync(outputDir)) {
103
- fs.mkdirSync(outputDir, { recursive: true });
104
- }
105
- outputPath = path.join(outputDir, file.filename);
106
- }
107
- const outputDir = path.dirname(outputPath);
108
- if (!fs.existsSync(outputDir)) {
109
- fs.mkdirSync(outputDir, { recursive: true });
110
- }
111
- fs.writeFileSync(outputPath, buffer);
112
- downloadedFiles.push(outputPath);
113
- }
114
- }
115
- if (pretty) {
116
- success(`完成!共下载 ${files.length} 个文件`);
117
- }
118
- else {
119
- outputSuccess({
120
- prompt_id: promptId,
121
- files: downloadedFiles,
122
- total: downloadedFiles.length,
123
- });
124
- }
125
- }
126
- catch (err) {
127
- outputError('DOWNLOAD_FAILED', `下载失败: ${err}`, options);
128
- }
129
- });
130
- // Add enhanced help text
131
- addEnhancedHelp(cmd, {
132
- examples: [
133
- '# 下载生成的图像(默认 JSON 输出)',
134
- '$ comfy download abc-123-def',
135
- '',
136
- '# 指定输出路径',
137
- '$ comfy download abc-123-def -o my-image.png',
138
- '',
139
- '# 指定输出目录(多文件时)',
140
- '$ comfy download abc-123-def -o ./images/',
141
- '',
142
- '# Pretty 模式(显示下载进度)',
143
- '$ comfy download abc-123-def --pretty',
144
- ],
145
- outputJson: `{
146
- "success": true,
147
- "data": {
148
- "prompt_id": "abc-123-def",
149
- "files": [
150
- "output/comfy-cli_00001_.png"
151
- ],
152
- "total": 1
153
- }
154
- }`,
155
- relatedCommands: [
156
- { command: 'generate <prompt>', description: '生成图像获取 prompt_id' },
157
- { command: 'workflow list', description: '查看历史 prompt_id' },
158
- { command: 'workflow get <id>', description: '查看工作流详情' },
159
- ],
160
- notes: [
161
- 'Prompt ID 从 generate/edit/video 命令的输出中获取',
162
- '默认保存到 ./output 目录',
163
- '单文件时 -o 指定文件路径,多文件时 -o 指定目录',
164
- '文件名保持 ComfyUI 原始命名',
165
- '如果找不到文件,可能任务还在执行中',
166
- ],
167
- });
168
- }
169
- //# sourceMappingURL=download.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/commands/download.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAQ,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,4CAA4C,CAAC;SACzD,QAAQ,CAAC,aAAa,EAAE,uCAAuC,CAAC;SAChE,MAAM,CAAC,qBAAqB,EAAE,WAAW,CAAC;SAC1C,MAAM,CAAC,KAAK,EAAE,QAAgB,EAAE,OAAO,EAAE,EAAE;QAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAErC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YAEpC,WAAW;YACX,IAAI,KAAK,CAAC;YACV,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC3C,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;gBAE9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACxB,WAAW,CAAC,iBAAiB,EAAE,cAAc,QAAQ,WAAW,EAAE,OAAO,CAAC,CAAC;gBAC7E,CAAC;gBAED,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,MAAM,MAAM,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;gBAE9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,WAAW,CAAC,iBAAiB,EAAE,cAAc,QAAQ,WAAW,EAAE,OAAO,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC;YAED,MAAM,eAAe,GAAa,EAAE,CAAC;YAErC,SAAS;YACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAEtB,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,eAAe,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;oBAEzF,IAAI,CAAC;wBACH,OAAO;wBACP,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;wBAEpF,SAAS;wBACT,IAAI,UAAkB,CAAC;wBACvB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;4BACnB,YAAY;4BACZ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gCACvB,kBAAkB;gCAClB,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;4BAC9B,CAAC;iCAAM,CAAC;gCACN,iBAAiB;gCACjB,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;gCAC3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oCACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gCACzC,CAAC;gCACD,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;4BAC7C,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,oBAAoB;4BACpB,MAAM,SAAS,GAAG,UAAU,CAAC;4BAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gCAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;4BAC/C,CAAC;4BACD,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACnD,CAAC;wBAED,WAAW;wBACX,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;wBAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;4BAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC/C,CAAC;wBAED,OAAO;wBACP,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;wBAErC,eAAe,CAAC,OAAO,CAAC,QAAQ,UAAU,EAAE,CAAC,CAAC;wBAC9C,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACnC,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,eAAe,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;wBAC/C,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;oBACtB,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,qBAAqB;oBACrB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBAEpF,IAAI,UAAkB,CAAC;oBACvB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;wBACnB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BACvB,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;wBAC9B,CAAC;6BAAM,CAAC;4BACN,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;4BAC3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gCACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;4BACzC,CAAC;4BACD,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAC7C,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,MAAM,SAAS,GAAG,UAAU,CAAC;wBAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;4BAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC/C,CAAC;wBACD,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACnD,CAAC;oBAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;oBAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC/C,CAAC;oBAED,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;oBACrC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YAED,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,UAAU,KAAK,CAAC,MAAM,MAAM,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC;oBACZ,SAAS,EAAE,QAAQ;oBACnB,KAAK,EAAE,eAAe;oBACtB,KAAK,EAAE,eAAe,CAAC,MAAM;iBAC9B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,iBAAiB,EAAE,SAAS,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,yBAAyB;IACzB,eAAe,CAAC,GAAG,EAAE;QACnB,QAAQ,EAAE;YACR,uBAAuB;YACvB,8BAA8B;YAC9B,EAAE;YACF,UAAU;YACV,8CAA8C;YAC9C,EAAE;YACF,gBAAgB;YAChB,2CAA2C;YAC3C,EAAE;YACF,qBAAqB;YACrB,uCAAuC;SACxC;QACD,UAAU,EAAE;;;;;;;;;EASd;QACE,eAAe,EAAE;YACf,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,kBAAkB,EAAE;YACjE,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE;YAC3D,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,SAAS,EAAE;SACzD;QACD,KAAK,EAAE;YACL,0CAA0C;YAC1C,mBAAmB;YACnB,6BAA6B;YAC7B,oBAAoB;YACpB,mBAAmB;SACpB;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerEditCommand(program: Command): void;
3
- //# sourceMappingURL=edit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QAyJnD"}
@@ -1,155 +0,0 @@
1
- import * as path from 'path';
2
- import * as fs from 'fs';
3
- import ora from 'ora';
4
- import { ComfyAPIClient } from '../services/api.js';
5
- import { loadWorkflow, getBuiltinWorkflowPath, replaceVariables } from '../utils/workflow.js';
6
- import { success, info } from '../utils/logger.js';
7
- import { outputSuccess, outputError, isPrettyMode } from '../utils/output.js';
8
- import { addEnhancedHelp } from '../utils/helpText.js';
9
- import { monitorProgress } from '../services/websocket.js';
10
- export function registerEditCommand(program) {
11
- const cmd = program
12
- .command('edit')
13
- .description('编辑图像(图生图)- 使用 FLUX 模型对现有图像进行编辑和修改')
14
- .argument('<image>', '输入图像路径')
15
- .argument('<prompt>', '编辑描述提示词')
16
- .option('-o, --output <dir>', '输出目录 (默认: ./output)', './output')
17
- .option('--no-wait', '提交任务后立即返回,不等待编辑完成')
18
- .action(async (image, prompt, options) => {
19
- const pretty = isPrettyMode(options);
20
- try {
21
- // 检查图像文件是否存在
22
- const imagePath = path.resolve(image);
23
- if (!fs.existsSync(imagePath)) {
24
- outputError('IMAGE_NOT_FOUND', `图像文件不存在: ${imagePath}`, options);
25
- }
26
- if (pretty) {
27
- info(`正在编辑图像: "${path.basename(image)}"`);
28
- info(`提示词: "${prompt}"`);
29
- }
30
- // 先上传图像
31
- const client = new ComfyAPIClient();
32
- let uploadResult;
33
- if (pretty) {
34
- const uploadSpinner = ora('正在上传图像...').start();
35
- try {
36
- const imageBuffer = fs.readFileSync(imagePath);
37
- uploadResult = await client.uploadImage(imageBuffer, path.basename(imagePath));
38
- uploadSpinner.succeed('图像上传完成');
39
- }
40
- catch (err) {
41
- uploadSpinner.fail('图像上传失败');
42
- throw err;
43
- }
44
- }
45
- else {
46
- const imageBuffer = fs.readFileSync(imagePath);
47
- uploadResult = await client.uploadImage(imageBuffer, path.basename(imagePath));
48
- }
49
- // 加载内置 workflow
50
- const workflowPath = getBuiltinWorkflowPath('flux_image_to_image.json');
51
- const workflow = loadWorkflow(workflowPath);
52
- // 准备参数
53
- const params = {
54
- prompt,
55
- input_image: uploadResult.name,
56
- denoise: 1.0, // 固定最佳值
57
- steps: 20, // 固定最佳值
58
- cfg_scale: 1.0, // 固定最佳值
59
- seed: Math.floor(Math.random() * 1000000), // 随机种子
60
- filename_prefix: 'comfy-cli-edit',
61
- model: 'flux1-dev-kontext_fp8_scaled.safetensors',
62
- clip_l_model: 'clip_l.safetensors',
63
- clip_t5_model: 't5xxl_fp8_e4m3fn_scaled.safetensors',
64
- vae_model: 'ae.safetensors',
65
- sampler: 'euler',
66
- scheduler: 'simple',
67
- guidance: 2.5,
68
- };
69
- // 替换变量
70
- const processedWorkflow = replaceVariables(workflow, params);
71
- // 提交到 ComfyUI
72
- const result = await client.submitWorkflow(processedWorkflow);
73
- if (pretty) {
74
- success(`图像编辑任务已提交`);
75
- info(`Prompt ID: ${result.prompt_id}`);
76
- // 默认等待完成,除非指定了 --no-wait
77
- if (options.wait !== false) {
78
- const spinner = ora('正在连接 WebSocket...').start();
79
- try {
80
- await monitorProgress(result.prompt_id, (current, total, message) => {
81
- if (total > 0) {
82
- const percent = Math.round((current / total) * 100);
83
- spinner.text = `编辑中: ${percent}% (${current}/${total})`;
84
- spinner.render();
85
- }
86
- else {
87
- spinner.text = message;
88
- spinner.render();
89
- }
90
- }, () => {
91
- spinner.succeed('图像编辑完成!');
92
- });
93
- info(`使用 'comfy download ${result.prompt_id}' 下载结果`);
94
- }
95
- catch (err) {
96
- spinner.fail(`进度监听失败: ${err?.message || err}`);
97
- info(`使用 'comfy download ${result.prompt_id}' 下载结果`);
98
- }
99
- }
100
- else {
101
- info(`使用 'comfy download ${result.prompt_id}' 下载结果`);
102
- }
103
- }
104
- else {
105
- outputSuccess({
106
- prompt_id: result.prompt_id,
107
- image: path.basename(image),
108
- prompt,
109
- status: options.wait !== false ? 'submitted_waiting' : 'submitted',
110
- });
111
- }
112
- }
113
- catch (err) {
114
- outputError('EDIT_FAILED', `编辑失败: ${err}`, options);
115
- }
116
- });
117
- // Add enhanced help text
118
- addEnhancedHelp(cmd, {
119
- examples: [
120
- '# 基础用法:编辑图像',
121
- '$ comfy edit input.png "make it more colorful"',
122
- '',
123
- '# 添加元素到图像',
124
- '$ comfy edit photo.jpg "add a rainbow in the sky"',
125
- '',
126
- '# 不等待完成(立即返回)',
127
- '$ comfy edit image.png "remove background" --no-wait',
128
- '',
129
- '# Pretty 模式',
130
- '$ comfy edit cat.png "add a hat" --pretty',
131
- ],
132
- outputJson: `{
133
- "success": true,
134
- "data": {
135
- "prompt_id": "abc-123-def",
136
- "image": "input.png",
137
- "prompt": "make it more colorful",
138
- "status": "submitted_waiting"
139
- }
140
- }`,
141
- relatedCommands: [
142
- { command: 'download <prompt_id>', description: '下载编辑后的图像' },
143
- { command: 'generate <prompt>', description: '从文本生成新图像' },
144
- { command: 'video <image>', description: '将图像转换为视频' },
145
- ],
146
- notes: [
147
- '图像会先上传到 ComfyUI 服务器',
148
- '默认使用 FLUX 图生图模型',
149
- '支持常见图像格式:PNG, JPG, JPEG',
150
- '编辑完成后使用 "comfy download <prompt_id>" 下载结果',
151
- '默认输出 JSON 格式,使用 --pretty 可显示上传和生成进度',
152
- ],
153
- });
154
- }
155
- //# sourceMappingURL=edit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerGenerateCommand(program: Command): void;
3
- //# sourceMappingURL=generate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QAsIvD"}
@@ -1,135 +0,0 @@
1
- import ora from 'ora';
2
- import { ComfyAPIClient } from '../services/api.js';
3
- import { loadWorkflow, getBuiltinWorkflowPath, replaceVariables } from '../utils/workflow.js';
4
- import { success, info } from '../utils/logger.js';
5
- import { outputSuccess, outputError, isPrettyMode } from '../utils/output.js';
6
- import { monitorProgress } from '../services/websocket.js';
7
- import { addEnhancedHelp } from '../utils/helpText.js';
8
- export function registerGenerateCommand(program) {
9
- const cmd = program
10
- .command('generate')
11
- .description('生成图像(文生图)- 使用 FLUX 模型从文本生成高质量图像')
12
- .argument('<prompt>', '图像描述提示词')
13
- .option('-o, --output <dir>', '输出目录 (默认: ./output)', './output')
14
- .option('--width <number>', '图像宽度 (默认: 1024)', '1024')
15
- .option('--height <number>', '图像高度 (默认: 1024)', '1024')
16
- .option('--no-wait', '提交任务后立即返回,不等待生成完成')
17
- .action(async (prompt, options) => {
18
- const pretty = isPrettyMode(options);
19
- try {
20
- if (pretty) {
21
- info(`正在生成图像: "${prompt}"`);
22
- }
23
- // 加载内置 workflow
24
- const workflowPath = getBuiltinWorkflowPath('flux_text_to_image.json');
25
- const workflow = loadWorkflow(workflowPath);
26
- // 准备参数
27
- const params = {
28
- prompt,
29
- width: parseInt(options.width),
30
- height: parseInt(options.height),
31
- steps: 20, // 固定最佳值
32
- cfg_scale: 1.0, // 固定最佳值
33
- seed: Math.floor(Math.random() * 1000000), // 随机种子
34
- filename_prefix: 'comfy-cli',
35
- model: 'FLUX1/flux1-dev-fp8.safetensors',
36
- sampler: 'euler',
37
- scheduler: 'simple',
38
- negative_prompt: 'Blurry details, distorted shapes, unrealistic reflections, harsh lighting, excessive shadows, overly saturated colors, unnatural composition, poor rendering, low resolution, pixelation, artificial-looking textures, overly exaggerated contrast, cluttered background, unnecessary elements, random objects, plastic-like appearance.',
39
- guidance: 3.5,
40
- };
41
- // 替换变量
42
- const processedWorkflow = replaceVariables(workflow, params);
43
- // 提交到 ComfyUI
44
- const client = new ComfyAPIClient();
45
- const result = await client.submitWorkflow(processedWorkflow);
46
- if (pretty) {
47
- success(`图像生成任务已提交`);
48
- info(`Prompt ID: ${result.prompt_id}`);
49
- // 默认等待完成,除非指定了 --no-wait
50
- if (options.wait !== false) {
51
- const spinner = ora('正在连接 WebSocket...').start();
52
- try {
53
- await monitorProgress(result.prompt_id, (current, total, message) => {
54
- if (total > 0) {
55
- const percent = Math.round((current / total) * 100);
56
- spinner.text = `生成中: ${percent}% (${current}/${total})`;
57
- spinner.render(); // 强制渲染
58
- }
59
- else {
60
- spinner.text = message;
61
- spinner.render();
62
- }
63
- }, () => {
64
- spinner.succeed('图像生成完成!');
65
- });
66
- info(`使用 'comfy download ${result.prompt_id}' 下载结果`);
67
- }
68
- catch (err) {
69
- spinner.fail(`进度监听失败: ${err?.message || err}`);
70
- info(`使用 'comfy download ${result.prompt_id}' 下载结果`);
71
- }
72
- }
73
- else {
74
- info(`使用 'comfy download ${result.prompt_id}' 下载结果`);
75
- }
76
- }
77
- else {
78
- // JSON 模式:输出简洁的结果
79
- outputSuccess({
80
- prompt_id: result.prompt_id,
81
- prompt,
82
- width: params.width,
83
- height: params.height,
84
- status: options.wait !== false ? 'submitted_waiting' : 'submitted',
85
- });
86
- }
87
- }
88
- catch (err) {
89
- outputError('GENERATE_FAILED', `生成失败: ${err}`, options);
90
- }
91
- });
92
- // Add enhanced help text
93
- addEnhancedHelp(cmd, {
94
- examples: [
95
- '# 基础用法:生成图像(默认 JSON 输出)',
96
- '$ comfy generate "a beautiful sunset over mountains"',
97
- '',
98
- '# 生成图像并等待完成',
99
- '$ comfy generate "a cat wearing a hat"',
100
- '',
101
- '# 生成图像但不等待(立即返回 prompt_id)',
102
- '$ comfy generate "a dog" --no-wait',
103
- '',
104
- '# 指定图像尺寸',
105
- '$ comfy generate "a landscape" --width 1920 --height 1080',
106
- '',
107
- '# Pretty 模式(人类可读)',
108
- '$ comfy generate "a sunset" --pretty',
109
- ],
110
- outputJson: `{
111
- "success": true,
112
- "data": {
113
- "prompt_id": "abc-123-def",
114
- "prompt": "a beautiful sunset",
115
- "width": 1024,
116
- "height": 1024,
117
- "status": "submitted_waiting"
118
- }
119
- }`,
120
- relatedCommands: [
121
- { command: 'download <prompt_id>', description: '下载生成的图像' },
122
- { command: 'workflow list', description: '查看生成历史' },
123
- { command: 'queue status', description: '查看队列状态' },
124
- { command: 'edit <image> <prompt>', description: '编辑已有图像' },
125
- ],
126
- notes: [
127
- '默认使用 FLUX1-dev-fp8 模型,生成高质量图像',
128
- '默认会等待生成完成,使用 --no-wait 可立即返回',
129
- '生成完成后使用 "comfy download <prompt_id>" 下载图像',
130
- '图像默认保存到 ./output 目录',
131
- '默认输出 JSON 格式,使用 --pretty 可显示进度条',
132
- ],
133
- });
134
- }
135
- //# sourceMappingURL=generate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerInitCommand(program: Command): void;
3
- //# sourceMappingURL=init.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QAkInD"}