86 lines
2.7 KiB
HTML
86 lines
2.7 KiB
HTML
<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> |