diff --git a/example_workflow/FeyNobg抠图.json b/example_workflow/FeyNobg抠图.json new file mode 100644 index 0000000..d70126a --- /dev/null +++ b/example_workflow/FeyNobg抠图.json @@ -0,0 +1,275 @@ +{ + "id": "3a7e5c92-1f4d-4b60-8e2a-9c5d3f7b1e04", + "revision": 0, + "last_node_id": 9, + "last_link_id": 8, + "nodes": [ + { + "id": 1, + "type": "LoadImage", + "pos": [-1600, 400], + "size": [300, 330], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "label": "图像", + "name": "IMAGE", + "type": "IMAGE", + "links": [1, 2] + }, + { + "label": "遮罩", + "name": "MASK", + "type": "MASK", + "links": [] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.49", + "Node name for S&R": "LoadImage" + }, + "widgets_values": ["example.png", "image"], + "title": "① 加载原图" + }, + { + "id": 2, + "type": "RuiFeyNobg", + "pos": [-1240, 400], + "size": [320, 170], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1 + } + ], + "outputs": [ + { + "name": "alpha", + "type": "MASK", + "links": [3, 4] + }, + { + "name": "cutout", + "type": "IMAGE", + "links": [5] + } + ], + "properties": { + "aux_id": "rui40000/Ruinode", + "Node name for S&R": "RuiFeyNobg" + }, + "widgets_values": ["FeyNobg", 1024, "fp16", "auto", false], + "color": "#232", + "bgcolor": "#353", + "title": "② FeyNobg 抠图(全自动,无需提示)" + }, + { + "id": 3, + "type": "MaskPreview", + "pos": [-860, 400], + "size": [280, 300], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "label": "遮罩", + "name": "mask", + "type": "MASK", + "link": 3 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.49", + "Node name for S&R": "MaskPreview" + }, + "widgets_values": [], + "title": "alpha 遮罩" + }, + { + "id": 4, + "type": "InvertMask", + "pos": [-860, 760], + "size": [200, 26], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 4 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [6] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.49", + "Node name for S&R": "InvertMask" + }, + "widgets_values": [], + "title": "反相(JoinImageWithAlpha 内部会再反一次)" + }, + { + "id": 5, + "type": "JoinImageWithAlpha", + "pos": [-860, 840], + "size": [220, 46], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2 + }, + { + "name": "alpha", + "type": "MASK", + "link": 6 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [7, 8] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.49", + "Node name for S&R": "JoinImageWithAlpha" + }, + "widgets_values": [], + "title": "合成透明背景 RGBA" + }, + { + "id": 6, + "type": "PreviewImage", + "pos": [-540, 400], + "size": [320, 300], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 5 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.49", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "title": "cutout(黑底预览)" + }, + { + "id": 7, + "type": "PreviewImage", + "pos": [-540, 760], + "size": [320, 300], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 7 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.49", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#232", + "bgcolor": "#353", + "title": "透明背景成品(RGBA)" + }, + { + "id": 8, + "type": "SaveImage", + "pos": [-180, 760], + "size": [320, 300], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 8 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.49", + "Node name for S&R": "SaveImage" + }, + "widgets_values": ["FeyNobg/cutout"], + "title": "保存透明 PNG" + }, + { + "id": 9, + "type": "Note", + "pos": [-1600, 800], + "size": [660, 420], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "FeyNobg 抠图 —— 使用要点\n\n【模型】首次运行会自动下载到 ComfyUI/models/nobg/FeyNobg(约 1.05GB)。\n 也可手动下载 https://huggingface.co/feyninc/FeyNobg 的三个文件放进去:\n config.json / preprocessor_config.json / model.safetensors\n\n【precision】推荐 fp16\n 实测 fp16 与 fp32 输出完全一致(同图 alpha 均值都是 0.657),\n 但 fp16 显存减半、速度快数倍。默认给 fp32 只是为老显卡留退路。\n\n【resolution】保持 1024\n 这是模型原生训练分辨率。降到 768 差别很小(前景占比 0.656 vs 0.659)\n 且更省显存;调高不一定更好,可能出现结构断裂。\n\n【适用范围】画面主体明确时效果最好\n 实测发丝、飘带、细链条等高频细节都能完整分离,边缘是自然的半透明过渡。\n 但它是「找出画面主体」的模型:给一张没有明确主体的图(例如 UI 截图、\n 纯风景),输出接近全黑是正常反应,不是故障。\n\n【与 SDMatte 的分工】\n · FeyNobg:全自动、快,适合批量去背景 —— 主体明确时首选\n · SDMatte:需要框/掩码提示指定目标,适合画面里有多个主体、只抠其中一个\n\n【透明 PNG】cutout 输出是黑底 RGB。要透明背景需走下面这条链路:\n alpha → InvertMask → JoinImageWithAlpha(该节点内部会再反一次,故须先反相)\n\n【invert_mask】节点自带的反转开关只影响 alpha 本身,\n 与上面为 JoinImageWithAlpha 做的反相是两回事,别混用。" + ], + "color": "#432", + "bgcolor": "#653" + } + ], + "links": [ + [1, 1, 0, 2, 0, "IMAGE"], + [2, 1, 0, 5, 0, "IMAGE"], + [3, 2, 0, 3, 0, "MASK"], + [4, 2, 0, 4, 0, "MASK"], + [5, 2, 1, 6, 0, "IMAGE"], + [6, 4, 0, 5, 1, "MASK"], + [7, 5, 0, 7, 0, "IMAGE"], + [8, 5, 0, 8, 0, "IMAGE"] + ], + "groups": [], + "config": {}, + "extra": { + "ds": { + "scale": 0.8, + "offset": [1800, -300] + } + }, + "version": 0.4 +} diff --git a/example_workflow/满屏文字水印.json b/example_workflow/满屏文字水印.json new file mode 100644 index 0000000..9b62b8d --- /dev/null +++ b/example_workflow/满屏文字水印.json @@ -0,0 +1,224 @@ +{ + "id": "b5d81e46-2c93-4a7f-b0e1-6f4a8d2c9b37", + "revision": 0, + "last_node_id": 7, + "last_link_id": 5, + "nodes": [ + { + "id": 1, + "type": "LoadImage", + "pos": [-1600, 400], + "size": [300, 330], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "label": "图像", + "name": "IMAGE", + "type": "IMAGE", + "links": [1, 2] + }, + { + "label": "遮罩", + "name": "MASK", + "type": "MASK", + "links": [] + } + ], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.49", + "Node name for S&R": "LoadImage" + }, + "widgets_values": ["example.png", "image"], + "title": "① 加载原图" + }, + { + "id": 2, + "type": "ImageWatermark", + "pos": [-1240, 400], + "size": [340, 300], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [3, 5] + } + ], + "properties": { + "aux_id": "rui40000/Ruinode", + "Node name for S&R": "ImageWatermark" + }, + "widgets_values": [ + "仅供参考 / SAMPLE\nRuinode", + "微软雅黑 (msyh)", + 48, + 30, + 1, + 2, + 35, + "#FFFFFF" + ], + "color": "#232", + "bgcolor": "#353", + "title": "② 满屏水印(常规:白色半透明)" + }, + { + "id": 3, + "type": "ImageWatermark", + "pos": [-1240, 760], + "size": [340, 300], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [4] + } + ], + "properties": { + "aux_id": "rui40000/Ruinode", + "Node name for S&R": "ImageWatermark" + }, + "widgets_values": [ + "版权所有 © Ruinode", + "微软雅黑 (msyh)", + 36, + 45, + 2.5, + 6, + 25, + "#FFD400" + ], + "title": "③ 对比用:高密度 / 45° / 黄色 / 宽字距" + }, + { + "id": 4, + "type": "PreviewImage", + "pos": [-860, 400], + "size": [340, 340], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 3 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.49", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#232", + "bgcolor": "#353", + "title": "常规水印效果" + }, + { + "id": 5, + "type": "PreviewImage", + "pos": [-860, 780], + "size": [340, 340], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 4 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.49", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "title": "高密度水印效果" + }, + { + "id": 6, + "type": "SaveImage", + "pos": [-480, 400], + "size": [340, 340], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 5 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.49", + "Node name for S&R": "SaveImage" + }, + "widgets_values": ["watermark/output"], + "title": "保存成品" + }, + { + "id": 7, + "type": "Note", + "pos": [-1600, 800], + "size": [660, 430], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "满屏文字水印 —— 八个参数怎么调\n\n【text 文案】支持多行,直接在框里换行即可。\n 多行会作为一个整体单元平铺,行内间距自动按字号的 25% 计算。\n\n【font 字体】列表来自 Ruinode/font 目录(与 Markdown 转图片节点共用)。\n 放入新的 ttf/otf/ttc 后刷新页面即可出现。列表里没有的字体会自动回退,\n 不会报错。\n\n【font_size 文字大小】像素值。它同时是密度的基准(见下)。\n\n【angle 旋转角度】-180~180 度。\n 实现上是「先平铺一张比对角线还大的画布,整体旋转后再从中心裁切」,\n 所以任何角度下四角都不会露白。\n\n【density 密度】0.1~5.0,越大越密。\n 控制的是水印之间的空隙:空隙 = 字号 × 2 ÷ density。\n 因此改字号时密度会跟着等比缩放,视觉疏密保持稳定。\n · 0.4 左右 = 稀疏点缀\n · 1.0 = 默认\n · 2.5 以上 = 密集防盗(建议同时把 opacity 调低到 20~30)\n\n【letter_spacing 字间距】单条文案内相邻字的额外间距,可为负。\n 逐字符绘制实现,负值可以让字挤在一起。\n\n【opacity 透明程度】0 = 完全透明(原样返回,不做任何计算),100 = 不透明。\n 防盗建议 25~40:看得清但不影响读图。\n\n【color 颜色】四种写法都支持:\n #FFFFFF / #FFF / 255,255,255 / white\n 认不出的写法会回退成灰色,不会报错。\n\n【小技巧】深色图用白色 + 35%,浅色图用黑色或深灰 + 25%,\n 彩色图用黄色 (#FFD400) 辨识度最高 —— 上面两个节点就是这个思路的对比。" + ], + "color": "#432", + "bgcolor": "#653" + } + ], + "links": [ + [1, 1, 0, 2, 0, "IMAGE"], + [2, 1, 0, 3, 0, "IMAGE"], + [3, 2, 0, 4, 0, "IMAGE"], + [4, 3, 0, 5, 0, "IMAGE"], + [5, 2, 0, 6, 0, "IMAGE"] + ], + "groups": [], + "config": {}, + "extra": { + "ds": { + "scale": 0.8, + "offset": [1800, -300] + } + }, + "version": 0.4 +}