mirror of
https://github.com/jags111/efficiency-nodes-comfyui.git
synced 2026-03-21 13:12:13 -03:00
This PR is a huge update, I added/fixed so many things that I will explain all the updates later on the release notes.
107 lines
3.5 KiB
JavaScript
107 lines
3.5 KiB
JavaScript
import { app } from "../../scripts/app.js";
|
|
|
|
const ext = {
|
|
name: "efficiency.previewfix",
|
|
ws: null,
|
|
maxCount: 0,
|
|
currentCount: 0,
|
|
sendBlob: false,
|
|
startProcessing: false,
|
|
lastBlobURL: null,
|
|
debug: false,
|
|
|
|
log(...args) {
|
|
if (this.debug) console.log(...args);
|
|
},
|
|
|
|
error(...args) {
|
|
if (this.debug) console.error(...args);
|
|
},
|
|
|
|
async sendBlobDataAsDataURL(blobURL) {
|
|
const blob = await fetch(blobURL).then(res => res.blob());
|
|
const reader = new FileReader();
|
|
reader.readAsDataURL(blob);
|
|
reader.onloadend = () => this.ws.send(reader.result);
|
|
},
|
|
|
|
handleCommandMessage(data) {
|
|
Object.assign(this, {
|
|
maxCount: data.maxCount,
|
|
sendBlob: data.sendBlob,
|
|
startProcessing: data.startProcessing,
|
|
currentCount: 0
|
|
});
|
|
|
|
if (!this.startProcessing && this.lastBlobURL) {
|
|
this.log("[BlobURLLogger] Revoking last Blob URL:", this.lastBlobURL);
|
|
URL.revokeObjectURL(this.lastBlobURL);
|
|
this.lastBlobURL = null;
|
|
}
|
|
},
|
|
|
|
init() {
|
|
this.log("[BlobURLLogger] Initializing...");
|
|
|
|
this.ws = new WebSocket('ws://127.0.0.1:8288');
|
|
|
|
this.ws.addEventListener('open', () => this.log('[BlobURLLogger] WebSocket connection opened.'));
|
|
this.ws.addEventListener('error', err => this.error('[BlobURLLogger] WebSocket Error:', err));
|
|
this.ws.addEventListener('message', (event) => {
|
|
try {
|
|
const data = JSON.parse(event.data);
|
|
if (data.maxCount !== undefined && data.sendBlob !== undefined && data.startProcessing !== undefined) {
|
|
this.handleCommandMessage(data);
|
|
}
|
|
} catch (err) {
|
|
this.error('[BlobURLLogger] Error parsing JSON:', err);
|
|
}
|
|
});
|
|
|
|
const originalCreateObjectURL = URL.createObjectURL;
|
|
URL.createObjectURL = (object) => {
|
|
const blobURL = originalCreateObjectURL.call(this, object);
|
|
if (blobURL.startsWith('blob:') && this.startProcessing) {
|
|
this.log("[BlobURLLogger] Blob URL created:", blobURL);
|
|
this.lastBlobURL = blobURL;
|
|
if (this.sendBlob && this.currentCount < this.maxCount) {
|
|
this.sendBlobDataAsDataURL(blobURL);
|
|
}
|
|
this.currentCount++;
|
|
}
|
|
return blobURL;
|
|
};
|
|
|
|
this.log("[BlobURLLogger] Hook attached.");
|
|
}
|
|
};
|
|
|
|
function toggleWidgetVisibility(node, widgetName, isVisible) {
|
|
const widget = node.widgets.find(w => w.name === widgetName);
|
|
if (widget) {
|
|
widget.visible = isVisible;
|
|
node.setDirtyCanvas(true);
|
|
}
|
|
}
|
|
|
|
function handleLoraNameChange(node, loraNameWidget) {
|
|
const isNone = loraNameWidget.value === "None";
|
|
toggleWidgetVisibility(node, "lora_model_strength", !isNone);
|
|
toggleWidgetVisibility(node, "lora_clip_strength", !isNone);
|
|
}
|
|
|
|
app.registerExtension({
|
|
...ext,
|
|
nodeCreated(node) {
|
|
if (node.getTitle() === "Efficient Loader") {
|
|
const loraNameWidget = node.widgets.find(w => w.name === "lora_name");
|
|
if (loraNameWidget) {
|
|
handleLoraNameChange(node, loraNameWidget);
|
|
loraNameWidget.onChange = function() {
|
|
handleLoraNameChange(node, this);
|
|
};
|
|
}
|
|
}
|
|
}
|
|
});
|