Files
rubz c0609cfc85 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
2026-07-01 12:33:32 +02:00

229 lines
9.9 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"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
}