Rework example workflow into task lanes

This commit is contained in:
2026-06-24 12:56:45 +02:00
parent 9c72af0585
commit cc243261e8
2 changed files with 218 additions and 137 deletions
+10 -8
View File
@@ -53,15 +53,17 @@ The practical compact workflow is:
`Advanced Filters`, `Seed Control`, `Camera Control`, and `Character Profile` `Advanced Filters`, `Seed Control`, `Camera Control`, and `Character Profile`
into `Prompt Builder From Configs`. into `Prompt Builder From Configs`.
An importable example is included at An importable default workflow is included at
`examples/split_profile_reuse_workflow.json`. It shows a two-pass setup: `examples/default_task_lanes_workflow.json`. It is laid out by task instead of
as one long chain:
1. Generate a casual woman prompt and extract a character profile from 1. A regular generation lane: config nodes into `Prompt Builder From Configs`,
`metadata_json`. then optional `Caption Naturalizer` and `Krea2 Formatter`.
2. Reuse that profile in a second prompt builder with a different seed, keeping 2. An Insta/OF dual-generation lane: `Insta/OF Options`, seed/camera controls,
the same character while changing the outfit/scene. `Insta/OF Prompt Pair`, then optional formatter/naturalizer nodes.
3. Send the reused-profile metadata to both `Caption Naturalizer` and 3. Profile save/load tools parked as an adjacent side branch. They can be wired
`Krea2 Formatter`. manually into either generation lane, but they are not part of the default
main path.
## Character Profiles ## Character Profiles
@@ -1,18 +1,18 @@
{ {
"last_node_id": 12, "last_node_id": 17,
"last_link_id": 17, "last_link_id": 14,
"nodes": [ "nodes": [
{ {
"id": 1, "id": 1,
"type": "SxCPCategoryPreset", "type": "SxCPCategoryPreset",
"pos": [-980, -300], "pos": [-1220, -620],
"size": [320, 82], "size": [320, 82],
"flags": {}, "flags": {},
"order": 0, "order": 0,
"mode": 0, "mode": 0,
"inputs": [], "inputs": [],
"outputs": [ "outputs": [
{"name": "category_config", "type": "STRING", "links": [1, 2], "slot_index": 0}, {"name": "category_config", "type": "STRING", "links": [1], "slot_index": 0},
{"name": "category", "type": "STRING", "links": null, "slot_index": 1}, {"name": "category", "type": "STRING", "links": null, "slot_index": 1},
{"name": "subcategory", "type": "STRING", "links": null, "slot_index": 2} {"name": "subcategory", "type": "STRING", "links": null, "slot_index": 2}
], ],
@@ -22,14 +22,14 @@
{ {
"id": 2, "id": 2,
"type": "SxCPCastControl", "type": "SxCPCastControl",
"pos": [-980, -160], "pos": [-1220, -480],
"size": [320, 106], "size": [320, 106],
"flags": {}, "flags": {},
"order": 1, "order": 1,
"mode": 0, "mode": 0,
"inputs": [], "inputs": [],
"outputs": [ "outputs": [
{"name": "cast_config", "type": "STRING", "links": [3, 4], "slot_index": 0}, {"name": "cast_config", "type": "STRING", "links": [2], "slot_index": 0},
{"name": "women_count", "type": "INT", "links": null, "slot_index": 1}, {"name": "women_count", "type": "INT", "links": null, "slot_index": 1},
{"name": "men_count", "type": "INT", "links": null, "slot_index": 2}, {"name": "men_count", "type": "INT", "links": null, "slot_index": 2},
{"name": "cast_summary", "type": "STRING", "links": null, "slot_index": 3} {"name": "cast_summary", "type": "STRING", "links": null, "slot_index": 3}
@@ -40,14 +40,14 @@
{ {
"id": 3, "id": 3,
"type": "SxCPGenerationProfile", "type": "SxCPGenerationProfile",
"pos": [-980, 20], "pos": [-1220, -300],
"size": [320, 226], "size": [320, 226],
"flags": {}, "flags": {},
"order": 2, "order": 2,
"mode": 0, "mode": 0,
"inputs": [], "inputs": [],
"outputs": [ "outputs": [
{"name": "generation_profile", "type": "STRING", "links": [5, 6], "slot_index": 0}, {"name": "generation_profile", "type": "STRING", "links": [3], "slot_index": 0},
{"name": "summary", "type": "STRING", "links": null, "slot_index": 1} {"name": "summary", "type": "STRING", "links": null, "slot_index": 1}
], ],
"properties": {"Node name for S&R": "SxCPGenerationProfile"}, "properties": {"Node name for S&R": "SxCPGenerationProfile"},
@@ -56,14 +56,14 @@
{ {
"id": 4, "id": 4,
"type": "SxCPAdvancedFilters", "type": "SxCPAdvancedFilters",
"pos": [-980, 310], "pos": [-1220, -10],
"size": [320, 130], "size": [320, 130],
"flags": {}, "flags": {},
"order": 3, "order": 3,
"mode": 0, "mode": 0,
"inputs": [], "inputs": [],
"outputs": [ "outputs": [
{"name": "filter_config", "type": "STRING", "links": [7, 8], "slot_index": 0} {"name": "filter_config", "type": "STRING", "links": [4], "slot_index": 0}
], ],
"properties": {"Node name for S&R": "SxCPAdvancedFilters"}, "properties": {"Node name for S&R": "SxCPAdvancedFilters"},
"widgets_values": ["any", "balanced", false, false] "widgets_values": ["any", "balanced", false, false]
@@ -71,14 +71,14 @@
{ {
"id": 5, "id": 5,
"type": "SxCPSeedControl", "type": "SxCPSeedControl",
"pos": [-600, -300], "pos": [-850, -620],
"size": [320, 250], "size": [320, 250],
"flags": {}, "flags": {},
"order": 4, "order": 4,
"mode": 0, "mode": 0,
"inputs": [], "inputs": [],
"outputs": [ "outputs": [
{"name": "seed_config", "type": "STRING", "links": [9, 10], "slot_index": 0} {"name": "seed_config", "type": "STRING", "links": [5], "slot_index": 0}
], ],
"properties": {"Node name for S&R": "SxCPSeedControl"}, "properties": {"Node name for S&R": "SxCPSeedControl"},
"widgets_values": [-1, -1, -1, -1, -1, -1, -1, -1, -1] "widgets_values": [-1, -1, -1, -1, -1, -1, -1, -1, -1]
@@ -86,14 +86,14 @@
{ {
"id": 6, "id": 6,
"type": "SxCPCameraControl", "type": "SxCPCameraControl",
"pos": [-600, 10], "pos": [-850, -310],
"size": [320, 226], "size": [320, 226],
"flags": {}, "flags": {},
"order": 5, "order": 5,
"mode": 0, "mode": 0,
"inputs": [], "inputs": [],
"outputs": [ "outputs": [
{"name": "camera_config", "type": "STRING", "links": [11, 12], "slot_index": 0} {"name": "camera_config", "type": "STRING", "links": [6], "slot_index": 0}
], ],
"properties": {"Node name for S&R": "SxCPCameraControl"}, "properties": {"Node name for S&R": "SxCPCameraControl"},
"widgets_values": ["mirror_selfie", "full_body", "mirror_reflection", "smartphone_wide", "arm_length", "vertical_story", "phone_visible", "locked"] "widgets_values": ["mirror_selfie", "full_body", "mirror_reflection", "smartphone_wide", "arm_length", "vertical_story", "phone_visible", "locked"]
@@ -101,24 +101,24 @@
{ {
"id": 7, "id": 7,
"type": "SxCPPromptBuilderFromConfigs", "type": "SxCPPromptBuilderFromConfigs",
"pos": [-180, -300], "pos": [-430, -600],
"size": [360, 246], "size": [380, 270],
"flags": {}, "flags": {},
"order": 6, "order": 6,
"mode": 0, "mode": 0,
"inputs": [ "inputs": [
{"name": "category_config", "type": "STRING", "link": 1}, {"name": "category_config", "type": "STRING", "link": 1},
{"name": "cast_config", "type": "STRING", "link": 3}, {"name": "cast_config", "type": "STRING", "link": 2},
{"name": "generation_profile", "type": "STRING", "link": 5}, {"name": "generation_profile", "type": "STRING", "link": 3},
{"name": "filter_config", "type": "STRING", "link": 7}, {"name": "filter_config", "type": "STRING", "link": 4},
{"name": "seed_config", "type": "STRING", "link": 9}, {"name": "seed_config", "type": "STRING", "link": 5},
{"name": "camera_config", "type": "STRING", "link": 11} {"name": "camera_config", "type": "STRING", "link": 6}
], ],
"outputs": [ "outputs": [
{"name": "prompt", "type": "STRING", "links": null, "slot_index": 0}, {"name": "prompt", "type": "STRING", "links": null, "slot_index": 0},
{"name": "negative_prompt", "type": "STRING", "links": null, "slot_index": 1}, {"name": "negative_prompt", "type": "STRING", "links": null, "slot_index": 1},
{"name": "caption", "type": "STRING", "links": null, "slot_index": 2}, {"name": "caption", "type": "STRING", "links": null, "slot_index": 2},
{"name": "metadata_json", "type": "STRING", "links": [13], "slot_index": 3}, {"name": "metadata_json", "type": "STRING", "links": [7, 8, 9], "slot_index": 3},
{"name": "category", "type": "STRING", "links": null, "slot_index": 4}, {"name": "category", "type": "STRING", "links": null, "slot_index": 4},
{"name": "subcategory", "type": "STRING", "links": null, "slot_index": 5} {"name": "subcategory", "type": "STRING", "links": null, "slot_index": 5}
], ],
@@ -127,84 +127,14 @@
}, },
{ {
"id": 8, "id": 8,
"type": "SxCPCharacterProfileSave", "type": "SxCPCaptionNaturalizer",
"pos": [260, -300], "pos": [20, -650],
"size": [360, 294], "size": [360, 198],
"flags": {}, "flags": {},
"order": 7, "order": 7,
"mode": 0, "mode": 0,
"inputs": [ "inputs": [
{"name": "metadata_json", "type": "STRING", "link": 13} {"name": "metadata_json", "type": "STRING", "link": 7}
],
"outputs": [
{"name": "character_profile", "type": "STRING", "links": [14], "slot_index": 0},
{"name": "descriptor", "type": "STRING", "links": null, "slot_index": 1},
{"name": "profile_name", "type": "STRING", "links": null, "slot_index": 2},
{"name": "saved_path", "type": "STRING", "links": null, "slot_index": 3},
{"name": "status", "type": "STRING", "links": null, "slot_index": 4}
],
"properties": {"Node name for S&R": "SxCPCharacterProfileSave"},
"widgets_values": ["example_creator", "metadata_json", "woman", "", "", "", "", "", "", "", false]
},
{
"id": 9,
"type": "SxCPCharacterProfileLoad",
"pos": [700, -300],
"size": [340, 174],
"flags": {},
"order": 8,
"mode": 0,
"inputs": [
{"name": "fallback_profile_json", "type": "STRING", "link": 14}
],
"outputs": [
{"name": "character_profile", "type": "STRING", "links": [15], "slot_index": 0},
{"name": "descriptor", "type": "STRING", "links": null, "slot_index": 1},
{"name": "profile_name", "type": "STRING", "links": null, "slot_index": 2},
{"name": "saved_path", "type": "STRING", "links": null, "slot_index": 3},
{"name": "status", "type": "STRING", "links": null, "slot_index": 4}
],
"properties": {"Node name for S&R": "SxCPCharacterProfileLoad"},
"widgets_values": [true, "manual", "", false, false, ""]
},
{
"id": 10,
"type": "SxCPPromptBuilderFromConfigs",
"pos": [1120, -300],
"size": [370, 270],
"flags": {},
"order": 9,
"mode": 0,
"inputs": [
{"name": "category_config", "type": "STRING", "link": 2},
{"name": "cast_config", "type": "STRING", "link": 4},
{"name": "generation_profile", "type": "STRING", "link": 6},
{"name": "filter_config", "type": "STRING", "link": 8},
{"name": "seed_config", "type": "STRING", "link": 10},
{"name": "camera_config", "type": "STRING", "link": 12},
{"name": "character_profile", "type": "STRING", "link": 15}
],
"outputs": [
{"name": "prompt", "type": "STRING", "links": null, "slot_index": 0},
{"name": "negative_prompt", "type": "STRING", "links": null, "slot_index": 1},
{"name": "caption", "type": "STRING", "links": null, "slot_index": 2},
{"name": "metadata_json", "type": "STRING", "links": [16, 17], "slot_index": 3},
{"name": "category", "type": "STRING", "links": null, "slot_index": 4},
{"name": "subcategory", "type": "STRING", "links": null, "slot_index": 5}
],
"properties": {"Node name for S&R": "SxCPPromptBuilderFromConfigs"},
"widgets_values": [1, 41, 20260777]
},
{
"id": 11,
"type": "SxCPCaptionNaturalizer",
"pos": [1560, -420],
"size": [360, 198],
"flags": {},
"order": 10,
"mode": 0,
"inputs": [
{"name": "metadata_json", "type": "STRING", "link": 17}
], ],
"outputs": [ "outputs": [
{"name": "natural_caption", "type": "STRING", "links": null, "slot_index": 0}, {"name": "natural_caption", "type": "STRING", "links": null, "slot_index": 0},
@@ -214,15 +144,15 @@
"widgets_values": ["", "metadata_json", "balanced", "drop_style_tail", "sxcppnl7", false] "widgets_values": ["", "metadata_json", "balanced", "drop_style_tail", "sxcppnl7", false]
}, },
{ {
"id": 12, "id": 9,
"type": "SxCPKrea2Formatter", "type": "SxCPKrea2Formatter",
"pos": [1560, -150], "pos": [20, -370],
"size": [380, 246], "size": [380, 246],
"flags": {}, "flags": {},
"order": 11, "order": 8,
"mode": 0, "mode": 0,
"inputs": [ "inputs": [
{"name": "metadata_json", "type": "STRING", "link": 16} {"name": "metadata_json", "type": "STRING", "link": 8}
], ],
"outputs": [ "outputs": [
{"name": "krea_prompt", "type": "STRING", "links": null, "slot_index": 0}, {"name": "krea_prompt", "type": "STRING", "links": null, "slot_index": 0},
@@ -235,49 +165,198 @@
], ],
"properties": {"Node name for S&R": "SxCPKrea2Formatter"}, "properties": {"Node name for S&R": "SxCPKrea2Formatter"},
"widgets_values": ["", "metadata_json", "auto", "balanced", "minimal", false, "", "", ""] "widgets_values": ["", "metadata_json", "auto", "balanced", "minimal", false, "", "", ""]
},
{
"id": 10,
"type": "SxCPCharacterProfileSave",
"pos": [-430, -250],
"size": [360, 294],
"flags": {},
"order": 9,
"mode": 0,
"inputs": [
{"name": "metadata_json", "type": "STRING", "link": 9}
],
"outputs": [
{"name": "character_profile", "type": "STRING", "links": null, "slot_index": 0},
{"name": "descriptor", "type": "STRING", "links": null, "slot_index": 1},
{"name": "profile_name", "type": "STRING", "links": null, "slot_index": 2},
{"name": "saved_path", "type": "STRING", "links": null, "slot_index": 3},
{"name": "status", "type": "STRING", "links": null, "slot_index": 4}
],
"properties": {"Node name for S&R": "SxCPCharacterProfileSave"},
"widgets_values": ["example_creator", "metadata_json", "woman", "", "", "", "", "", "", "", false]
},
{
"id": 11,
"type": "SxCPCharacterProfileLoad",
"pos": [-20, -250],
"size": [340, 174],
"flags": {},
"order": 10,
"mode": 0,
"inputs": [],
"outputs": [
{"name": "character_profile", "type": "STRING", "links": null, "slot_index": 0},
{"name": "descriptor", "type": "STRING", "links": null, "slot_index": 1},
{"name": "profile_name", "type": "STRING", "links": null, "slot_index": 2},
{"name": "saved_path", "type": "STRING", "links": null, "slot_index": 3},
{"name": "status", "type": "STRING", "links": null, "slot_index": 4}
],
"properties": {"Node name for S&R": "SxCPCharacterProfileLoad"},
"widgets_values": [true, "manual", "", false, false, "", ""]
},
{
"id": 12,
"type": "SxCPInstaOFOptions",
"pos": [-1220, 290],
"size": [360, 318],
"flags": {},
"order": 11,
"mode": 0,
"inputs": [],
"outputs": [
{"name": "options_json", "type": "STRING", "links": [10], "slot_index": 0}
],
"properties": {"Node name for S&R": "SxCPInstaOFOptions"},
"widgets_values": ["same_as_hardcore", "couple", 1, 1, "lingerie_tease", "hardcore", 0.45, 0.85, "hybrid", "same_creator_same_room", "handheld_selfie", "same_as_softcore"]
},
{
"id": 13,
"type": "SxCPSeedControl",
"pos": [-810, 290],
"size": [320, 250],
"flags": {},
"order": 12,
"mode": 0,
"inputs": [],
"outputs": [
{"name": "seed_config", "type": "STRING", "links": [11], "slot_index": 0}
],
"properties": {"Node name for S&R": "SxCPSeedControl"},
"widgets_values": [-1, -1, -1, -1, -1, -1, -1, -1, -1]
},
{
"id": 14,
"type": "SxCPCameraControl",
"pos": [-810, 600],
"size": [320, 226],
"flags": {},
"order": 13,
"mode": 0,
"inputs": [],
"outputs": [
{"name": "camera_config", "type": "STRING", "links": [12], "slot_index": 0}
],
"properties": {"Node name for S&R": "SxCPCameraControl"},
"widgets_values": ["handheld_selfie", "three_quarter", "high_angle", "smartphone_wide", "arm_length", "vertical_story", "phone_visible", "locked"]
},
{
"id": 15,
"type": "SxCPInstaOFPromptPair",
"pos": [-360, 300],
"size": [410, 294],
"flags": {},
"order": 14,
"mode": 0,
"inputs": [
{"name": "seed_config", "type": "STRING", "link": 11},
{"name": "options_json", "type": "STRING", "link": 10},
{"name": "camera_config", "type": "STRING", "link": 12}
],
"outputs": [
{"name": "softcore_prompt", "type": "STRING", "links": null, "slot_index": 0},
{"name": "hardcore_prompt", "type": "STRING", "links": null, "slot_index": 1},
{"name": "softcore_negative_prompt", "type": "STRING", "links": null, "slot_index": 2},
{"name": "hardcore_negative_prompt", "type": "STRING", "links": null, "slot_index": 3},
{"name": "softcore_caption", "type": "STRING", "links": null, "slot_index": 4},
{"name": "hardcore_caption", "type": "STRING", "links": null, "slot_index": 5},
{"name": "shared_descriptor", "type": "STRING", "links": null, "slot_index": 6},
{"name": "metadata_json", "type": "STRING", "links": [13, 14], "slot_index": 7}
],
"properties": {"Node name for S&R": "SxCPInstaOFPromptPair"},
"widgets_values": [1, 41, 20260777, "any", "balanced", false, false, "sxcpinup_coloredpencil", false]
},
{
"id": 16,
"type": "SxCPKrea2Formatter",
"pos": [100, 280],
"size": [380, 246],
"flags": {},
"order": 15,
"mode": 0,
"inputs": [
{"name": "metadata_json", "type": "STRING", "link": 13}
],
"outputs": [
{"name": "krea_prompt", "type": "STRING", "links": null, "slot_index": 0},
{"name": "negative_prompt", "type": "STRING", "links": null, "slot_index": 1},
{"name": "krea_softcore_prompt", "type": "STRING", "links": null, "slot_index": 2},
{"name": "krea_hardcore_prompt", "type": "STRING", "links": null, "slot_index": 3},
{"name": "softcore_negative_prompt", "type": "STRING", "links": null, "slot_index": 4},
{"name": "hardcore_negative_prompt", "type": "STRING", "links": null, "slot_index": 5},
{"name": "method", "type": "STRING", "links": null, "slot_index": 6}
],
"properties": {"Node name for S&R": "SxCPKrea2Formatter"},
"widgets_values": ["", "metadata_json", "auto", "balanced", "minimal", false, "", "", ""]
},
{
"id": 17,
"type": "SxCPCaptionNaturalizer",
"pos": [100, 590],
"size": [360, 198],
"flags": {},
"order": 16,
"mode": 0,
"inputs": [
{"name": "metadata_json", "type": "STRING", "link": 14}
],
"outputs": [
{"name": "natural_caption", "type": "STRING", "links": null, "slot_index": 0},
{"name": "method", "type": "STRING", "links": null, "slot_index": 1}
],
"properties": {"Node name for S&R": "SxCPCaptionNaturalizer"},
"widgets_values": ["", "metadata_json", "balanced", "drop_style_tail", "sxcppnl7", false]
} }
], ],
"links": [ "links": [
[1, 1, 0, 7, 0, "STRING"], [1, 1, 0, 7, 0, "STRING"],
[2, 1, 0, 10, 0, "STRING"], [2, 2, 0, 7, 1, "STRING"],
[3, 2, 0, 7, 1, "STRING"], [3, 3, 0, 7, 2, "STRING"],
[4, 2, 0, 10, 1, "STRING"], [4, 4, 0, 7, 3, "STRING"],
[5, 3, 0, 7, 2, "STRING"], [5, 5, 0, 7, 4, "STRING"],
[6, 3, 0, 10, 2, "STRING"], [6, 6, 0, 7, 5, "STRING"],
[7, 4, 0, 7, 3, "STRING"], [7, 7, 3, 8, 0, "STRING"],
[8, 4, 0, 10, 3, "STRING"], [8, 7, 3, 9, 0, "STRING"],
[9, 5, 0, 7, 4, "STRING"], [9, 7, 3, 10, 0, "STRING"],
[10, 5, 0, 10, 4, "STRING"], [10, 12, 0, 15, 1, "STRING"],
[11, 6, 0, 7, 5, "STRING"], [11, 13, 0, 15, 0, "STRING"],
[12, 6, 0, 10, 5, "STRING"], [12, 14, 0, 15, 2, "STRING"],
[13, 7, 3, 8, 0, "STRING"], [13, 15, 7, 16, 0, "STRING"],
[14, 8, 0, 9, 0, "STRING"], [14, 15, 7, 17, 0, "STRING"]
[15, 9, 0, 10, 6, "STRING"],
[16, 10, 3, 11, 0, "STRING"],
[17, 10, 3, 12, 0, "STRING"]
], ],
"groups": [ "groups": [
{ {
"title": "Shared controls", "title": "Regular generation controls",
"bounding": [-1010, -350, 760, 840], "bounding": [-1260, -680, 780, 820],
"color": "#3f789e", "color": "#3f789e",
"font_size": 24 "font_size": 24
}, },
{ {
"title": "Pass 1: generate and extract profile", "title": "Regular generation output",
"bounding": [-220, -350, 890, 390], "bounding": [-470, -680, 920, 500],
"color": "#8f6d31",
"font_size": 24
},
{
"title": "Pass 2: reuse profile with a different seed",
"bounding": [670, -350, 870, 390],
"color": "#4d7f45", "color": "#4d7f45",
"font_size": 24 "font_size": 24
}, },
{ {
"title": "Optional reformats", "title": "Profile tools, optional side branch",
"bounding": [1530, -470, 440, 600], "bounding": [-470, -300, 890, 360],
"color": "#8f6d31",
"font_size": 24
},
{
"title": "Dual generation, Insta/OF",
"bounding": [-1260, 230, 1780, 640],
"color": "#5f4d8f", "color": "#5f4d8f",
"font_size": 24 "font_size": 24
} }
@@ -286,7 +365,7 @@
"extra": { "extra": {
"ds": { "ds": {
"scale": 0.82, "scale": 0.82,
"offset": [1090, 430] "offset": [1040, 470]
} }
}, },
"version": 0.4 "version": 0.4