- 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
206 lines
8.8 KiB
JSON
206 lines
8.8 KiB
JSON
{
|
||
"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
|
||
}
|