55 lines
1.2 KiB
JavaScript
55 lines
1.2 KiB
JavaScript
import { app } from "/scripts/app.js";
|
|
|
|
// Adds a new UploadImage node
|
|
|
|
const toBase64 = (file) =>
|
|
new Promise((resolve, reject) => {
|
|
const reader = new FileReader();
|
|
reader.readAsDataURL(file);
|
|
reader.onload = () => resolve(reader.result);
|
|
reader.onerror = (error) => reject(error);
|
|
});
|
|
|
|
app.registerExtension({
|
|
name: "Comfy.UploadImage",
|
|
async getCustomWidgets() {
|
|
return {
|
|
B64IMAGE(node) {
|
|
let uploadWidget;
|
|
const fileInput = document.createElement("input");
|
|
|
|
Object.assign(fileInput, {
|
|
type: "file",
|
|
accept: "image/jpeg,image/png",
|
|
style: "display: none",
|
|
onchange: () => {
|
|
if (fileInput.files.length) {
|
|
const img = new Image();
|
|
img.onload = () => {
|
|
node.imgs = [img];
|
|
};
|
|
toBase64(fileInput.files[0]).then((d) => {
|
|
img.src = d;
|
|
});
|
|
}
|
|
},
|
|
});
|
|
document.body.append(fileInput);
|
|
|
|
uploadWidget = node.addWidget("button", "image", "image", () => {
|
|
fileInput.click();
|
|
});
|
|
|
|
uploadWidget.serializeValue = () => {
|
|
if(node.imgs && node.imgs.length) {
|
|
return node.imgs[0].src;
|
|
}
|
|
return null;
|
|
};
|
|
|
|
return { widget: uploadWidget };
|
|
},
|
|
};
|
|
},
|
|
});
|