Add internal mask editor + rembg

This commit is contained in:
tritant
2025-09-04 12:59:34 +02:00
committed by GitHub
parent 5ae68af749
commit 08bd330501
3 changed files with 12 additions and 4 deletions
+1 -1
View File
@@ -144,7 +144,7 @@ app.registerExtension({
this.rotationOffsetAngle = 0.0;
this.toolbar = new Toolbar(this);
this.size[0] = 1000;
this.size[0] = 800;
setTimeout(() => {
const anchorWidget = this.widgets.find(w => w.name === "_preview_anchor");
+9 -1
View File
@@ -203,6 +203,9 @@ async handleEditMask() {
maskUrl.searchParams.set("type", maskDetails.type);
maskUrl.searchParams.set("subfolder", maskDetails.subfolder);
const lastUpdate = layerProps.mask_last_update || Date.now();
maskUrl.searchParams.set("t", lastUpdate);
const rawMaskImage = new Image();
rawMaskImage.crossOrigin = "anonymous";
rawMaskImage.src = maskUrl.href;
@@ -306,12 +309,13 @@ async handleEditMask() {
rawCanvas.height = returned_image.naturalHeight;
rawCanvas.getContext('2d').drawImage(returned_image, 0, 0);
const blobToUpload = await new Promise(resolve => rawCanvas.toBlob(resolve, 'image/png'));
const file = new File([blobToUpload], `internal_mask_${activeLayer.index}_${+new Date()}.png`, { type: "image/png" });
const file = new File([blobToUpload], `internal_mask_${activeLayer.index}.png`, { type: "image/png" });
const finalMaskResponse = await this._uploadFile(file, true);
const layerProps = this.node.layer_properties[activeLayer.name];
layerProps.internal_mask_filename = finalMaskResponse.name;
layerProps.internal_mask_details = finalMaskResponse;
layerProps.mask_last_update = Date.now();
this.node.updatePropertiesJSON();
const standardizedCanvas = standardizeMaskFromEditor(returned_image);
@@ -461,6 +465,10 @@ createContextualToolbar() {
url.searchParams.append("filename", details.name);
url.searchParams.append("type", details.type);
url.searchParams.append("subfolder", details.subfolder);
const lastUpdate = layerProps.mask_last_update || Date.now();
url.searchParams.append("t", lastUpdate);
this.updatePreview(url.href);
} else {
this.updatePreview(null);
+2 -2
View File
@@ -8,7 +8,7 @@ export class RemoveBgManager {
async performRemoveBg() {
const activeLayer = this.maskManager.getActiveLayer();
if (!activeLayer) return;
const layerIndex = activeLayer.index;
const layerName = activeLayer.name;
const previewInfo = this.node.preview_data?.[layerName];
const sourceFilename = previewInfo?.filename;
@@ -27,7 +27,7 @@ async performRemoveBg() {
const response = await fetch("/layersystem/remove_bg", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ filename: sourceFilename }),
body: JSON.stringify({ filename: sourceFilename, layer_index_str: String(layerIndex)}),
});
if (!response.ok) throw new Error(`Erreur du serveur : ${await response.text()}`);