send metadata to client on preview

for #278
This commit is contained in:
Alex "mcmonkey" Goodwin
2024-09-22 23:43:17 +09:00
parent f9cbe4238e
commit 5bf4c2f6bd
3 changed files with 18 additions and 8 deletions

View File

@@ -182,6 +182,10 @@ public abstract class ComfyUIAPIAbstractBackend : AbstractT2IBackend
Logs.Verbose("Will await a job, do parse...");
JObject workflowJson = Utilities.ParseToJson(workflow);
Logs.Verbose("JSON parsed.");
JObject metadataObj = user_input.GenMetadataObject();
metadataObj["is_preview"] = true;
metadataObj["preview_notice"] = "Image is not done generating";
string previewMetadata = T2IParamInput.MetadataToString(metadataObj);
int expectedNodes = workflowJson.Count;
string id = null;
ClientWebSocket socket = null;
@@ -226,6 +230,7 @@ public abstract class ComfyUIAPIAbstractBackend : AbstractT2IBackend
takeOutput(new JObject()
{
["batch_index"] = batchId,
["metadata"] = previewMetadata,
["overall_percent"] = nodesDone / (float)expectedNodes,
["current_percent"] = curPercent
});

View File

@@ -706,6 +706,12 @@ public class T2IParamInput
public string GenRawMetadata()
{
JObject obj = GenMetadataObject();
return MetadataToString(obj);
}
/// <summary>Converts a metadata JSON object to a string.</summary>
public static string MetadataToString(JObject obj)
{
return JsonConvert.SerializeObject(new JObject() { ["sui_image_params"] = obj }, SafeSerializer).Replace("\r\n", "\n");
}

View File

@@ -136,7 +136,9 @@ class GenerateHandler {
}
if (data.batch_index in images) {
images[data.batch_index].image = data.image;
images[data.batch_index].metadata = data.metadata;
if (data.metadata) {
images[data.batch_index].metadata = data.metadata;
}
discardable[data.batch_index] = images[data.batch_index];
delete images[data.batch_index];
}
@@ -144,9 +146,10 @@ class GenerateHandler {
if (data.gen_progress) {
let thisBatchId = `${batch_id}_${data.gen_progress.batch_index}`;
if (!(data.gen_progress.batch_index in images)) {
let batch_div = this.gotImagePreview(data.gen_progress.preview ?? 'imgs/model_placeholder.jpg', `{"preview": "${data.gen_progress.current_percent}"}`, thisBatchId);
let metadataRaw = data.gen_progress.metadata ?? '{}';
let batch_div = this.gotImagePreview(data.gen_progress.preview ?? 'imgs/model_placeholder.jpg', metadataRaw, thisBatchId);
if (batch_div) {
images[data.gen_progress.batch_index] = {div: batch_div, image: null, metadata: null, overall_percent: 0, current_percent: 0};
images[data.gen_progress.batch_index] = {div: batch_div, image: null, metadata: metadataRaw, overall_percent: 0, current_percent: 0};
let progress_bars = createDiv(null, 'image-preview-progress-wrapper', this.progressBarHtml);
batch_div.prepend(progress_bars);
}
@@ -160,16 +163,12 @@ class GenerateHandler {
overall.style.width = `${imgHolder.overall_percent * 100}%`;
imgHolder.div.querySelector('.image-preview-progress-current').style.width = `${imgHolder.current_percent * 100}%`;
if (data.gen_progress.preview && autoLoadPreviewsElem.checked && imgHolder.image == null) {
this.setCurrentImage(data.gen_progress.preview, `{"preview": "${data.gen_progress.current_percent}"}`, thisBatchId, true);
this.setCurrentImage(data.gen_progress.preview, imgHolder.metadata, thisBatchId, true);
}
let curImgElem = document.getElementById(this.imageId);
if (data.gen_progress.preview && (!imgHolder.image || data.gen_progress.preview != imgHolder.image)) {
if (curImgElem && curImgElem.dataset.batch_id == thisBatchId) {
curImgElem.src = data.gen_progress.preview;
let metadata = getRequiredElementById(this.imageContainerDivId).querySelector('.current-image-data');
if (metadata) {
metadata.remove();
}
}
imgHolder.div.dataset.src = data.gen_progress.preview;
imgHolder.div.querySelector('img').src = data.gen_progress.preview;