This commit is contained in:
Andrew Suter-Morris
2025-02-19 14:54:55 -07:00
parent 454005eb4e
commit 56b22f3858
3 changed files with 35 additions and 82 deletions
+1
View File
@@ -20,3 +20,4 @@ To use, use the 8BitQuantized.json. You can remove the Quanitization step and it
- Optimize, optimize, optimize.
- TryOn
- Custom VAE, Text Encoders, etc.
- Use LoRA
+6
View File
@@ -4,6 +4,8 @@ from .try_off_nodes import ( # noqa
TryOffModelNode,
TryOffQuantizerNode,
TryOffRunNode,
TryOnOffModelNode,
FluxFillPipelineNode2
)
# Node Registrations
@@ -13,6 +15,8 @@ NODE_CLASS_MAPPINGS = {
"TryOffRunNode": TryOffRunNode,
"TryOffQuantizerNode": TryOffQuantizerNode,
"TryOffFluxFillPipelineNode": FluxFillPipelineNode,
"TryOnOffModelNode": TryOnOffModelNode,
"TryOffFluxFillPipelineNode2": FluxFillPipelineNode2
}
NODE_DISPLAY_NAME_MAPPINGS = {
@@ -21,4 +25,6 @@ NODE_DISPLAY_NAME_MAPPINGS = {
"TryOffRunNode": "Run TryOff Inference [ComfyUI-Flux-TryOff]",
"TryOffQuantizerNode": "TryOff Quantizer [ComfyUI-Flux-TryOff]",
"TryOffFluxFillPipelineNode": "FluxFill Pipeline Loader [ComfyUI-Flux-TryOff]",
"TryOnOffModelNode": "TryOn or TryOff Model Loader [ComfyUI-Flux-TryOff]",
"TryOffFluxFillPipelineNode2": "FluxFill Pipeline Loader [ComfyUI-Flux-TryOff]",
}
+28 -82
View File
@@ -279,18 +279,20 @@ class TryOnOffModelNode:
).to(device)
return (model,)
class FluxFillPipelineNode2:
@classmethod
def INPUT_TYPES(cls): # noqa: N802
return {
"required": {
"transformer": ("MODEL",),
"vae": ("MODEL",),
"text_encoder": ("MODEL",),
"tokenizer": ("TOKENIZER",),
"text_encoder_2": ("MODEL",),
"tokenizer_2": ("TOKENIZER",),
"device": (device_list,),
},
"optional": {
"transformers_config": ("transformers_config",),
"diffusers_config": ("diffusers_config",),
},
}
}
CATEGORY = "Models"
@@ -298,86 +300,29 @@ class FluxFillPipelineNode2:
FUNCTION = "load_pipeline"
def load_pipeline(
self, transformer, device, transformers_config=None, diffusers_config=None
self,
transformer,
vae,
text_encoder,
tokenizer,
text_encoder_2,
tokenizer_2,
device,
):
if transformers_config:
tokenizer = CLIPTokenizer.from_pretrained(
"openai/clip-vit-large-patch14",
cache_dir=encoders_dir,
torch_dtype=dtype,
quantization_config=transformers_config,
)
tokenizer_2 = T5TokenizerFast.from_pretrained(
"XLabs-AI/xflux_text_encoders",
cache_dir=encoders_dir,
torch_dtype=dtype,
quantization_config=transformers_config,
)
text_encoder = CLIPTextModel.from_pretrained(
"openai/clip-vit-large-patch14",
cache_dir=encoders_dir,
torch_dtype=dtype,
quantization_config=transformers_config,
)
text_encoder_2 = T5EncoderModel.from_pretrained(
"XLabs-AI/xflux_text_encoders",
cache_dir=encoders_dir,
torch_dtype=dtype,
quantization_config=transformers_config,
)
else:
tokenizer = CLIPTokenizer.from_pretrained(
"openai/clip-vit-large-patch14",
cache_dir=encoders_dir,
torch_dtype=dtype,
)
tokenizer_2 = T5TokenizerFast.from_pretrained(
"XLabs-AI/xflux_text_encoders",
cache_dir=encoders_dir,
torch_dtype=dtype,
)
text_encoder = CLIPTextModel.from_pretrained(
"openai/clip-vit-large-patch14",
cache_dir=encoders_dir,
torch_dtype=dtype,
)
text_encoder_2 = T5EncoderModel.from_pretrained(
"XLabs-AI/xflux_text_encoders",
cache_dir=encoders_dir,
torch_dtype=dtype,
)
# Initialize scheduler independently (assuming this is still needed)
scheduler = FlowMatchEulerDiscreteScheduler()
if diffusers_config:
vae = AutoencoderTiny.from_pretrained(
"madebyollin/taef1",
cache_dir=vae_dir,
torch_dtype=dtype,
quantization_config=diffusers_config,
)
pipeline = FluxFillPipeline(
scheduler=scheduler,
vae=vae,
text_encoder=text_encoder,
tokenizer=tokenizer,
text_encoder_2=text_encoder_2,
tokenizer_2=tokenizer_2,
transformer=transformer
)
else:
vae = AutoencoderTiny.from_pretrained(
"madebyollin/taef1", cache_dir=vae_dir, torch_dtype=dtype
)
pipeline = FluxFillPipeline(
scheduler=scheduler,
vae=vae,
text_encoder=text_encoder,
tokenizer=tokenizer,
text_encoder_2=text_encoder_2,
tokenizer_2=tokenizer_2,
transformer=transformer,
)
# Construct the FluxFillPipeline using the supplied components
pipeline = FluxFillPipeline(
scheduler=scheduler,
vae=vae,
text_encoder=text_encoder,
tokenizer=tokenizer,
text_encoder_2=text_encoder_2,
tokenizer_2=tokenizer_2,
transformer=transformer,
)
pipeline.to(device)
pipeline.enable_model_cpu_offload()
pipeline.transformer.to(dtype)
@@ -385,6 +330,7 @@ class FluxFillPipelineNode2:
return (pipeline,)
# TryOffRun Node
class TryOffRunNode:
@classmethod