add Smart Profile Switch, fix folder picker, README overhaul, v1.0.2
- rename Smart Category Config → Smart Profile Switch 🧩 (code, JS, locales, demo workflow)
- add banner.svg and embed it at the top of README
- replace fragile OpenFileDialog folder-browse hack with native IFileDialog/FOS_PICKFOLDERS picker — fixes wrong-folder bug on single-click select
- flip Smart Resize's upscale_if_smaller default to true — node now resizes to target by default, as the name implies
- add width/height source tooltip to Smart Resolution Multiplier's image input
- fix stale widgets_values in smart_batch_resize_demo.json (10 fields → 13 after prefix/counter fields were added)
- full README rewrite: correct inputs/defaults/outputs for all 5 nodes, new Smart Profile Switch section, Example workflows section, expanded "Why these nodes?"
- add new example workflow (seedvr2_smartresize_demo.json), updated screenshots
- add assets/*.ai to .gitignore
- bump version to 1.0.2
This commit is contained in:
@@ -0,0 +1,228 @@
|
||||
{
|
||||
"last_node_id": 9,
|
||||
"last_link_id": 7,
|
||||
"nodes": [
|
||||
{
|
||||
"id": 1,
|
||||
"type": "Note",
|
||||
"pos": [0, -240],
|
||||
"size": {"0": 1840, "1": 190},
|
||||
"flags": {},
|
||||
"order": 7,
|
||||
"mode": 0,
|
||||
"inputs": [],
|
||||
"outputs": [],
|
||||
"properties": {},
|
||||
"widgets_values": ["CraftKit × SeedVR2 — Smart Upscale\n\nPattern:\n1. SmartResolutionMultiplier calculates the 2× target resolution from the input image automatically\n2. ImageScaleBy pre-downscales the input (0.75×) so SeedVR2 has room to work\n3. SeedVR2 upscales to the computed target resolution (connected from SmartResolutionMultiplier → resolution)\n4. SmartResize normalizes the output to a consistent longest side\n\nChange multiplier on SmartResolutionMultiplier to control the upscale factor. Change longest_side on SmartResize to control output size."],
|
||||
"color": "#2a3a2a",
|
||||
"bgcolor": "#1a2a1a"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"type": "LoadImage",
|
||||
"pos": [0, -10],
|
||||
"size": {"0": 280, "1": 320},
|
||||
"flags": {},
|
||||
"order": 0,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{"name": "image", "type": "COMBO", "widget": {"name": "image"}, "link": null},
|
||||
{"name": "upload", "type": "IMAGEUPLOAD", "widget": {"name": "upload"}, "link": null}
|
||||
],
|
||||
"outputs": [
|
||||
{"name": "IMAGE", "type": "IMAGE", "links": [1, 2], "slot_index": 0},
|
||||
{"name": "MASK", "type": "MASK", "links": null, "slot_index": 1}
|
||||
],
|
||||
"properties": {"cnr_id": "comfy-core", "Node name for S&R": "LoadImage"},
|
||||
"widgets_values": ["example.png", "image"]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"type": "SmartResolutionMultiplier",
|
||||
"pos": [320, -10],
|
||||
"size": {"0": 320, "1": 150},
|
||||
"flags": {},
|
||||
"order": 1,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{"name": "image", "type": "IMAGE", "link": 1}
|
||||
],
|
||||
"outputs": [
|
||||
{"name": "width", "type": "INT", "links": null, "slot_index": 0},
|
||||
{"name": "height", "type": "INT", "links": null, "slot_index": 1},
|
||||
{"name": "resolution", "type": "INT", "links": [3], "slot_index": 2}
|
||||
],
|
||||
"properties": {"cnr_id": "comfyui-craftkit", "Node name for S&R": "SmartResolutionMultiplier"},
|
||||
"widgets_values": [2.0, 8]
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"type": "ImageScaleBy",
|
||||
"pos": [320, 180],
|
||||
"size": {"0": 270, "1": 130},
|
||||
"flags": {},
|
||||
"order": 2,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{"name": "image", "type": "IMAGE", "link": 2}
|
||||
],
|
||||
"outputs": [
|
||||
{"name": "IMAGE", "type": "IMAGE", "links": [4], "slot_index": 0}
|
||||
],
|
||||
"title": "Pre-downscale (0.75×)",
|
||||
"properties": {"cnr_id": "comfy-core", "Node name for S&R": "ImageScaleBy"},
|
||||
"widgets_values": ["lanczos", 0.75]
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"type": "SeedVR2LoadDiTModel",
|
||||
"pos": [680, -10],
|
||||
"size": {"0": 380, "1": 260},
|
||||
"flags": {},
|
||||
"order": 3,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{"name": "torch_compile_args", "shape": 7, "type": "TORCH_COMPILE_ARGS", "link": null},
|
||||
{"name": "model", "type": "COMBO", "widget": {"name": "model"}, "link": null},
|
||||
{"name": "device", "type": "COMBO", "widget": {"name": "device"}, "link": null},
|
||||
{"name": "blocks_to_swap", "shape": 7, "type": "INT", "widget": {"name": "blocks_to_swap"}, "link": null},
|
||||
{"name": "swap_io_components", "shape": 7, "type": "BOOLEAN", "widget": {"name": "swap_io_components"}, "link": null},
|
||||
{"name": "offload_device", "shape": 7, "type": "COMBO", "widget": {"name": "offload_device"}, "link": null},
|
||||
{"name": "cache_model", "shape": 7, "type": "BOOLEAN", "widget": {"name": "cache_model"}, "link": null},
|
||||
{"name": "attention_mode", "shape": 7, "type": "COMBO", "widget": {"name": "attention_mode"}, "link": null}
|
||||
],
|
||||
"outputs": [
|
||||
{"name": "SEEDVR2_DIT", "type": "SEEDVR2_DIT", "links": [5], "slot_index": 0}
|
||||
],
|
||||
"properties": {"cnr_id": "seedvr2_videoupscaler", "Node name for S&R": "SeedVR2LoadDiTModel"},
|
||||
"widgets_values": ["seedvr2_ema_3b_fp8_e4m3fn.safetensors", "cuda:0", 0, false, "none", false, "sdpa"]
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"type": "SeedVR2LoadVAEModel",
|
||||
"pos": [680, 300],
|
||||
"size": {"0": 380, "1": 300},
|
||||
"flags": {},
|
||||
"order": 4,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{"name": "torch_compile_args", "shape": 7, "type": "TORCH_COMPILE_ARGS", "link": null},
|
||||
{"name": "model", "type": "COMBO", "widget": {"name": "model"}, "link": null},
|
||||
{"name": "device", "type": "COMBO", "widget": {"name": "device"}, "link": null},
|
||||
{"name": "encode_tiled", "shape": 7, "type": "BOOLEAN", "widget": {"name": "encode_tiled"}, "link": null},
|
||||
{"name": "encode_tile_size", "shape": 7, "type": "INT", "widget": {"name": "encode_tile_size"}, "link": null},
|
||||
{"name": "encode_tile_overlap", "shape": 7, "type": "INT", "widget": {"name": "encode_tile_overlap"}, "link": null},
|
||||
{"name": "decode_tiled", "shape": 7, "type": "BOOLEAN", "widget": {"name": "decode_tiled"}, "link": null},
|
||||
{"name": "decode_tile_size", "shape": 7, "type": "INT", "widget": {"name": "decode_tile_size"}, "link": null},
|
||||
{"name": "decode_tile_overlap", "shape": 7, "type": "INT", "widget": {"name": "decode_tile_overlap"}, "link": null},
|
||||
{"name": "tile_debug", "shape": 7, "type": "COMBO", "widget": {"name": "tile_debug"}, "link": null},
|
||||
{"name": "offload_device", "shape": 7, "type": "COMBO", "widget": {"name": "offload_device"}, "link": null},
|
||||
{"name": "cache_model", "shape": 7, "type": "BOOLEAN", "widget": {"name": "cache_model"}, "link": null}
|
||||
],
|
||||
"outputs": [
|
||||
{"name": "SEEDVR2_VAE", "type": "SEEDVR2_VAE", "links": [6], "slot_index": 0}
|
||||
],
|
||||
"properties": {"cnr_id": "seedvr2_videoupscaler", "Node name for S&R": "SeedVR2LoadVAEModel"},
|
||||
"widgets_values": ["ema_vae_fp16.safetensors", "cuda:0", true, 1024, 128, true, 1024, 128, "false", "cpu", false]
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"type": "SeedVR2VideoUpscaler",
|
||||
"pos": [1100, -10],
|
||||
"size": {"0": 380, "1": 560},
|
||||
"flags": {},
|
||||
"order": 5,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{"name": "image", "type": "IMAGE", "link": 4},
|
||||
{"name": "dit", "type": "SEEDVR2_DIT", "link": 5},
|
||||
{"name": "vae", "type": "SEEDVR2_VAE", "link": 6},
|
||||
{"name": "seed", "type": "INT", "widget": {"name": "seed"}, "link": null},
|
||||
{"name": "resolution", "type": "INT", "widget": {"name": "resolution"}, "link": 3},
|
||||
{"name": "max_resolution", "type": "INT", "widget": {"name": "max_resolution"}, "link": null},
|
||||
{"name": "batch_size", "type": "INT", "widget": {"name": "batch_size"}, "link": null},
|
||||
{"name": "uniform_batch_size", "type": "BOOLEAN", "widget": {"name": "uniform_batch_size"}, "link": null},
|
||||
{"name": "color_correction", "type": "COMBO", "widget": {"name": "color_correction"}, "link": null},
|
||||
{"name": "temporal_overlap", "shape": 7, "type": "INT", "widget": {"name": "temporal_overlap"}, "link": null},
|
||||
{"name": "prepend_frames", "shape": 7, "type": "INT", "widget": {"name": "prepend_frames"}, "link": null},
|
||||
{"name": "input_noise_scale", "shape": 7, "type": "FLOAT", "widget": {"name": "input_noise_scale"}, "link": null},
|
||||
{"name": "latent_noise_scale", "shape": 7, "type": "FLOAT", "widget": {"name": "latent_noise_scale"}, "link": null},
|
||||
{"name": "offload_device", "shape": 7, "type": "COMBO", "widget": {"name": "offload_device"}, "link": null},
|
||||
{"name": "enable_debug", "shape": 7, "type": "BOOLEAN", "widget": {"name": "enable_debug"}, "link": null}
|
||||
],
|
||||
"outputs": [
|
||||
{"name": "IMAGE", "type": "IMAGE", "links": [7], "slot_index": 0}
|
||||
],
|
||||
"properties": {"cnr_id": "seedvr2_videoupscaler", "Node name for S&R": "SeedVR2VideoUpscaler"},
|
||||
"widgets_values": [42, "fixed", 0, 1, false, "lab", 0, 0, 0.0, 0.0, "cpu", false]
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"type": "SmartResize",
|
||||
"pos": [1520, -10],
|
||||
"size": {"0": 320, "1": 240},
|
||||
"flags": {},
|
||||
"order": 6,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{"name": "image", "type": "IMAGE", "link": 7}
|
||||
],
|
||||
"outputs": [
|
||||
{"name": "image", "type": "IMAGE", "links": [], "slot_index": 0},
|
||||
{"name": "width", "type": "INT", "links": [], "slot_index": 1},
|
||||
{"name": "height", "type": "INT", "links": [], "slot_index": 2}
|
||||
],
|
||||
"properties": {"cnr_id": "comfyui-craftkit", "Node name for S&R": "SmartResize"},
|
||||
"widgets_values": [1024, 8, "lanczos", false]
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"type": "Note",
|
||||
"pos": [1520, 260],
|
||||
"size": {"0": 320, "1": 310},
|
||||
"flags": {},
|
||||
"order": 8,
|
||||
"mode": 0,
|
||||
"inputs": [],
|
||||
"outputs": [],
|
||||
"properties": {},
|
||||
"widgets_values": ["Outputs:\n\n→ image (SmartResize)\n connect to PreviewImage or SaveImage\n\nTweak:\n• multiplier on SmartResolutionMultiplier\n 2.0 = double, 1.5 = 50% bigger\n• scale_by on Pre-downscale\n lower = more room for SeedVR2 to\n reconstruct detail\n• longest_side on SmartResize\n target output size after upscale\n\nModel options:\n• 3b fp8 — fast, less VRAM\n• 7b fp16 — best quality, high VRAM"],
|
||||
"color": "#2a3a2a",
|
||||
"bgcolor": "#1a2a1a"
|
||||
}
|
||||
],
|
||||
"links": [
|
||||
[1, 2, 0, 3, 0, "IMAGE"],
|
||||
[2, 2, 0, 4, 0, "IMAGE"],
|
||||
[3, 3, 2, 7, 4, "INT"],
|
||||
[4, 4, 0, 7, 0, "IMAGE"],
|
||||
[5, 5, 0, 7, 1, "SEEDVR2_DIT"],
|
||||
[6, 6, 0, 7, 2, "SEEDVR2_VAE"],
|
||||
[7, 7, 0, 8, 0, "IMAGE"]
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"title": "Input",
|
||||
"bounding": [-20, -30, 640, 390],
|
||||
"color": "#4a2d5a",
|
||||
"font_size": 24
|
||||
},
|
||||
{
|
||||
"title": "SeedVR2 Models",
|
||||
"bounding": [660, -30, 420, 640],
|
||||
"color": "#1e3d5a",
|
||||
"font_size": 24
|
||||
},
|
||||
{
|
||||
"title": "Upscale + Output",
|
||||
"bounding": [1080, -30, 800, 630],
|
||||
"color": "#1e4a4a",
|
||||
"font_size": 24
|
||||
}
|
||||
],
|
||||
"config": {},
|
||||
"extra": {
|
||||
"ds": {"scale": 0.6, "offset": [-20, 230]}
|
||||
},
|
||||
"version": 0.4
|
||||
}
|
||||
@@ -33,8 +33,11 @@
|
||||
1024,
|
||||
8,
|
||||
"lanczos",
|
||||
true,
|
||||
"",
|
||||
true,
|
||||
false,
|
||||
1,
|
||||
true,
|
||||
false,
|
||||
"resized",
|
||||
true,
|
||||
@@ -66,18 +69,20 @@
|
||||
"id": 3,
|
||||
"type": "Note",
|
||||
"pos": [460, 390],
|
||||
"size": [320, 220],
|
||||
"size": [340, 400],
|
||||
"flags": {},
|
||||
"order": 2,
|
||||
"mode": 0,
|
||||
"inputs": [],
|
||||
"outputs": [],
|
||||
"properties": {
|
||||
"text": "Smart Batch Resize — outputs uitleg:\n\n📷 images → PreviewImage of verder bewerken\n📝 filenames → bestandsnamen (zonder pad)\n📁 output_paths → volledige paden op schijf\n🔢 count → aantal verwerkte afbeeldingen\n\nDe node schrijft sowieso naar schijf.\nDe outputs zijn optioneel aan te sluiten."
|
||||
"text": "Smart Batch Resize — how it works\n\nThe node ALWAYS writes resized images to disk — connecting the outputs is optional.\n\nOutputs:\n📷 images → batch tensor, feed into PreviewImage or any IMAGE input\n🔢 count → number of images actually processed\n\nKey settings:\n📁 Input folder — pick with Browse folder, or paste a path\n📐 Longest side — target size, aspect ratio is always preserved\n🔢 Round to multiple of — snap dimensions (use 8 for SD/Flux)\n🏷️ Filename prefix / Keep original filename / Add counter — build the output filename\n📂 Create resolution subfolder / Custom output subfolder — where resized files land (default: input_folder/resized/)\n⏭️ Skip existing files — don't reprocess files already in the output folder\n\n▶️ Run Batch = same as the regular Run button — it just runs this node. No separate output folder needed: results are saved inside the input folder itself (in the resized/ subfolder).\n\nTip: leave the prefix empty and 'Keep original filename' on to preserve names, or turn it off and use a prefix + counter for a clean renumbered batch."
|
||||
},
|
||||
"widgets_values": [
|
||||
"Smart Batch Resize — outputs uitleg:\n\n📷 images → PreviewImage of verder bewerken\n📝 filenames → bestandsnamen (zonder pad)\n📁 output_paths → volledige paden op schijf\n🔢 count → aantal verwerkte afbeeldingen\n\nDe node schrijft sowieso naar schijf.\nDe outputs zijn optioneel aan te sluiten."
|
||||
]
|
||||
"Smart Batch Resize — how it works\n\nThe node ALWAYS writes resized images to disk — connecting the outputs is optional.\n\nOutputs:\n📷 images → batch tensor, feed into PreviewImage or any IMAGE input\n🔢 count → number of images actually processed\n\nKey settings:\n📁 Input folder — pick with Browse folder, or paste a path\n📐 Longest side — target size, aspect ratio is always preserved\n🔢 Round to multiple of — snap dimensions (use 8 for SD/Flux)\n🏷️ Filename prefix / Keep original filename / Add counter — build the output filename\n📂 Create resolution subfolder / Custom output subfolder — where resized files land (default: input_folder/resized/)\n⏭️ Skip existing files — don't reprocess files already in the output folder\n\n▶️ Run Batch = same as the regular Run button — it just runs this node. No separate output folder needed: results are saved inside the input folder itself (in the resized/ subfolder).\n\nTip: leave the prefix empty and 'Keep original filename' on to preserve names, or turn it off and use a prefix + counter for a clean renumbered batch."
|
||||
],
|
||||
"color": "#2a3a2a",
|
||||
"bgcolor": "#1a2a1a"
|
||||
}
|
||||
],
|
||||
"links": [
|
||||
|
||||
@@ -0,0 +1,205 @@
|
||||
{
|
||||
"last_node_id": 10,
|
||||
"last_link_id": 7,
|
||||
"nodes": [
|
||||
{
|
||||
"id": 1,
|
||||
"type": "Note",
|
||||
"pos": [0, -240],
|
||||
"size": {"0": 1090, "1": 180},
|
||||
"flags": {},
|
||||
"order": 6,
|
||||
"mode": 0,
|
||||
"inputs": [],
|
||||
"outputs": [],
|
||||
"properties": {},
|
||||
"widgets_values": ["CraftKit — Smart Prompt Controller + Smart Profile Switch\n\nSet index to 1 and control_after_generate to 'increment' — cycles through all 16 prompts automatically, one per generation.\n\nSmartPromptController picks the right prompt line and tells SmartProfileSwitch which profile is active (1–4).\nSmartProfileSwitch switches the resolution and label to match. Connect the outputs on the right to your sampler pipeline."],
|
||||
"color": "#2a3a2a",
|
||||
"bgcolor": "#1a2a1a"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"type": "PrimitiveStringMultiline",
|
||||
"pos": [0, -20],
|
||||
"size": {"0": 340, "1": 210},
|
||||
"flags": {},
|
||||
"order": 0,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{"name": "value", "type": "STRING", "widget": {"name": "value"}, "link": null}
|
||||
],
|
||||
"outputs": [
|
||||
{"name": "STRING", "type": "STRING", "links": [1], "slot_index": 0}
|
||||
],
|
||||
"title": "Headshot Prompts",
|
||||
"properties": {"cnr_id": "comfy-core", "ver": "0.17.0", "Node name for S&R": "PrimitiveStringMultiline"},
|
||||
"widgets_values": ["01 headshot portrait, face and neck only, neutral expression, soft studio lighting, clean background\n02 headshot portrait, slight smile, diffused window light, plain white background\n03 headshot portrait, professional look, direct gaze, high-key studio lighting\n04 headshot portrait, relaxed expression, warm natural daylight, simple neutral background"],
|
||||
"color": "#232",
|
||||
"bgcolor": "#353"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"type": "PrimitiveStringMultiline",
|
||||
"pos": [360, -20],
|
||||
"size": {"0": 340, "1": 210},
|
||||
"flags": {},
|
||||
"order": 1,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{"name": "value", "type": "STRING", "widget": {"name": "value"}, "link": null}
|
||||
],
|
||||
"outputs": [
|
||||
{"name": "STRING", "type": "STRING", "links": [2], "slot_index": 0}
|
||||
],
|
||||
"title": "Halfbody Prompts",
|
||||
"properties": {"cnr_id": "comfy-core", "ver": "0.17.0", "Node name for S&R": "PrimitiveStringMultiline"},
|
||||
"widgets_values": ["05 half-body portrait, shoulders and chest visible, neutral expression, studio lighting, grey background\n06 half-body portrait, slight smile, arms relaxed at sides, soft window light from left\n07 half-body portrait, confident pose, looking slightly to the side, clean background\n08 half-body portrait, arms crossed, composed expression, even studio lighting"],
|
||||
"color": "#232",
|
||||
"bgcolor": "#353"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"type": "PrimitiveStringMultiline",
|
||||
"pos": [0, 210],
|
||||
"size": {"0": 340, "1": 210},
|
||||
"flags": {},
|
||||
"order": 2,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{"name": "value", "type": "STRING", "widget": {"name": "value"}, "link": null}
|
||||
],
|
||||
"outputs": [
|
||||
{"name": "STRING", "type": "STRING", "links": [3], "slot_index": 0}
|
||||
],
|
||||
"title": "Fullbody Prompts",
|
||||
"properties": {"cnr_id": "comfy-core", "ver": "0.17.0", "Node name for S&R": "PrimitiveStringMultiline"},
|
||||
"widgets_values": ["09 full-body portrait, standing straight, neutral pose, studio lighting, clean background\n10 full-body portrait, casual relaxed pose, hands in pockets, soft outdoor light\n11 full-body portrait, mid-stride walking pose, urban setting, natural daylight\n12 full-body portrait, dynamic confident pose, weight on one leg, plain backdrop"],
|
||||
"color": "#232",
|
||||
"bgcolor": "#353"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"type": "PrimitiveStringMultiline",
|
||||
"pos": [360, 210],
|
||||
"size": {"0": 340, "1": 210},
|
||||
"flags": {},
|
||||
"order": 3,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{"name": "value", "type": "STRING", "widget": {"name": "value"}, "link": null}
|
||||
],
|
||||
"outputs": [
|
||||
{"name": "STRING", "type": "STRING", "links": [4], "slot_index": 0}
|
||||
],
|
||||
"title": "Tall Portrait Prompts",
|
||||
"properties": {"cnr_id": "comfy-core", "ver": "0.17.0", "Node name for S&R": "PrimitiveStringMultiline"},
|
||||
"widgets_values": ["13 tall portrait, full figure head to toe, neutral standing pose, studio lighting, clean background\n14 tall portrait, elegant standing pose, one hand on hip, soft diffused light\n15 tall portrait, outdoor setting, warm golden hour rim light, natural relaxed pose\n16 tall portrait, indoor setting, leaning against wall, soft directional light"],
|
||||
"color": "#232",
|
||||
"bgcolor": "#353"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"type": "SmartPromptController",
|
||||
"pos": [740, -20],
|
||||
"size": {"0": 300, "1": 290},
|
||||
"flags": {},
|
||||
"order": 4,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{"name": "prompt_list_1", "type": "STRING", "link": 1},
|
||||
{"name": "prompt_list_2", "type": "STRING", "link": 2},
|
||||
{"name": "prompt_list_3", "type": "STRING", "link": 3},
|
||||
{"name": "prompt_list_4", "type": "STRING", "link": 4},
|
||||
{"name": "index", "type": "INT", "widget": {"name": "index"}, "link": null}
|
||||
],
|
||||
"outputs": [
|
||||
{"name": "prompt", "type": "STRING", "links": [], "slot_index": 0},
|
||||
{"name": "active_list", "type": "INT", "links": [7], "slot_index": 1}
|
||||
],
|
||||
"properties": {"cnr_id": "comfyui-craftkit", "Node name for S&R": "SmartPromptController"},
|
||||
"widgets_values": [1, "increment"],
|
||||
"color": "#232",
|
||||
"bgcolor": "#353"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"type": "SmartProfileSwitch",
|
||||
"pos": [740, 310],
|
||||
"size": {"0": 300, "1": 530},
|
||||
"flags": {},
|
||||
"order": 5,
|
||||
"mode": 0,
|
||||
"inputs": [
|
||||
{"name": "index", "type": "INT", "widget": {"name": "index"}, "link": 7},
|
||||
{"name": "label_1", "type": "STRING", "widget": {"name": "label_1"}, "link": null},
|
||||
{"name": "width_1", "type": "INT", "widget": {"name": "width_1"}, "link": null},
|
||||
{"name": "height_1", "type": "INT", "widget": {"name": "height_1"}, "link": null},
|
||||
{"name": "label_2", "type": "STRING", "widget": {"name": "label_2"}, "link": null},
|
||||
{"name": "width_2", "type": "INT", "widget": {"name": "width_2"}, "link": null},
|
||||
{"name": "height_2", "type": "INT", "widget": {"name": "height_2"}, "link": null},
|
||||
{"name": "label_3", "type": "STRING", "widget": {"name": "label_3"}, "link": null},
|
||||
{"name": "width_3", "type": "INT", "widget": {"name": "width_3"}, "link": null},
|
||||
{"name": "height_3", "type": "INT", "widget": {"name": "height_3"}, "link": null},
|
||||
{"name": "label_4", "type": "STRING", "widget": {"name": "label_4"}, "link": null},
|
||||
{"name": "width_4", "type": "INT", "widget": {"name": "width_4"}, "link": null},
|
||||
{"name": "height_4", "type": "INT", "widget": {"name": "height_4"}, "link": null}
|
||||
],
|
||||
"outputs": [
|
||||
{"name": "label", "type": "STRING", "links": [], "slot_index": 0},
|
||||
{"name": "width", "type": "INT", "links": [], "slot_index": 1},
|
||||
{"name": "height", "type": "INT", "links": [], "slot_index": 2}
|
||||
],
|
||||
"properties": {"cnr_id": "comfyui-craftkit", "Node name for S&R": "SmartProfileSwitch"},
|
||||
"widgets_values": [1, "Headshots", 1024, 1024, "Halfbody", 832, 1216, "Fullbody", 768, 1344, "Tall Portrait", 640, 1536],
|
||||
"color": "#232",
|
||||
"bgcolor": "#353"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"type": "Note",
|
||||
"pos": [1080, -20],
|
||||
"size": {"0": 300, "1": 380},
|
||||
"flags": {},
|
||||
"order": 7,
|
||||
"mode": 0,
|
||||
"inputs": [],
|
||||
"outputs": [],
|
||||
"properties": {},
|
||||
"widgets_values": ["Connect to your pipeline:\n\n→ prompt (SmartPromptController)\n positive CLIP text encoder\n\n→ label (SmartProfileSwitch)\n filename prefix or suffix\n e.g. SaveImageExtended filename_keys\n\n→ width / height (SmartProfileSwitch)\n EmptyLatentImage or EmptySD3LatentImage\n\n─────────────────\n\nTip: label auto-switches per category every generation — no manual filename changes needed."],
|
||||
"color": "#2a3a2a",
|
||||
"bgcolor": "#1a2a1a"
|
||||
}
|
||||
],
|
||||
"links": [
|
||||
[1, 3, 0, 7, 0, "STRING"],
|
||||
[2, 4, 0, 7, 1, "STRING"],
|
||||
[3, 5, 0, 7, 2, "STRING"],
|
||||
[4, 6, 0, 7, 3, "STRING"],
|
||||
[7, 7, 1, 8, 0, "INT"]
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"title": "Prompt Lists",
|
||||
"bounding": [-20, -40, 720, 470],
|
||||
"color": "#2d5a3a",
|
||||
"font_size": 24
|
||||
},
|
||||
{
|
||||
"title": "CraftKit Control",
|
||||
"bounding": [720, -40, 340, 880],
|
||||
"color": "#1e3d5a",
|
||||
"font_size": 24
|
||||
},
|
||||
{
|
||||
"title": "Connect to Your Pipeline",
|
||||
"bounding": [1060, -40, 350, 440],
|
||||
"color": "#1e4a4a",
|
||||
"font_size": 24
|
||||
}
|
||||
],
|
||||
"config": {},
|
||||
"extra": {
|
||||
"ds": {"scale": 0.7, "offset": [-30, 230]}
|
||||
},
|
||||
"version": 0.4
|
||||
}
|
||||
Reference in New Issue
Block a user