@optima-chat/comfy-cli 0.3.3 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +37 -22
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/download.d.ts.map +1 -1
- package/dist/commands/download.js +76 -29
- package/dist/commands/download.js.map +1 -1
- package/dist/commands/edit.d.ts.map +1 -1
- package/dist/commands/edit.js +31 -19
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +18 -9
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/interrupt.d.ts.map +1 -1
- package/dist/commands/interrupt.js +13 -5
- package/dist/commands/interrupt.js.map +1 -1
- package/dist/commands/model.d.ts.map +1 -1
- package/dist/commands/model.js +13 -9
- package/dist/commands/model.js.map +1 -1
- package/dist/commands/node.d.ts.map +1 -1
- package/dist/commands/node.js +20 -14
- package/dist/commands/node.js.map +1 -1
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +44 -17
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/system.d.ts.map +1 -1
- package/dist/commands/system.js +8 -8
- package/dist/commands/system.js.map +1 -1
- package/dist/commands/video.d.ts.map +1 -1
- package/dist/commands/video.js +34 -18
- package/dist/commands/video.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +41 -26
- package/dist/commands/workflow.js.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/output.d.ts +54 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +76 -0
- package/dist/utils/output.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/commands/model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/commands/model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAS,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,QAAQ,GAAG,OAAO;SACrB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,MAAM,CAAC,CAAC;IAEvB,mBAAmB;IACnB,QAAQ;SACL,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,QAAQ,CAAC;SACrB,MAAM,CAAC,eAAe,EAAE,sCAAsC,CAAC;SAC/D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAErC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAErD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAEhF,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC3B,IAAI,CAAC,OAAO,CAAC,CAAC;oBACd,OAAO;gBACT,CAAC;gBAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;oBACtB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;oBACpB,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;iBACnB,CAAC,CAAC;gBAEH,SAAS,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE;oBACjD,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gBACjC,CAAC,CAAC,CAAC;gBAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC9B,IAAI,CAAC,KAAK,SAAS,CAAC,MAAM,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/E,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC;oBACZ,MAAM,EAAE,SAAS;oBACjB,KAAK,EAAE,SAAS,CAAC,MAAM;oBACvB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;iBAC3B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,mBAAmB,EAAE,aAAa,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/commands/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/commands/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QA+EnD"}
|
package/dist/commands/node.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ComfyAPIClient } from '../services/api.js';
|
|
2
|
-
import {
|
|
2
|
+
import { info } from '../utils/logger.js';
|
|
3
|
+
import { outputSuccess, outputError, isPrettyMode } from '../utils/output.js';
|
|
3
4
|
import Table from 'cli-table3';
|
|
4
5
|
export function registerNodeCommand(program) {
|
|
5
6
|
const nodeCmd = program
|
|
@@ -10,8 +11,8 @@ export function registerNodeCommand(program) {
|
|
|
10
11
|
.command('list')
|
|
11
12
|
.description('列出所有节点类型')
|
|
12
13
|
.option('--filter <text>', '过滤节点名称')
|
|
13
|
-
.option('--json', '输出 JSON 格式')
|
|
14
14
|
.action(async (options) => {
|
|
15
|
+
const pretty = isPrettyMode(options);
|
|
15
16
|
try {
|
|
16
17
|
const client = new ComfyAPIClient();
|
|
17
18
|
const nodeInfo = await client.getObjectInfo();
|
|
@@ -19,10 +20,7 @@ export function registerNodeCommand(program) {
|
|
|
19
20
|
if (options.filter) {
|
|
20
21
|
nodeList = nodeList.filter((name) => name.toLowerCase().includes(options.filter.toLowerCase()));
|
|
21
22
|
}
|
|
22
|
-
if (
|
|
23
|
-
console.log(JSON.stringify(nodeList, null, 2));
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
23
|
+
if (pretty) {
|
|
26
24
|
if (nodeList.length === 0) {
|
|
27
25
|
info('未找到节点');
|
|
28
26
|
return;
|
|
@@ -37,10 +35,16 @@ export function registerNodeCommand(program) {
|
|
|
37
35
|
console.log(table.toString());
|
|
38
36
|
info(`共 ${nodeList.length} 个节点类型`);
|
|
39
37
|
}
|
|
38
|
+
else {
|
|
39
|
+
outputSuccess({
|
|
40
|
+
nodes: nodeList,
|
|
41
|
+
total: nodeList.length,
|
|
42
|
+
filter: options.filter || null,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
40
45
|
}
|
|
41
46
|
catch (err) {
|
|
42
|
-
|
|
43
|
-
process.exit(1);
|
|
47
|
+
outputError('NODE_LIST_FAILED', `获取节点列表失败: ${err}`, options);
|
|
44
48
|
}
|
|
45
49
|
});
|
|
46
50
|
// comfy node info
|
|
@@ -48,22 +52,24 @@ export function registerNodeCommand(program) {
|
|
|
48
52
|
.command('info')
|
|
49
53
|
.description('查看节点详情')
|
|
50
54
|
.argument('<class>', '节点类名')
|
|
51
|
-
.option('--json', '输出 JSON 格式')
|
|
52
55
|
.action(async (nodeClass, options) => {
|
|
56
|
+
const pretty = isPrettyMode(options);
|
|
53
57
|
try {
|
|
54
58
|
const client = new ComfyAPIClient();
|
|
55
59
|
const nodeInfo = await client.getObjectInfo(nodeClass);
|
|
56
|
-
if (
|
|
60
|
+
if (pretty) {
|
|
61
|
+
console.log(`\n📦 节点: ${nodeClass}\n`);
|
|
57
62
|
console.log(JSON.stringify(nodeInfo, null, 2));
|
|
58
63
|
}
|
|
59
64
|
else {
|
|
60
|
-
|
|
61
|
-
|
|
65
|
+
outputSuccess({
|
|
66
|
+
class: nodeClass,
|
|
67
|
+
info: nodeInfo,
|
|
68
|
+
});
|
|
62
69
|
}
|
|
63
70
|
}
|
|
64
71
|
catch (err) {
|
|
65
|
-
|
|
66
|
-
process.exit(1);
|
|
72
|
+
outputError('NODE_INFO_FAILED', `获取节点信息失败: ${err}`, options);
|
|
67
73
|
}
|
|
68
74
|
});
|
|
69
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/commands/node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/commands/node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/commands/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/commands/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAkIpD"}
|
package/dist/commands/queue.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ComfyAPIClient } from '../services/api.js';
|
|
2
|
-
import { success,
|
|
2
|
+
import { success, info } from '../utils/logger.js';
|
|
3
|
+
import { outputSuccess, outputError, isPrettyMode } from '../utils/output.js';
|
|
3
4
|
import Table from 'cli-table3';
|
|
4
5
|
export function registerQueueCommand(program) {
|
|
5
6
|
const queueCmd = program
|
|
@@ -9,15 +10,12 @@ export function registerQueueCommand(program) {
|
|
|
9
10
|
queueCmd
|
|
10
11
|
.command('status')
|
|
11
12
|
.description('查看队列状态')
|
|
12
|
-
.option('--json', '输出 JSON 格式')
|
|
13
13
|
.action(async (options) => {
|
|
14
|
+
const pretty = isPrettyMode(options);
|
|
14
15
|
try {
|
|
15
16
|
const client = new ComfyAPIClient();
|
|
16
17
|
const queue = await client.getQueue();
|
|
17
|
-
if (
|
|
18
|
-
console.log(JSON.stringify(queue, null, 2));
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
18
|
+
if (pretty) {
|
|
21
19
|
const running = queue.queue_running || [];
|
|
22
20
|
const pending = queue.queue_pending || [];
|
|
23
21
|
console.log(`\n📊 队列状态\n`);
|
|
@@ -51,10 +49,27 @@ export function registerQueueCommand(program) {
|
|
|
51
49
|
info('✓ 无等待任务');
|
|
52
50
|
}
|
|
53
51
|
}
|
|
52
|
+
else {
|
|
53
|
+
const running = (queue.queue_running || []).map((item, index) => ({
|
|
54
|
+
position: index + 1,
|
|
55
|
+
prompt_id: item[1] || null,
|
|
56
|
+
node_count: item[2]?.length || 0,
|
|
57
|
+
}));
|
|
58
|
+
const pending = (queue.queue_pending || []).map((item, index) => ({
|
|
59
|
+
position: index + 1,
|
|
60
|
+
prompt_id: item[1] || null,
|
|
61
|
+
node_count: item[2]?.length || 0,
|
|
62
|
+
}));
|
|
63
|
+
outputSuccess({
|
|
64
|
+
running,
|
|
65
|
+
pending,
|
|
66
|
+
running_count: running.length,
|
|
67
|
+
pending_count: pending.length,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
54
70
|
}
|
|
55
71
|
catch (err) {
|
|
56
|
-
|
|
57
|
-
process.exit(1);
|
|
72
|
+
outputError('QUEUE_STATUS_FAILED', `获取队列状态失败: ${err}`, options);
|
|
58
73
|
}
|
|
59
74
|
});
|
|
60
75
|
// comfy queue clear
|
|
@@ -63,18 +78,22 @@ export function registerQueueCommand(program) {
|
|
|
63
78
|
.description('清空队列')
|
|
64
79
|
.option('--confirm', '确认清空')
|
|
65
80
|
.action(async (options) => {
|
|
81
|
+
const pretty = isPrettyMode(options);
|
|
66
82
|
try {
|
|
67
83
|
if (!options.confirm) {
|
|
68
|
-
|
|
69
|
-
process.exit(1);
|
|
84
|
+
outputError('CONFIRM_REQUIRED', '请使用 --confirm 确认清空操作', options);
|
|
70
85
|
}
|
|
71
86
|
const client = new ComfyAPIClient();
|
|
72
87
|
await client.clearQueue();
|
|
73
|
-
|
|
88
|
+
if (pretty) {
|
|
89
|
+
success('队列已清空');
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
outputSuccess({ message: '队列已清空' });
|
|
93
|
+
}
|
|
74
94
|
}
|
|
75
95
|
catch (err) {
|
|
76
|
-
|
|
77
|
-
process.exit(1);
|
|
96
|
+
outputError('QUEUE_CLEAR_FAILED', `清空队列失败: ${err}`, options);
|
|
78
97
|
}
|
|
79
98
|
});
|
|
80
99
|
// comfy queue delete
|
|
@@ -82,15 +101,23 @@ export function registerQueueCommand(program) {
|
|
|
82
101
|
.command('delete')
|
|
83
102
|
.description('删除指定队列项')
|
|
84
103
|
.argument('<item_id>', '队列项 ID')
|
|
85
|
-
.action(async (itemId) => {
|
|
104
|
+
.action(async (itemId, options) => {
|
|
105
|
+
const pretty = isPrettyMode(options);
|
|
86
106
|
try {
|
|
87
107
|
const client = new ComfyAPIClient();
|
|
88
108
|
await client.deleteQueueItem(itemId);
|
|
89
|
-
|
|
109
|
+
if (pretty) {
|
|
110
|
+
success(`已删除队列项: ${itemId}`);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
outputSuccess({
|
|
114
|
+
message: '已删除队列项',
|
|
115
|
+
item_id: itemId
|
|
116
|
+
});
|
|
117
|
+
}
|
|
90
118
|
}
|
|
91
119
|
catch (err) {
|
|
92
|
-
|
|
93
|
-
process.exit(1);
|
|
120
|
+
outputError('QUEUE_DELETE_FAILED', `删除失败: ${err}`, options);
|
|
94
121
|
}
|
|
95
122
|
});
|
|
96
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/commands/queue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/commands/queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/commands/system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/commands/system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QA8CrD"}
|
package/dist/commands/system.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ComfyAPIClient } from '../services/api.js';
|
|
2
|
-
import {
|
|
2
|
+
import { info } from '../utils/logger.js';
|
|
3
|
+
import { outputSuccess, outputError, isPrettyMode } from '../utils/output.js';
|
|
3
4
|
import Table from 'cli-table3';
|
|
4
5
|
export function registerSystemCommand(program) {
|
|
5
6
|
const systemCmd = program
|
|
@@ -9,15 +10,12 @@ export function registerSystemCommand(program) {
|
|
|
9
10
|
systemCmd
|
|
10
11
|
.command('stats')
|
|
11
12
|
.description('查看系统统计信息')
|
|
12
|
-
.option('--json', '输出 JSON 格式')
|
|
13
13
|
.action(async (options) => {
|
|
14
|
+
const pretty = isPrettyMode(options);
|
|
14
15
|
try {
|
|
15
16
|
const client = new ComfyAPIClient();
|
|
16
17
|
const stats = await client.getSystemStats();
|
|
17
|
-
if (
|
|
18
|
-
console.log(JSON.stringify(stats, null, 2));
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
18
|
+
if (pretty) {
|
|
21
19
|
console.log(`\n💻 系统状态\n`);
|
|
22
20
|
if (stats.system) {
|
|
23
21
|
const table = new Table({
|
|
@@ -37,10 +35,12 @@ export function registerSystemCommand(program) {
|
|
|
37
35
|
});
|
|
38
36
|
}
|
|
39
37
|
}
|
|
38
|
+
else {
|
|
39
|
+
outputSuccess(stats);
|
|
40
|
+
}
|
|
40
41
|
}
|
|
41
42
|
catch (err) {
|
|
42
|
-
|
|
43
|
-
process.exit(1);
|
|
43
|
+
outputError('SYSTEM_STATS_FAILED', `获取系统信息失败: ${err}`, options);
|
|
44
44
|
}
|
|
45
45
|
});
|
|
46
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/commands/system.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/commands/system.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAS,IAAI,EAAW,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,SAAS,GAAG,OAAO;SACtB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,MAAM,CAAC,CAAC;IAEvB,qBAAqB;IACrB,SAAS;SACN,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,UAAU,CAAC;SACvB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAErC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;YAE5C,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAE3B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;wBACtB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC;wBACjB,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;qBACpB,CAAC,CAAC;oBAEH,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;wBACpD,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACnC,CAAC,CAAC,CAAC;oBAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAChC,CAAC;gBAED,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAClB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;oBAC5B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAW,EAAE,KAAa,EAAE,EAAE;wBACnD,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;wBACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC/C,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,qBAAqB,EAAE,aAAa,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../src/commands/video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../src/commands/video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QA8HpD"}
|
package/dist/commands/video.js
CHANGED
|
@@ -3,7 +3,8 @@ import * as fs from 'fs';
|
|
|
3
3
|
import ora from 'ora';
|
|
4
4
|
import { ComfyAPIClient } from '../services/api.js';
|
|
5
5
|
import { loadWorkflow, getBuiltinWorkflowPath, replaceVariables } from '../utils/workflow.js';
|
|
6
|
-
import { success,
|
|
6
|
+
import { success, info } from '../utils/logger.js';
|
|
7
|
+
import { outputSuccess, outputError, isPrettyMode } from '../utils/output.js';
|
|
7
8
|
import { monitorProgress } from '../services/websocket.js';
|
|
8
9
|
export function registerVideoCommand(program) {
|
|
9
10
|
program
|
|
@@ -16,28 +17,35 @@ export function registerVideoCommand(program) {
|
|
|
16
17
|
.option('--width <number>', '视频宽度', '512')
|
|
17
18
|
.option('--height <number>', '视频高度', '512')
|
|
18
19
|
.option('--no-wait', '提交任务后立即返回(不等待完成)')
|
|
19
|
-
.option('--json', '输出 JSON 格式')
|
|
20
20
|
.action(async (image, options) => {
|
|
21
|
+
const pretty = isPrettyMode(options);
|
|
21
22
|
try {
|
|
22
23
|
// 检查图像文件是否存在
|
|
23
24
|
const imagePath = path.resolve(image);
|
|
24
25
|
if (!fs.existsSync(imagePath)) {
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
outputError('IMAGE_NOT_FOUND', `图像文件不存在: ${imagePath}`, options);
|
|
27
|
+
}
|
|
28
|
+
if (pretty) {
|
|
29
|
+
info(`正在生成视频: "${path.basename(image)}"`);
|
|
27
30
|
}
|
|
28
|
-
info(`正在生成视频: "${path.basename(image)}"`);
|
|
29
31
|
// 先上传图像
|
|
30
|
-
const uploadSpinner = ora('正在上传图像...').start();
|
|
31
32
|
const client = new ComfyAPIClient();
|
|
32
33
|
let uploadResult;
|
|
33
|
-
|
|
34
|
+
if (pretty) {
|
|
35
|
+
const uploadSpinner = ora('正在上传图像...').start();
|
|
36
|
+
try {
|
|
37
|
+
const imageBuffer = fs.readFileSync(imagePath);
|
|
38
|
+
uploadResult = await client.uploadImage(imageBuffer, path.basename(imagePath));
|
|
39
|
+
uploadSpinner.succeed('图像上传完成');
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
uploadSpinner.fail('图像上传失败');
|
|
43
|
+
throw err;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
34
47
|
const imageBuffer = fs.readFileSync(imagePath);
|
|
35
48
|
uploadResult = await client.uploadImage(imageBuffer, path.basename(imagePath));
|
|
36
|
-
uploadSpinner.succeed('图像上传完成');
|
|
37
|
-
}
|
|
38
|
-
catch (err) {
|
|
39
|
-
uploadSpinner.fail('图像上传失败');
|
|
40
|
-
throw err;
|
|
41
49
|
}
|
|
42
50
|
// 加载内置 workflow
|
|
43
51
|
const workflowPath = getBuiltinWorkflowPath('wan_image_to_video.json');
|
|
@@ -67,10 +75,7 @@ export function registerVideoCommand(program) {
|
|
|
67
75
|
const processedWorkflow = replaceVariables(workflow, params);
|
|
68
76
|
// 提交到 ComfyUI
|
|
69
77
|
const result = await client.submitWorkflow(processedWorkflow);
|
|
70
|
-
if (
|
|
71
|
-
console.log(JSON.stringify(result, null, 2));
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
78
|
+
if (pretty) {
|
|
74
79
|
success(`视频生成任务已提交`);
|
|
75
80
|
info(`Prompt ID: ${result.prompt_id}`);
|
|
76
81
|
info(`帧数: ${params.frames}, FPS: ${params.fps}, 时长: ${(params.frames / params.fps).toFixed(1)}秒`);
|
|
@@ -102,10 +107,21 @@ export function registerVideoCommand(program) {
|
|
|
102
107
|
info(`使用 'comfy download ${result.prompt_id}' 下载结果`);
|
|
103
108
|
}
|
|
104
109
|
}
|
|
110
|
+
else {
|
|
111
|
+
outputSuccess({
|
|
112
|
+
prompt_id: result.prompt_id,
|
|
113
|
+
image: path.basename(image),
|
|
114
|
+
width: params.width,
|
|
115
|
+
height: params.height,
|
|
116
|
+
frames: params.frames,
|
|
117
|
+
fps: params.fps,
|
|
118
|
+
duration: parseFloat((params.frames / params.fps).toFixed(1)),
|
|
119
|
+
status: options.wait !== false ? 'submitted_waiting' : 'submitted',
|
|
120
|
+
});
|
|
121
|
+
}
|
|
105
122
|
}
|
|
106
123
|
catch (err) {
|
|
107
|
-
|
|
108
|
-
process.exit(1);
|
|
124
|
+
outputError('VIDEO_FAILED', `生成失败: ${err}`, options);
|
|
109
125
|
}
|
|
110
126
|
});
|
|
111
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/commands/video.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,YAAY,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/commands/video.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QA2JvD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ComfyAPIClient } from '../services/api.js';
|
|
2
2
|
import { loadWorkflow, extractVariables } from '../utils/workflow.js';
|
|
3
|
-
import { success,
|
|
3
|
+
import { success, info } from '../utils/logger.js';
|
|
4
|
+
import { outputSuccess, outputError, isPrettyMode } from '../utils/output.js';
|
|
4
5
|
import Table from 'cli-table3';
|
|
5
6
|
export function registerWorkflowCommand(program) {
|
|
6
7
|
const workflowCmd = program
|
|
@@ -11,26 +12,25 @@ export function registerWorkflowCommand(program) {
|
|
|
11
12
|
.command('submit')
|
|
12
13
|
.description('提交工作流')
|
|
13
14
|
.argument('<file>', 'workflow JSON 文件路径')
|
|
14
|
-
.option('--json', '输出 JSON 格式')
|
|
15
15
|
.option('--wait', '等待执行完成')
|
|
16
16
|
.action(async (file, options) => {
|
|
17
|
+
const pretty = isPrettyMode(options);
|
|
17
18
|
try {
|
|
18
|
-
|
|
19
|
+
if (pretty) {
|
|
20
|
+
info(`正在加载工作流: ${file}`);
|
|
21
|
+
}
|
|
19
22
|
// 加载 workflow
|
|
20
23
|
const workflow = loadWorkflow(file);
|
|
21
24
|
// 提取变量
|
|
22
25
|
const variables = extractVariables(workflow);
|
|
23
|
-
if (variables.length > 0) {
|
|
26
|
+
if (pretty && variables.length > 0) {
|
|
24
27
|
info(`检测到 ${variables.length} 个变量: ${variables.join(', ')}`);
|
|
25
28
|
info('提示: 使用 generate/edit/video 命令可以自动填充这些变量');
|
|
26
29
|
}
|
|
27
30
|
// 提交到 ComfyUI
|
|
28
31
|
const client = new ComfyAPIClient();
|
|
29
32
|
const result = await client.submitWorkflow(workflow);
|
|
30
|
-
if (
|
|
31
|
-
console.log(JSON.stringify(result, null, 2));
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
33
|
+
if (pretty) {
|
|
34
34
|
success(`工作流已提交`);
|
|
35
35
|
info(`Prompt ID: ${result.prompt_id}`);
|
|
36
36
|
if (options.wait) {
|
|
@@ -42,10 +42,15 @@ export function registerWorkflowCommand(program) {
|
|
|
42
42
|
info(`使用 'comfy workflow get ${result.prompt_id}' 查看结果`);
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
+
else {
|
|
46
|
+
outputSuccess({
|
|
47
|
+
prompt_id: result.prompt_id,
|
|
48
|
+
variables: variables.length > 0 ? variables : undefined,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
45
51
|
}
|
|
46
52
|
catch (err) {
|
|
47
|
-
|
|
48
|
-
process.exit(1);
|
|
53
|
+
outputError('WORKFLOW_SUBMIT_FAILED', `提交失败: ${err}`, options);
|
|
49
54
|
}
|
|
50
55
|
});
|
|
51
56
|
// comfy workflow list
|
|
@@ -53,16 +58,13 @@ export function registerWorkflowCommand(program) {
|
|
|
53
58
|
.command('list')
|
|
54
59
|
.description('列出工作流历史')
|
|
55
60
|
.option('--limit <number>', '限制数量', '10')
|
|
56
|
-
.option('--json', '输出 JSON 格式')
|
|
57
61
|
.action(async (options) => {
|
|
62
|
+
const pretty = isPrettyMode(options);
|
|
58
63
|
try {
|
|
59
64
|
const client = new ComfyAPIClient();
|
|
60
65
|
const history = await client.getHistory();
|
|
61
66
|
const historyArray = Object.entries(history).slice(0, parseInt(options.limit));
|
|
62
|
-
if (
|
|
63
|
-
console.log(JSON.stringify(historyArray, null, 2));
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
67
|
+
if (pretty) {
|
|
66
68
|
if (historyArray.length === 0) {
|
|
67
69
|
info('暂无历史记录');
|
|
68
70
|
return;
|
|
@@ -79,10 +81,20 @@ export function registerWorkflowCommand(program) {
|
|
|
79
81
|
console.log(table.toString());
|
|
80
82
|
info(`共 ${historyArray.length} 条记录`);
|
|
81
83
|
}
|
|
84
|
+
else {
|
|
85
|
+
const workflows = historyArray.map(([promptId, data]) => ({
|
|
86
|
+
prompt_id: promptId,
|
|
87
|
+
completed: data.status?.completed || false,
|
|
88
|
+
status_str: data.status?.status_str || null,
|
|
89
|
+
}));
|
|
90
|
+
outputSuccess({
|
|
91
|
+
workflows,
|
|
92
|
+
total: historyArray.length,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
82
95
|
}
|
|
83
96
|
catch (err) {
|
|
84
|
-
|
|
85
|
-
process.exit(1);
|
|
97
|
+
outputError('WORKFLOW_LIST_FAILED', `获取历史失败: ${err}`, options);
|
|
86
98
|
}
|
|
87
99
|
});
|
|
88
100
|
// comfy workflow get
|
|
@@ -90,22 +102,18 @@ export function registerWorkflowCommand(program) {
|
|
|
90
102
|
.command('get')
|
|
91
103
|
.description('获取工作流结果')
|
|
92
104
|
.argument('<prompt_id>', 'Prompt ID')
|
|
93
|
-
.option('--json', '输出 JSON 格式')
|
|
94
105
|
.option('--download', '下载输出图像')
|
|
95
106
|
.option('--output <dir>', '输出目录', './output')
|
|
96
107
|
.action(async (promptId, options) => {
|
|
108
|
+
const pretty = isPrettyMode(options);
|
|
97
109
|
try {
|
|
98
110
|
const client = new ComfyAPIClient();
|
|
99
111
|
const result = await client.getHistory(promptId);
|
|
100
112
|
if (!result[promptId]) {
|
|
101
|
-
|
|
102
|
-
process.exit(1);
|
|
113
|
+
outputError('WORKFLOW_NOT_FOUND', `未找到 Prompt ID: ${promptId}`, options);
|
|
103
114
|
}
|
|
104
115
|
const data = result[promptId];
|
|
105
|
-
if (
|
|
106
|
-
console.log(JSON.stringify(data, null, 2));
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
116
|
+
if (pretty) {
|
|
109
117
|
success(`Prompt ID: ${promptId}`);
|
|
110
118
|
if (data.status) {
|
|
111
119
|
info(`状态: ${data.status.completed ? '✓ 完成' : '✗ 失败'}`);
|
|
@@ -121,10 +129,17 @@ export function registerWorkflowCommand(program) {
|
|
|
121
129
|
info('下载功能即将推出');
|
|
122
130
|
}
|
|
123
131
|
}
|
|
132
|
+
else {
|
|
133
|
+
outputSuccess({
|
|
134
|
+
prompt_id: promptId,
|
|
135
|
+
completed: data.status?.completed || false,
|
|
136
|
+
status_str: data.status?.status_str || null,
|
|
137
|
+
outputs: data.outputs || null,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
124
140
|
}
|
|
125
141
|
catch (err) {
|
|
126
|
-
|
|
127
|
-
process.exit(1);
|
|
142
|
+
outputError('WORKFLOW_GET_FAILED', `获取结果失败: ${err}`, options);
|
|
128
143
|
}
|
|
129
144
|
});
|
|
130
145
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAoB,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,7 @@ import { Command } from 'commander';
|
|
|
3
3
|
import { readFileSync } from 'fs';
|
|
4
4
|
import { fileURLToPath } from 'url';
|
|
5
5
|
import { dirname, join } from 'path';
|
|
6
|
+
import { setGlobalPrettyMode } from './utils/output.js';
|
|
6
7
|
import { registerGenerateCommand } from './commands/generate.js';
|
|
7
8
|
import { registerEditCommand } from './commands/edit.js';
|
|
8
9
|
import { registerVideoCommand } from './commands/video.js';
|
|
@@ -21,7 +22,15 @@ const program = new Command();
|
|
|
21
22
|
program
|
|
22
23
|
.name('comfy')
|
|
23
24
|
.description('A CLI tool for ComfyUI designed for LLM interactions')
|
|
24
|
-
.version(packageJson.version)
|
|
25
|
+
.version(packageJson.version)
|
|
26
|
+
.option('--pretty', '使用人类可读的表格格式输出(默认为 JSON)')
|
|
27
|
+
.hook('preAction', (thisCommand) => {
|
|
28
|
+
// 在执行任何命令之前,检查全局 --pretty 选项
|
|
29
|
+
const opts = thisCommand.optsWithGlobals();
|
|
30
|
+
if (opts.pretty) {
|
|
31
|
+
setGlobalPrettyMode(true);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
25
34
|
// 注册功能命令
|
|
26
35
|
registerGenerateCommand(program);
|
|
27
36
|
registerEditCommand(program);
|