This commit is contained in:
zjt 2024-05-22 14:39:09 +08:00
parent 927577c201
commit e29085c314
5 changed files with 101 additions and 50297 deletions

50294
data.js

File diff suppressed because one or more lines are too long

View File

@ -24,6 +24,7 @@ const Txt23DHandler: RequestHandler<Txt2ImgRequest, any> = async (ctx) => {
url: ctx.body = baseUrl + '/view?filename=' + await new Promise((resolve, reject) => {
const taskID = Math.random().toFixed(10);
const ws = new WebSocket(`${baseWsUrl}/ws?clientId=${taskID}`);
ws.binaryType = "arraybuffer";
ws.onopen = () => {
try {
axios.post("/prompt", {

View File

@ -21,6 +21,7 @@ const Txt2ImgHandler: RequestHandler<Txt2ImgRequest, any> = async (ctx, next) =>
const { prompt, loraDetail, loraModel } = requestBody;
const inputNode = selectNodeFromApiJSONbyID(txt2imgAPIformatJSON, "33");
let temp = "";
let preViewBlobs:any = [];
inputNode.inputs.string = prompt;
ctx.body = {
data: await new Promise((resolve, reject) => {
@ -33,6 +34,7 @@ const Txt2ImgHandler: RequestHandler<Txt2ImgRequest, any> = async (ctx, next) =>
prompt: txt2imgAPIformatJSON,
// extra_data: txt2imgAPIformatExtraData
});
console.log(`ok`);
} catch (error) {
console.log(error);
}
@ -50,11 +52,13 @@ const Txt2ImgHandler: RequestHandler<Txt2ImgRequest, any> = async (ctx, next) =>
temp = data.output.text[0];
}
if (data.node === '94') {
resolve({ prompt: temp, url: baseUrl + '/view?filename=' + data.output.images[0].filename })
resolve({ prompt: temp, url: baseUrl + '/view?filename=' + data.output.images[0].filename, preViewBlobs: preViewBlobs });
}
}else if (type === "executing") {
}
} else {
} else if (event.data instanceof Buffer) {
console.log(`event.data`, event.data);
preViewBlobs.push(event.data);
}
}
}

View File

@ -44,8 +44,11 @@ const UpscaleHandler: RequestHandler<any ,any> = async (ctx) => {
resolve(data.output.images[0].filename)
}
}
} else {
} else if(event.data instanceof ArrayBuffer) {
const blob = new Blob([event.data])// arraybuffer to blob
let a = new FileReader();
a.onload = function (e) { console.log('image/png;base64,'+ e.target!.result) }
a.readAsDataURL(blob);
}
}
}

86
test.html Normal file
View File

@ -0,0 +1,86 @@
<html>
<head>
<title>测试页面</title>
</head>
<body>
<h1>测试页面</h1>
</body>
</html>
<script>
import {
app
} from "../../scripts/app.js";
import {
api
} from "../../scripts/api.js";
app.registerExtension({
name: "efficiency.previewfix",
lastExecutedNodeId: null,
blobsToRevoke: [], // Array to accumulate blob URLs for revocation
debug: false,
log(...args) {
if (this.debug) console.log(...args);
},
error(...args) {
if (this.debug) console.error(...args);
},
shouldRevokeBlobForNode(nodeId) {
const node = app.graph.getNodeById(nodeId);
const validTitles = [
"KSampler (Efficient)",
"KSampler Adv. (Efficient)",
"KSampler SDXL (Eff.)"
];
if (!node || !validTitles.includes(node.title)) {
return false;
}
const getValue = name => ((node.widgets || []).find(w => w.name === name) || {}).value;
return getValue("preview_method") !== "none" && getValue("vae_decode").includes("true");
},
setup() {
// Intercepting blob creation to store and immediately revoke the last blob URL
const originalCreateObjectURL = URL.createObjectURL;
URL.createObjectURL = (object) => {
const blobURL = originalCreateObjectURL(object);
if (blobURL.startsWith('blob:')) {
this.log("[BlobURLLogger] Blob URL created:", blobURL);
// If the current node meets the criteria, add the blob URL to the revocation list
if (this.shouldRevokeBlobForNode(this.lastExecutedNodeId)) {
this.blobsToRevoke.push(blobURL);
}
}
return blobURL;
};
// Listen to the start of the node execution to revoke all accumulated blob URLs
api.addEventListener("executing", ({
detail
}) => {
if (this.lastExecutedNodeId !== detail || detail === null) {
this.blobsToRevoke.forEach(blob => {
this.log("[BlobURLLogger] Revoking Blob URL:", blob);
URL.revokeObjectURL(blob);
});
this.blobsToRevoke = []; // Clear the list after revoking all blobs
}
// Update the last executed node ID
this.lastExecutedNodeId = detail;
});
this.log("[BlobURLLogger] Hook attached.");
},
});
</script>