mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-03-21 21:22:11 -03:00
checkpoint
This commit is contained in:
15
.vscode/launch.json
vendored
Normal file
15
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Python Debugger: Current File",
|
||||||
|
"type": "debugpy",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "${file}",
|
||||||
|
"console": "integratedTerminal"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
169
py/workflow/ext/comfyui_core.py
Normal file
169
py/workflow/ext/comfyui_core.py
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
"""
|
||||||
|
ComfyUI Core nodes mappers extension for workflow parsing
|
||||||
|
"""
|
||||||
|
import logging
|
||||||
|
from typing import Dict, Any, List
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
# Import the mapper registration functions from the parent module
|
||||||
|
from workflow.mappers import create_mapper, register_mapper
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# Transform Functions
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
def transform_random_noise(inputs: Dict) -> Dict:
|
||||||
|
"""Transform function for RandomNoise node"""
|
||||||
|
return {"seed": str(inputs.get("noise_seed", ""))}
|
||||||
|
|
||||||
|
def transform_ksampler_select(inputs: Dict) -> Dict:
|
||||||
|
"""Transform function for KSamplerSelect node"""
|
||||||
|
return {"sampler": inputs.get("sampler_name", "")}
|
||||||
|
|
||||||
|
def transform_basic_scheduler(inputs: Dict) -> Dict:
|
||||||
|
"""Transform function for BasicScheduler node"""
|
||||||
|
result = {
|
||||||
|
"scheduler": inputs.get("scheduler", ""),
|
||||||
|
"denoise": str(inputs.get("denoise", "1.0"))
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get steps from inputs or steps input
|
||||||
|
if "steps" in inputs:
|
||||||
|
if isinstance(inputs["steps"], str):
|
||||||
|
result["steps"] = inputs["steps"]
|
||||||
|
elif isinstance(inputs["steps"], dict) and "value" in inputs["steps"]:
|
||||||
|
result["steps"] = str(inputs["steps"]["value"])
|
||||||
|
else:
|
||||||
|
result["steps"] = str(inputs["steps"])
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
def transform_basic_guider(inputs: Dict) -> Dict:
|
||||||
|
"""Transform function for BasicGuider node"""
|
||||||
|
result = {}
|
||||||
|
|
||||||
|
# Process conditioning
|
||||||
|
if "conditioning" in inputs:
|
||||||
|
if isinstance(inputs["conditioning"], str):
|
||||||
|
result["prompt"] = inputs["conditioning"]
|
||||||
|
elif isinstance(inputs["conditioning"], dict):
|
||||||
|
result["conditioning"] = inputs["conditioning"]
|
||||||
|
|
||||||
|
# Get model information if needed
|
||||||
|
if "model" in inputs and isinstance(inputs["model"], dict):
|
||||||
|
if "loras" in inputs["model"]:
|
||||||
|
result["loras"] = inputs["model"]["loras"]
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
def transform_model_sampling_flux(inputs: Dict) -> Dict:
|
||||||
|
"""Transform function for ModelSamplingFlux - mostly a pass-through node"""
|
||||||
|
# This node is primarily used for routing, so we mostly pass through values
|
||||||
|
result = {}
|
||||||
|
|
||||||
|
# Extract any dimensions if present
|
||||||
|
width = inputs.get("width", 0)
|
||||||
|
height = inputs.get("height", 0)
|
||||||
|
if width and height:
|
||||||
|
result["width"] = width
|
||||||
|
result["height"] = height
|
||||||
|
result["size"] = f"{width}x{height}"
|
||||||
|
|
||||||
|
# Pass through model information
|
||||||
|
if "model" in inputs and isinstance(inputs["model"], dict):
|
||||||
|
for key, value in inputs["model"].items():
|
||||||
|
result[key] = value
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
def transform_sampler_custom_advanced(inputs: Dict) -> Dict:
|
||||||
|
"""Transform function for SamplerCustomAdvanced node"""
|
||||||
|
result = {}
|
||||||
|
|
||||||
|
# Extract seed from noise
|
||||||
|
if "noise" in inputs and isinstance(inputs["noise"], dict):
|
||||||
|
result["seed"] = str(inputs["noise"].get("seed", ""))
|
||||||
|
|
||||||
|
# Extract sampler info
|
||||||
|
if "sampler" in inputs and isinstance(inputs["sampler"], dict):
|
||||||
|
sampler = inputs["sampler"].get("sampler", "")
|
||||||
|
if sampler:
|
||||||
|
result["sampler"] = sampler
|
||||||
|
|
||||||
|
# Extract scheduler, steps, denoise from sigmas
|
||||||
|
if "sigmas" in inputs and isinstance(inputs["sigmas"], dict):
|
||||||
|
sigmas = inputs["sigmas"]
|
||||||
|
result["scheduler"] = sigmas.get("scheduler", "")
|
||||||
|
result["steps"] = str(sigmas.get("steps", ""))
|
||||||
|
result["denoise"] = str(sigmas.get("denoise", "1.0"))
|
||||||
|
|
||||||
|
# Extract prompt and guidance from guider
|
||||||
|
if "guider" in inputs and isinstance(inputs["guider"], dict):
|
||||||
|
guider = inputs["guider"]
|
||||||
|
|
||||||
|
# Get prompt from conditioning
|
||||||
|
if "conditioning" in guider and isinstance(guider["conditioning"], str):
|
||||||
|
result["prompt"] = guider["conditioning"]
|
||||||
|
elif "conditioning" in guider and isinstance(guider["conditioning"], dict):
|
||||||
|
result["guidance"] = guider["conditioning"].get("guidance", "")
|
||||||
|
result["prompt"] = guider["conditioning"].get("prompt", "")
|
||||||
|
|
||||||
|
if "model" in guider and isinstance(guider["model"], dict):
|
||||||
|
result["loras"] = guider["model"].get("loras", "")
|
||||||
|
|
||||||
|
# Extract dimensions from latent_image
|
||||||
|
if "latent_image" in inputs and isinstance(inputs["latent_image"], dict):
|
||||||
|
latent = inputs["latent_image"]
|
||||||
|
width = latent.get("width", 0)
|
||||||
|
height = latent.get("height", 0)
|
||||||
|
if width and height:
|
||||||
|
result["width"] = width
|
||||||
|
result["height"] = height
|
||||||
|
result["size"] = f"{width}x{height}"
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# Register Mappers
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
# Define the mappers for ComfyUI core nodes not in main mapper
|
||||||
|
COMFYUI_CORE_MAPPERS = {
|
||||||
|
"RandomNoise": {
|
||||||
|
"inputs_to_track": ["noise_seed"],
|
||||||
|
"transform_func": transform_random_noise
|
||||||
|
},
|
||||||
|
"KSamplerSelect": {
|
||||||
|
"inputs_to_track": ["sampler_name"],
|
||||||
|
"transform_func": transform_ksampler_select
|
||||||
|
},
|
||||||
|
"BasicScheduler": {
|
||||||
|
"inputs_to_track": ["scheduler", "steps", "denoise", "model"],
|
||||||
|
"transform_func": transform_basic_scheduler
|
||||||
|
},
|
||||||
|
"BasicGuider": {
|
||||||
|
"inputs_to_track": ["model", "conditioning"],
|
||||||
|
"transform_func": transform_basic_guider
|
||||||
|
},
|
||||||
|
"ModelSamplingFlux": {
|
||||||
|
"inputs_to_track": ["max_shift", "base_shift", "width", "height", "model"],
|
||||||
|
"transform_func": transform_model_sampling_flux
|
||||||
|
},
|
||||||
|
"SamplerCustomAdvanced": {
|
||||||
|
"inputs_to_track": ["noise", "guider", "sampler", "sigmas", "latent_image"],
|
||||||
|
"transform_func": transform_sampler_custom_advanced
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Register all ComfyUI core mappers
|
||||||
|
for node_type, config in COMFYUI_CORE_MAPPERS.items():
|
||||||
|
mapper = create_mapper(
|
||||||
|
node_type=node_type,
|
||||||
|
inputs_to_track=config["inputs_to_track"],
|
||||||
|
transform_func=config["transform_func"]
|
||||||
|
)
|
||||||
|
register_mapper(mapper)
|
||||||
|
logger.info(f"Registered ComfyUI core mapper for node type: {node_type}")
|
||||||
|
|
||||||
|
logger.info(f"Loaded ComfyUI core extension with {len(COMFYUI_CORE_MAPPERS)} mappers")
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
"""
|
|
||||||
Example extension mapper for demonstrating the extension system
|
|
||||||
"""
|
|
||||||
from typing import Dict, Any
|
|
||||||
from ..mappers import NodeMapper
|
|
||||||
|
|
||||||
class ExampleNodeMapper(NodeMapper):
|
|
||||||
"""Example mapper for custom nodes"""
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super().__init__(
|
|
||||||
node_type="ExampleCustomNode",
|
|
||||||
inputs_to_track=["param1", "param2", "image"]
|
|
||||||
)
|
|
||||||
|
|
||||||
def transform(self, inputs: Dict) -> Dict:
|
|
||||||
"""Transform extracted inputs into the desired output format"""
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
# Extract interesting parameters
|
|
||||||
if "param1" in inputs:
|
|
||||||
result["example_param1"] = inputs["param1"]
|
|
||||||
|
|
||||||
if "param2" in inputs:
|
|
||||||
result["example_param2"] = inputs["param2"]
|
|
||||||
|
|
||||||
# You can process the data in any way needed
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
class VAEMapperExtension(NodeMapper):
|
|
||||||
"""Extension mapper for VAE nodes"""
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super().__init__(
|
|
||||||
node_type="VAELoader",
|
|
||||||
inputs_to_track=["vae_name"]
|
|
||||||
)
|
|
||||||
|
|
||||||
def transform(self, inputs: Dict) -> Dict:
|
|
||||||
"""Extract VAE information"""
|
|
||||||
vae_name = inputs.get("vae_name", "")
|
|
||||||
|
|
||||||
# Remove path prefix if present
|
|
||||||
if "/" in vae_name or "\\" in vae_name:
|
|
||||||
# Get just the filename without path or extension
|
|
||||||
vae_name = vae_name.replace("\\", "/").split("/")[-1]
|
|
||||||
vae_name = vae_name.split(".")[0] # Remove extension
|
|
||||||
|
|
||||||
return {"vae": vae_name}
|
|
||||||
|
|
||||||
|
|
||||||
# Note: No need to register manually - extensions are automatically registered
|
|
||||||
# when the extension system loads this file
|
|
||||||
@@ -48,6 +48,10 @@ def transform_empty_latent_presets(inputs: Dict) -> Dict:
|
|||||||
|
|
||||||
return {"width": width, "height": height, "size": f"{width}x{height}"}
|
return {"width": width, "height": height, "size": f"{width}x{height}"}
|
||||||
|
|
||||||
|
def transform_int_constant(inputs: Dict) -> int:
|
||||||
|
"""Transform function for INTConstant nodes"""
|
||||||
|
return inputs.get("value", 0)
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# Register Mappers
|
# Register Mappers
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
@@ -65,6 +69,10 @@ KJNODES_MAPPERS = {
|
|||||||
"EmptyLatentImagePresets": {
|
"EmptyLatentImagePresets": {
|
||||||
"inputs_to_track": ["dimensions", "invert", "batch_size"],
|
"inputs_to_track": ["dimensions", "invert", "batch_size"],
|
||||||
"transform_func": transform_empty_latent_presets
|
"transform_func": transform_empty_latent_presets
|
||||||
|
},
|
||||||
|
"INTConstant": {
|
||||||
|
"inputs_to_track": ["value"],
|
||||||
|
"transform_func": transform_int_constant
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -59,6 +59,59 @@ class WorkflowParser:
|
|||||||
self.processed_nodes.remove(node_id)
|
self.processed_nodes.remove(node_id)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def find_primary_sampler_node(self, workflow: Dict) -> Optional[str]:
|
||||||
|
"""
|
||||||
|
Find the primary sampler node in the workflow.
|
||||||
|
|
||||||
|
Priority:
|
||||||
|
1. First try to find a SamplerCustomAdvanced node
|
||||||
|
2. If not found, look for KSampler nodes with denoise=1.0
|
||||||
|
3. If still not found, use the first KSampler node
|
||||||
|
|
||||||
|
Args:
|
||||||
|
workflow: The workflow data as a dictionary
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The node ID of the primary sampler node, or None if not found
|
||||||
|
"""
|
||||||
|
# First check for SamplerCustomAdvanced nodes
|
||||||
|
sampler_advanced_nodes = []
|
||||||
|
ksampler_nodes = []
|
||||||
|
|
||||||
|
# Scan workflow for sampler nodes
|
||||||
|
for node_id, node_data in workflow.items():
|
||||||
|
node_type = node_data.get("class_type")
|
||||||
|
|
||||||
|
if node_type == "SamplerCustomAdvanced":
|
||||||
|
sampler_advanced_nodes.append(node_id)
|
||||||
|
elif node_type == "KSampler":
|
||||||
|
ksampler_nodes.append(node_id)
|
||||||
|
|
||||||
|
# If we found SamplerCustomAdvanced nodes, return the first one
|
||||||
|
if sampler_advanced_nodes:
|
||||||
|
logger.info(f"Found SamplerCustomAdvanced node: {sampler_advanced_nodes[0]}")
|
||||||
|
return sampler_advanced_nodes[0]
|
||||||
|
|
||||||
|
# If we have KSampler nodes, look for one with denoise=1.0
|
||||||
|
if ksampler_nodes:
|
||||||
|
for node_id in ksampler_nodes:
|
||||||
|
node_data = workflow[node_id]
|
||||||
|
inputs = node_data.get("inputs", {})
|
||||||
|
denoise = inputs.get("denoise", 0)
|
||||||
|
|
||||||
|
# Check if denoise is 1.0 (allowing for small floating point differences)
|
||||||
|
if abs(float(denoise) - 1.0) < 0.001:
|
||||||
|
logger.info(f"Found KSampler node with denoise=1.0: {node_id}")
|
||||||
|
return node_id
|
||||||
|
|
||||||
|
# If no KSampler with denoise=1.0 found, use the first one
|
||||||
|
logger.info(f"No KSampler with denoise=1.0 found, using first KSampler: {ksampler_nodes[0]}")
|
||||||
|
return ksampler_nodes[0]
|
||||||
|
|
||||||
|
# No sampler nodes found
|
||||||
|
logger.warning("No sampler nodes found in workflow")
|
||||||
|
return None
|
||||||
|
|
||||||
def collect_loras_from_model(self, model_input: List, workflow: Dict) -> str:
|
def collect_loras_from_model(self, model_input: List, workflow: Dict) -> str:
|
||||||
"""Collect loras information from the model node chain"""
|
"""Collect loras information from the model node chain"""
|
||||||
if not isinstance(model_input, list) or len(model_input) != 2:
|
if not isinstance(model_input, list) or len(model_input) != 2:
|
||||||
@@ -107,23 +160,23 @@ class WorkflowParser:
|
|||||||
self.processed_nodes = set()
|
self.processed_nodes = set()
|
||||||
self.node_results_cache = {}
|
self.node_results_cache = {}
|
||||||
|
|
||||||
# Find the KSampler node
|
# Find the primary sampler node
|
||||||
ksampler_node_id = find_node_by_type(workflow, "KSampler")
|
sampler_node_id = self.find_primary_sampler_node(workflow)
|
||||||
if not ksampler_node_id:
|
if not sampler_node_id:
|
||||||
logger.warning("No KSampler node found in workflow")
|
logger.warning("No suitable sampler node found in workflow")
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
# Start parsing from the KSampler node
|
# Start parsing from the sampler node
|
||||||
result = {
|
result = {
|
||||||
"gen_params": {},
|
"gen_params": {},
|
||||||
"loras": ""
|
"loras": ""
|
||||||
}
|
}
|
||||||
|
|
||||||
# Process KSampler node to extract parameters
|
# Process sampler node to extract parameters
|
||||||
ksampler_result = self.process_node(ksampler_node_id, workflow)
|
sampler_result = self.process_node(sampler_node_id, workflow)
|
||||||
if ksampler_result:
|
if sampler_result:
|
||||||
# Process the result
|
# Process the result
|
||||||
for key, value in ksampler_result.items():
|
for key, value in sampler_result.items():
|
||||||
# Special handling for the positive prompt from FluxGuidance
|
# Special handling for the positive prompt from FluxGuidance
|
||||||
if key == "positive" and isinstance(value, dict):
|
if key == "positive" and isinstance(value, dict):
|
||||||
# Extract guidance value
|
# Extract guidance value
|
||||||
@@ -138,8 +191,8 @@ class WorkflowParser:
|
|||||||
result["gen_params"][key] = value
|
result["gen_params"][key] = value
|
||||||
|
|
||||||
# Process the positive prompt node if it exists and we don't have a prompt yet
|
# Process the positive prompt node if it exists and we don't have a prompt yet
|
||||||
if "prompt" not in result["gen_params"] and "positive" in ksampler_result:
|
if "prompt" not in result["gen_params"] and "positive" in sampler_result:
|
||||||
positive_value = ksampler_result.get("positive")
|
positive_value = sampler_result.get("positive")
|
||||||
if isinstance(positive_value, str):
|
if isinstance(positive_value, str):
|
||||||
result["gen_params"]["prompt"] = positive_value
|
result["gen_params"]["prompt"] = positive_value
|
||||||
|
|
||||||
@@ -152,11 +205,11 @@ class WorkflowParser:
|
|||||||
if "guidance" in node_inputs:
|
if "guidance" in node_inputs:
|
||||||
result["gen_params"]["guidance"] = node_inputs["guidance"]
|
result["gen_params"]["guidance"] = node_inputs["guidance"]
|
||||||
|
|
||||||
# Extract loras from the model input of KSampler
|
# Extract loras from the model input of sampler
|
||||||
ksampler_node = workflow.get(ksampler_node_id, {})
|
sampler_node = workflow.get(sampler_node_id, {})
|
||||||
ksampler_inputs = ksampler_node.get("inputs", {})
|
sampler_inputs = sampler_node.get("inputs", {})
|
||||||
if "model" in ksampler_inputs and isinstance(ksampler_inputs["model"], list):
|
if "model" in sampler_inputs and isinstance(sampler_inputs["model"], list):
|
||||||
loras_text = self.collect_loras_from_model(ksampler_inputs["model"], workflow)
|
loras_text = self.collect_loras_from_model(sampler_inputs["model"], workflow)
|
||||||
if loras_text:
|
if loras_text:
|
||||||
result["loras"] = loras_text
|
result["loras"] = loras_text
|
||||||
|
|
||||||
@@ -164,9 +217,9 @@ class WorkflowParser:
|
|||||||
if "cfg" in result["gen_params"]:
|
if "cfg" in result["gen_params"]:
|
||||||
result["gen_params"]["cfg_scale"] = result["gen_params"].pop("cfg")
|
result["gen_params"]["cfg_scale"] = result["gen_params"].pop("cfg")
|
||||||
|
|
||||||
# Add clip_skip = 2 to match reference output if not already present
|
# Add clip_skip = 1 to match reference output if not already present
|
||||||
if "clip_skip" not in result["gen_params"]:
|
if "clip_skip" not in result["gen_params"]:
|
||||||
result["gen_params"]["clip_skip"] = "2"
|
result["gen_params"]["clip_skip"] = "1"
|
||||||
|
|
||||||
# Ensure the prompt is a string and not a nested dictionary
|
# Ensure the prompt is a string and not a nested dictionary
|
||||||
if "prompt" in result["gen_params"] and isinstance(result["gen_params"]["prompt"], dict):
|
if "prompt" in result["gen_params"] and isinstance(result["gen_params"]["prompt"], dict):
|
||||||
|
|||||||
536
refs/prompt.json
536
refs/prompt.json
@@ -1,75 +1,12 @@
|
|||||||
{
|
{
|
||||||
"3": {
|
|
||||||
"inputs": {
|
|
||||||
"seed": 42,
|
|
||||||
"steps": 20,
|
|
||||||
"cfg": 8,
|
|
||||||
"sampler_name": "euler_ancestral",
|
|
||||||
"scheduler": "karras",
|
|
||||||
"denoise": 1,
|
|
||||||
"model": [
|
|
||||||
"56",
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"positive": [
|
|
||||||
"6",
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"negative": [
|
|
||||||
"7",
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"latent_image": [
|
|
||||||
"5",
|
|
||||||
0
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"class_type": "KSampler",
|
|
||||||
"_meta": {
|
|
||||||
"title": "KSampler"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"4": {
|
|
||||||
"inputs": {
|
|
||||||
"ckpt_name": "il\\waiNSFWIllustrious_v110.safetensors"
|
|
||||||
},
|
|
||||||
"class_type": "CheckpointLoaderSimple",
|
|
||||||
"_meta": {
|
|
||||||
"title": "Load Checkpoint"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"5": {
|
|
||||||
"inputs": {
|
|
||||||
"width": 832,
|
|
||||||
"height": 1216,
|
|
||||||
"batch_size": 1
|
|
||||||
},
|
|
||||||
"class_type": "EmptyLatentImage",
|
|
||||||
"_meta": {
|
|
||||||
"title": "Empty Latent Image"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"6": {
|
"6": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"text": [
|
"text": [
|
||||||
"22",
|
"301",
|
||||||
0
|
0
|
||||||
],
|
],
|
||||||
"clip": [
|
"clip": [
|
||||||
"56",
|
"299",
|
||||||
1
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"class_type": "CLIPTextEncode",
|
|
||||||
"_meta": {
|
|
||||||
"title": "CLIP Text Encode (Prompt)"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"7": {
|
|
||||||
"inputs": {
|
|
||||||
"text": "bad quality, worst quality, worst detail, sketch ,signature, watermark, patreon logo, nsfw",
|
|
||||||
"clip": [
|
|
||||||
"56",
|
|
||||||
1
|
1
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -81,12 +18,12 @@
|
|||||||
"8": {
|
"8": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"samples": [
|
"samples": [
|
||||||
"3",
|
"13",
|
||||||
0
|
1
|
||||||
],
|
],
|
||||||
"vae": [
|
"vae": [
|
||||||
"4",
|
"10",
|
||||||
2
|
0
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"class_type": "VAEDecode",
|
"class_type": "VAEDecode",
|
||||||
@@ -94,7 +31,275 @@
|
|||||||
"title": "VAE Decode"
|
"title": "VAE Decode"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"14": {
|
"10": {
|
||||||
|
"inputs": {
|
||||||
|
"vae_name": "flux1\\ae.safetensors"
|
||||||
|
},
|
||||||
|
"class_type": "VAELoader",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Load VAE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"11": {
|
||||||
|
"inputs": {
|
||||||
|
"clip_name1": "t5xxl_fp8_e4m3fn.safetensors",
|
||||||
|
"clip_name2": "ViT-L-14-TEXT-detail-improved-hiT-GmP-TE-only-HF.safetensors",
|
||||||
|
"type": "flux",
|
||||||
|
"device": "default"
|
||||||
|
},
|
||||||
|
"class_type": "DualCLIPLoader",
|
||||||
|
"_meta": {
|
||||||
|
"title": "DualCLIPLoader"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"13": {
|
||||||
|
"inputs": {
|
||||||
|
"noise": [
|
||||||
|
"147",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"guider": [
|
||||||
|
"22",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"sampler": [
|
||||||
|
"16",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"sigmas": [
|
||||||
|
"17",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"latent_image": [
|
||||||
|
"48",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "SamplerCustomAdvanced",
|
||||||
|
"_meta": {
|
||||||
|
"title": "SamplerCustomAdvanced"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"16": {
|
||||||
|
"inputs": {
|
||||||
|
"sampler_name": "dpmpp_2m"
|
||||||
|
},
|
||||||
|
"class_type": "KSamplerSelect",
|
||||||
|
"_meta": {
|
||||||
|
"title": "KSamplerSelect"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"17": {
|
||||||
|
"inputs": {
|
||||||
|
"scheduler": "beta",
|
||||||
|
"steps": [
|
||||||
|
"246",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"denoise": 1,
|
||||||
|
"model": [
|
||||||
|
"28",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "BasicScheduler",
|
||||||
|
"_meta": {
|
||||||
|
"title": "BasicScheduler"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"22": {
|
||||||
|
"inputs": {
|
||||||
|
"model": [
|
||||||
|
"28",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"conditioning": [
|
||||||
|
"29",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "BasicGuider",
|
||||||
|
"_meta": {
|
||||||
|
"title": "BasicGuider"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"28": {
|
||||||
|
"inputs": {
|
||||||
|
"max_shift": 1.1500000000000001,
|
||||||
|
"base_shift": 0.5,
|
||||||
|
"width": [
|
||||||
|
"48",
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"height": [
|
||||||
|
"48",
|
||||||
|
2
|
||||||
|
],
|
||||||
|
"model": [
|
||||||
|
"299",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "ModelSamplingFlux",
|
||||||
|
"_meta": {
|
||||||
|
"title": "ModelSamplingFlux"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"29": {
|
||||||
|
"inputs": {
|
||||||
|
"guidance": 3.5,
|
||||||
|
"conditioning": [
|
||||||
|
"6",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "FluxGuidance",
|
||||||
|
"_meta": {
|
||||||
|
"title": "FluxGuidance"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"48": {
|
||||||
|
"inputs": {
|
||||||
|
"resolution": "832x1216 (0.68)",
|
||||||
|
"batch_size": 1,
|
||||||
|
"width_override": 0,
|
||||||
|
"height_override": 0
|
||||||
|
},
|
||||||
|
"class_type": "SDXLEmptyLatentSizePicker+",
|
||||||
|
"_meta": {
|
||||||
|
"title": "🔧 SDXL Empty Latent Size Picker"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"65": {
|
||||||
|
"inputs": {
|
||||||
|
"unet_name": "flux\\flux1-dev-fp8-e4m3fn.safetensors",
|
||||||
|
"weight_dtype": "fp8_e4m3fn_fast"
|
||||||
|
},
|
||||||
|
"class_type": "UNETLoader",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Load Diffusion Model"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"147": {
|
||||||
|
"inputs": {
|
||||||
|
"noise_seed": 651532572596956
|
||||||
|
},
|
||||||
|
"class_type": "RandomNoise",
|
||||||
|
"_meta": {
|
||||||
|
"title": "RandomNoise"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"148": {
|
||||||
|
"inputs": {
|
||||||
|
"wildcard_text": "__some-prompts__",
|
||||||
|
"populated_text": "A surreal digital artwork showcases a forward-thinking inventor captivated by his intricate mechanical creation through a large magnifying glass. Viewed from an unconventional perspective, the scene reveals an eccentric assembly of gears, springs, and brass instruments within his workshop. Soft, ethereal light radiates from the invention, casting enigmatic shadows on the walls as time appears to bend around its metallic form, invoking a sense of curiosity, wonder, and exhilaration in discovery.",
|
||||||
|
"mode": "fixed",
|
||||||
|
"seed": 553084268162351,
|
||||||
|
"Select to add Wildcard": "Select the Wildcard to add to the text"
|
||||||
|
},
|
||||||
|
"class_type": "ImpactWildcardProcessor",
|
||||||
|
"_meta": {
|
||||||
|
"title": "ImpactWildcardProcessor"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"151": {
|
||||||
|
"inputs": {
|
||||||
|
"text": "A hyper-realistic close-up portrait of a young woman with shoulder-length black hair styled in edgy, futuristic layers, adorned with glowing tips. She wears mecha eyewear with a neon green visor that transitions into iridescent shades of teal and gold. The frame is sleek, with angular edges and fine mechanical detailing. Her expression is fierce and confident, with flawless skin highlighted by the neon reflections. She wears a high-tech bodysuit with integrated LED lines and metallic panels. The background depicts a hazy rendition of The Great Wave off Kanagawa by Hokusai, its powerful waves blending seamlessly with the neon tones, amplifying her intense, defiant aura."
|
||||||
|
},
|
||||||
|
"class_type": "Text Multiline",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Text Multiline"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"191": {
|
||||||
|
"inputs": {
|
||||||
|
"text": "A cinematic, oil painting masterpiece captures the essence of impressionistic surrealism, inspired by Claude Monet. A mysterious woman in a flowing crimson dress stands at the edge of a tranquil lake, where lily pads shimmer under an ethereal, golden twilight. The water’s surface reflects a dreamlike sky, its swirling hues of violet and sapphire melting together like liquid light. The thick, expressive brushstrokes lend depth to the scene, evoking a sense of nostalgia and quiet longing, as if the world itself is caught between reality and a fleeting dream. \nA mesmerizing oil painting masterpiece inspired by Salvador Dalí, blending surrealism with post-impressionist texture. A lone violinist plays atop a melting clock tower, his form distorted by the passage of time. The sky is a cascade of swirling, liquid oranges and deep blues, where floating staircases spiral endlessly into the horizon. The impasto technique gives depth and movement to the surreal elements, making time itself feel fluid, as if the world is dissolving into a dream. \nA stunning impressionistic oil painting evokes the spirit of Edvard Munch, capturing a solitary figure standing on a rain-soaked street, illuminated by the glow of flickering gas lamps. The swirling, chaotic strokes of deep blues and fiery reds reflect the turbulence of emotion, while the blurred reflections in the wet cobblestone suggest a merging of past and present. The faceless figure, draped in a dark overcoat, seems lost in thought, embodying the ephemeral nature of memory and time. \nA breathtaking oil painting masterpiece, inspired by Gustav Klimt, presents a celestial ballroom where faceless dancers swirl in an eternal waltz beneath a gilded, star-speckled sky. Their golden garments shimmer with intricate patterns, blending into the opulent mosaic floor that seems to stretch into infinity. The dreamlike composition, rich in warm amber and deep sapphire hues, captures an otherworldly elegance, as if the dancers are suspended in a moment that transcends time. \nA visionary oil painting inspired by Marc Chagall depicts a dreamlike cityscape where gravity ceases to exist. A couple floats above a crimson-tinted town, their forms dissolving into the swirling strokes of a vast, cerulean sky. The buildings below twist and bend in rhythmic motion, their windows glowing like tiny stars. The thick, textured brushwork conveys a sense of weightlessness and wonder, as if love itself has defied the laws of the universe. \nAn impressionistic oil painting in the style of J.M.W. Turner, depicting a ghostly ship sailing through a sea of swirling golden mist. The waves crash and dissolve into abstract, fiery strokes of orange and deep indigo, blurring the line between ocean and sky. The ship appears almost ethereal, as if drifting between worlds, lost in the ever-changing tides of memory and myth. The dynamic brushstrokes capture the relentless power of nature and the fleeting essence of time. \nA captivating oil painting masterpiece, infused with surrealist impressionism, portrays a grand library where books float midair, their pages unraveling into ribbons of light. The towering shelves twist into the heavens, vanishing into an infinite, starry void. A lone scholar, illuminated by the glow of a suspended lantern, reaches for a book that seems to pulse with life. The scene pulses with mystery, where the impasto textures bring depth to the interplay between knowledge and dreams. \nA luminous impressionistic oil painting captures the melancholic beauty of an abandoned carnival, its faded carousel horses frozen mid-gallop beneath a sky of swirling lavender and gold. The wind carries fragments of forgotten laughter through the empty fairground, where scattered ticket stubs and crumbling banners whisper tales of joy long past. The thick, textured brushstrokes blend nostalgia with an eerie dreamlike quality, as if the carnival exists only in the echoes of memory. \nA surreal oil painting in the spirit of René Magritte, featuring a towering lighthouse that emits not light, but cascading waterfalls from its peak. The swirling sky, painted in deep midnight blues, is punctuated by glowing, crescent moons that defy gravity. A lone figure stands at the water’s edge, gazing up in quiet contemplation, as if caught between wonder and the unknown. The painting’s rich textures and luminous colors create an enigmatic, dreamlike landscape. \nA striking impressionistic oil painting, reminiscent of Van Gogh, portrays a lone traveler on a winding cobblestone path, their silhouette bathed in the golden glow of lantern-lit cherry blossoms. The petals swirl through the night air like glowing embers, blending with the deep, rhythmic strokes of a star-filled indigo sky. The scene captures a feeling of wistful solitude, as if the traveler is walking not only through the city, but through the fleeting nature of time itself."
|
||||||
|
},
|
||||||
|
"class_type": "Text Multiline",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Text Multiline"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"203": {
|
||||||
|
"inputs": {
|
||||||
|
"string1": [
|
||||||
|
"289",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"string2": [
|
||||||
|
"293",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"delimiter": ", "
|
||||||
|
},
|
||||||
|
"class_type": "JoinStrings",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Join Strings"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"208": {
|
||||||
|
"inputs": {
|
||||||
|
"file_path": "",
|
||||||
|
"dictionary_name": "[filename]",
|
||||||
|
"label": "TextBatch",
|
||||||
|
"mode": "automatic",
|
||||||
|
"index": 0,
|
||||||
|
"multiline_text": [
|
||||||
|
"191",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "Text Load Line From File",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Text Load Line From File"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"223": {
|
||||||
|
"inputs": {
|
||||||
|
"filename": "%time_%seed",
|
||||||
|
"path": "%date",
|
||||||
|
"extension": "jpeg",
|
||||||
|
"steps": [
|
||||||
|
"246",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"cfg": 3.5,
|
||||||
|
"modelname": "flux_dev",
|
||||||
|
"sampler_name": "dpmpp_2m",
|
||||||
|
"scheduler": "beta",
|
||||||
|
"positive": [
|
||||||
|
"203",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"negative": "",
|
||||||
|
"width": [
|
||||||
|
"48",
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"height": [
|
||||||
|
"48",
|
||||||
|
2
|
||||||
|
],
|
||||||
|
"lossless_webp": true,
|
||||||
|
"quality_jpeg_or_webp": 100,
|
||||||
|
"optimize_png": false,
|
||||||
|
"counter": 0,
|
||||||
|
"denoise": 1,
|
||||||
|
"clip_skip": 1,
|
||||||
|
"time_format": "%Y-%m-%d-%H%M%S",
|
||||||
|
"save_workflow_as_json": false,
|
||||||
|
"embed_workflow_in_png": false,
|
||||||
|
"images": [
|
||||||
|
"8",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "Image Saver",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Image Saver"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"226": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"images": [
|
"images": [
|
||||||
"8",
|
"8",
|
||||||
@@ -106,64 +311,25 @@
|
|||||||
"title": "Preview Image"
|
"title": "Preview Image"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"19": {
|
"246": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"stop_at_clip_layer": -2,
|
"value": 25
|
||||||
"clip": [
|
|
||||||
"4",
|
|
||||||
1
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"class_type": "CLIPSetLastLayer",
|
"class_type": "INTConstant",
|
||||||
"_meta": {
|
"_meta": {
|
||||||
"title": "CLIP Set Last Layer"
|
"title": "Steps"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"21": {
|
"289": {
|
||||||
"inputs": {
|
|
||||||
"string": "masterpiece, best quality, good quality, very awa, newest, highres, absurdres, 1girl, solo, dress, standing, flower, outdoors, water, white flower, pink flower, scenery, reflection, rain, dark, ripples, yellow flower, puddle, colorful, abstract, standing on liquidi¼\nvery Wide Shot, limited palette,",
|
|
||||||
"strip_newlines": false
|
|
||||||
},
|
|
||||||
"class_type": "StringConstantMultiline",
|
|
||||||
"_meta": {
|
|
||||||
"title": "positive"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"22": {
|
|
||||||
"inputs": {
|
|
||||||
"string1": [
|
|
||||||
"55",
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"string2": [
|
|
||||||
"21",
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"delimiter": ", "
|
|
||||||
},
|
|
||||||
"class_type": "JoinStrings",
|
|
||||||
"_meta": {
|
|
||||||
"title": "Join Strings"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"55": {
|
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"group_mode": true,
|
"group_mode": true,
|
||||||
"toggle_trigger_words": [
|
"toggle_trigger_words": [
|
||||||
{
|
{
|
||||||
"text": "xxx667_illu",
|
"text": "perfection style",
|
||||||
"active": true
|
"active": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"text": "glowing",
|
"text": "mythp0rt",
|
||||||
"active": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "glitch",
|
|
||||||
"active": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "15546+456868",
|
|
||||||
"active": true
|
"active": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -177,9 +343,9 @@
|
|||||||
"_isDummy": true
|
"_isDummy": true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"orinalMessage": "xxx667_illu,, glowing,, glitch,, 15546+456868",
|
"orinalMessage": "perfection style,, mythp0rt",
|
||||||
"trigger_words": [
|
"trigger_words": [
|
||||||
"56",
|
"299",
|
||||||
2
|
2
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -188,33 +354,57 @@
|
|||||||
"title": "TriggerWord Toggle (LoraManager)"
|
"title": "TriggerWord Toggle (LoraManager)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"56": {
|
"293": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"text": "<lora:ponyv6_noobE11_2_adamW-000017:0.3> <lora:XXX667:0.4> <lora:114558v4df2fsdf5:0.6> <lora:illustriousXL_stabilizer_v1.23:0.3> <lora:mon_monmon2133:0.5>",
|
"input": 1,
|
||||||
|
"text1": [
|
||||||
|
"208",
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"text2": [
|
||||||
|
"151",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "easy textSwitch",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Text Switch"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"297": {
|
||||||
|
"inputs": {
|
||||||
|
"text": ""
|
||||||
|
},
|
||||||
|
"class_type": "Lora Stacker (LoraManager)",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Lora Stacker (LoraManager)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"298": {
|
||||||
|
"inputs": {
|
||||||
|
"text": "flux1/testing/matmillerartFLUX.safetensors,0.2,0.2",
|
||||||
|
"anything": [
|
||||||
|
"297",
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"class_type": "easy showAnything",
|
||||||
|
"_meta": {
|
||||||
|
"title": "Show Any"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"299": {
|
||||||
|
"inputs": {
|
||||||
|
"text": "<lora:boFLUX Double Exposure Magic v2:0.8> <lora:FluxDFaeTasticDetails:0.65>",
|
||||||
"loras": [
|
"loras": [
|
||||||
{
|
{
|
||||||
"name": "ponyv6_noobE11_2_adamW-000017",
|
"name": "boFLUX Double Exposure Magic v2",
|
||||||
"strength": 0.3,
|
"strength": 0.8,
|
||||||
"active": true
|
"active": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "XXX667",
|
"name": "FluxDFaeTasticDetails",
|
||||||
"strength": 0.4,
|
"strength": 0.65,
|
||||||
"active": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "114558v4df2fsdf5",
|
|
||||||
"strength": 0.6,
|
|
||||||
"active": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "illustriousXL_stabilizer_v1.23",
|
|
||||||
"strength": 0.3,
|
|
||||||
"active": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "mon_monmon2133",
|
|
||||||
"strength": 0.5,
|
|
||||||
"active": true
|
"active": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -231,15 +421,15 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"model": [
|
"model": [
|
||||||
"4",
|
"65",
|
||||||
0
|
0
|
||||||
],
|
],
|
||||||
"clip": [
|
"clip": [
|
||||||
"4",
|
"11",
|
||||||
1
|
0
|
||||||
],
|
],
|
||||||
"lora_stack": [
|
"lora_stack": [
|
||||||
"57",
|
"297",
|
||||||
0
|
0
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -248,64 +438,14 @@
|
|||||||
"title": "Lora Loader (LoraManager)"
|
"title": "Lora Loader (LoraManager)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"57": {
|
"301": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"text": "<lora:aorunIllstrious:1>",
|
"string": "A hyper-realistic close-up portrait of a young woman with shoulder-length black hair styled in edgy, futuristic layers, adorned with glowing tips. She wears mecha eyewear with a neon green visor that transitions into iridescent shades of teal and gold. The frame is sleek, with angular edges and fine mechanical detailing. Her expression is fierce and confident, with flawless skin highlighted by the neon reflections. She wears a high-tech bodysuit with integrated LED lines and metallic panels. The background depicts a hazy rendition of The Great Wave off Kanagawa by Hokusai, its powerful waves blending seamlessly with the neon tones, amplifying her intense, defiant aura.",
|
||||||
"loras": [
|
"strip_newlines": true
|
||||||
{
|
|
||||||
"name": "aorunIllstrious",
|
|
||||||
"strength": "0.90",
|
|
||||||
"active": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "__dummy_item1__",
|
|
||||||
"strength": 0,
|
|
||||||
"active": false,
|
|
||||||
"_isDummy": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "__dummy_item2__",
|
|
||||||
"strength": 0,
|
|
||||||
"active": false,
|
|
||||||
"_isDummy": true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"lora_stack": [
|
|
||||||
"59",
|
|
||||||
0
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"class_type": "Lora Stacker (LoraManager)",
|
"class_type": "StringConstantMultiline",
|
||||||
"_meta": {
|
"_meta": {
|
||||||
"title": "Lora Stacker (LoraManager)"
|
"title": "String Constant Multiline"
|
||||||
}
|
|
||||||
},
|
|
||||||
"59": {
|
|
||||||
"inputs": {
|
|
||||||
"text": "<lora:ck-neon-retrowave-IL-000012:0.8>",
|
|
||||||
"loras": [
|
|
||||||
{
|
|
||||||
"name": "ck-neon-retrowave-IL-000012",
|
|
||||||
"strength": 0.8,
|
|
||||||
"active": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "__dummy_item1__",
|
|
||||||
"strength": 0,
|
|
||||||
"active": false,
|
|
||||||
"_isDummy": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "__dummy_item2__",
|
|
||||||
"strength": 0,
|
|
||||||
"active": false,
|
|
||||||
"_isDummy": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"class_type": "Lora Stacker (LoraManager)",
|
|
||||||
"_meta": {
|
|
||||||
"title": "Lora Stacker (LoraManager)"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user