mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
Separate conditionings back to positive and negative
This commit is contained in:
parent
85c33823c3
commit
5012f61599
@ -34,7 +34,8 @@ class CompelOutput(BaseInvocationOutput):
|
||||
# model: ModelField = Field(default=None, description="Model")
|
||||
# src? + loras -> tokenizer + text_encoder + loras
|
||||
# clip: ClipField = Field(default=None, description="Text encoder(clip)")
|
||||
conditioning: ConditioningField = Field(default=None, description="Conditioning")
|
||||
positive: ConditioningField = Field(default=None, description="Positive conditioning")
|
||||
negative: ConditioningField = Field(default=None, description="Negative conditioning")
|
||||
#fmt: on
|
||||
|
||||
|
||||
@ -133,14 +134,20 @@ class CompelInvocation(BaseInvocation):
|
||||
cross_attention_control_args=options.get("cross_attention_control", None),
|
||||
)
|
||||
|
||||
name_cond = f"{context.graph_execution_state_id}_{self.id}_conditioning"
|
||||
name_prefix = f'{context.graph_execution_state_id}__{self.id}'
|
||||
name_positive = f"{name_prefix}_positive"
|
||||
name_negative = f"{name_prefix}_negative"
|
||||
|
||||
# TODO: hacky but works ;D maybe rename latents somehow?
|
||||
context.services.latents.set(name_cond, (c, uc, ec))
|
||||
context.services.latents.set(name_positive, (c, ec))
|
||||
context.services.latents.set(name_negative, (uc, None))
|
||||
|
||||
return CompelOutput(
|
||||
conditioning=ConditioningField(
|
||||
conditioning_name=name_cond,
|
||||
positive=ConditioningField(
|
||||
conditioning_name=name_positive,
|
||||
),
|
||||
negative=ConditioningField(
|
||||
conditioning_name=name_negative,
|
||||
),
|
||||
)
|
||||
|
||||
|
@ -144,7 +144,8 @@ class TextToLatentsInvocation(BaseInvocation):
|
||||
|
||||
# Inputs
|
||||
# fmt: off
|
||||
conditioning: Optional[ConditioningField] = Field(description="Conditioning for generation")
|
||||
positive: Optional[ConditioningField] = Field(description="Positive conditioning for generation")
|
||||
negative: Optional[ConditioningField] = Field(description="Negative conditioning for generation")
|
||||
noise: Optional[LatentsField] = Field(description="The noise to use")
|
||||
steps: int = Field(default=10, gt=0, description="The number of steps to use to generate the image")
|
||||
cfg_scale: float = Field(default=7.5, gt=0, description="The Classifier-Free Guidance, higher values may result in a result closer to the prompt", )
|
||||
@ -203,7 +204,8 @@ class TextToLatentsInvocation(BaseInvocation):
|
||||
|
||||
|
||||
def get_conditioning_data(self, context: InvocationContext, model: StableDiffusionGeneratorPipeline) -> ConditioningData:
|
||||
c, uc, extra_conditioning_info = context.services.latents.get(self.conditioning.conditioning_name)
|
||||
c, extra_conditioning_info = context.services.latents.get(self.positive.conditioning_name)
|
||||
uc, _ = context.services.latents.get(self.negative.conditioning_name)
|
||||
|
||||
conditioning_data = ConditioningData(
|
||||
uc,
|
||||
|
@ -29,7 +29,8 @@ def create_text_to_image() -> LibraryGraph:
|
||||
Edge(source=EdgeConnection(node_id='seed', field='a'), destination=EdgeConnection(node_id='3', field='seed')),
|
||||
Edge(source=EdgeConnection(node_id='3', field='noise'), destination=EdgeConnection(node_id='5', field='noise')),
|
||||
Edge(source=EdgeConnection(node_id='5', field='latents'), destination=EdgeConnection(node_id='6', field='latents')),
|
||||
Edge(source=EdgeConnection(node_id='4', field='conditioning'), destination=EdgeConnection(node_id='5', field='conditioning')),
|
||||
Edge(source=EdgeConnection(node_id='4', field='positive'), destination=EdgeConnection(node_id='5', field='positive')),
|
||||
Edge(source=EdgeConnection(node_id='4', field='negative'), destination=EdgeConnection(node_id='5', field='negative')),
|
||||
]
|
||||
),
|
||||
exposed_inputs=[
|
||||
|
Loading…
Reference in New Issue
Block a user