mirror of
https://github.com/rookiestar28/ComfyUI-OpenClaw.git
synced 2026-08-14 00:48:07 +00:00
80 lines
3.5 KiB
JavaScript
80 lines
3.5 KiB
JavaScript
import { showError, clearError, parseJsonOrThrow } from "../openclaw_utils.js";
|
|
|
|
export const VariantsTab = {
|
|
id: "variants",
|
|
title: "Variants",
|
|
icon: "pi pi-copy",
|
|
|
|
render(container) {
|
|
container.innerHTML = `
|
|
<div class="openclaw-panel">
|
|
<div class="openclaw-scroll-area">
|
|
<div class="openclaw-card">
|
|
<div class="openclaw-section-header">Variants Configuration</div>
|
|
|
|
<div class="openclaw-error-box" style="display:none"></div>
|
|
|
|
<div class="openclaw-input-group">
|
|
<label class="openclaw-label">Base Parameters (JSON)</label>
|
|
<textarea id="var-base-params" class="openclaw-textarea openclaw-textarea-md">{"width": 1024, "height": 1024, "seed": 0}</textarea>
|
|
</div>
|
|
|
|
<div class="openclaw-grid-2">
|
|
<div class="openclaw-input-group">
|
|
<label class="openclaw-label">Strategy</label>
|
|
<select id="var-strategy" class="openclaw-select">
|
|
<option value="seeds">Seed Sweep (Count)</option>
|
|
<option value="cfg">CFG Scale (Range)</option>
|
|
</select>
|
|
</div>
|
|
|
|
<!-- Dynamic inputs based on strategy -->
|
|
<div id="var-opts-seeds" class="var-opts openclaw-input-group">
|
|
<label class="openclaw-label">Count</label>
|
|
<input type="number" id="var-seed-count" class="openclaw-input" value="4" min="1" max="100">
|
|
</div>
|
|
</div>
|
|
|
|
<button id="var-run-btn" class="openclaw-btn openclaw-btn-primary">Generate Variants JSON</button>
|
|
</div>
|
|
|
|
<div class="openclaw-card">
|
|
<div class="openclaw-section-header">Resulting List</div>
|
|
<div class="openclaw-input-group">
|
|
<label class="openclaw-label">Output (List of Params)</label>
|
|
<textarea id="var-output" class="openclaw-textarea openclaw-textarea-lg" readonly></textarea>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
`;
|
|
|
|
container.querySelector("#var-run-btn").onclick = () => {
|
|
clearError(container);
|
|
try {
|
|
const baseStr = container.querySelector("#var-base-params").value;
|
|
if (!baseStr.trim()) throw new Error("Base parameters required");
|
|
|
|
const base = parseJsonOrThrow(
|
|
baseStr,
|
|
"Base parameters must be valid JSON"
|
|
);
|
|
|
|
const count = parseInt(container.querySelector("#var-seed-count").value) || 4;
|
|
const variants = [];
|
|
|
|
// Simple logic for MVP (Seed Sweep only)
|
|
for (let i = 0; i < count; i++) {
|
|
const v = { ...base };
|
|
v.seed = (base.seed || 0) + i;
|
|
variants.push(v);
|
|
}
|
|
|
|
container.querySelector("#var-output").value = JSON.stringify(variants, null, 2);
|
|
} catch (e) {
|
|
showError(container, e.message);
|
|
}
|
|
};
|
|
}
|
|
};
|