@@ -5124,6 +5124,95 @@ def pad_text(self, text, length, technique, padding_character):
5124
5124
padded_text = padded_text .ljust (length , padding_character )
5125
5125
return (padded_text ,)
5126
5126
5127
+ class SD3TextConditioningWithOptionsOnePrompt :
5128
+ @classmethod
5129
+ def INPUT_TYPES (cls ):
5130
+ return {'required' : {'positive_prompt' : ('STRING' , {'default' : 'positive prompt' , 'multiline' : True }),
5131
+ 'negative_prompt' : ('STRING' , {'default' : 'negative prompt' , 'multiline' : True }),
5132
+ 'clip' : ('CLIP' ,),
5133
+ 'option_positive_clip_l' : (['Unmodified' ,'Padded' ,'Empty' ], {'default' : 'Unmodified' }),
5134
+ 'option_positive_clip_g' : (['Unmodified' ,'Padded' ,'Empty' ], {'default' : 'Unmodified' }),
5135
+ 'option_positive_t5xxl' : (['Unmodified' ,'Padded' ,'Empty' ], {'default' : 'Unmodified' }),
5136
+ 'option_negative_clip_l' : (['Unmodified' ,'Padded' ,'Empty' ], {'default' : 'Unmodified' }),
5137
+ 'option_negative_clip_g' : (['Unmodified' ,'Padded' ,'Empty' ], {'default' : 'Unmodified' }),
5138
+ 'option_negative_t5xxl' : (['Unmodified' ,'Padded' ,'Empty' ], {'default' : 'Unmodified' }),
5139
+ 'padding_character' : ('STRING' , {'default' : ',' })}}
5140
+
5141
+ RETURN_TYPES = ('CONDITIONING' ,'CONDITIONING' ,)
5142
+ RETURN_NAMES = ('positive_conditioning' ,'negative_conditioning' )
5143
+ FUNCTION = 'process'
5144
+ CATEGORY = 'Mikey/SD3/Conditioning'
5145
+
5146
+ def process (self , positive_prompt , negative_prompt , clip , option_positive_clip_l , option_positive_clip_g , option_positive_t5xxl , option_negative_clip_l , option_negative_clip_g , option_negative_t5xxl , padding_character ):
5147
+ positive_tokens = clip .tokenize (positive_prompt )
5148
+ if len (positive_prompt ) == 0 or option_positive_clip_g == 'Empty' :
5149
+ positive_tokens ['g' ] = []
5150
+ if len (positive_tokens ['g' ]) < 77 and option_positive_clip_l == 'Padded' :
5151
+ padded_g_string = positive_prompt + padding_character * (77 - len (positive_tokens ['g' ]))
5152
+ positive_tokens ['g' ] = clip .tokenize (padded_g_string )['g' ]
5153
+
5154
+ if len (positive_prompt ) == 0 or option_positive_clip_l == 'Empty' :
5155
+ positive_tokens ['l' ] = []
5156
+ elif len (positive_tokens ['l' ]) < 77 and option_positive_clip_l == 'Padded' :
5157
+ padded_l_string = positive_prompt + padding_character * (77 - len (positive_tokens ['l' ]))
5158
+ positive_tokens ['l' ] = clip .tokenize (padded_l_string )['l' ]
5159
+ else :
5160
+ positive_tokens ['l' ] = clip .tokenize (positive_prompt )['l' ]
5161
+
5162
+ if len (positive_prompt ) == 0 or option_positive_t5xxl == 'Empty' :
5163
+ positive_tokens ['t5xxl' ] = []
5164
+ elif len (positive_tokens ['t5xxl' ]) < 512 and option_positive_t5xxl == 'Padded' :
5165
+ padded_t5xxl_string = positive_prompt + padding_character * (512 - len (positive_tokens ['t5xxl' ]))
5166
+ positive_tokens ['t5xxl' ] = clip .tokenize (padded_t5xxl_string )['t5xxl' ]
5167
+ else :
5168
+ positive_tokens ['t5xxl' ] = clip .tokenize (positive_prompt )['t5xxl' ]
5169
+
5170
+ if len (positive_tokens ['l' ]) != len (positive_tokens ['g' ]):
5171
+ empty = clip .tokenize ('' )
5172
+ while len (positive_tokens ['l' ]) < len (positive_tokens ['g' ]):
5173
+ positive_tokens ['l' ] += empty ['l' ]
5174
+ while len (positive_tokens ['l' ]) > len (positive_tokens ['g' ]):
5175
+ positive_tokens ['g' ] += empty ['g' ]
5176
+ positive_conditioning , positive_pooled = clip .encode_from_tokens (positive_tokens , return_pooled = True )
5177
+
5178
+ # now negative
5179
+ negative_tokens = clip .tokenize (negative_prompt )
5180
+ if len (negative_prompt ) == 0 or option_negative_clip_g == 'Empty' :
5181
+ negative_tokens ['g' ] = []
5182
+ if len (negative_tokens ['g' ]) < 77 and option_negative_clip_l == 'Padded' :
5183
+ padded_g_string = negative_prompt + padding_character * (77 - len (negative_tokens ['g' ]))
5184
+ negative_tokens ['g' ] = clip .tokenize (padded_g_string )['g' ]
5185
+
5186
+ if len (negative_prompt ) == 0 or option_negative_clip_l == 'Empty' :
5187
+ negative_tokens ['l' ] = []
5188
+ elif len (negative_tokens ['l' ]) < 77 and option_negative_clip_l == 'Padded' :
5189
+ padded_l_string = negative_prompt + padding_character * (75 - len (negative_tokens ['l' ]))
5190
+ negative_tokens ['l' ] = clip .tokenize (padded_l_string )['l' ]
5191
+ else :
5192
+ negative_tokens ['l' ] = clip .tokenize (negative_prompt )['l' ]
5193
+
5194
+ if len (negative_prompt ) == 0 or option_negative_t5xxl == 'Empty' :
5195
+ negative_tokens ['t5xxl' ] = []
5196
+ elif len (negative_tokens ['t5xxl' ]) < 512 and option_negative_t5xxl == 'Padded' :
5197
+ padded_t5xxl_string = negative_prompt + padding_character * (512 - len (negative_tokens ['t5xxl' ]))
5198
+ negative_tokens ['t5xxl' ] = clip .tokenize (padded_t5xxl_string )['t5xxl' ]
5199
+ else :
5200
+ negative_tokens ['t5xxl' ] = clip .tokenize (negative_prompt )['t5xxl' ]
5201
+
5202
+ if len (negative_tokens ['l' ]) != len (negative_tokens ['g' ]):
5203
+ empty = clip .tokenize ('' )
5204
+ while len (negative_tokens ['l' ]) < len (negative_tokens ['g' ]):
5205
+ negative_tokens ['l' ] += empty ['l' ]
5206
+ while len (negative_tokens ['l' ]) > len (negative_tokens ['g' ]):
5207
+ negative_tokens ['g' ] += empty ['g' ]
5208
+ negative_conditioning , negative_pooled = clip .encode_from_tokens (negative_tokens , return_pooled = True )
5209
+
5210
+ return (
5211
+ [[positive_conditioning , {'pooled_output' : positive_pooled }]],
5212
+ [[negative_conditioning , {'pooled_output' : negative_pooled }]],
5213
+ )
5214
+
5215
+
5127
5216
NODE_CLASS_MAPPINGS = {
5128
5217
'Wildcard Processor' : WildcardProcessor ,
5129
5218
'Empty Latent Ratio Select SDXL' : EmptyLatentRatioSelector ,
@@ -5191,7 +5280,8 @@ def pad_text(self, text, length, technique, padding_character):
5191
5280
'CinematicLook' : CinematicLook ,
5192
5281
'MosaicExpandImage' : MosaicExpandImage ,
5193
5282
'GetSubdirectories' : GetSubdirectories ,
5194
- 'TextPadderMikey' : TextPadderMikey
5283
+ 'TextPadderMikey' : TextPadderMikey ,
5284
+ 'SD3TextConditioningWithOptionsOnePrompt' : SD3TextConditioningWithOptionsOnePrompt
5195
5285
}
5196
5286
5197
5287
NODE_DISPLAY_NAME_MAPPINGS = {
@@ -5261,5 +5351,6 @@ def pad_text(self, text, length, technique, padding_character):
5261
5351
'CinematicLook' : 'Cinematic Look (Mikey)' ,
5262
5352
'MosaicExpandImage' : 'Mosaic Expand Image (Mikey)' ,
5263
5353
'GetSubdirectories' : 'Get Subdirectories (Mikey)' ,
5264
- 'TextPadderMikey' : 'Text Padder (Mikey)'
5354
+ 'TextPadderMikey' : 'Text Padder (Mikey)' ,
5355
+ 'SD3TextConditioningWithOptionsOnePrompt' : 'SD3 Text Conditioning With Options. One Prompt (Mikey)'
5265
5356
}
0 commit comments