Files
CalamitousFelicitousness 4d6f2b65c8 chore(settings): remove the bmm attention methods
Batch matrix-matrix and Dynamic Attention BMM applied a legacy Attention
processor to pipe.unet, which a diffusion transformer does not have, so
they served unet models alone and said nothing elsewhere. The choices, the
processor and its slice helper are removed, an unrecognized method now
warns rather than selecting nothing, and a stored value is rewritten to
Scaled-Dot-Product on load.
2026-08-24 19:59:41 +01:00

192 lines
7.7 KiB
Python

import logging
import diffusers
class OnlinePipeline(diffusers.DiffusionPipeline):
pass
logging_level = logging.getLogger("diffusers").level
logging.getLogger("diffusers").setLevel(logging.ERROR)
logging.getLogger("diffusers.modular_pipelines").setLevel(logging.ERROR)
pipelines = {
'Autodetect': None,
'AutoPipeline': diffusers.AutoPipelineForText2Image,
'Diffusion': diffusers.DiffusionPipeline,
# standard diffusers pipelines
'Stable Diffusion': getattr(diffusers, 'StableDiffusionPipeline', None),
'Stable Diffusion Inpaint': getattr(diffusers, 'StableDiffusionInpaintPipeline', None),
'Stable Diffusion Instruct': getattr(diffusers, 'StableDiffusionInstructPix2PixPipeline', None),
'Stable Diffusion 1.5': getattr(diffusers, 'StableDiffusionPipeline', None),
'Stable Diffusion 2': getattr(diffusers, 'StableDiffusionPipeline', None),
'Stable Diffusion 2.x': getattr(diffusers, 'StableDiffusionPipeline', None),
'Stable Diffusion Upscale': getattr(diffusers, 'StableDiffusionUpscalePipeline', None),
'Stable Diffusion XL': getattr(diffusers, 'StableDiffusionXLPipeline', None),
'Stable Diffusion XL Inpaint': getattr(diffusers, 'StableDiffusionXLInpaintPipeline', None),
'Stable Diffusion XL Instruct': getattr(diffusers, 'StableDiffusionXLInstructPix2PixPipeline', None),
'Stable Diffusion XL Refiner': getattr(diffusers, 'StableDiffusionXLImg2ImgPipeline', None),
'Stable Cascade': getattr(diffusers, 'StableCascadeCombinedPipeline', None),
'Stable Diffusion 3': getattr(diffusers, 'StableDiffusion3Pipeline', None),
'Latent Consistency Model': getattr(diffusers, 'LatentConsistencyModelPipeline', None),
'AuraFlow': getattr(diffusers, 'AuraFlowPipeline', None),
'Chroma': getattr(diffusers, 'ChromaPipeline', None),
'ChronoEdit': getattr(diffusers, 'ChronoEditPipeline', None),
'CogView3': getattr(diffusers, 'CogView3PlusPipeline', None),
'CogView4': getattr(diffusers, 'CogView4Pipeline', None),
'Cosmos': getattr(diffusers, 'Cosmos2TextToImagePipeline', None),
'DeepFloydIF': getattr(diffusers, 'IFPipeline', None),
'ERNIEImage': getattr(diffusers, 'ErnieImagePipeline', None),
'FLUX': getattr(diffusers, 'FluxPipeline', None),
'FLUX2Klein': getattr(diffusers, 'Flux2KleinPipeline', None),
'FLUX2': getattr(diffusers, 'Flux2Pipeline', None),
'GLMImage': getattr(diffusers, 'GlmImagePipeline', None),
'HiDream': getattr(diffusers, 'HiDreamImagePipeline', None),
'HunyuanDiT': getattr(diffusers, 'HunyuanDiTPipeline', None),
'HunyuanImage': getattr(diffusers, 'HunyuanImagePipeline', None),
'JoyEdit': getattr(diffusers, 'JoyImageEditPipeline', None),
'Kandinsky21': getattr(diffusers, 'KandinskyCombinedPipeline', None),
'Kandinsky22': getattr(diffusers, 'KandinskyV22CombinedPipeline', None),
'Kandinsky30': getattr(diffusers, 'Kandinsky3Pipeline', None),
'Kandinsky50': getattr(diffusers, 'Kandinsky5T2IPipeline', None),
'Kolors': getattr(diffusers, 'KolorsPipeline', None),
'LongCat': getattr(diffusers, 'LongCatImagePipeline', None),
'Lumina2': getattr(diffusers, 'Lumina2Pipeline', None),
'LuminaNext': getattr(diffusers, 'LuminaText2ImgPipeline', None),
'NucleusImage': getattr(diffusers, 'NucleusMoEImagePipeline', None),
'OvisImage': getattr(diffusers, 'OvisImagePipeline', None),
'OmniGen': getattr(diffusers, 'OmniGenPipeline', None),
'PixArtAlpha': getattr(diffusers, 'PixArtAlphaPipeline', None),
'PixArtSigma': getattr(diffusers, 'PixArtSigmaPipeline', None),
'PRXPixel': getattr(diffusers, 'PRXPixelPipeline', None),
'MiniMaxH3': getattr(diffusers, 'MiniMaxH3ModularPipeline', None),
'Qwen': getattr(diffusers, 'QwenImagePipeline', None),
'Sana': getattr(diffusers, 'SanaPipeline', None),
'WanAI': getattr(diffusers, 'WanPipeline', None),
'ZImage': getattr(diffusers, 'ZImagePipeline', None),
# pipelines with custom code that is fetched online
'InstaFlow': OnlinePipeline,
'Anima': OnlinePipeline,
# sdnext custom pipelines are dynamically imported and redefined later
'Bria': None,
'FLite': None,
'FLEX': None,
'HiDreamO1': None,
'HunyuanImage3': None,
'Ideogram4': None,
'Krea2': None,
'Lens': None,
'LuminaDiMOO': None,
'Meissonic': None,
'OmniGen2': None,
'SDXS': None,
'SegMoE': None,
'Step1XEdit': None,
'UltraFlux': None,
'VIBE': None,
'XOmni': None,
'ZetaChroma': None,
'Boogu': None,
'SeFi': None,
'MageFlow': None,
}
logging.getLogger("diffusers").setLevel(logging_level)
logging.getLogger("diffusers.modular_pipelines").setLevel(logging_level)
def postprocessing_scripts():
import modules.scripts_manager
return modules.scripts_manager.scripts_postproc.scripts
def sd_vae_items():
import modules.sd_vae
return ["Automatic", "Default"] + list(modules.sd_vae.vae_dict)
def sd_taesd_items():
import modules.vae.sd_vae_taesd
return list(modules.vae.sd_vae_taesd.TAESD_MODELS.keys()) + list(modules.vae.sd_vae_taesd.CQYAN_MODELS.keys())
def refresh_vae_list():
import modules.sd_vae
modules.sd_vae.refresh_vae_list()
def sd_unet_items():
import modules.sd_unet
return ['Default'] + list(modules.sd_unet.unet_dict)
def refresh_unet_list():
import modules.sd_unet
modules.sd_unet.refresh_unet_list()
def sd_te_items():
import modules.model_te
predefined = ['Default']
return predefined + list(modules.model_te.te_dict)
def refresh_te_list():
import modules.model_te
modules.model_te.refresh_te_list()
def list_crossattention():
return [
"Disabled",
"Scaled-Dot-Product",
"xFormers",
]
def get_pipelines():
from modules.logger import log
"""
if hasattr(diffusers, 'OnnxStableDiffusionPipeline') and 'ONNX Stable Diffusion' not in list(pipelines):
try:
from modules.onnx_impl import initialize_onnx
initialize_onnx()
onnx_pipelines = {
'ONNX Stable Diffusion': getattr(diffusers, 'OnnxStableDiffusionPipeline', None),
'ONNX Stable Diffusion Img2Img': getattr(diffusers, 'OnnxStableDiffusionImg2ImgPipeline', None),
'ONNX Stable Diffusion Inpaint': getattr(diffusers, 'OnnxStableDiffusionInpaintPipeline', None),
'ONNX Stable Diffusion Upscale': getattr(diffusers, 'OnnxStableDiffusionUpscalePipeline', None),
}
except Exception as e:
log.error(f'ONNX initialization error: {e}')
onnx_pipelines = {}
pipelines.update(onnx_pipelines)
"""
stats_builtin = 0
stats_custom = 0
for k, v in pipelines.copy().items():
if k != 'Autodetect' and v is None:
stats_custom += 1
pipelines[k] = diffusers.DiffusionPipeline
else:
stats_builtin += 1
if stats_custom > 0:
log.debug(f'Pipelines init: diffusers={stats_builtin} custom={stats_custom}')
return pipelines
def get_repo(model):
if model == 'StableDiffusionPipeline' or model == 'Stable Diffusion 1.5':
return 'stable-diffusion-v1-5/stable-diffusion-v1-5'
elif model == 'StableDiffusionXLPipeline' or model == 'Stable Diffusion XL':
return 'stabilityai/stable-diffusion-xl-base-1.0'
elif model == 'StableDiffusion3Pipeline' or model == 'Stable Diffusion 3':
return 'stabilityai/stable-diffusion-3.5-medium'
else:
return None
sdnq_quant_modes = ["int8", "uint8", "int6", "uint6", "uint5", "uint4", "uint3", "uint2", "float8_e4m3fn", "float8_e3m4fn", "float6_e3m2fn", "float5_e2m2fn", "float4_e2m1fn", "float3_e1m1fn", "float2_e1m0fn", "int16", "uint16", "float16"]
sdnq_matmul_modes = ["disabled", "enabled", "int8", "uint8", "float8_e4m3fn", "float16"]