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`
into `Prompt Builder From Configs`.
An importable example is included at
`examples/split_profile_reuse_workflow.json`. It shows a two-pass setup:
An importable default workflow is included at
`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
`metadata_json`.
2. Reuse that profile in a second prompt builder with a different seed, keeping
the same character while changing the outfit/scene.
3. Send the reused-profile metadata to both `Caption Naturalizer` and
`Krea2 Formatter`.
1. A regular generation lane: config nodes into `Prompt Builder From Configs`,
then optional `Caption Naturalizer` and `Krea2 Formatter`.
2. An Insta/OF dual-generation lane: `Insta/OF Options`, seed/camera controls,
`Insta/OF Prompt Pair`, then optional formatter/naturalizer nodes.
3. Profile save/load tools parked as an adjacent side branch. They can be wired
manually into either generation lane, but they are not part of the default
main path.
## Character Profiles
@@ -1,18 +1,18 @@
{
"last_node_id": 12,
"last_link_id": 17,
"last_node_id": 17,
"last_link_id": 14,
"nodes": [
{
"id": 1,
"type": "SxCPCategoryPreset",
"pos": [-980, -300],
"pos": [-1220, -620],
"size": [320, 82],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"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": "subcategory", "type": "STRING", "links": null, "slot_index": 2}
],
@@ -22,14 +22,14 @@
{
"id": 2,
"type": "SxCPCastControl",
"pos": [-980, -160],
"pos": [-1220, -480],
"size": [320, 106],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"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": "men_count", "type": "INT", "links": null, "slot_index": 2},
{"name": "cast_summary", "type": "STRING", "links": null, "slot_index": 3}
@@ -40,14 +40,14 @@
{
"id": 3,
"type": "SxCPGenerationProfile",
"pos": [-980, 20],
"pos": [-1220, -300],
"size": [320, 226],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [],
"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}
],
"properties": {"Node name for S&R": "SxCPGenerationProfile"},
@@ -56,14 +56,14 @@
{
"id": 4,
"type": "SxCPAdvancedFilters",
"pos": [-980, 310],
"pos": [-1220, -10],
"size": [320, 130],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [],
"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"},
"widgets_values": ["any", "balanced", false, false]
@@ -71,14 +71,14 @@
{
"id": 5,
"type": "SxCPSeedControl",
"pos": [-600, -300],
"pos": [-850, -620],
"size": [320, 250],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [],
"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"},
"widgets_values": [-1, -1, -1, -1, -1, -1, -1, -1, -1]
@@ -86,14 +86,14 @@
{
"id": 6,
"type": "SxCPCameraControl",
"pos": [-600, 10],
"pos": [-850, -310],
"size": [320, 226],
"flags": {},
"order": 5,
"mode": 0,
"inputs": [],
"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"},
"widgets_values": ["mirror_selfie", "full_body", "mirror_reflection", "smartphone_wide", "arm_length", "vertical_story", "phone_visible", "locked"]
@@ -101,24 +101,24 @@
{
"id": 7,
"type": "SxCPPromptBuilderFromConfigs",
"pos": [-180, -300],
"size": [360, 246],
"pos": [-430, -600],
"size": [380, 270],
"flags": {},
"order": 6,
"mode": 0,
"inputs": [
{"name": "category_config", "type": "STRING", "link": 1},
{"name": "cast_config", "type": "STRING", "link": 3},
{"name": "generation_profile", "type": "STRING", "link": 5},
{"name": "filter_config", "type": "STRING", "link": 7},
{"name": "seed_config", "type": "STRING", "link": 9},
{"name": "camera_config", "type": "STRING", "link": 11}
{"name": "cast_config", "type": "STRING", "link": 2},
{"name": "generation_profile", "type": "STRING", "link": 3},
{"name": "filter_config", "type": "STRING", "link": 4},
{"name": "seed_config", "type": "STRING", "link": 5},
{"name": "camera_config", "type": "STRING", "link": 6}
],
"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": [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": "subcategory", "type": "STRING", "links": null, "slot_index": 5}
],
@@ -127,84 +127,14 @@
},
{
"id": 8,
"type": "SxCPCharacterProfileSave",
"pos": [260, -300],
"size": [360, 294],
"type": "SxCPCaptionNaturalizer",
"pos": [20, -650],
"size": [360, 198],
"flags": {},
"order": 7,
"mode": 0,
"inputs": [
{"name": "metadata_json", "type": "STRING", "link": 13}
],
"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}
{"name": "metadata_json", "type": "STRING", "link": 7}
],
"outputs": [
{"name": "natural_caption", "type": "STRING", "links": null, "slot_index": 0},
@@ -214,15 +144,15 @@
"widgets_values": ["", "metadata_json", "balanced", "drop_style_tail", "sxcppnl7", false]
},
{
"id": 12,
"id": 9,
"type": "SxCPKrea2Formatter",
"pos": [1560, -150],
"pos": [20, -370],
"size": [380, 246],
"flags": {},
"order": 11,
"order": 8,
"mode": 0,
"inputs": [
{"name": "metadata_json", "type": "STRING", "link": 16}
{"name": "metadata_json", "type": "STRING", "link": 8}
],
"outputs": [
{"name": "krea_prompt", "type": "STRING", "links": null, "slot_index": 0},
@@ -235,49 +165,198 @@
],
"properties": {"Node name for S&R": "SxCPKrea2Formatter"},
"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": [
[1, 1, 0, 7, 0, "STRING"],
[2, 1, 0, 10, 0, "STRING"],
[3, 2, 0, 7, 1, "STRING"],
[4, 2, 0, 10, 1, "STRING"],
[5, 3, 0, 7, 2, "STRING"],
[6, 3, 0, 10, 2, "STRING"],
[7, 4, 0, 7, 3, "STRING"],
[8, 4, 0, 10, 3, "STRING"],
[9, 5, 0, 7, 4, "STRING"],
[10, 5, 0, 10, 4, "STRING"],
[11, 6, 0, 7, 5, "STRING"],
[12, 6, 0, 10, 5, "STRING"],
[13, 7, 3, 8, 0, "STRING"],
[14, 8, 0, 9, 0, "STRING"],
[15, 9, 0, 10, 6, "STRING"],
[16, 10, 3, 11, 0, "STRING"],
[17, 10, 3, 12, 0, "STRING"]
[2, 2, 0, 7, 1, "STRING"],
[3, 3, 0, 7, 2, "STRING"],
[4, 4, 0, 7, 3, "STRING"],
[5, 5, 0, 7, 4, "STRING"],
[6, 6, 0, 7, 5, "STRING"],
[7, 7, 3, 8, 0, "STRING"],
[8, 7, 3, 9, 0, "STRING"],
[9, 7, 3, 10, 0, "STRING"],
[10, 12, 0, 15, 1, "STRING"],
[11, 13, 0, 15, 0, "STRING"],
[12, 14, 0, 15, 2, "STRING"],
[13, 15, 7, 16, 0, "STRING"],
[14, 15, 7, 17, 0, "STRING"]
],
"groups": [
{
"title": "Shared controls",
"bounding": [-1010, -350, 760, 840],
"title": "Regular generation controls",
"bounding": [-1260, -680, 780, 820],
"color": "#3f789e",
"font_size": 24
},
{
"title": "Pass 1: generate and extract profile",
"bounding": [-220, -350, 890, 390],
"color": "#8f6d31",
"font_size": 24
},
{
"title": "Pass 2: reuse profile with a different seed",
"bounding": [670, -350, 870, 390],
"title": "Regular generation output",
"bounding": [-470, -680, 920, 500],
"color": "#4d7f45",
"font_size": 24
},
{
"title": "Optional reformats",
"bounding": [1530, -470, 440, 600],
"title": "Profile tools, optional side branch",
"bounding": [-470, -300, 890, 360],
"color": "#8f6d31",
"font_size": 24
},
{
"title": "Dual generation, Insta/OF",
"bounding": [-1260, 230, 1780, 640],
"color": "#5f4d8f",
"font_size": 24
}
@@ -286,7 +365,7 @@
"extra": {
"ds": {
"scale": 0.82,
"offset": [1090, 430]
"offset": [1040, 470]
}
},
"version": 0.4