comfyui-node 1.6.1 → 1.6.3
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/.tsbuildinfo +1 -1
- package/dist/call-wrapper.js +856 -856
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/multipool/client-registry.d.ts +32 -11
- package/dist/multipool/client-registry.d.ts.map +1 -1
- package/dist/multipool/client-registry.js +135 -8
- package/dist/multipool/client-registry.js.map +1 -1
- package/dist/multipool/helpers.d.ts +5 -0
- package/dist/multipool/helpers.d.ts.map +1 -0
- package/dist/multipool/helpers.js +53 -0
- package/dist/multipool/helpers.js.map +1 -0
- package/dist/multipool/index.d.ts +2 -1
- package/dist/multipool/index.d.ts.map +1 -1
- package/dist/multipool/index.js +2 -1
- package/dist/multipool/index.js.map +1 -1
- package/dist/multipool/interfaces.d.ts +25 -0
- package/dist/multipool/interfaces.d.ts.map +1 -1
- package/dist/multipool/job-profiler.d.ts +128 -0
- package/dist/multipool/job-profiler.d.ts.map +1 -0
- package/dist/multipool/job-profiler.js +222 -0
- package/dist/multipool/job-profiler.js.map +1 -0
- package/dist/multipool/job-queue-processor.d.ts +27 -11
- package/dist/multipool/job-queue-processor.d.ts.map +1 -1
- package/dist/multipool/job-queue-processor.js +196 -9
- package/dist/multipool/job-queue-processor.js.map +1 -1
- package/dist/multipool/job-state-registry.d.ts +67 -0
- package/dist/multipool/job-state-registry.d.ts.map +1 -0
- package/dist/multipool/job-state-registry.js +283 -0
- package/dist/multipool/job-state-registry.js.map +1 -0
- package/dist/multipool/logger.d.ts +30 -0
- package/dist/multipool/logger.d.ts.map +1 -0
- package/dist/multipool/logger.js +75 -0
- package/dist/multipool/logger.js.map +1 -0
- package/dist/multipool/multi-workflow-pool.d.ts +86 -7
- package/dist/multipool/multi-workflow-pool.d.ts.map +1 -1
- package/dist/multipool/multi-workflow-pool.js +365 -13
- package/dist/multipool/multi-workflow-pool.js.map +1 -1
- package/dist/multipool/pool-event-manager.d.ts +10 -10
- package/dist/multipool/tests/client-registry-api-demo.d.ts +7 -0
- package/dist/multipool/tests/client-registry-api-demo.d.ts.map +1 -0
- package/dist/multipool/tests/client-registry-api-demo.js +136 -0
- package/dist/multipool/tests/client-registry-api-demo.js.map +1 -0
- package/dist/multipool/tests/client-registry.spec.d.ts +2 -0
- package/dist/multipool/tests/client-registry.spec.d.ts.map +1 -0
- package/dist/multipool/tests/client-registry.spec.js +191 -0
- package/dist/multipool/tests/client-registry.spec.js.map +1 -0
- package/dist/multipool/tests/error-classification-tests.d.ts +2 -0
- package/dist/multipool/tests/error-classification-tests.d.ts.map +1 -0
- package/dist/multipool/tests/error-classification-tests.js +374 -0
- package/dist/multipool/tests/error-classification-tests.js.map +1 -0
- package/dist/multipool/tests/event-forwarding-demo.d.ts +7 -0
- package/dist/multipool/tests/event-forwarding-demo.d.ts.map +1 -0
- package/dist/multipool/tests/event-forwarding-demo.js +88 -0
- package/dist/multipool/tests/event-forwarding-demo.js.map +1 -0
- package/dist/multipool/tests/helpers.spec.d.ts +2 -0
- package/dist/multipool/tests/helpers.spec.d.ts.map +1 -0
- package/dist/multipool/tests/helpers.spec.js +100 -0
- package/dist/multipool/tests/helpers.spec.js.map +1 -0
- package/dist/multipool/tests/job-queue-processor.spec.d.ts +2 -0
- package/dist/multipool/tests/job-queue-processor.spec.d.ts.map +1 -0
- package/dist/multipool/tests/job-queue-processor.spec.js +89 -0
- package/dist/multipool/tests/job-queue-processor.spec.js.map +1 -0
- package/dist/multipool/tests/job-state-registry.d.ts +16 -16
- package/dist/multipool/tests/job-state-registry.js +23 -23
- package/dist/multipool/tests/job-state-registry.spec.d.ts +2 -0
- package/dist/multipool/tests/job-state-registry.spec.d.ts.map +1 -0
- package/dist/multipool/tests/job-state-registry.spec.js +143 -0
- package/dist/multipool/tests/job-state-registry.spec.js.map +1 -0
- package/dist/multipool/tests/multipool-basic.d.ts +11 -1
- package/dist/multipool/tests/multipool-basic.d.ts.map +1 -1
- package/dist/multipool/tests/multipool-basic.js +140 -2
- package/dist/multipool/tests/multipool-basic.js.map +1 -1
- package/dist/multipool/tests/profiling-demo.d.ts +7 -0
- package/dist/multipool/tests/profiling-demo.d.ts.map +1 -0
- package/dist/multipool/tests/profiling-demo.js +88 -0
- package/dist/multipool/tests/profiling-demo.js.map +1 -0
- package/dist/multipool/tests/prompt-generator.d.ts +10 -0
- package/dist/multipool/tests/prompt-generator.d.ts.map +1 -0
- package/dist/multipool/tests/prompt-generator.js +26 -0
- package/dist/multipool/tests/prompt-generator.js.map +1 -0
- package/dist/multipool/tests/test-helpers.d.ts +4 -0
- package/dist/multipool/tests/test-helpers.d.ts.map +1 -0
- package/dist/multipool/tests/test-helpers.js +10 -0
- package/dist/multipool/tests/test-helpers.js.map +1 -0
- package/dist/multipool/tests/two-stage-edit-simulation.d.ts +32 -0
- package/dist/multipool/tests/two-stage-edit-simulation.d.ts.map +1 -0
- package/dist/multipool/tests/two-stage-edit-simulation.js +299 -0
- package/dist/multipool/tests/two-stage-edit-simulation.js.map +1 -0
- package/dist/multipool/workflow.d.ts +178 -173
- package/dist/multipool/workflow.d.ts.map +1 -1
- package/dist/multipool/workflow.js +333 -271
- package/dist/multipool/workflow.js.map +1 -1
- package/dist/pool/SmartPool.d.ts +143 -143
- package/dist/pool/SmartPool.js +676 -676
- package/dist/pool/SmartPoolV2.d.ts +119 -119
- package/dist/pool/SmartPoolV2.js +586 -586
- package/dist/pool/WorkflowPool.d.ts +202 -202
- package/dist/pool/WorkflowPool.d.ts.map +1 -1
- package/dist/pool/WorkflowPool.js +845 -840
- package/dist/pool/WorkflowPool.js.map +1 -1
- package/dist/pool/client/ClientManager.d.ts +86 -86
- package/dist/pool/client/ClientManager.js +215 -215
- package/dist/pool/index.d.ts +9 -11
- package/dist/pool/index.d.ts.map +1 -1
- package/dist/pool/index.js +3 -5
- package/dist/pool/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,142 @@
|
|
|
1
|
-
import { MultiWorkflowPool } from "
|
|
1
|
+
import { MultiWorkflowPool } from "../multi-workflow-pool.js";
|
|
2
|
+
import GenerationGraph from "../../../scripts/workflows/T2I-anime-nova-xl.json" with { type: "json" };
|
|
3
|
+
import GenerationGraph2 from "../../../scripts/workflows/T2I-one-obsession.json" with { type: "json" };
|
|
4
|
+
import { Workflow } from "../workflow.js";
|
|
5
|
+
import { animeXLPromptGenerator, NEGATIVE_PROMPT, promptGenerator } from "./prompt-generator.js";
|
|
2
6
|
const pool = new MultiWorkflowPool();
|
|
3
|
-
|
|
7
|
+
const w1 = Workflow.fromAugmented(GenerationGraph);
|
|
8
|
+
console.log(`Workflow 1 Hash: ${w1.structureHash}`);
|
|
9
|
+
const w2 = Workflow.fromAugmented(GenerationGraph2);
|
|
10
|
+
console.log(`Workflow 2 Hash: ${w2.structureHash}`);
|
|
11
|
+
// Set affinity mapping
|
|
12
|
+
pool.addClient("http://server1:8188", {
|
|
13
|
+
workflowAffinity: [w1, w2],
|
|
14
|
+
priority: 1
|
|
15
|
+
});
|
|
16
|
+
pool.addClient("http://server2:8188", {
|
|
17
|
+
workflowAffinity: [w1],
|
|
18
|
+
priority: 1
|
|
19
|
+
});
|
|
20
|
+
pool.addClient("http://server3:8188", {
|
|
21
|
+
workflowAffinity: [w1],
|
|
22
|
+
priority: 1
|
|
23
|
+
});
|
|
24
|
+
await pool.init();
|
|
25
|
+
async function generateImage1(prompt) {
|
|
26
|
+
const workflow = Workflow.fromAugmented(GenerationGraph)
|
|
27
|
+
.input("1", "value", prompt)
|
|
28
|
+
.input("2", "value", NEGATIVE_PROMPT)
|
|
29
|
+
.input("10", "steps", 30)
|
|
30
|
+
.input("10", "seed", -1);
|
|
31
|
+
const jobId = await pool.submitJob(workflow);
|
|
32
|
+
if (!jobId) {
|
|
33
|
+
throw new Error("Failed to submit job to pool.");
|
|
34
|
+
}
|
|
35
|
+
console.log(`[T2I-anime-nova-xl.json] Submitted job ${jobId} for prompt: "${prompt.substring(0, 30)}..."`);
|
|
36
|
+
pool.attachJobProgressListener(jobId, (progress) => {
|
|
37
|
+
console.log(`[T2I-anime-nova-xl.json] Job ${jobId} Progress: ${JSON.stringify(progress)}`);
|
|
38
|
+
});
|
|
39
|
+
pool.attachJobPreviewListener(jobId, (preview) => {
|
|
40
|
+
console.log(`[T2I-anime-nova-xl.json] Job ${jobId} Preview Image Available: ${preview.blob.size}`);
|
|
41
|
+
});
|
|
42
|
+
// // 25% chance to simulate a user cancelling the job
|
|
43
|
+
// if (Math.random() < 0.25) {
|
|
44
|
+
// await delay(2000); // wait a bit before cancelling
|
|
45
|
+
// console.log(`[T2I-anime-nova-xl.json] Simulating cancellation of job ${jobId}`);
|
|
46
|
+
// await pool.cancelJob(jobId);
|
|
47
|
+
// return [];
|
|
48
|
+
// }
|
|
49
|
+
const results = await pool.waitForJobCompletion(jobId);
|
|
50
|
+
switch (results.status) {
|
|
51
|
+
case "completed": {
|
|
52
|
+
console.log(`[T2I-anime-nova-xl.json] Job ${jobId} completed successfully.`);
|
|
53
|
+
return results.images;
|
|
54
|
+
}
|
|
55
|
+
case "canceled": {
|
|
56
|
+
console.log(`[T2I-anime-nova-xl.json] Job ${jobId} was cancelled.`);
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
case "failed": {
|
|
60
|
+
console.log(`[T2I-anime-nova-xl.json] Job ${jobId} failed with error: ${results.error.error.message}`);
|
|
61
|
+
console.dir(results.error, { depth: Infinity, colors: true });
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async function generateImage2(prompt) {
|
|
67
|
+
const workflow = Workflow.fromAugmented(GenerationGraph2)
|
|
68
|
+
.input("1", "value", prompt)
|
|
69
|
+
.input("2", "value", NEGATIVE_PROMPT)
|
|
70
|
+
.input("10", "steps", 20)
|
|
71
|
+
.input("10", "seed", -1);
|
|
72
|
+
const jobId = await pool.submitJob(workflow);
|
|
73
|
+
if (!jobId) {
|
|
74
|
+
throw new Error("Failed to submit job to pool.");
|
|
75
|
+
}
|
|
76
|
+
console.log(`[T2I-one-obsession.json] Submitted job ${jobId} for prompt: "${prompt.substring(0, 30)}..."`);
|
|
77
|
+
const results = await pool.waitForJobCompletion(jobId);
|
|
78
|
+
switch (results.status) {
|
|
79
|
+
case "completed": {
|
|
80
|
+
console.log(`[T2I-one-obsession.json] Job ${jobId} completed successfully.`);
|
|
81
|
+
return results.images;
|
|
82
|
+
}
|
|
83
|
+
case "canceled": {
|
|
84
|
+
console.log(`[T2I-one-obsession.json] Job ${jobId} was cancelled.`);
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
case "failed": {
|
|
88
|
+
console.log(`[T2I-one-obsession.json] Job ${jobId} failed with error: ${results.error.error.message}`);
|
|
89
|
+
console.dir(results.error, { depth: Infinity, colors: true });
|
|
90
|
+
return [];
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
export class SimulatedUser {
|
|
95
|
+
promptGenerator;
|
|
96
|
+
modelFunction = generateImage1;
|
|
97
|
+
shouldGenerate = true;
|
|
98
|
+
totalImages = 10;
|
|
99
|
+
collectedImages = 0;
|
|
100
|
+
constructor(generator = null, modelFunction = generateImage1, totalImages = 10) {
|
|
101
|
+
this.modelFunction = modelFunction;
|
|
102
|
+
this.promptGenerator = generator;
|
|
103
|
+
this.totalImages = totalImages;
|
|
104
|
+
}
|
|
105
|
+
stop() {
|
|
106
|
+
this.shouldGenerate = false;
|
|
107
|
+
}
|
|
108
|
+
start() {
|
|
109
|
+
this.shouldGenerate = true;
|
|
110
|
+
this.generateImages(this.totalImages).catch(reason => {
|
|
111
|
+
console.error("Error generating images:", reason);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
async generateImages(count) {
|
|
115
|
+
for (let i = 0; i < count; i++) {
|
|
116
|
+
const prompt = this.promptGenerator ? this.promptGenerator() : `default prompt ${i}`;
|
|
117
|
+
const images = await this.modelFunction(prompt);
|
|
118
|
+
this.collectedImages += images.length;
|
|
119
|
+
console.log(`Simulated user generated ${images.length} images for prompt: "${prompt.substring(0, 30)}..." Total collected: ${this.collectedImages}`);
|
|
120
|
+
if (!this.shouldGenerate) {
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
await new Promise(resolve => {
|
|
124
|
+
const randomDelay = Math.floor(Math.random() * 3000) + 1000;
|
|
125
|
+
setTimeout(() => {
|
|
126
|
+
resolve(null);
|
|
127
|
+
}, randomDelay);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
console.log(`Simulated user finished generating images ${this.collectedImages} total.`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// const user1 = new SimulatedUser(animeXLPromptGenerator, generateImage1, 3);
|
|
134
|
+
// user1.start();
|
|
135
|
+
//
|
|
136
|
+
const user2 = new SimulatedUser(promptGenerator, generateImage1, 1);
|
|
137
|
+
user2.start();
|
|
138
|
+
const user3 = new SimulatedUser(animeXLPromptGenerator, generateImage1, 1);
|
|
139
|
+
user3.start();
|
|
140
|
+
const user4 = new SimulatedUser(animeXLPromptGenerator, generateImage2, 1);
|
|
141
|
+
user4.start();
|
|
4
142
|
//# sourceMappingURL=multipool-basic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multipool-basic.js","sourceRoot":"","sources":["../../../src/multipool/tests/multipool-basic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"multipool-basic.js","sourceRoot":"","sources":["../../../src/multipool/tests/multipool-basic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiling-demo.d.ts","sourceRoot":"","sources":["../../../src/multipool/tests/profiling-demo.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Profiling Demo for MultiWorkflowPool
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates the integrated JobProfiler functionality
|
|
5
|
+
*/
|
|
6
|
+
import { MultiWorkflowPool } from "../multi-workflow-pool.js";
|
|
7
|
+
import { Workflow } from "../workflow.js";
|
|
8
|
+
import GenerationGraph from "../../../scripts/workflows/T2I-one-obsession.json" with { type: "json" };
|
|
9
|
+
const GEN_HOST = "http://localhost:8188";
|
|
10
|
+
// Create pool with profiling enabled
|
|
11
|
+
const pool = new MultiWorkflowPool({
|
|
12
|
+
enableProfiling: true,
|
|
13
|
+
logLevel: "info"
|
|
14
|
+
});
|
|
15
|
+
const genWorkflow = Workflow.fromAugmented(GenerationGraph);
|
|
16
|
+
pool.addClient(GEN_HOST, {
|
|
17
|
+
workflowAffinity: [genWorkflow],
|
|
18
|
+
priority: 1
|
|
19
|
+
});
|
|
20
|
+
console.log("\n" + "=".repeat(80));
|
|
21
|
+
console.log("PROFILING DEMO - MultiWorkflowPool");
|
|
22
|
+
console.log("=".repeat(80));
|
|
23
|
+
console.log(`Generation Host: ${GEN_HOST}`);
|
|
24
|
+
console.log(`Profiling: ENABLED`);
|
|
25
|
+
console.log("=".repeat(80) + "\n");
|
|
26
|
+
await pool.init();
|
|
27
|
+
// Run a single generation job with profiling
|
|
28
|
+
const workflow = Workflow.fromAugmented(GenerationGraph)
|
|
29
|
+
.input("1", "value", "1girl, anime style, beautiful landscape, high quality, vibrant colors")
|
|
30
|
+
.input("2", "value", "ugly, blurry, low quality")
|
|
31
|
+
.input("10", "steps", 30)
|
|
32
|
+
.input("10", "seed", -1);
|
|
33
|
+
console.log("Submitting job with profiling enabled...\n");
|
|
34
|
+
const jobId = await pool.submitJob(workflow);
|
|
35
|
+
const result = await pool.waitForJobCompletion(jobId);
|
|
36
|
+
console.log("\n" + "=".repeat(80));
|
|
37
|
+
console.log("JOB COMPLETED - PROFILING RESULTS");
|
|
38
|
+
console.log("=".repeat(80));
|
|
39
|
+
if (result.profileStats) {
|
|
40
|
+
const stats = result.profileStats;
|
|
41
|
+
console.log(`\n📊 Execution Summary:`);
|
|
42
|
+
console.log(` Total Duration: ${stats.totalDuration}ms`);
|
|
43
|
+
console.log(` Queue Time: ${stats.queueTime}ms`);
|
|
44
|
+
console.log(` Execution Time: ${stats.executionTime}ms`);
|
|
45
|
+
console.log(` Prompt ID: ${stats.promptId}`);
|
|
46
|
+
console.log(`\n📈 Node Statistics:`);
|
|
47
|
+
console.log(` Total Nodes: ${stats.summary.totalNodes}`);
|
|
48
|
+
console.log(` Executed: ${stats.summary.executedNodes}`);
|
|
49
|
+
console.log(` Cached: ${stats.summary.cachedNodes}`);
|
|
50
|
+
console.log(` Failed: ${stats.summary.failedNodes}`);
|
|
51
|
+
console.log(` Progress Tracked: ${stats.summary.progressNodes.length}`);
|
|
52
|
+
if (stats.summary.slowestNodes.length > 0) {
|
|
53
|
+
console.log(`\n🐌 Slowest Nodes (Top ${Math.min(5, stats.summary.slowestNodes.length)}):`);
|
|
54
|
+
stats.summary.slowestNodes.forEach((node, i) => {
|
|
55
|
+
const title = node.title ? ` (${node.title})` : '';
|
|
56
|
+
console.log(` ${i + 1}. Node ${node.nodeId}${title}: ${node.duration}ms`);
|
|
57
|
+
console.log(` Type: ${node.type || 'unknown'}`);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
if (stats.summary.progressNodes.length > 0) {
|
|
61
|
+
console.log(`\n⏱️ Nodes with Progress Tracking:`);
|
|
62
|
+
stats.summary.progressNodes.forEach(nodeId => {
|
|
63
|
+
const nodeProfile = stats.nodes.find(n => n.nodeId === nodeId);
|
|
64
|
+
if (nodeProfile?.progressEvents) {
|
|
65
|
+
console.log(` Node ${nodeId} (${nodeProfile.type || 'unknown'}): ${nodeProfile.progressEvents.length} progress events`);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
// Show detailed node execution timeline
|
|
70
|
+
console.log(`\n📅 Execution Timeline (All Nodes):`);
|
|
71
|
+
const executedNodes = stats.nodes
|
|
72
|
+
.filter(n => n.duration !== undefined)
|
|
73
|
+
.sort((a, b) => (a.startedAt || 0) - (b.startedAt || 0));
|
|
74
|
+
executedNodes.forEach(node => {
|
|
75
|
+
const status = node.cached ? '⚡ CACHED' : '✓ EXECUTED';
|
|
76
|
+
const title = node.title ? ` (${node.title})` : '';
|
|
77
|
+
const duration = node.cached ? '0ms' : `${node.duration}ms`;
|
|
78
|
+
console.log(` ${status} | Node ${node.nodeId}${title} | ${node.type || 'unknown'} | ${duration}`);
|
|
79
|
+
});
|
|
80
|
+
console.log("\n" + "=".repeat(80));
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
console.log("\n⚠️ No profiling data available (profiling may be disabled)");
|
|
84
|
+
}
|
|
85
|
+
await pool.shutdown();
|
|
86
|
+
console.log("\n✅ Profiling demo completed, exiting...");
|
|
87
|
+
process.exit(0);
|
|
88
|
+
//# sourceMappingURL=profiling-demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiling-demo.js","sourceRoot":"","sources":["../../../src/multipool/tests/profiling-demo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a random image generation prompt for testing.
|
|
3
|
+
*/
|
|
4
|
+
export declare function promptGenerator(): string;
|
|
5
|
+
/**
|
|
6
|
+
* Generate a random prompt specifically for the Anime XL model. Using more anime-focused elements and danbooru-style tags.
|
|
7
|
+
*/
|
|
8
|
+
export declare function animeXLPromptGenerator(): string;
|
|
9
|
+
export declare const NEGATIVE_PROMPT = "modern, recent, old, oldest, cartoon, graphic, text, painting, crayon, graphite, abstract, glitch, deformed, mutated, ugly, disfigured, long body, lowres, bad anatomy, bad hands, missing fingers, extra digits, fewer digits, cropped, very displeasing, (worst quality, bad quality:1.2), bad anatomy, sketch, jpeg artifacts, signature, watermark, username, signature, simple background, conjoined,bad ai-generated";
|
|
10
|
+
//# sourceMappingURL=prompt-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-generator.d.ts","sourceRoot":"","sources":["../../../src/multipool/tests/prompt-generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAYxC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAU/C;AAED,eAAO,MAAM,eAAe,+ZAA+Z,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a random image generation prompt for testing.
|
|
3
|
+
*/
|
|
4
|
+
export function promptGenerator() {
|
|
5
|
+
const subjects = ["a cat", "a dog", "a futuristic city", "a beautiful landscape", "an astronaut", "a dragon", "a robot", "a magical forest"];
|
|
6
|
+
const styles = ["in the style of Van Gogh", "as a Pixar movie", "like a watercolor painting", "as a cyberpunk scene", "in a surrealist style", "like a comic book illustration"];
|
|
7
|
+
const actions = ["flying through the sky", "exploring a new world", "sitting on a throne", "dancing in the rain", "holding a glowing orb", "standing on a mountain peak"];
|
|
8
|
+
const subject = subjects[Math.floor(Math.random() * subjects.length)];
|
|
9
|
+
const style = styles[Math.floor(Math.random() * styles.length)];
|
|
10
|
+
const action = actions[Math.floor(Math.random() * actions.length)];
|
|
11
|
+
return `A high-resolution image of ${subject} ${action}, ${style}, vibrant colors, detailed, 4k resolution`;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Generate a random prompt specifically for the Anime XL model. Using more anime-focused elements and danbooru-style tags.
|
|
15
|
+
*/
|
|
16
|
+
export function animeXLPromptGenerator() {
|
|
17
|
+
const subjects = ["1girl", "2boys", "catgirl", "mecha", "futuristic city", "magical girl", "samurai", "ninja"];
|
|
18
|
+
const styles = ["anime style", "manga style", "chibi style", "cyberpunk anime", "fantasy anime", "mecha anime"];
|
|
19
|
+
const actions = ["holding a katana", "sitting under cherry blossoms", "flying through the sky", "exploring a futuristic city", "casting a spell", "standing on a rooftop"];
|
|
20
|
+
const subject = subjects[Math.floor(Math.random() * subjects.length)];
|
|
21
|
+
const style = styles[Math.floor(Math.random() * styles.length)];
|
|
22
|
+
const action = actions[Math.floor(Math.random() * actions.length)];
|
|
23
|
+
return `score_9, score_8_up, score_7_up, score_6_up, score_5_up, score_4_up, source_anime, BREAK, ${subject}, ${action}, ${style}`;
|
|
24
|
+
}
|
|
25
|
+
export const NEGATIVE_PROMPT = `modern, recent, old, oldest, cartoon, graphic, text, painting, crayon, graphite, abstract, glitch, deformed, mutated, ugly, disfigured, long body, lowres, bad anatomy, bad hands, missing fingers, extra digits, fewer digits, cropped, very displeasing, (worst quality, bad quality:1.2), bad anatomy, sketch, jpeg artifacts, signature, watermark, username, signature, simple background, conjoined,bad ai-generated`;
|
|
26
|
+
//# sourceMappingURL=prompt-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-generator.js","sourceRoot":"","sources":["../../../src/multipool/tests/prompt-generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,eAAe;IAE7B,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAC7I,MAAM,MAAM,GAAG,CAAC,0BAA0B,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,gCAAgC,CAAC,CAAC;IACjL,MAAM,OAAO,GAAG,CAAC,wBAAwB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,6BAA6B,CAAC,CAAC;IAE1K,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnE,OAAO,8BAA8B,OAAO,IAAI,MAAM,KAAK,KAAK,2CAA2C,CAAC;AAE9G,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/G,MAAM,MAAM,GAAG,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC;IAChH,MAAM,OAAO,GAAG,CAAC,kBAAkB,EAAE,+BAA+B,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;IAE3K,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnE,OAAO,6FAA6F,OAAO,KAAK,MAAM,KAAK,KAAK,EAAE,CAAC;AACrI,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,4ZAA4Z,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../../src/multipool/tests/test-helpers.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAEzC;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function pickRandom(arr) {
|
|
2
|
+
return arr[Math.floor(Math.random() * arr.length)];
|
|
3
|
+
}
|
|
4
|
+
export function randomInt(min, max) {
|
|
5
|
+
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
6
|
+
}
|
|
7
|
+
export function randomSeed() {
|
|
8
|
+
return Math.floor(Math.random() * 2147483647);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=test-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../../src/multipool/tests/test-helpers.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAI,GAAQ;IACpC,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,GAAW;IAChD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export declare class TwoStageUser {
|
|
2
|
+
private userId;
|
|
3
|
+
private shouldRun;
|
|
4
|
+
private totalGenerations;
|
|
5
|
+
private generatedImages;
|
|
6
|
+
private editsPerImage;
|
|
7
|
+
private minDelayMs;
|
|
8
|
+
private maxDelayMs;
|
|
9
|
+
stats: {
|
|
10
|
+
generationsStarted: number;
|
|
11
|
+
generationsCompleted: number;
|
|
12
|
+
generationsFailed: number;
|
|
13
|
+
editsStarted: number;
|
|
14
|
+
editsCompleted: number;
|
|
15
|
+
editsFailed: number;
|
|
16
|
+
};
|
|
17
|
+
constructor(userId: string, options?: {
|
|
18
|
+
totalGenerations?: number;
|
|
19
|
+
editsPerImage?: number;
|
|
20
|
+
minDelayMs?: number;
|
|
21
|
+
maxDelayMs?: number;
|
|
22
|
+
});
|
|
23
|
+
stop(): void;
|
|
24
|
+
start(): Promise<void>;
|
|
25
|
+
private generationLoop;
|
|
26
|
+
private editLoop;
|
|
27
|
+
private generateImage;
|
|
28
|
+
private editImage;
|
|
29
|
+
private delay;
|
|
30
|
+
private printStats;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=two-stage-edit-simulation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"two-stage-edit-simulation.d.ts","sourceRoot":"","sources":["../../../src/multipool/tests/two-stage-edit-simulation.ts"],"names":[],"mappings":"AAsFA,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAGpB,KAAK;;;;;;;MAOV;gBAGA,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QACP,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;KAChB;IASR,IAAI;IAIE,KAAK;YAcG,cAAc;YAWd,QAAQ;YAiBR,aAAa;YAqDb,SAAS;IAyCvB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,UAAU;CASnB"}
|