diff --git a/README.md b/README.md index 6c1c183..f349d37 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/examples/split_profile_reuse_workflow.json b/examples/default_task_lanes_workflow.json similarity index 53% rename from examples/split_profile_reuse_workflow.json rename to examples/default_task_lanes_workflow.json index f4cd081..b833c19 100644 --- a/examples/split_profile_reuse_workflow.json +++ b/examples/default_task_lanes_workflow.json @@ -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