mirror of
https://github.com/vladmandic/automatic
synced 2026-08-25 22:20:46 +02:00
+4
-7
@@ -1,12 +1,12 @@
|
||||
# Change Log for SD.Next
|
||||
|
||||
## Update for 2026-05-11
|
||||
## Update for 2026-05-10
|
||||
|
||||
### Highlights for 2026-05-11
|
||||
### Highlights for 2026-05-10
|
||||
|
||||
*What's New?*
|
||||
- Image editing models now can work with multiple image inputs!
|
||||
- Five new base models: *HiDream-O1 Image*, *JoyAI Image Edit*, *Step1X-Edit*, *VIBE Image Edit* and *UltraFlux*
|
||||
- New models: *HiDream-O1 Image*, *JoyAI Image Edit*, *Step1X-Edit*, *VIBE Image Edit* and *UltraFlux*
|
||||
- Enhanced capabilities for *Anima*, *Ernie-Image*, *LTX*, *Flux.2* and *Chroma* models
|
||||
- UI improvements accross the board: *Main panels*, *Gallery*, *Kanvas*, and more...
|
||||
|
||||
@@ -14,7 +14,7 @@ For full details, see [ChangeLog](https://github.com/vladmandic/automatic/blob/m
|
||||
|
||||
[ReadMe](https://github.com/vladmandic/automatic/blob/master/README.md) | [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) | [Docs](https://vladmandic.github.io/sdnext-docs/) | [WiKi](https://github.com/vladmandic/automatic/wiki) | [Discord](https://discord.com/invite/sd-next-federal-batch-inspectors-1101998836328697867) | [Sponsor](https://github.com/sponsors/vladmandic)
|
||||
|
||||
### Details for 2026-05-11
|
||||
### Details for 2026-05-10
|
||||
|
||||
- **Models**
|
||||
- [HiDream-O1-Image](https://huggingface.co/HiDream-ai/HiDream-O1-Image) pixel-level unified transformer model support
|
||||
@@ -22,7 +22,6 @@ For full details, see [ChangeLog](https://github.com/vladmandic/automatic/blob/m
|
||||
includes both **HiDream-O1-Image** *(base)* and **HiDream-O1-Image-Dev** *(distilled*)* variants
|
||||
includes *T2I* and *I2I edit* capabilities and resolutions up to 2048px
|
||||
*note*: use steps:50 for base and steps:28 for dev variants
|
||||
*note*: when using quantization, make sure that quantized matmul is disabled, otherwise quality degrades significantly
|
||||
- [JoyAI Image Edit](https://huggingface.co/jdopensource/JoyAI-Image-Edit-Diffusers) image-editing model support
|
||||
includes multimodal conditioning using *Qwen3-VL* with a dedicated *JoyImageEdit* diffusion transformer
|
||||
*note* this is a large model at 50GB so use of agressive quantization is recommended
|
||||
@@ -55,7 +54,6 @@ For full details, see [ChangeLog](https://github.com/vladmandic/automatic/blob/m
|
||||
- custom **VAE** loader for all pipelines
|
||||
*note*: vae still needs to be compatible with the model
|
||||
- **CivitAI** downloaded thumbnails now include metadata
|
||||
- **Installer** support for `git+http` style references
|
||||
- **UI**
|
||||
- **Networks** using networks to load model or auto-download a reference model will now be reflected in the UI
|
||||
- ability to manually reorient *input/output* panels
|
||||
@@ -81,7 +79,6 @@ For full details, see [ChangeLog](https://github.com/vladmandic/automatic/blob/m
|
||||
- remove obsolete `lora` stepwise and functional code, thanks @awsr
|
||||
- interrupt model loading between components
|
||||
- patch `rich` for cleaner exception logging
|
||||
- stricter `ruff` linting
|
||||
- **Fixes**
|
||||
- add missing `jquery` and `sparkline` js scripts
|
||||
- save handle already decoded images
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
get list of all samplers and details of current sampler
|
||||
"""
|
||||
|
||||
import sys
|
||||
import logging
|
||||
import urllib3
|
||||
import requests
|
||||
|
||||
@@ -361,7 +361,7 @@ def get_deletefile(file: str):
|
||||
return {"deleted": f"{file}"}
|
||||
except Exception as e:
|
||||
log.error(f'Delete: file="{file}" error: {e}')
|
||||
raise HTTPException(status_code=500, detail=f"error deleting file {file}: {e!s}") from e
|
||||
raise HTTPException(status_code=500, detail=f"error deleting file {file}: {str(e)}") from e
|
||||
|
||||
def get_deleteimage(file: str):
|
||||
import os
|
||||
@@ -383,7 +383,7 @@ def get_deleteimage(file: str):
|
||||
return {"deleted": f"{file}"}
|
||||
except Exception as e:
|
||||
log.error(f'Delete: file="{file}" error: {e}')
|
||||
raise HTTPException(status_code=500, detail=f"error deleting file {file}: {e!s}") from e
|
||||
raise HTTPException(status_code=500, detail=f"error deleting file {file}: {str(e)}") from e
|
||||
|
||||
def get_pnginfo(file: str):
|
||||
"""Extract generation parameters from a image file path. Returns raw info string and parsed parameters dict."""
|
||||
|
||||
@@ -44,7 +44,7 @@ def setup_middleware(app: FastAPI, cmd_opts):
|
||||
client = req.scope.get('client', ('0:0.0.0', 0))[0]
|
||||
token = req.cookies.get("access-token") or req.cookies.get("access-token-unsecure")
|
||||
validate_request(client, endpoint)
|
||||
if cmd_opts.api_log:
|
||||
if (cmd_opts.api_log):
|
||||
if not validate_log(client, endpoint):
|
||||
return res
|
||||
log.info('API user={user} code={code} {prot}/{ver} {method} {endpoint} {client} {duration}'.format( # pylint: disable=consider-using-f-string, logging-format-interpolation
|
||||
|
||||
@@ -9,7 +9,6 @@ request_cost = {
|
||||
"/run/predict": 0,
|
||||
"/sdapi/v1/browser/thumb": 0,
|
||||
"/sdapi/v1/network/thumb": 0,
|
||||
"/sdapi/v1/gpu-smi": 0,
|
||||
"/sdapi/v1/txt2img": 5,
|
||||
"/sdapi/v1/img2img": 5,
|
||||
"/sdapi/v1/control": 5,
|
||||
|
||||
@@ -65,7 +65,7 @@ def load(repo: str | None = None):
|
||||
if llava_model is None or opts.repo != repo:
|
||||
opts.repo = repo
|
||||
llava_model = None
|
||||
log.info(f'Caption: type=vlm model="JoyCaption" {opts!s}')
|
||||
log.info(f'Caption: type=vlm model="JoyCaption" {str(opts)}')
|
||||
processor = AutoProcessor.from_pretrained(repo, max_pixels=1024*1024, cache_dir=shared.opts.hfcache_dir)
|
||||
quant_args = model_quant.create_config(module='LLM')
|
||||
llava_model = LlavaForConditionalGeneration.from_pretrained(
|
||||
|
||||
@@ -402,7 +402,7 @@ def predict(question: str, image: Image.Image, repo: str, model_name: str | None
|
||||
except Exception as e:
|
||||
from modules import errors
|
||||
errors.display(e, 'Moondream3')
|
||||
return f"Error: {e!s}"
|
||||
return f"Error: {str(e)}"
|
||||
finally:
|
||||
offload_aux('moondream3')
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ from modules import shared, devices, errors, model_quant, sd_models, sd_models_c
|
||||
from modules.sd_offload_aux import register_aux, deregister_aux, move_aux_to_gpu, offload_aux
|
||||
from modules.logger import log, console
|
||||
from modules.caption import vqa_detection
|
||||
from modules.caption.models_def import vlm_models, vlm_prefill, vlm_prompt_mapping, vlm_prompt_placeholders, vlm_prompts_common, vlm_prompts_florence, vlm_prompts_moondream, vlm_prompts_moondream2, vlm_prompts_promptgen, get_vlm_repo
|
||||
from modules.caption.models_def import vlm_models, vlm_system, vlm_default, vlm_prefill, vlm_prompts, vlm_prompt_mapping, vlm_prompt_placeholders, vlm_prompts_common, vlm_prompts_florence, vlm_prompts_moondream, vlm_prompts_moondream2, vlm_prompts_promptgen, get_vlm_repo
|
||||
|
||||
# Debug logging - function-based to avoid circular import
|
||||
debug_enabled = os.environ.get('SD_CAPTION_DEBUG', None) is not None
|
||||
|
||||
@@ -191,7 +191,7 @@ class CogView4CFGZeroPipeline(DiffusionPipeline, CogView4LoraLoaderMixin):
|
||||
|
||||
def _get_glm_embeds(
|
||||
self,
|
||||
prompt: Union[str, List[str]] | None = None,
|
||||
prompt: Union[str, List[str]] = None,
|
||||
max_sequence_length: int = 1024,
|
||||
device: Optional[torch.device] = None,
|
||||
dtype: Optional[torch.dtype] = None,
|
||||
|
||||
@@ -217,7 +217,7 @@ class FluxCFGZeroPipeline(
|
||||
|
||||
def _get_t5_prompt_embeds(
|
||||
self,
|
||||
prompt: Union[str, List[str]] | None = None,
|
||||
prompt: Union[str, List[str]] = None,
|
||||
num_images_per_prompt: int = 1,
|
||||
max_sequence_length: int = 512,
|
||||
device: Optional[torch.device] = None,
|
||||
@@ -535,7 +535,7 @@ class FluxCFGZeroPipeline(
|
||||
|
||||
@staticmethod
|
||||
def _unpack_latents(latents, height, width, vae_scale_factor):
|
||||
batch_size, _num_patches, channels = latents.shape
|
||||
batch_size, num_patches, channels = latents.shape
|
||||
|
||||
# VAE applies 8x compression on images but we must also account for packing which requires
|
||||
# latent height and width to be divisible by 2.
|
||||
@@ -637,9 +637,9 @@ class FluxCFGZeroPipeline(
|
||||
@replace_example_docstring(EXAMPLE_DOC_STRING)
|
||||
def __call__(
|
||||
self,
|
||||
prompt: Union[str, List[str]] | None = None,
|
||||
prompt: Union[str, List[str]] = None,
|
||||
prompt_2: Optional[Union[str, List[str]]] = None,
|
||||
negative_prompt: Union[str, List[str]] | None = None,
|
||||
negative_prompt: Union[str, List[str]] = None,
|
||||
negative_prompt_2: Optional[Union[str, List[str]]] = None,
|
||||
true_cfg_scale: float = 1.0,
|
||||
height: Optional[int] = None,
|
||||
|
||||
@@ -211,7 +211,7 @@ class HiDreamImageCFGZeroPipeline(DiffusionPipeline, HiDreamImageLoraLoaderMixin
|
||||
|
||||
def _get_t5_prompt_embeds(
|
||||
self,
|
||||
prompt: Union[str, List[str]] | None = None,
|
||||
prompt: Union[str, List[str]] = None,
|
||||
max_sequence_length: int = 128,
|
||||
device: Optional[torch.device] = None,
|
||||
dtype: Optional[torch.dtype] = None,
|
||||
@@ -285,7 +285,7 @@ class HiDreamImageCFGZeroPipeline(DiffusionPipeline, HiDreamImageLoraLoaderMixin
|
||||
|
||||
def _get_llama3_prompt_embeds(
|
||||
self,
|
||||
prompt: Union[str, List[str]] | None = None,
|
||||
prompt: Union[str, List[str]] = None,
|
||||
max_sequence_length: int = 128,
|
||||
device: Optional[torch.device] = None,
|
||||
dtype: Optional[torch.dtype] = None,
|
||||
@@ -545,7 +545,7 @@ class HiDreamImageCFGZeroPipeline(DiffusionPipeline, HiDreamImageLoraLoaderMixin
|
||||
@torch.no_grad()
|
||||
def __call__(
|
||||
self,
|
||||
prompt: Union[str, List[str]] | None = None,
|
||||
prompt: Union[str, List[str]] = None,
|
||||
prompt_2: Optional[Union[str, List[str]]] = None,
|
||||
prompt_3: Optional[Union[str, List[str]]] = None,
|
||||
prompt_4: Optional[Union[str, List[str]]] = None,
|
||||
|
||||
@@ -317,7 +317,7 @@ class HunyuanVideoCFGZeroPipeline(DiffusionPipeline, HunyuanVideoLoraLoaderMixin
|
||||
def encode_prompt(
|
||||
self,
|
||||
prompt: Union[str, List[str]],
|
||||
prompt_2: Union[str, List[str]] | None = None,
|
||||
prompt_2: Union[str, List[str]] = None,
|
||||
prompt_template: Dict[str, Any] = DEFAULT_PROMPT_TEMPLATE,
|
||||
num_videos_per_prompt: int = 1,
|
||||
prompt_embeds: Optional[torch.Tensor] = None,
|
||||
@@ -481,15 +481,15 @@ class HunyuanVideoCFGZeroPipeline(DiffusionPipeline, HunyuanVideoLoraLoaderMixin
|
||||
@replace_example_docstring(EXAMPLE_DOC_STRING)
|
||||
def __call__(
|
||||
self,
|
||||
prompt: Union[str, List[str]] | None = None,
|
||||
prompt_2: Union[str, List[str]] | None = None,
|
||||
negative_prompt: Union[str, List[str]] | None = None,
|
||||
negative_prompt_2: Union[str, List[str]] | None = None,
|
||||
prompt: Union[str, List[str]] = None,
|
||||
prompt_2: Union[str, List[str]] = None,
|
||||
negative_prompt: Union[str, List[str]] = None,
|
||||
negative_prompt_2: Union[str, List[str]] = None,
|
||||
height: int = 720,
|
||||
width: int = 1280,
|
||||
num_frames: int = 129,
|
||||
num_inference_steps: int = 50,
|
||||
sigmas: List[float] | None = None,
|
||||
sigmas: List[float] = None,
|
||||
true_cfg_scale: float = 1.0,
|
||||
guidance_scale: float = 6.0,
|
||||
num_videos_per_prompt: Optional[int] = 1,
|
||||
|
||||
@@ -246,7 +246,7 @@ class StableDiffusion3CFGZeroPipeline(DiffusionPipeline, SD3LoraLoaderMixin, Fro
|
||||
|
||||
def _get_t5_prompt_embeds(
|
||||
self,
|
||||
prompt: Union[str, List[str]] | None = None,
|
||||
prompt: Union[str, List[str]] = None,
|
||||
num_images_per_prompt: int = 1,
|
||||
max_sequence_length: int = 256,
|
||||
device: Optional[torch.device] = None,
|
||||
@@ -786,7 +786,7 @@ class StableDiffusion3CFGZeroPipeline(DiffusionPipeline, SD3LoraLoaderMixin, Fro
|
||||
@replace_example_docstring(EXAMPLE_DOC_STRING)
|
||||
def __call__(
|
||||
self,
|
||||
prompt: Union[str, List[str]] | None = None,
|
||||
prompt: Union[str, List[str]] = None,
|
||||
prompt_2: Optional[Union[str, List[str]]] = None,
|
||||
prompt_3: Optional[Union[str, List[str]]] = None,
|
||||
height: Optional[int] = None,
|
||||
@@ -813,7 +813,7 @@ class StableDiffusion3CFGZeroPipeline(DiffusionPipeline, SD3LoraLoaderMixin, Fro
|
||||
callback_on_step_end: Optional[Callable[[int, int, Dict], None]] = None,
|
||||
callback_on_step_end_tensor_inputs: List[str] = ["latents"],
|
||||
max_sequence_length: int = 256,
|
||||
skip_guidance_layers: List[int] | None = None,
|
||||
skip_guidance_layers: List[int] = None,
|
||||
skip_layer_guidance_scale: float = 2.8,
|
||||
skip_layer_guidance_stop: float = 0.2,
|
||||
skip_layer_guidance_start: float = 0.01,
|
||||
|
||||
@@ -153,7 +153,7 @@ class WanCFGZeroPipeline(DiffusionPipeline, WanLoraLoaderMixin):
|
||||
|
||||
def _get_t5_prompt_embeds(
|
||||
self,
|
||||
prompt: Union[str, List[str]] | None = None,
|
||||
prompt: Union[str, List[str]] = None,
|
||||
num_videos_per_prompt: int = 1,
|
||||
max_sequence_length: int = 226,
|
||||
device: Optional[torch.device] = None,
|
||||
@@ -374,8 +374,8 @@ class WanCFGZeroPipeline(DiffusionPipeline, WanLoraLoaderMixin):
|
||||
@replace_example_docstring(EXAMPLE_DOC_STRING)
|
||||
def __call__(
|
||||
self,
|
||||
prompt: Union[str, List[str]] | None = None,
|
||||
negative_prompt: Union[str, List[str]] | None = None,
|
||||
prompt: Union[str, List[str]] = None,
|
||||
negative_prompt: Union[str, List[str]] = None,
|
||||
height: int = 480,
|
||||
width: int = 832,
|
||||
num_frames: int = 81,
|
||||
|
||||
@@ -93,7 +93,7 @@ def civit_update_metadata(raw: bool = False):
|
||||
model.latest_name = f.get('name', '')
|
||||
if model.vername == model.latest:
|
||||
model.status = 'Latest version'
|
||||
elif any(map(lambda v: v in model.latest_hashes, all_hashes)): # pylint: disable=cell-var-from-loop
|
||||
elif any(map(lambda v: v in model.latest_hashes, all_hashes)): # pylint: disable=cell-var-from-loop # noqa: C417
|
||||
model.status = 'Update downloaded'
|
||||
else:
|
||||
model.status = 'Update available'
|
||||
|
||||
@@ -7,7 +7,7 @@ from modules.control.util import HWC3, resize_image
|
||||
class CannyDetector:
|
||||
def __call__(self, input_image=None, low_threshold=100, high_threshold=200, detect_resolution=512, image_resolution=512, output_type=None, **kwargs):
|
||||
if "img" in kwargs:
|
||||
warnings.warn("img is deprecated, please use `input_image=...` instead.", DeprecationWarning, stacklevel=2)
|
||||
warnings.warn("img is deprecated, please use `input_image=...` instead.", DeprecationWarning)
|
||||
input_image = kwargs.pop("img")
|
||||
if input_image is None:
|
||||
raise ValueError("input_image must be defined.")
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
import random
|
||||
from PIL import Image, ImageOps, ImageFilter
|
||||
import torch
|
||||
from torchvision import transforms
|
||||
import torch.nn.functional as F
|
||||
|
||||
import numpy as np
|
||||
|
||||
@@ -16,7 +16,7 @@ class DepthProDetector:
|
||||
self.processor = processor
|
||||
|
||||
@classmethod
|
||||
def from_pretrained(cls, pretrained_model_or_path: str = "apple/DepthPro-hf", cache_dir: str | None = None, local_files_only = False) -> "DepthProDetector":
|
||||
def from_pretrained(cls, pretrained_model_or_path: str = "apple/DepthPro-hf", cache_dir: str = None, local_files_only = False) -> "DepthProDetector":
|
||||
from transformers import AutoImageProcessor, DepthProForDepthEstimation
|
||||
|
||||
processor = AutoImageProcessor.from_pretrained(pretrained_model_or_path, cache_dir=cache_dir, local_files_only=local_files_only)
|
||||
|
||||
@@ -33,7 +33,7 @@ class EdgeDetector:
|
||||
params.PFmode = pf
|
||||
ed.setParams(params)
|
||||
if "img" in kwargs:
|
||||
warnings.warn("img is deprecated, please use `input_image=...` instead.", DeprecationWarning, stacklevel=2)
|
||||
warnings.warn("img is deprecated, please use `input_image=...` instead.", DeprecationWarning)
|
||||
input_image = kwargs.pop("img")
|
||||
if input_image is None:
|
||||
raise ValueError("input_image must be defined.")
|
||||
|
||||
@@ -5,7 +5,7 @@ import torch.nn as nn
|
||||
try:
|
||||
from urllib import urlretrieve
|
||||
except ImportError:
|
||||
pass
|
||||
from urllib.request import urlretrieve
|
||||
|
||||
__all__ = ['resnext101_32x8d']
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import torch
|
||||
import torch.nn as nn
|
||||
|
||||
from . import network_auxi as network
|
||||
|
||||
@@ -384,7 +384,7 @@ class SenceUnderstand(nn.Module):
|
||||
self.initial_params()
|
||||
|
||||
def forward(self, x):
|
||||
n, _c, h, w = x.size()
|
||||
n, c, h, w = x.size()
|
||||
x = self.conv1(x)
|
||||
x = self.pool(x)
|
||||
x = x.view(n, -1)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import argparse
|
||||
import os
|
||||
from ...pix2pix.util import util # noqa: TID252
|
||||
from ...pix2pix.util import util
|
||||
# import torch
|
||||
from ...pix2pix import models # noqa: TID252
|
||||
from ...pix2pix import models
|
||||
# import pix2pix.data
|
||||
import numpy as np
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@ class MarigoldPipeline(DiffusionPipeline):
|
||||
batch_size: int = 0,
|
||||
color_map: str = "Spectral",
|
||||
show_progress_bar: bool = True,
|
||||
ensemble_kwargs: Dict | None = None,
|
||||
ensemble_kwargs: Dict = None,
|
||||
) -> MarigoldDepthOutput:
|
||||
"""
|
||||
Function invoked when calling the pipeline.
|
||||
|
||||
@@ -43,7 +43,7 @@ def ensemble_depths(
|
||||
max_iter: int = 2,
|
||||
tol: float = 1e-3,
|
||||
reduction: str = "median",
|
||||
max_res: int | None = None,
|
||||
max_res: int = None,
|
||||
):
|
||||
"""
|
||||
To ensemble multiple affine-invariant depth images (up to scale and shift),
|
||||
|
||||
@@ -28,6 +28,6 @@ def seed_all(seed: int = 0):
|
||||
Set random seeds of all components.
|
||||
"""
|
||||
random.seed(seed)
|
||||
np.random.seed(seed)
|
||||
np.random.seed(seed) # noqa
|
||||
torch.manual_seed(seed)
|
||||
torch.cuda.manual_seed_all(seed)
|
||||
|
||||
@@ -16,6 +16,7 @@ def check_dependencies():
|
||||
if not installed(pkg[1], quiet=True):
|
||||
install(pkg[0], pkg[1], ignore=False)
|
||||
try:
|
||||
import mediapipe as mp # pylint: disable=unused-import
|
||||
checked_ok = True
|
||||
return True
|
||||
except Exception as e:
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
import cv2
|
||||
import os
|
||||
import torch
|
||||
import torch.nn as nn
|
||||
from torchvision.transforms import Compose
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ from .vit import (
|
||||
_make_pretrained_vitb_rn50_384,
|
||||
_make_pretrained_vitl16_384,
|
||||
_make_pretrained_vitb16_384,
|
||||
forward_vit,
|
||||
)
|
||||
|
||||
def _make_encoder(backbone, features, use_pretrained, groups=1, expand=False, exportable=True, hooks=None, use_vit_only=False, use_readout="ignore",):
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import torch
|
||||
import torch.nn as nn
|
||||
import torch.nn.functional as F
|
||||
|
||||
from .base_model import BaseModel
|
||||
from .blocks import (
|
||||
FeatureFusionBlock,
|
||||
FeatureFusionBlock_custom,
|
||||
Interpolate,
|
||||
_make_encoder,
|
||||
|
||||
@@ -6,7 +6,7 @@ import torch
|
||||
import torch.nn as nn
|
||||
|
||||
from .base_model import BaseModel
|
||||
from .blocks import FeatureFusionBlock_custom, Interpolate, _make_encoder
|
||||
from .blocks import FeatureFusionBlock, FeatureFusionBlock_custom, Interpolate, _make_encoder
|
||||
|
||||
|
||||
class MidasNet_small(BaseModel):
|
||||
|
||||
@@ -54,7 +54,7 @@ class Transpose(nn.Module):
|
||||
|
||||
|
||||
def forward_vit(pretrained, x):
|
||||
_b, _c, h, w = x.shape
|
||||
b, c, h, w = x.shape
|
||||
|
||||
pretrained.model.forward_flex(x)
|
||||
|
||||
@@ -115,7 +115,7 @@ def _resize_pos_embed(self, posemb, gs_h, gs_w):
|
||||
|
||||
|
||||
def forward_flex(self, x):
|
||||
_b, _c, h, w = x.shape
|
||||
b, c, h, w = x.shape
|
||||
|
||||
pos_embed = self._resize_pos_embed(
|
||||
self.pos_embed, h // self.patch_size[1], w // self.patch_size[0]
|
||||
|
||||
@@ -75,7 +75,7 @@ def write_pfm(path, image, scale=1):
|
||||
if len(image.shape) == 3 and image.shape[2] == 3: # color image
|
||||
color = True
|
||||
elif (
|
||||
len(image.shape) == 2 or (len(image.shape) == 3 and image.shape[2] == 1)
|
||||
len(image.shape) == 2 or len(image.shape) == 3 and image.shape[2] == 1
|
||||
): # greyscale
|
||||
color = False
|
||||
else:
|
||||
@@ -86,7 +86,7 @@ def write_pfm(path, image, scale=1):
|
||||
|
||||
endian = image.dtype.byteorder
|
||||
|
||||
if endian == "<" or (endian == "=" and sys.byteorder == "little"):
|
||||
if endian == "<" or endian == "=" and sys.byteorder == "little":
|
||||
scale = -scale
|
||||
|
||||
file.write("%f\n".encode() % scale)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import os
|
||||
import sys
|
||||
import torch
|
||||
import torch.nn as nn
|
||||
import torch.utils.model_zoo as model_zoo
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import os
|
||||
import sys
|
||||
import torch
|
||||
import torch.nn as nn
|
||||
import torch.utils.model_zoo as model_zoo
|
||||
|
||||
@@ -9,6 +9,7 @@ Copyright 2021-present NAVER Corp.
|
||||
Apache License v2.0
|
||||
'''
|
||||
|
||||
import os
|
||||
import numpy as np
|
||||
import cv2
|
||||
import torch
|
||||
@@ -21,7 +22,7 @@ def deccode_output_score_and_ptss(tpMap, topk_n = 200, ksize = 5):
|
||||
center: tpMap[1, 0, :, :]
|
||||
displacement: tpMap[1, 1:5, :, :]
|
||||
'''
|
||||
b, _c, _h, w = tpMap.shape
|
||||
b, c, h, w = tpMap.shape
|
||||
assert b==1, 'only support bsize==1'
|
||||
displacement = tpMap[:, 1:5, :, :][0]
|
||||
center = tpMap[:, 0, :, :]
|
||||
@@ -470,9 +471,9 @@ def pred_squares(image,
|
||||
square[end_idx]
|
||||
|
||||
# check whether outside or inside
|
||||
_start_position, start_min, start_cover_param, start_peri_param = check_outside_inside(start_segments,
|
||||
start_position, start_min, start_cover_param, start_peri_param = check_outside_inside(start_segments,
|
||||
connect_idx)
|
||||
_end_position, end_min, end_cover_param, end_peri_param = check_outside_inside(end_segments, connect_idx)
|
||||
end_position, end_min, end_cover_param, end_peri_param = check_outside_inside(end_segments, connect_idx)
|
||||
|
||||
cover += dist_segments[connect_idx] + start_cover_param * start_min + end_cover_param * end_min
|
||||
perimeter += dist_segments[connect_idx] + start_peri_param * start_min + end_peri_param * end_min
|
||||
|
||||
@@ -194,14 +194,14 @@ class OpenposeDetector:
|
||||
def __call__(self, input_image, detect_resolution=512, image_resolution=512, include_body=True, include_hand=False, include_face=False, hand_and_face=None, output_type="pil", **kwargs):
|
||||
self.to(devices.device)
|
||||
if hand_and_face is not None:
|
||||
warnings.warn("hand_and_face is deprecated. Use include_hand and include_face instead.", DeprecationWarning, stacklevel=2)
|
||||
warnings.warn("hand_and_face is deprecated. Use include_hand and include_face instead.", DeprecationWarning)
|
||||
include_hand = hand_and_face
|
||||
include_face = hand_and_face
|
||||
if "return_pil" in kwargs:
|
||||
warnings.warn("return_pil is deprecated. Use output_type instead.", DeprecationWarning, stacklevel=2)
|
||||
warnings.warn("return_pil is deprecated. Use output_type instead.", DeprecationWarning)
|
||||
output_type = "pil" if kwargs["return_pil"] else "np"
|
||||
if type(output_type) is bool:
|
||||
warnings.warn("Passing `True` or `False` to `output_type` is deprecated and will raise an error in future versions", stacklevel=2)
|
||||
warnings.warn("Passing `True` or `False` to `output_type` is deprecated and will raise an error in future versions")
|
||||
if output_type:
|
||||
output_type = "pil"
|
||||
if not isinstance(input_image, np.ndarray):
|
||||
|
||||
@@ -328,7 +328,7 @@ class Face(object):
|
||||
|
||||
def __call__(self, face_img):
|
||||
device = next(iter(self.model.parameters())).device
|
||||
H, W, _C = face_img.shape
|
||||
H, W, C = face_img.shape
|
||||
|
||||
w_size = 384
|
||||
x_data = torch.from_numpy(util.smart_resize(face_img, (w_size, w_size))).permute([2, 0, 1]) / 256.0 - 0.5
|
||||
|
||||
@@ -32,7 +32,7 @@ class Hand(object):
|
||||
wsize = 128
|
||||
heatmap_avg = np.zeros((wsize, wsize, 22))
|
||||
|
||||
Hr, Wr, _Cr = oriImgRaw.shape
|
||||
Hr, Wr, Cr = oriImgRaw.shape
|
||||
|
||||
oriImg = cv2.GaussianBlur(oriImgRaw, (0, 0), 0.8)
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ class SamDetector:
|
||||
|
||||
def __call__(self, input_image: Union[np.ndarray, Image.Image]=None, detect_resolution=512, image_resolution=512, output_type="pil", **kwargs) -> Image.Image:
|
||||
if "image" in kwargs:
|
||||
warnings.warn("image is deprecated, please use `input_image=...` instead.", DeprecationWarning, stacklevel=2)
|
||||
warnings.warn("image is deprecated, please use `input_image=...` instead.", DeprecationWarning)
|
||||
input_image = kwargs.pop("image")
|
||||
if input_image is None:
|
||||
raise ValueError("input_image must be defined.")
|
||||
|
||||
@@ -25,8 +25,8 @@ class Sam(nn.Module):
|
||||
image_encoder: Union[ImageEncoderViT, TinyViT],
|
||||
prompt_encoder: PromptEncoder,
|
||||
mask_decoder: MaskDecoder,
|
||||
pixel_mean: List[float] | None = None,
|
||||
pixel_std: List[float] | None = None,
|
||||
pixel_mean: List[float] = None,
|
||||
pixel_std: List[float] = None,
|
||||
) -> None:
|
||||
"""
|
||||
SAM predicts object masks from an image and input prompts.
|
||||
|
||||
@@ -79,7 +79,7 @@ class TwoWayTransformer(nn.Module):
|
||||
torch.Tensor: the processed image_embedding
|
||||
"""
|
||||
# BxCxHxW -> BxHWxC == B x N_image_tokens x C
|
||||
_bs, _c, _h, _w = image_embedding.shape
|
||||
bs, c, h, w = image_embedding.shape
|
||||
image_embedding = image_embedding.flatten(2).permute(0, 2, 1)
|
||||
image_pe = image_pe.flatten(2).permute(0, 2, 1)
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ from torch.nn import functional as F
|
||||
|
||||
from typing import Tuple
|
||||
|
||||
from ..modeling import Sam # noqa: TID252
|
||||
from ..modeling import Sam
|
||||
from .amg import calculate_stability_score
|
||||
|
||||
|
||||
|
||||
@@ -10,10 +10,10 @@ from modules.control.util import HWC3, img2mask, make_noise_disk, resize_image
|
||||
class ContentShuffleDetector:
|
||||
def __call__(self, input_image, h=None, w=None, f=None, detect_resolution=512, image_resolution=512, output_type="pil", **kwargs):
|
||||
if "return_pil" in kwargs:
|
||||
warnings.warn("return_pil is deprecated. Use output_type instead.", DeprecationWarning, stacklevel=2)
|
||||
warnings.warn("return_pil is deprecated. Use output_type instead.", DeprecationWarning)
|
||||
output_type = "pil" if kwargs["return_pil"] else "np"
|
||||
if type(output_type) is bool:
|
||||
warnings.warn("Passing `True` or `False` to `output_type` is deprecated and will raise an error in future versions", stacklevel=2)
|
||||
warnings.warn("Passing `True` or `False` to `output_type` is deprecated and will raise an error in future versions")
|
||||
if output_type:
|
||||
output_type = "pil"
|
||||
|
||||
@@ -49,7 +49,7 @@ class ContentShuffleDetector:
|
||||
class ColorShuffleDetector:
|
||||
def __call__(self, img):
|
||||
H, W, C = img.shape
|
||||
F = np.random.randint(64, 384)
|
||||
F = np.random.randint(64, 384) # noqa
|
||||
A = make_noise_disk(H, W, 3, F)
|
||||
B = make_noise_disk(H, W, 3, F)
|
||||
C = (A + B) / 2.0
|
||||
@@ -82,11 +82,11 @@ class DownSampleDetector:
|
||||
def __call__(self, img, level=3, k=16.0):
|
||||
h = img.astype(np.float32)
|
||||
for _ in range(level):
|
||||
h += np.random.normal(loc=0.0, scale=k, size=h.shape)
|
||||
h += np.random.normal(loc=0.0, scale=k, size=h.shape) # noqa
|
||||
h = cv2.pyrDown(h)
|
||||
for _ in range(level):
|
||||
h = cv2.pyrUp(h)
|
||||
h += np.random.normal(loc=0.0, scale=k, size=h.shape)
|
||||
h += np.random.normal(loc=0.0, scale=k, size=h.shape) # noqa
|
||||
return h.clip(0, 255).astype(np.uint8)
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -66,7 +66,7 @@ def attention_forward(self, x, resolution, shared_rel_pos_bias: Optional[torch.T
|
||||
"""
|
||||
Modification of timm.models.beit.py: Attention.forward to support arbitrary window sizes.
|
||||
"""
|
||||
B, N, _C = x.shape
|
||||
B, N, C = x.shape
|
||||
|
||||
qkv_bias = torch.cat((self.q_bias, self.k_bias, self.v_bias)) if self.q_bias is not None else None
|
||||
qkv = F.linear(input=x, weight=self.qkv.weight, bias=qkv_bias)
|
||||
|
||||
+1
-1
@@ -81,7 +81,7 @@ def forward_default(pretrained, x, function_name="forward_features"):
|
||||
|
||||
|
||||
def forward_adapted_unflatten(pretrained, x, function_name="forward_features"):
|
||||
_b, _c, h, w = x.shape
|
||||
b, c, h, w = x.shape
|
||||
|
||||
exec(f"glob = pretrained.model.{function_name}(x)")
|
||||
|
||||
|
||||
+1
-1
@@ -31,7 +31,7 @@ def _resize_pos_embed(self, posemb, gs_h, gs_w):
|
||||
|
||||
|
||||
def forward_flex(self, x):
|
||||
_b, _c, h, w = x.shape
|
||||
b, c, h, w = x.shape
|
||||
|
||||
pos_embed = self._resize_pos_embed(
|
||||
self.pos_embed, h // self.patch_size[1], w // self.patch_size[0]
|
||||
|
||||
@@ -5,6 +5,10 @@ from .backbones.beit import (
|
||||
_make_pretrained_beitl16_512,
|
||||
_make_pretrained_beitl16_384,
|
||||
_make_pretrained_beitb16_384,
|
||||
forward_beit,
|
||||
)
|
||||
from .backbones.swin_common import (
|
||||
forward_swin,
|
||||
)
|
||||
from .backbones.swin2 import (
|
||||
_make_pretrained_swin2l24_384,
|
||||
@@ -16,11 +20,13 @@ from .backbones.swin import (
|
||||
)
|
||||
from .backbones.levit import (
|
||||
_make_pretrained_levit_384,
|
||||
forward_levit,
|
||||
)
|
||||
from .backbones.vit import (
|
||||
_make_pretrained_vitb_rn50_384,
|
||||
_make_pretrained_vitl16_384,
|
||||
_make_pretrained_vitb16_384,
|
||||
forward_vit,
|
||||
)
|
||||
|
||||
def _make_encoder(backbone, features, use_pretrained, groups=1, expand=False, exportable=True, hooks=None,
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@ import torch
|
||||
import torch.nn as nn
|
||||
|
||||
from .base_model import BaseModel
|
||||
from .blocks import FeatureFusionBlock_custom, Interpolate, _make_encoder
|
||||
from .blocks import FeatureFusionBlock, FeatureFusionBlock_custom, Interpolate, _make_encoder
|
||||
|
||||
|
||||
class MidasNet_small(BaseModel):
|
||||
|
||||
@@ -100,7 +100,7 @@ class AttractorLayer(nn.Module):
|
||||
A = self._net(x)
|
||||
eps = 1e-3
|
||||
A = A + eps
|
||||
n, _c, h, w = A.shape
|
||||
n, c, h, w = A.shape
|
||||
A = A.view(n, self.n_attractors, 2, h, w)
|
||||
A_normed = A / A.sum(dim=2, keepdim=True) # n, a, 2, h, w
|
||||
A_normed = A[:, :, 0, ...] # n, na, h, w
|
||||
@@ -177,7 +177,7 @@ class AttractorLayerUnnormed(nn.Module):
|
||||
x = x + prev_b_embedding
|
||||
|
||||
A = self._net(x)
|
||||
_n, _c, h, w = A.shape
|
||||
n, c, h, w = A.shape
|
||||
|
||||
b_prev = nn.functional.interpolate(
|
||||
b_prev, (h, w), mode='bilinear', align_corners=True)
|
||||
|
||||
@@ -146,7 +146,7 @@ class LinearSplitter(nn.Module):
|
||||
S = self._net(x)
|
||||
eps = 1e-3
|
||||
S = S + eps
|
||||
n, _c, h, w = S.shape
|
||||
n, c, h, w = S.shape
|
||||
S = S.view(n, self.prev_nbins, self.split_factor, h, w)
|
||||
S_normed = S / S.sum(dim=2, keepdim=True) # fractional splits
|
||||
|
||||
|
||||
@@ -26,13 +26,13 @@ import itertools
|
||||
|
||||
import torch
|
||||
import torch.nn as nn
|
||||
from ..depth_model import DepthModel # noqa: TID252
|
||||
from ..base_models.midas import MidasCore # noqa: TID252
|
||||
from ..layers.attractor import AttractorLayer, AttractorLayerUnnormed # noqa: TID252
|
||||
from ..layers.dist_layers import ConditionalLogBinomial # noqa: TID252
|
||||
from ..layers.localbins_layers import (Projector, SeedBinRegressor, # noqa: TID252
|
||||
from ..depth_model import DepthModel
|
||||
from ..base_models.midas import MidasCore
|
||||
from ..layers.attractor import AttractorLayer, AttractorLayerUnnormed
|
||||
from ..layers.dist_layers import ConditionalLogBinomial
|
||||
from ..layers.localbins_layers import (Projector, SeedBinRegressor,
|
||||
SeedBinRegressorUnnormed)
|
||||
from ..model_io import load_state_from_resource # noqa: TID252
|
||||
from ..model_io import load_state_from_resource
|
||||
|
||||
|
||||
class ZoeDepth(DepthModel):
|
||||
@@ -139,7 +139,7 @@ class ZoeDepth(DepthModel):
|
||||
- probs (torch.Tensor): Output probability distribution of shape (B, n_bins, H, W). Present only if return_probs is True
|
||||
|
||||
"""
|
||||
b, _c, h, w = x.shape
|
||||
b, c, h, w = x.shape
|
||||
# print("input shape ", x.shape)
|
||||
self.orig_input_width = w
|
||||
self.orig_input_height = h
|
||||
|
||||
@@ -27,14 +27,14 @@ import itertools
|
||||
import torch
|
||||
import torch.nn as nn
|
||||
|
||||
from ..depth_model import DepthModel # noqa: TID252
|
||||
from ..base_models.midas import MidasCore # noqa: TID252
|
||||
from ..layers.attractor import AttractorLayer, AttractorLayerUnnormed # noqa: TID252
|
||||
from ..layers.dist_layers import ConditionalLogBinomial # noqa: TID252
|
||||
from ..layers.localbins_layers import (Projector, SeedBinRegressor, # noqa: TID252
|
||||
from ..depth_model import DepthModel
|
||||
from ..base_models.midas import MidasCore
|
||||
from ..layers.attractor import AttractorLayer, AttractorLayerUnnormed
|
||||
from ..layers.dist_layers import ConditionalLogBinomial
|
||||
from ..layers.localbins_layers import (Projector, SeedBinRegressor,
|
||||
SeedBinRegressorUnnormed)
|
||||
from ..layers.patch_transformer import PatchTransformerEncoder # noqa: TID252
|
||||
from ..model_io import load_state_from_resource # noqa: TID252
|
||||
from ..layers.patch_transformer import PatchTransformerEncoder
|
||||
from ..model_io import load_state_from_resource
|
||||
|
||||
class ZoeDepthNK(DepthModel):
|
||||
def __init__(self, core, bin_conf, bin_centers_type="softplus", bin_embedding_dim=128,
|
||||
@@ -173,10 +173,10 @@ class ZoeDepthNK(DepthModel):
|
||||
- "bin_centers": Bin centers of shape (B, N, H, W). Present only if return_final_centers is True
|
||||
- "probs": Bin probabilities of shape (B, N, H, W). Present only if return_probs is True
|
||||
"""
|
||||
b, _c, h, w = x.shape
|
||||
b, c, h, w = x.shape
|
||||
self.orig_input_width = w
|
||||
self.orig_input_height = h
|
||||
_rel_depth, out = self.core(x, denorm=denorm, return_rel_depth=True)
|
||||
rel_depth, out = self.core(x, denorm=denorm, return_rel_depth=True)
|
||||
|
||||
outconv_activation = out[0]
|
||||
btlnck = out[1]
|
||||
|
||||
@@ -5,7 +5,7 @@ from typing import Union
|
||||
from diffusers import StableDiffusionPipeline, StableDiffusionXLPipeline, FluxPipeline, StableDiffusion3Pipeline, ControlNetModel
|
||||
from modules.control.units import detect
|
||||
from modules.shared import log, opts, cmd_opts, state, listdir
|
||||
from modules import errors, sd_models, devices
|
||||
from modules import errors, sd_models, devices, model_quant
|
||||
from modules.processing import StableDiffusionProcessingControl
|
||||
|
||||
|
||||
@@ -163,7 +163,7 @@ def find_models():
|
||||
find_models()
|
||||
|
||||
|
||||
def api_list_models(model_type: str | None = None):
|
||||
def api_list_models(model_type: str = None):
|
||||
import modules.shared
|
||||
model_type = model_type or modules.shared.sd_model_type
|
||||
model_list = []
|
||||
@@ -215,7 +215,7 @@ def list_models(refresh=False):
|
||||
|
||||
|
||||
class ControlNet():
|
||||
def __init__(self, model_id: str | None = None, device = None, dtype = None, load_config = None):
|
||||
def __init__(self, model_id: str = None, device = None, dtype = None, load_config = None):
|
||||
self.model: ControlNetModel = None
|
||||
self.model_id: str = model_id
|
||||
self.device = device
|
||||
@@ -311,7 +311,7 @@ class ControlNet():
|
||||
self.load_config['original_config_file '] = config_path
|
||||
self.model = cls.from_single_file(model_path, config=config, **self.load_config)
|
||||
|
||||
def load(self, model_id: str | None = None, force: bool = False) -> str:
|
||||
def load(self, model_id: str = None, force: bool = False) -> str:
|
||||
with load_lock:
|
||||
try:
|
||||
t0 = time.time()
|
||||
|
||||
@@ -63,7 +63,7 @@ def list_models(refresh=False):
|
||||
|
||||
|
||||
class ControlLLLite():
|
||||
def __init__(self, model_id: str | None = None, device = None, dtype = None, load_config = None):
|
||||
def __init__(self, model_id: str = None, device = None, dtype = None, load_config = None):
|
||||
self.model: ControlNetLLLite = None
|
||||
self.model_id: str = model_id
|
||||
self.device = device
|
||||
@@ -83,7 +83,7 @@ class ControlLLLite():
|
||||
self.model = None
|
||||
self.model_id = None
|
||||
|
||||
def load(self, model_id: str | None = None, force: bool = True) -> str:
|
||||
def load(self, model_id: str = None, force: bool = True) -> str:
|
||||
with load_lock:
|
||||
try:
|
||||
t0 = time.time()
|
||||
|
||||
@@ -71,7 +71,7 @@ class AdapterModel(T2IAdapter):
|
||||
|
||||
|
||||
class Adapter():
|
||||
def __init__(self, model_id: str | None = None, device = None, dtype = None, load_config = None):
|
||||
def __init__(self, model_id: str = None, device = None, dtype = None, load_config = None):
|
||||
self.model: AdapterModel = None
|
||||
self.model_id: str = model_id
|
||||
self.device = device
|
||||
@@ -91,7 +91,7 @@ class Adapter():
|
||||
self.model = None
|
||||
self.model_id = None
|
||||
|
||||
def load(self, model_id: str | None = None, force: bool = True) -> str:
|
||||
def load(self, model_id: str = None, force: bool = True) -> str:
|
||||
with load_lock:
|
||||
try:
|
||||
t0 = time.time()
|
||||
|
||||
@@ -59,7 +59,7 @@ def list_models(refresh=False):
|
||||
|
||||
|
||||
class ControlNetXS():
|
||||
def __init__(self, model_id: str | None = None, device = None, dtype = None, load_config = None):
|
||||
def __init__(self, model_id: str = None, device = None, dtype = None, load_config = None):
|
||||
self.model: ControlNetXSModel = None
|
||||
self.model_id: str = model_id
|
||||
self.device = device
|
||||
@@ -79,7 +79,7 @@ class ControlNetXS():
|
||||
self.model = None
|
||||
self.model_id = None
|
||||
|
||||
def load(self, model_id: str | None = None, time_embedding_mix: float = 0.0, force: bool = True) -> str:
|
||||
def load(self, model_id: str = None, time_embedding_mix: float = 0.0, force: bool = True) -> str:
|
||||
with load_lock:
|
||||
try:
|
||||
t0 = time.time()
|
||||
|
||||
@@ -64,9 +64,9 @@ class ControlNetXSOutput(BaseOutput):
|
||||
class ControlNetConditioningEmbedding(nn.Module):
|
||||
"""
|
||||
Quoting from https://arxiv.org/abs/2302.05543: "Stable Diffusion uses a pre-processing method similar to VQ-GAN
|
||||
[11] to convert the entire dataset of 512 x 512 images into smaller 64 x 64 “latent images” for stabilized
|
||||
training. This requires ControlNets to convert image-based conditions to 64 x 64 feature space to match the
|
||||
convolution size. We use a tiny network E(·) of four convolution layers with 4 x 4 kernels and 2 x 2 strides
|
||||
[11] to convert the entire dataset of 512 × 512 images into smaller 64 × 64 “latent images” for stabilized
|
||||
training. This requires ControlNets to convert image-based conditions to 64 × 64 feature space to match the
|
||||
convolution size. We use a tiny network E(·) of four convolution layers with 4 × 4 kernels and 2 × 2 strides
|
||||
(activated by ReLU, channels are 16, 32, 64, 128, initialized with Gaussian weights, trained jointly with the full
|
||||
model) to encode image-space conditions ... into feature maps ..."
|
||||
"""
|
||||
@@ -657,7 +657,7 @@ class ControlNetXSModel(ModelMixin, ConfigMixin):
|
||||
if base_model.config.addition_embed_type == "text":
|
||||
aug_emb = base_model.add_embedding(encoder_hidden_states)
|
||||
elif base_model.config.addition_embed_type == "text_image":
|
||||
raise NotImplementedError
|
||||
raise NotImplementedError()
|
||||
elif base_model.config.addition_embed_type == "text_time":
|
||||
# SDXL - style
|
||||
if "text_embeds" not in added_cond_kwargs:
|
||||
@@ -676,9 +676,9 @@ class ControlNetXSModel(ModelMixin, ConfigMixin):
|
||||
add_embeds = add_embeds.to(temb.dtype)
|
||||
aug_emb = base_model.add_embedding(add_embeds)
|
||||
elif base_model.config.addition_embed_type == "image":
|
||||
raise NotImplementedError
|
||||
raise NotImplementedError()
|
||||
elif base_model.config.addition_embed_type == "image_hint":
|
||||
raise NotImplementedError
|
||||
raise NotImplementedError()
|
||||
|
||||
temb = temb + aug_emb if aug_emb is not None else temb
|
||||
|
||||
|
||||
@@ -518,8 +518,8 @@ class StableDiffusionXLControlNetXSPipeline(
|
||||
)
|
||||
if (
|
||||
isinstance(self.controlnet, ControlNetXSModel)
|
||||
or (is_compiled
|
||||
and isinstance(self.controlnet._orig_mod, ControlNetXSModel))
|
||||
or is_compiled
|
||||
and isinstance(self.controlnet._orig_mod, ControlNetXSModel)
|
||||
):
|
||||
self.check_image(image, prompt, prompt_embeds)
|
||||
else:
|
||||
@@ -528,8 +528,8 @@ class StableDiffusionXLControlNetXSPipeline(
|
||||
# Check `controlnet_conditioning_scale`
|
||||
if (
|
||||
isinstance(self.controlnet, ControlNetXSModel)
|
||||
or (is_compiled
|
||||
and isinstance(self.controlnet._orig_mod, ControlNetXSModel))
|
||||
or is_compiled
|
||||
and isinstance(self.controlnet._orig_mod, ControlNetXSModel)
|
||||
):
|
||||
if not isinstance(controlnet_conditioning_scale, float):
|
||||
raise TypeError("For single controlnet: `controlnet_conditioning_scale` must be type `float`.")
|
||||
@@ -1521,8 +1521,8 @@ class StableDiffusionControlNetXSPipeline(
|
||||
)
|
||||
if (
|
||||
isinstance(self.controlnet, ControlNetXSModel)
|
||||
or (is_compiled
|
||||
and isinstance(self.controlnet._orig_mod, ControlNetXSModel))
|
||||
or is_compiled
|
||||
and isinstance(self.controlnet._orig_mod, ControlNetXSModel)
|
||||
):
|
||||
self.check_image(image, prompt, prompt_embeds)
|
||||
else:
|
||||
@@ -1531,8 +1531,8 @@ class StableDiffusionControlNetXSPipeline(
|
||||
# Check `controlnet_conditioning_scale`
|
||||
if (
|
||||
isinstance(self.controlnet, ControlNetXSModel)
|
||||
or (is_compiled
|
||||
and isinstance(self.controlnet._orig_mod, ControlNetXSModel))
|
||||
or is_compiled
|
||||
and isinstance(self.controlnet._orig_mod, ControlNetXSModel)
|
||||
):
|
||||
if not isinstance(controlnet_conditioning_scale, float):
|
||||
raise TypeError("For single controlnet: `controlnet_conditioning_scale` must be type `float`.")
|
||||
|
||||
@@ -2,8 +2,10 @@ from __future__ import annotations
|
||||
|
||||
from contextlib import contextmanager
|
||||
from threading import Lock
|
||||
from typing import ClassVar
|
||||
from typing import TYPE_CHECKING, ClassVar
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Iterable
|
||||
|
||||
_instance_id = 0
|
||||
_lock = Lock()
|
||||
|
||||
@@ -832,7 +832,7 @@ class HunyuanVideoTransformer3DModelPacked(ModelMixin, ConfigMixin, PeftAdapterM
|
||||
clean_latents_4x=None, clean_latent_4x_indices=None
|
||||
):
|
||||
hidden_states = self.gradient_checkpointing_method(self.x_embedder.proj, latents)
|
||||
B, _C, T, H, W = hidden_states.shape
|
||||
B, C, T, H, W = hidden_states.shape
|
||||
|
||||
if latent_indices is None:
|
||||
latent_indices = torch.arange(0, T).unsqueeze(0).expand(B, -1)
|
||||
@@ -897,7 +897,7 @@ class HunyuanVideoTransformer3DModelPacked(ModelMixin, ConfigMixin, PeftAdapterM
|
||||
if attention_kwargs is None:
|
||||
attention_kwargs = {}
|
||||
|
||||
batch_size, _num_channels, num_frames, height, width = hidden_states.shape
|
||||
batch_size, num_channels, num_frames, height, width = hidden_states.shape
|
||||
p, p_t = self.config['patch_size'], self.config['patch_size_t']
|
||||
post_patch_num_frames = num_frames // p_t
|
||||
post_patch_height = height // p
|
||||
|
||||
@@ -18,7 +18,7 @@ torch_linalg_solve = None
|
||||
|
||||
|
||||
def test_solver():
|
||||
from modules import devices
|
||||
from modules import devices, shared
|
||||
try:
|
||||
a = torch.randn(50, 50).to(device=devices.device, dtype=torch.float32)
|
||||
b = torch.randn(50, 2).to(device=devices.device, dtype=torch.float32)
|
||||
|
||||
@@ -107,7 +107,7 @@ def make_diffusers_transformer_block(block_class: Type[torch.nn.Module]) -> Type
|
||||
encoder_hidden_states: Optional[torch.FloatTensor] = None,
|
||||
encoder_attention_mask: Optional[torch.FloatTensor] = None,
|
||||
timestep: Optional[torch.LongTensor] = None,
|
||||
cross_attention_kwargs: Dict[str, Any] | None = None,
|
||||
cross_attention_kwargs: Dict[str, Any] = None,
|
||||
class_labels: Optional[torch.LongTensor] = None,
|
||||
added_cond_kwargs: Optional[Dict[str, torch.Tensor]] = None,
|
||||
) -> torch.FloatTensor:
|
||||
|
||||
@@ -272,7 +272,7 @@ def make_diffusers_sdxl_contrtolnet_ppl(block_class):
|
||||
@torch.no_grad()
|
||||
def __call__(
|
||||
self,
|
||||
prompt: Union[str, List[str]] | None = None,
|
||||
prompt: Union[str, List[str]] = None,
|
||||
prompt_2: Optional[Union[str, List[str]]] = None,
|
||||
image: PipelineImageInput = None,
|
||||
control_image: PipelineImageInput = None,
|
||||
@@ -298,9 +298,9 @@ def make_diffusers_sdxl_contrtolnet_ppl(block_class):
|
||||
guess_mode: bool = False,
|
||||
control_guidance_start: Union[float, List[float]] = 0.0,
|
||||
control_guidance_end: Union[float, List[float]] = 1.0,
|
||||
original_size: Tuple[int, int] | None = None,
|
||||
original_size: Tuple[int, int] = None,
|
||||
crops_coords_top_left: Tuple[int, int] = (0, 0),
|
||||
target_size: Tuple[int, int] | None = None,
|
||||
target_size: Tuple[int, int] = None,
|
||||
negative_original_size: Optional[Tuple[int, int]] = None,
|
||||
negative_crops_coords_top_left: Tuple[int, int] = (0, 0),
|
||||
negative_target_size: Optional[Tuple[int, int]] = None,
|
||||
|
||||
+6
-6
@@ -6,21 +6,21 @@ from modules.image.grid import Grid, image_grid, check_grid_size, get_grid_size,
|
||||
from modules.image.util import draw_text, flatten
|
||||
|
||||
__all__ = [
|
||||
'FilenameGenerator',
|
||||
'Grid',
|
||||
'check_grid_size',
|
||||
'combine_grid',
|
||||
'draw_grid_annotations',
|
||||
'draw_prompt_matrix',
|
||||
'draw_text',
|
||||
'flatten',
|
||||
'get_font',
|
||||
'FilenameGenerator',
|
||||
'get_grid_size',
|
||||
'get_next_sequence_number',
|
||||
'Grid',
|
||||
'image_data',
|
||||
'image_grid',
|
||||
'read_info_from_image',
|
||||
'resize_image',
|
||||
'sanitize_filename_part',
|
||||
'save_image',
|
||||
'get_font',
|
||||
'get_next_sequence_number',
|
||||
'draw_text',
|
||||
'flatten',
|
||||
]
|
||||
|
||||
@@ -50,7 +50,7 @@ def hidream_rope(pos: torch.Tensor, dim: int, theta: int) -> torch.Tensor:
|
||||
scale = torch.arange(0, dim, 2, dtype=torch.float64, device=pos.device) / dim
|
||||
omega = 1.0 / (theta**scale)
|
||||
|
||||
batch_size, _seq_length = pos.shape
|
||||
batch_size, seq_length = pos.shape
|
||||
out = torch.einsum("...n,d->...nd", pos, omega)
|
||||
cos_out = torch.cos(out)
|
||||
sin_out = torch.sin(out)
|
||||
|
||||
@@ -52,7 +52,7 @@ def autocast_init(self, device_type=None, dtype=None, enabled=True, cache_enable
|
||||
|
||||
original_grad_scaler_init = torch.amp.grad_scaler.GradScaler.__init__
|
||||
@wraps(torch.amp.grad_scaler.GradScaler.__init__)
|
||||
def GradScaler_init(self, device: str | None = None, init_scale: float = 2.0**16, growth_factor: float = 2.0, backoff_factor: float = 0.5, growth_interval: int = 2000, enabled: bool = True):
|
||||
def GradScaler_init(self, device: str = None, init_scale: float = 2.0**16, growth_factor: float = 2.0, backoff_factor: float = 0.5, growth_interval: int = 2000, enabled: bool = True):
|
||||
if device is None or check_cuda(device):
|
||||
return original_grad_scaler_init(self, device=return_xpu(device), init_scale=init_scale, growth_factor=growth_factor, backoff_factor=backoff_factor, growth_interval=growth_interval, enabled=enabled)
|
||||
else:
|
||||
|
||||
+5
-2
@@ -75,7 +75,7 @@ except Exception:
|
||||
pass
|
||||
|
||||
try:
|
||||
pass # pylint: disable=unused-import,ungrouped-imports
|
||||
import torch.distributed.distributed_c10d as _c10d # pylint: disable=unused-import,ungrouped-imports
|
||||
except Exception:
|
||||
log.warning('Loader: torch is not built with distributed support')
|
||||
|
||||
@@ -96,6 +96,7 @@ warnings.filterwarnings(action="ignore", category=UserWarning, module="torchvisi
|
||||
torchvision = None
|
||||
try:
|
||||
import torchvision # pylint: disable=W0611,C0411
|
||||
import pytorch_lightning # pytorch_lightning should be imported after torch, but it re-enables warnings on import so import once to disable them # pylint: disable=W0611,C0411
|
||||
except Exception as e:
|
||||
report(f'torchvision=={torchvision.__version__ if torchvision is not None else None}', e)
|
||||
|
||||
@@ -126,6 +127,7 @@ if ".dev" in torch.__version__ or "+git" in torch.__version__:
|
||||
timer.startup.record("torch")
|
||||
|
||||
try:
|
||||
import bitsandbytes # pylint: disable=unused-import
|
||||
_bnb = True
|
||||
except Exception:
|
||||
_bnb = False
|
||||
@@ -209,9 +211,10 @@ except Exception as e:
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
pass # pylint: disable=W0611,C0411
|
||||
import pillow_jxl # pylint: disable=W0611,C0411
|
||||
except Exception:
|
||||
pass
|
||||
from PIL import Image # pylint: disable=W0611,C0411
|
||||
timer.startup.record("pillow")
|
||||
|
||||
|
||||
|
||||
@@ -354,7 +354,7 @@ def network_load(names, te_multipliers=None, unet_multipliers=None, dyn_dims=Non
|
||||
sd_model.set_adapters(adapter_names=lora_diffusers.diffuser_loaded, adapter_weights=lora_diffusers.diffuser_scales)
|
||||
except Exception as e:
|
||||
if str(e) not in exclude_errors:
|
||||
log.error(f'Network load: type=LoRA action=strength {e!s}')
|
||||
log.error(f'Network load: type=LoRA action=strength {str(e)}')
|
||||
if l.debug:
|
||||
errors.display(e, 'LoRA')
|
||||
try:
|
||||
@@ -363,7 +363,7 @@ def network_load(names, te_multipliers=None, unet_multipliers=None, dyn_dims=Non
|
||||
sd_model.unload_lora_weights()
|
||||
l.timer.activate += time.time() - t1
|
||||
except Exception as e:
|
||||
log.error(f'Network load: type=LoRA action=fuse {e!s}')
|
||||
log.error(f'Network load: type=LoRA action=fuse {str(e)}')
|
||||
if l.debug:
|
||||
errors.display(e, 'LoRA')
|
||||
shared.sd_model = sd_models.apply_balanced_offload(shared.sd_model, force=True, silent=True) # some layers may end up on cpu without hook
|
||||
|
||||
@@ -149,7 +149,7 @@ def run_ltx(task_id,
|
||||
extra_networks.deactivate(p)
|
||||
shared.state.end()
|
||||
progress.finish_task(task_id)
|
||||
yield None, f'LTX Error: {e!s}'
|
||||
yield None, f'LTX Error: {str(e)}'
|
||||
|
||||
if model is None or len(model) == 0 or model == 'None':
|
||||
yield from abort('Video: no model selected', ok=True)
|
||||
|
||||
@@ -4,18 +4,18 @@ import torch
|
||||
from torch import Tensor
|
||||
|
||||
__all__ = [
|
||||
"weighted_sum",
|
||||
"weighted_subtraction",
|
||||
"tensor_sum",
|
||||
"add_difference",
|
||||
"distribution_crossover",
|
||||
"sum_twice",
|
||||
"triple_sum",
|
||||
"euclidean_add_difference",
|
||||
"multiply_difference",
|
||||
"similarity_add_difference",
|
||||
"sum_twice",
|
||||
"tensor_sum",
|
||||
"ties_add_difference",
|
||||
"top_k_tensor_sum",
|
||||
"triple_sum",
|
||||
"weighted_subtraction",
|
||||
"weighted_sum",
|
||||
"similarity_add_difference",
|
||||
"distribution_crossover",
|
||||
"ties_add_difference",
|
||||
]
|
||||
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ def get_provider() -> tuple:
|
||||
|
||||
def install_execution_provider(ep: ExecutionProvider):
|
||||
import importlib # pylint: disable=deprecated-module
|
||||
from installer import install, uninstall
|
||||
from installer import installed, install, uninstall
|
||||
res = "<br><pre>"
|
||||
res += uninstall(["onnxruntime", "onnxruntime-directml", "onnxruntime-gpu", "onnxruntime-training", "onnxruntime-openvino"], quiet=True)
|
||||
packages = ["onnxruntime"] # Failed to load olive: cannot import name '__version__' from 'onnxruntime'
|
||||
|
||||
@@ -238,7 +238,7 @@ class SwinTransformerBlock(nn.Module):
|
||||
|
||||
def forward(self, x, x_size):
|
||||
H, W = x_size
|
||||
B, _L, C = x.shape
|
||||
B, L, C = x.shape
|
||||
# assert L == H * W, "input feature has wrong size"
|
||||
|
||||
shortcut = x
|
||||
@@ -559,7 +559,7 @@ class PatchUnEmbed(nn.Module):
|
||||
self.embed_dim = embed_dim
|
||||
|
||||
def forward(self, x, x_size):
|
||||
B, _HW, _C = x.shape
|
||||
B, HW, C = x.shape
|
||||
x = x.transpose(1, 2).view(B, self.embed_dim, x_size[0], x_size[1]) # B Ph*Pw C
|
||||
return x
|
||||
|
||||
|
||||
@@ -266,7 +266,7 @@ class SwinTransformerBlock(nn.Module):
|
||||
|
||||
def forward(self, x, x_size):
|
||||
H, W = x_size
|
||||
B, _L, C = x.shape
|
||||
B, L, C = x.shape
|
||||
#assert L == H * W, "input feature has wrong size"
|
||||
|
||||
shortcut = x
|
||||
@@ -476,7 +476,7 @@ class PatchEmbed(nn.Module):
|
||||
self.norm = None
|
||||
|
||||
def forward(self, x):
|
||||
_B, _C, _H, _W = x.shape
|
||||
B, C, H, W = x.shape
|
||||
# FIXME look at relaxing size constraints
|
||||
# assert H == self.img_size[0] and W == self.img_size[1],
|
||||
# f"Input image size ({H}*{W}) doesn't match model ({self.img_size[0]}*{self.img_size[1]})."
|
||||
@@ -591,7 +591,7 @@ class PatchUnEmbed(nn.Module):
|
||||
self.embed_dim = embed_dim
|
||||
|
||||
def forward(self, x, x_size):
|
||||
B, _HW, _C = x.shape
|
||||
B, HW, C = x.shape
|
||||
x = x.transpose(1, 2).view(B, self.embed_dim, x_size[0], x_size[1]) # B Ph*Pw C
|
||||
return x
|
||||
|
||||
|
||||
@@ -8,6 +8,10 @@ from modules.logger import log
|
||||
from modules.sd_hijack_hypertile import context_hypertile_vae, context_hypertile_unet
|
||||
from modules.processing_class import ( # pylint: disable=unused-import
|
||||
StableDiffusionProcessing,
|
||||
StableDiffusionProcessingTxt2Img,
|
||||
StableDiffusionProcessingImg2Img,
|
||||
StableDiffusionProcessingVideo,
|
||||
StableDiffusionProcessingControl,
|
||||
)
|
||||
from modules.processing_info import create_infotext
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ def apply(pipe, p: processing.StableDiffusionProcessing):
|
||||
MANAGER.width = p.width
|
||||
MANAGER.height = p.height
|
||||
MANAGER.error_reset_steps = [int(1*p.steps/3), int(2*p.steps/3)]
|
||||
log.info(f'RAS: scheduler={pipe.scheduler.__class__.__name__} {MANAGER!s}')
|
||||
log.info(f'RAS: scheduler={pipe.scheduler.__class__.__name__} {str(MANAGER)}')
|
||||
MANAGER.reset_cache()
|
||||
MANAGER.generate_skip_token_list()
|
||||
pipe.transformer.old_forward = pipe.transformer.forward
|
||||
|
||||
@@ -304,7 +304,7 @@ class RESUnifiedScheduler(SchedulerMixin, ConfigMixin):
|
||||
return SchedulerOutput(prev_sample=x_next)
|
||||
|
||||
# GET COEFFICIENTS
|
||||
b, _h_val = self._get_coefficients(sigma, sigma_next)
|
||||
b, h_val = self._get_coefficients(sigma, sigma_next)
|
||||
|
||||
if len(b) == 1:
|
||||
res = b[0] * x0
|
||||
|
||||
@@ -126,7 +126,7 @@ class DCSolverMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
Any other scheduler that if specified, the algorithm becomes `solver_p + UniC`.
|
||||
use_karras_sigmas (`bool`, *optional*, defaults to `False`):
|
||||
Whether to use Karras sigmas for step sizes in the noise schedule during the sampling process. If `True`,
|
||||
the sigmas are determined according to a sequence of noise levels {sigma_i}.
|
||||
the sigmas are determined according to a sequence of noise levels {σi}.
|
||||
timestep_spacing (`str`, defaults to `"linspace"`):
|
||||
The way the timesteps should be scaled. Refer to Table 2 of the [Common Diffusion Noise Schedules and
|
||||
Sample Steps are Flawed](https://huggingface.co/papers/2305.08891) for more information.
|
||||
@@ -449,7 +449,7 @@ class DCSolverMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
model_output: torch.FloatTensor = None,
|
||||
*args,
|
||||
sample: torch.FloatTensor = None,
|
||||
order: int | None = None,
|
||||
order: int = None,
|
||||
**kwargs,
|
||||
) -> torch.FloatTensor:
|
||||
"""
|
||||
@@ -488,12 +488,13 @@ class DCSolverMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
)
|
||||
model_output_list = self.model_outputs
|
||||
|
||||
s0 = self.timestep_list[-1]
|
||||
m0 = model_output_list[-1]
|
||||
assert m0 is not None
|
||||
x = sample
|
||||
|
||||
if self.solver_p:
|
||||
raise NotImplementedError
|
||||
raise NotImplementedError()
|
||||
|
||||
sigma_t, sigma_s0 = self.sigmas[self.step_index + 1], self.sigmas[self.step_index]
|
||||
alpha_t, sigma_t = self._sigma_to_alpha_sigma_t(sigma_t)
|
||||
@@ -533,7 +534,7 @@ class DCSolverMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
elif self.config.solver_type == "bh2":
|
||||
B_h = torch.expm1(hh)
|
||||
else:
|
||||
raise NotImplementedError
|
||||
raise NotImplementedError()
|
||||
|
||||
for i in range(1, order + 1):
|
||||
R.append(torch.pow(rks, i - 1))
|
||||
@@ -578,7 +579,7 @@ class DCSolverMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
*args,
|
||||
last_sample: torch.FloatTensor = None,
|
||||
this_sample: torch.FloatTensor = None,
|
||||
order: int | None = None,
|
||||
order: int = None,
|
||||
**kwargs,
|
||||
) -> torch.FloatTensor:
|
||||
"""
|
||||
@@ -668,7 +669,7 @@ class DCSolverMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
elif self.config.solver_type == "bh2":
|
||||
B_h = torch.expm1(hh)
|
||||
else:
|
||||
raise NotImplementedError
|
||||
raise NotImplementedError()
|
||||
|
||||
for i in range(1, order + 1):
|
||||
R.append(torch.pow(rks, i - 1))
|
||||
@@ -810,7 +811,7 @@ class DCSolverMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
return loss
|
||||
|
||||
optimizer = torch.optim.AdamW([ratio_param], lr=0.1)
|
||||
for _ in range(self.num_iters):
|
||||
for iter_ in range(self.num_iters):
|
||||
optimizer.zero_grad()
|
||||
loss = closure(ratio_param)
|
||||
loss.backward()
|
||||
|
||||
@@ -170,7 +170,7 @@ class FlowMatchDPMSolverMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
from installer import install
|
||||
install('torchsde==0.2.6', 'torchsde', quiet=True)
|
||||
try:
|
||||
pass
|
||||
import torchsde
|
||||
except Exception as e:
|
||||
raise ImportError("Failed to import torchsde. Please make sure it is installed correctly.") from e
|
||||
|
||||
@@ -234,7 +234,7 @@ class FlowMatchDPMSolverMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
return math.exp(mu) / (math.exp(mu) + (1 / t - 1) ** sigma)
|
||||
|
||||
def set_timesteps(self,
|
||||
num_inference_steps: int | None = None,
|
||||
num_inference_steps: int = None,
|
||||
device: Union[str, torch.device] = None,
|
||||
sigmas: Optional[List[float]] = None,
|
||||
mu: Optional[float] = None,
|
||||
|
||||
@@ -395,7 +395,7 @@ class TDDScheduler(DPMSolverSinglestepScheduler):
|
||||
model_output_list: List[torch.FloatTensor],
|
||||
*args,
|
||||
sample: torch.FloatTensor = None,
|
||||
order: int | None = None,
|
||||
order: int = None,
|
||||
**kwargs,
|
||||
) -> torch.FloatTensor:
|
||||
timestep_list = args[0] if len(args) > 0 else kwargs.pop("timestep_list", None)
|
||||
|
||||
@@ -54,7 +54,7 @@ class FlowUniPCMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
Any other scheduler that if specified, the algorithm becomes `solver_p + UniC`.
|
||||
use_karras_sigmas (`bool`, *optional*, defaults to `False`):
|
||||
Whether to use Karras sigmas for step sizes in the noise schedule during the sampling process. If `True`,
|
||||
the sigmas are determined according to a sequence of noise levels {sigma_i}.
|
||||
the sigmas are determined according to a sequence of noise levels {σi}.
|
||||
use_exponential_sigmas (`bool`, *optional*, defaults to `False`):
|
||||
Whether to use exponential sigmas for step sizes in the noise schedule during the sampling process.
|
||||
timestep_spacing (`str`, defaults to `"linspace"`):
|
||||
@@ -311,7 +311,7 @@ class FlowUniPCMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
)
|
||||
|
||||
sigma = self.sigmas[self.step_index]
|
||||
_alpha_t, sigma_t = self._sigma_to_alpha_sigma_t(sigma)
|
||||
alpha_t, sigma_t = self._sigma_to_alpha_sigma_t(sigma)
|
||||
|
||||
if self.predict_x0:
|
||||
if self.config.prediction_type == "flow_prediction":
|
||||
@@ -350,7 +350,7 @@ class FlowUniPCMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
model_output: torch.Tensor,
|
||||
*args,
|
||||
sample: torch.Tensor = None,
|
||||
order: int | None = None, # pyright: ignore
|
||||
order: int = None, # pyright: ignore
|
||||
**kwargs,
|
||||
) -> torch.Tensor:
|
||||
"""
|
||||
@@ -439,7 +439,7 @@ class FlowUniPCMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
elif self.config.solver_type == "bh2":
|
||||
B_h = torch.expm1(hh)
|
||||
else:
|
||||
raise NotImplementedError
|
||||
raise NotImplementedError()
|
||||
|
||||
for i in range(1, order + 1):
|
||||
R.append(torch.pow(rks, i - 1))
|
||||
@@ -487,7 +487,7 @@ class FlowUniPCMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
*args,
|
||||
last_sample: torch.Tensor = None,
|
||||
this_sample: torch.Tensor = None,
|
||||
order: int | None = None, # pyright: ignore
|
||||
order: int = None, # pyright: ignore
|
||||
**kwargs,
|
||||
) -> torch.Tensor:
|
||||
"""
|
||||
@@ -582,7 +582,7 @@ class FlowUniPCMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
elif self.config.solver_type == "bh2":
|
||||
B_h = torch.expm1(hh)
|
||||
else:
|
||||
raise NotImplementedError
|
||||
raise NotImplementedError()
|
||||
|
||||
for i in range(1, order + 1):
|
||||
R.append(torch.pow(rks, i - 1))
|
||||
|
||||
@@ -15,9 +15,9 @@ from modules import timer, paths, shared, shared_items, modelloader, devices, sc
|
||||
from modules.memstats import memory_stats
|
||||
from modules.shared_helpers import walk_files
|
||||
from modules.modeldata import model_data
|
||||
from modules.sd_checkpoint import CheckpointInfo, select_checkpoint, list_models, checkpoint_titles, get_closest_checkpoint_match # pylint: disable=unused-import
|
||||
from modules.sd_checkpoint import CheckpointInfo, select_checkpoint, list_models, checkpoint_titles, get_closest_checkpoint_match, update_model_hashes, write_metadata, checkpoints_list # pylint: disable=unused-import
|
||||
from modules.sd_offload import get_module_names, disable_offload, set_diffuser_offload, apply_balanced_offload, set_accelerate # pylint: disable=unused-import
|
||||
from modules.sd_models_utils import NoWatermark, get_signature, path_to_repo, apply_function_to_model # pylint: disable=unused-import
|
||||
from modules.sd_models_utils import NoWatermark, get_signature, get_call, path_to_repo, apply_function_to_model, read_state_dict, get_state_dict_from_checkpoint # pylint: disable=unused-import
|
||||
|
||||
|
||||
model_dir = "Stable-diffusion"
|
||||
@@ -331,6 +331,7 @@ def load_diffuser_initial(diffusers_load_config, op='model'):
|
||||
|
||||
|
||||
def load_diffuser_force(detected_model_type, checkpoint_info, diffusers_load_config, op='model'):
|
||||
from modules import sdnq # pylint: disable=unused-import
|
||||
sd_model = None
|
||||
global allow_post_quant # pylint: disable=global-statement
|
||||
unload_model_weights(op=op)
|
||||
|
||||
@@ -28,7 +28,7 @@ class SDNQLayer(torch.nn.Module):
|
||||
return self.forward_func(self, *args, **kwargs)
|
||||
|
||||
def __repr__(self):
|
||||
return f"{self.__class__.__name__}(original_class={self.original_class} forward_func={self.forward_func} sdnq_dequantizer={getattr(self, 'sdnq_dequantizer', None)!r})"
|
||||
return f"{self.__class__.__name__}(original_class={self.original_class} forward_func={self.forward_func} sdnq_dequantizer={repr(getattr(self, 'sdnq_dequantizer', None))})"
|
||||
|
||||
|
||||
class SDNQLinear(SDNQLayer, torch.nn.Linear):
|
||||
|
||||
@@ -2,8 +2,8 @@ import torch
|
||||
from PIL import Image
|
||||
from torch import Tensor
|
||||
from torch.nn import functional as F
|
||||
from ..common.half_precision_fixes import safe_pad_operation, safe_interpolate_operation
|
||||
from torchvision.transforms import ToTensor, ToPILImage
|
||||
from modules.seedvr.src.common.half_precision_fixes import safe_pad_operation, safe_interpolate_operation
|
||||
|
||||
def adain_color_fix(target: Image.Image, source: Image.Image):
|
||||
# Convert images to tensors
|
||||
|
||||
+8
-2
@@ -15,17 +15,21 @@ log.debug('Initializing: shared module')
|
||||
import modules.memmon
|
||||
import modules.paths as paths
|
||||
from modules.json_helpers import readfile # pylint: disable=W0611
|
||||
from modules.shared_helpers import listdir # pylint: disable=W0611
|
||||
from modules import errors, devices, shared_state, cmd_args, history, files_cache # pylint: disable=unused-import
|
||||
from modules.shared_helpers import listdir, req # pylint: disable=W0611
|
||||
from modules import errors, devices, shared_state, cmd_args, theme, history, files_cache # pylint: disable=unused-import
|
||||
from modules.shared_defaults import get_default_modes
|
||||
from modules.memstats import memory_stats # pylint: disable=unused-import
|
||||
|
||||
log.debug('Initializing: pipelines')
|
||||
from modules import shared_items # pylint: disable=unused-import
|
||||
from modules.caption.openclip import get_clip_models, refresh_clip_models # pylint: disable=unused-import
|
||||
from modules.caption.vqa import vlm_models, vlm_prompts, vlm_system, vlm_default # pylint: disable=unused-import
|
||||
|
||||
|
||||
if TYPE_CHECKING:
|
||||
# Behavior modified by __future__.annotations
|
||||
from diffusers import DiffusionPipeline
|
||||
from modules.shared_legacy import LegacyOption
|
||||
from modules.ui_extra_networks import ExtraNetworksPage
|
||||
|
||||
|
||||
@@ -77,6 +81,7 @@ data_path = paths.data_path
|
||||
backend = Backend.DIFFUSERS
|
||||
if cmd_opts.use_openvino: # override for openvino
|
||||
os.environ.setdefault('PYTORCH_TRACING_MODE', 'TORCHFX')
|
||||
from modules.intel.openvino import get_device_list as get_openvino_device_list # pylint: disable=ungrouped-imports,unused-import
|
||||
elif cmd_opts.use_ipex or devices.has_xpu():
|
||||
from modules.intel.ipex import ipex_init
|
||||
ok, e = ipex_init()
|
||||
@@ -152,6 +157,7 @@ startup_offload_mode, startup_offload_min_gpu, startup_offload_max_gpu, startup_
|
||||
|
||||
log.debug('Initializing: settings')
|
||||
from modules import ui_definitions
|
||||
from modules.ui_definitions import OptionInfo, options_section # pylint: disable=unused-import
|
||||
options_templates = ui_definitions.create_settings(cmd_opts)
|
||||
from modules.shared_legacy import get_legacy_options
|
||||
options_templates.update(get_legacy_options())
|
||||
|
||||
@@ -131,7 +131,7 @@ def apply_srgb(
|
||||
flags=flags
|
||||
)
|
||||
else:
|
||||
img = cast('Image', profileToProfile(
|
||||
img = cast(Image, profileToProfile(
|
||||
img,
|
||||
profile,
|
||||
_SRGB,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from typing import Any, Dict, List, Optional, Tuple
|
||||
from diffusers.models.modeling_outputs import Transformer2DModelOutput
|
||||
from diffusers.utils import deprecate, USE_PEFT_BACKEND, logging, scale_lora_layers, unscale_lora_layers
|
||||
from diffusers.utils import logging, deprecate, USE_PEFT_BACKEND, logging, scale_lora_layers, unscale_lora_layers
|
||||
|
||||
import torch
|
||||
import numpy as np
|
||||
|
||||
@@ -222,7 +222,7 @@ def create_ui(gr_status, gr_file):
|
||||
if param.name == 'self' or param.name == 'args' or param.name == 'kwargs':
|
||||
continue
|
||||
component = Component(param)
|
||||
debug_log(f'Model component: {component!s}')
|
||||
debug_log(f'Model component: {str(component)}')
|
||||
components.append(component)
|
||||
return components
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import sys
|
||||
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')))
|
||||
|
||||
from PIL import Image
|
||||
from installer import install
|
||||
from installer import install, reload
|
||||
from modules.logger import log
|
||||
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@ def load_custom(model_name: str):
|
||||
|
||||
|
||||
def load_model(selected: models_def.Model):
|
||||
from modules import sdnq # pylint: disable=unused-import
|
||||
if selected is None or selected.repo is None:
|
||||
return ''
|
||||
global loaded_model # pylint: disable=global-statement
|
||||
|
||||
@@ -64,7 +64,7 @@ def run_video(*args):
|
||||
selected = get_selected(engine, model)
|
||||
if not selected or engine is None or model is None or engine == 'None' or model == 'None':
|
||||
return video_utils.queue_err('model not selected')
|
||||
debug(f'Video run: {selected!s}')
|
||||
debug(f'Video run: {str(selected)}')
|
||||
if selected and 'Hunyuan' in selected.name:
|
||||
return video_run.generate(*args)
|
||||
elif selected and 'LTX' in selected.name:
|
||||
|
||||
@@ -622,7 +622,7 @@ class BriaPipeline(FluxPipeline):
|
||||
|
||||
@staticmethod
|
||||
def _unpack_latents(latents, height, width, vae_scale_factor):
|
||||
batch_size, _num_patches, channels = latents.shape
|
||||
batch_size, num_patches, channels = latents.shape
|
||||
|
||||
height = height // vae_scale_factor
|
||||
width = width // vae_scale_factor
|
||||
|
||||
@@ -233,7 +233,7 @@ class PatchEmbed(nn.Module):
|
||||
self.patch_size = patch_size
|
||||
|
||||
def forward(self, x):
|
||||
_B, _C, _H, _W = x.shape
|
||||
B, C, H, W = x.shape
|
||||
x = self.patch_proj(x)
|
||||
x = rearrange(x, "b c h w -> b (h w) c")
|
||||
return x
|
||||
@@ -380,7 +380,7 @@ class DiT(ModelMixin, ConfigMixin, FromOriginalModelMixin, PeftAdapterMixin): #
|
||||
|
||||
@apply_forward_hook
|
||||
def forward(self, x, context, timesteps):
|
||||
b, _c, h, w = x.shape
|
||||
b, c, h, w = x.shape
|
||||
x = self.patch_embed(x) # b, T, d
|
||||
|
||||
x = torch.cat([self.register_tokens.repeat(b, 1, 1), x], 1) # b, T + N, d
|
||||
|
||||
@@ -233,7 +233,7 @@ class PatchEmbed(nn.Module):
|
||||
self.patch_size = patch_size
|
||||
|
||||
def forward(self, x):
|
||||
_B, _C, _H, _W = x.shape
|
||||
B, C, H, W = x.shape
|
||||
x = self.patch_proj(x)
|
||||
x = rearrange(x, "b c h w -> b (h w) c")
|
||||
return x
|
||||
@@ -380,7 +380,7 @@ class DiT(ModelMixin, ConfigMixin, FromOriginalModelMixin, PeftAdapterMixin): #
|
||||
|
||||
@apply_forward_hook
|
||||
def forward(self, x, context, timesteps):
|
||||
b, _c, h, w = x.shape
|
||||
b, c, h, w = x.shape
|
||||
x = self.patch_embed(x) # b, T, d
|
||||
|
||||
x = torch.cat([self.register_tokens.repeat(b, 1, 1), x], 1) # b, T + N, d
|
||||
|
||||
@@ -194,7 +194,7 @@ class FlashFlowMatchEulerDiscreteScheduler(SchedulerMixin, ConfigMixin):
|
||||
|
||||
def set_timesteps(
|
||||
self,
|
||||
num_inference_steps: int | None = None,
|
||||
num_inference_steps: int = None,
|
||||
device: Union[str, torch.device] = None,
|
||||
sigmas: Optional[List[float]] = None,
|
||||
mu: Optional[float] = None,
|
||||
|
||||
@@ -53,7 +53,7 @@ class FlowUniPCMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
Any other scheduler that if specified, the algorithm becomes `solver_p + UniC`.
|
||||
use_karras_sigmas (`bool`, *optional*, defaults to `False`):
|
||||
Whether to use Karras sigmas for step sizes in the noise schedule during the sampling process. If `True`,
|
||||
the sigmas are determined according to a sequence of noise levels {sigma_i}.
|
||||
the sigmas are determined according to a sequence of noise levels {σi}.
|
||||
use_exponential_sigmas (`bool`, *optional*, defaults to `False`):
|
||||
Whether to use exponential sigmas for step sizes in the noise schedule during the sampling process.
|
||||
timestep_spacing (`str`, defaults to `"linspace"`):
|
||||
@@ -294,7 +294,7 @@ class FlowUniPCMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
`torch.Tensor`:
|
||||
The converted model output.
|
||||
"""
|
||||
_ = args[0] if len(args) > 0 else kwargs.pop("timestep", None)
|
||||
timestep = args[0] if len(args) > 0 else kwargs.pop("timestep", None)
|
||||
if sample is None:
|
||||
if len(args) > 1:
|
||||
sample = args[1]
|
||||
@@ -303,7 +303,7 @@ class FlowUniPCMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
"missing `sample` as a required keyward argument")
|
||||
|
||||
sigma = self.sigmas[self.step_index]
|
||||
_alpha_t, sigma_t = self._sigma_to_alpha_sigma_t(sigma)
|
||||
alpha_t, sigma_t = self._sigma_to_alpha_sigma_t(sigma)
|
||||
|
||||
if self.predict_x0:
|
||||
if self.config.prediction_type == "flow_prediction":
|
||||
@@ -342,7 +342,7 @@ class FlowUniPCMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
model_output: torch.Tensor,
|
||||
*args,
|
||||
sample: torch.Tensor = None,
|
||||
order: int | None = None, # pyright: ignore
|
||||
order: int = None, # pyright: ignore
|
||||
**kwargs,
|
||||
) -> torch.Tensor:
|
||||
"""
|
||||
@@ -362,7 +362,7 @@ class FlowUniPCMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
`torch.Tensor`:
|
||||
The sample tensor at the previous timestep.
|
||||
"""
|
||||
_ = args[0] if len(args) > 0 else kwargs.pop(
|
||||
prev_timestep = args[0] if len(args) > 0 else kwargs.pop(
|
||||
"prev_timestep", None)
|
||||
if sample is None:
|
||||
if len(args) > 1:
|
||||
@@ -473,7 +473,7 @@ class FlowUniPCMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
*args,
|
||||
last_sample: torch.Tensor = None,
|
||||
this_sample: torch.Tensor = None,
|
||||
order: int | None = None, # pyright: ignore
|
||||
order: int = None, # pyright: ignore
|
||||
**kwargs,
|
||||
) -> torch.Tensor:
|
||||
"""
|
||||
@@ -495,7 +495,7 @@ class FlowUniPCMultistepScheduler(SchedulerMixin, ConfigMixin):
|
||||
`torch.Tensor`:
|
||||
The corrected sample tensor at the current timestep.
|
||||
"""
|
||||
_ = args[0] if len(args) > 0 else kwargs.pop(
|
||||
this_timestep = args[0] if len(args) > 0 else kwargs.pop(
|
||||
"this_timestep", None)
|
||||
if last_sample is None:
|
||||
if len(args) > 1:
|
||||
|
||||
@@ -17,7 +17,8 @@ import sys
|
||||
from abc import abstractmethod
|
||||
from dataclasses import dataclass, fields
|
||||
from enum import Enum
|
||||
from typing import Callable, Dict, Iterable, List, NamedTuple, Optional, Sequence, Tuple, Union, cast
|
||||
from typing import Any, Callable, Dict, Iterable, List, NamedTuple, Optional, Sequence, Tuple, Union, cast
|
||||
from accelerate import init_empty_weights
|
||||
|
||||
from tqdm.rich import tqdm
|
||||
import numpy as np
|
||||
@@ -34,6 +35,7 @@ from diffusers import DiffusionPipeline, VQModel
|
||||
from diffusers.utils import BaseOutput, logging, replace_example_docstring
|
||||
from diffusers.image_processor import PipelineImageInput, VaeImageProcessor
|
||||
|
||||
from diffusers.pipelines.pipeline_utils import ImagePipelineOutput
|
||||
|
||||
|
||||
logger = logging.get_logger(__name__) # pylint: disable=invalid-name
|
||||
@@ -51,7 +53,7 @@ class StrEnum(str, Enum):
|
||||
return self.value
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"'{self!s}'"
|
||||
return f"'{str(self)}'"
|
||||
|
||||
|
||||
class LayerNormType(StrEnum):
|
||||
@@ -943,7 +945,7 @@ class LLaDALlamaBlock(LLaDABlock):
|
||||
cat="cond",
|
||||
to_compute_mask=None,
|
||||
) -> Tuple[torch.Tensor, Optional[Tuple[torch.Tensor, torch.Tensor]]]:
|
||||
_B, _T, D = x.shape
|
||||
B, T, D = x.shape
|
||||
|
||||
x_normed = self.attn_norm(x)
|
||||
q = self.q_proj(x_normed)
|
||||
@@ -1610,7 +1612,7 @@ def get_num_transfer_tokens(mask_index, steps):
|
||||
|
||||
|
||||
def mask_by_random_topk(keep_n, probs, temperature=1.0, generator=None):
|
||||
B, _S = probs.shape
|
||||
B, S = probs.shape
|
||||
noise = gumbel_noise(probs, generator=generator)
|
||||
|
||||
conf = probs / temperature + noise
|
||||
@@ -2047,7 +2049,7 @@ class LuminaDiMOOPipeline(DiffusionPipeline):
|
||||
"""
|
||||
device = next(model.parameters()).device
|
||||
prompt = prompt.to(device)
|
||||
B, _P = prompt.shape
|
||||
B, P = prompt.shape
|
||||
assert B == 1, "batch>1 not supported - wrap in loop if needed"
|
||||
|
||||
x = prompt
|
||||
@@ -2163,7 +2165,7 @@ class LuminaDiMOOPipeline(DiffusionPipeline):
|
||||
|
||||
device = next(model.parameters()).device
|
||||
prompt = prompt.to(device)
|
||||
B, _P = prompt.shape
|
||||
B, P = prompt.shape
|
||||
assert B == 1, "batch>1 not supported - wrap in loop if needed"
|
||||
|
||||
x = prompt
|
||||
@@ -2492,7 +2494,7 @@ class LuminaDiMOOPipeline(DiffusionPipeline):
|
||||
uncon_prompt_token = self.tokenizer(uncon_prompt)["input_ids"]
|
||||
|
||||
if painting_mode:
|
||||
img_mask_token, _img_vis = encode_img_with_paint(
|
||||
img_mask_token, img_vis = encode_img_with_paint(
|
||||
painting_image,
|
||||
vqvae=self.vqvae,
|
||||
mask_h_ratio=mask_h_ratio,
|
||||
@@ -2572,7 +2574,7 @@ class LuminaDiMOOPipeline(DiffusionPipeline):
|
||||
processed_image = var_center_crop(image, crop_size_list=crop_size_list)
|
||||
|
||||
image_width, image_height = processed_image.size
|
||||
_seq_len, _newline_every, _token_grid_height, _token_grid_width = calculate_vq_params(
|
||||
seq_len, newline_every, _token_grid_height, _token_grid_width = calculate_vq_params(
|
||||
image_height, image_width, self.vae_scale_factor
|
||||
)
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ import torch
|
||||
from transformers import CLIPTextModelWithProjection, CLIPTokenizer
|
||||
|
||||
from diffusers.image_processor import PipelineImageInput, VaeImageProcessor
|
||||
from diffusers.models import VQModel
|
||||
from diffusers.models import UVit2DModel, VQModel
|
||||
# from diffusers.schedulers import AmusedScheduler
|
||||
from .scheduler import Scheduler
|
||||
from diffusers.utils import replace_example_docstring
|
||||
@@ -276,7 +276,7 @@ class MeissonicImg2ImgPipeline(DiffusionPipeline):
|
||||
self.vqvae.float()
|
||||
|
||||
latents = self.vqvae.encode(image.to(dtype=self.vqvae.dtype, device=self._execution_device)).latents
|
||||
latents_bsz, _channels, latents_height, latents_width = latents.shape
|
||||
latents_bsz, channels, latents_height, latents_width = latents.shape
|
||||
latents = self.vqvae.quantize(latents)[2][2].reshape(latents_bsz, latents_height, latents_width)
|
||||
latents = self.scheduler.add_noise(
|
||||
latents, self.scheduler.timesteps[start_timestep_idx - 1], generator=generator
|
||||
|
||||
@@ -289,7 +289,7 @@ class MeissonicInpaintPipeline(DiffusionPipeline):
|
||||
self.vqvae.float()
|
||||
|
||||
latents = self.vqvae.encode(image.to(dtype=self.vqvae.dtype, device=self._execution_device)).latents
|
||||
latents_bsz, _channels, latents_height, latents_width = latents.shape
|
||||
latents_bsz, channels, latents_height, latents_width = latents.shape
|
||||
latents = self.vqvae.quantize(latents)[2][2].reshape(latents_bsz, latents_height, latents_width)
|
||||
|
||||
mask = self.mask_processor.preprocess(
|
||||
|
||||
@@ -22,7 +22,7 @@ import torch.nn.functional as F
|
||||
|
||||
from diffusers.configuration_utils import ConfigMixin, register_to_config
|
||||
from diffusers.loaders import FromOriginalModelMixin, PeftAdapterMixin
|
||||
from diffusers.models.attention import FeedForward, SkipFFTransformerBlock
|
||||
from diffusers.models.attention import FeedForward, BasicTransformerBlock, SkipFFTransformerBlock
|
||||
from diffusers.models.attention_processor import (
|
||||
Attention,
|
||||
AttentionProcessor,
|
||||
@@ -30,7 +30,7 @@ from diffusers.models.attention_processor import (
|
||||
# FusedFluxAttnProcessor2_0,
|
||||
)
|
||||
from diffusers.models.modeling_utils import ModelMixin
|
||||
from diffusers.models.normalization import AdaLayerNormZero, AdaLayerNormZeroSingle, GlobalResponseNorm, RMSNorm
|
||||
from diffusers.models.normalization import AdaLayerNormContinuous, AdaLayerNormZero, AdaLayerNormZeroSingle, GlobalResponseNorm, RMSNorm
|
||||
from diffusers.utils import USE_PEFT_BACKEND, is_torch_version, logging, scale_lora_layers, unscale_lora_layers
|
||||
from diffusers.utils.torch_utils import maybe_allow_in_graph
|
||||
from diffusers.models.embeddings import CombinedTimestepGuidanceTextProjEmbeddings, CombinedTimestepTextProjEmbeddings,TimestepEmbedding, get_timestep_embedding #,FluxPosEmbed
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user