copy api json
This commit is contained in:
@@ -143,10 +143,41 @@ class MaskToBase64Image(MaskImageToBase64):
|
||||
FUNCTION = "mask_to_base64image"
|
||||
|
||||
def mask_to_base64image(self, mask):
|
||||
"""将一个二维的掩码张量扩展为一个四维的彩色图像张量。具体的步骤如下:
|
||||
|
||||
第一行,使用 torch.reshape 函数,将掩码张量的形状改变为(-1, 1, mask.shape[-2], mask.shape[-1]),
|
||||
其中 - 1 表示自动推断该维度的大小,1 表示增加一个新的维度,mask.shape[-2] 和 mask.shape[-1] 表示保持原来的最后两个维度不变。
|
||||
这样,掩码张量就变成了一个四维的张量,其中第二个维度只有一个通道。
|
||||
|
||||
第二行,使用 torch.movedim 函数,将掩码张量的第二个维度(通道维度)移动到最后一个维度的位置,即将形状为(-1, 1, mask.shape[-2], mask.shape[-1])
|
||||
的张量变为(-1, mask.shape[-2], mask.shape[-1], 1) 的张量。这样,掩码张量就变成了一个符合图像格式的张量,其中最后一个维度表示通道数。
|
||||
|
||||
第三行,使用 torch.Tensor.expand 函数,将掩码张量的最后一个维度(通道维度)扩展为 3,即将形状为(-1, mask.shape[-2], mask.shape[-1], 1) 的张量变为(-1, mask.shape[-2], mask.shape[-1], 3) 的张量。这样,掩码张量就变成了一个彩色图像张量,其中最后一个维度表示红、绿、蓝三个通道。
|
||||
|
||||
这段代码的结果是一个与原来的掩码张量相同元素的彩色图像张量,表示掩码的颜色
|
||||
"""
|
||||
images = mask.reshape((-1, 1, mask.shape[-2], mask.shape[-1])).movedim(1, -1).expand(-1, -1, -1, 3)
|
||||
return super().convert(images)
|
||||
|
||||
|
||||
class MaskToBase64(MaskImageToBase64):
|
||||
@classmethod
|
||||
def INPUT_TYPES(s):
|
||||
return {
|
||||
"required": {
|
||||
"mask": ("MASK",),
|
||||
}
|
||||
}
|
||||
|
||||
CATEGORY = "EasyApi/Image"
|
||||
|
||||
RETURN_TYPES = ("STRING",)
|
||||
FUNCTION = "mask_to_base64image"
|
||||
|
||||
def mask_to_base64image(self, mask):
|
||||
return super().convert(mask)
|
||||
|
||||
|
||||
class LoadImageToBase64(LoadImage):
|
||||
RETURN_TYPES = ("STRING", "IMAGE", "MASK", )
|
||||
RETURN_NAMES = ("base64Images", "IMAGE", "MASK", )
|
||||
@@ -196,6 +227,7 @@ def base64_to_image(base64_string):
|
||||
NODE_CLASS_MAPPINGS = {
|
||||
"Base64ToImage": Base64ToImage,
|
||||
"ImageToBase64": ImageToBase64,
|
||||
# "MaskToBase64": MaskToBase64,
|
||||
"ImageToBase64Advanced": ImageToBase64Advanced,
|
||||
"MaskToBase64Image": MaskToBase64Image,
|
||||
"MaskImageToBase64": MaskImageToBase64,
|
||||
@@ -206,6 +238,7 @@ NODE_CLASS_MAPPINGS = {
|
||||
NODE_DISPLAY_NAME_MAPPINGS = {
|
||||
"Base64ToImage": "Base64 To Image",
|
||||
"ImageToBase64": "Image To Base64",
|
||||
# "MaskToBase64": "Mask To Base64",
|
||||
"ImageToBase64Advanced": "Image To Base64 (Advanced)",
|
||||
"MaskToBase64Image": "Mask To Base64 Image",
|
||||
"MaskImageToBase64": "Mask Image To Base64",
|
||||
|
||||
+18
-2
@@ -74,6 +74,11 @@ class EasyApiWorkflows {
|
||||
document.body.removeChild(textarea);
|
||||
}
|
||||
}
|
||||
|
||||
function showTip(tips) {
|
||||
app.ui.dialog.show(tips);
|
||||
setTimeout(() => app.ui.dialog.close(), 500);
|
||||
}
|
||||
function addWorkflowMenu(type, getOptions) {
|
||||
return $el("div.easyapi-workflow-arrow", {
|
||||
parent: document.getElementById(`comfy-${type}-button`),
|
||||
@@ -103,6 +108,17 @@ class EasyApiWorkflows {
|
||||
orgSaveApiBtn.click();
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "Copy Api",
|
||||
callback: async () => {
|
||||
app.graphToPrompt().then(p => {
|
||||
const apiObj = p.output;
|
||||
const json = JSON.stringify(apiObj, null, null);
|
||||
copyToClipboard(json);
|
||||
showTip("Copied")
|
||||
});
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "Save EasyApi as",
|
||||
callback: async () => {
|
||||
@@ -141,7 +157,7 @@ class EasyApiWorkflows {
|
||||
const newApiObj = replaceImageNode(apiObj)
|
||||
const json = JSON.stringify(newApiObj, null, null); // convert the data to a JSON string
|
||||
copyToClipboard(json);
|
||||
alert("Copied")
|
||||
showTip("Copied")
|
||||
});
|
||||
},
|
||||
},
|
||||
@@ -155,7 +171,7 @@ class EasyApiWorkflows {
|
||||
app.graphToPrompt().then(p => {
|
||||
const json = JSON.stringify(app.graph.serialize(), null, null); // convert the data to a JSON string
|
||||
copyToClipboard(json);
|
||||
alert("Copied")
|
||||
showTip("Copied")
|
||||
});
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user