feat: combine Models+Inputs into Generation Data combination overlay (#188, #189, #190, #191)

Replaces the two Models/Inputs preview buttons with a single Generation
Data button (#188) opening a split overlay:

- Left half: one horizontal-scroll grid per upstream Flake Model Combo /
  Flake Combo node, defaulting to the first item, selectable (#189).
- Right half: model/output/LoRA/prompt data for the selected combination
  only, pulling fixed preset + common stack flakes + the chosen combo
  flake per axis (#190).
- Top of right half: k-d-tree composite of the selected combo covers
  (top half + bottom quarters for the 3-item case), with a
  'No image generated yet' label that swaps to the actual output +
  filename once that combination has been generated (#191).

queue.js stamps an order-independent combination key onto FlakeGenerate
before each queued prompt so onExecuted can map outputs to combinations.
closes #187
This commit is contained in:
Mehdi Chaid
2026-05-15 21:57:43 -04:00
parent 9ff0abc2b0
commit f8c82d4ea4
3 changed files with 465 additions and 244 deletions
+11
View File
@@ -113,6 +113,8 @@ app.queuePrompt = async function(number, batchCount = 1) {
}
}
const flakeGenerateNodes = app.graph.nodes.filter(n => n.type === "FlakeGenerate");
try {
for (const combination of combinations) {
for (const item of combination) {
@@ -129,6 +131,15 @@ app.queuePrompt = async function(number, batchCount = 1) {
item.node._model_combo_render?.();
}
}
// Stamp the active combination key (order-independent: combo node
// id : selected index, sorted by node id) so FlakeGenerate can map
// the resulting image to this combination in its data overlay.
const comboKey = combination
.map(it => [it.node.id, it.index])
.sort((a, b) => a[0] - b[0])
.map(([id, idx]) => `${id}:${idx}`)
.join("|");
for (const fg of flakeGenerateNodes) fg._pending_combination_key = comboKey;
await _originalQueuePrompt.call(this, number, 1);
}
} finally {