MCPcopy Create free account
hub / github.com/modelscope/DiffSynth-Studio / __call__

Method __call__

diffsynth/pipelines/sd_image.py:91–191  ·  view source on GitHub ↗
(
        self,
        prompt,
        local_prompts=[],
        masks=[],
        mask_scales=[],
        negative_prompt="",
        cfg_scale=7.5,
        clip_skip=1,
        input_image=None,
        ipadapter_images=None,
        ipadapter_scale=1.0,
        controlnet_image=None,
        denoising_strength=1.0,
        height=512,
        width=512,
        num_inference_steps=20,
        tiled=False,
        tile_size=64,
        tile_stride=32,
        seed=None,
        progress_bar_cmd=tqdm,
        progress_bar_st=None,
    )

Source from the content-addressed store, hash-verified

89
90 @torch.no_grad()
91 def __call__(
92 self,
93 prompt,
94 local_prompts=[],
95 masks=[],
96 mask_scales=[],
97 negative_prompt="",
98 cfg_scale=7.5,
99 clip_skip=1,
100 input_image=None,
101 ipadapter_images=None,
102 ipadapter_scale=1.0,
103 controlnet_image=None,
104 denoising_strength=1.0,
105 height=512,
106 width=512,
107 num_inference_steps=20,
108 tiled=False,
109 tile_size=64,
110 tile_stride=32,
111 seed=None,
112 progress_bar_cmd=tqdm,
113 progress_bar_st=None,
114 ):
115 height, width = self.check_resize_height_width(height, width)
116
117 # Tiler parameters
118 tiler_kwargs = {"tiled": tiled, "tile_size": tile_size, "tile_stride": tile_stride}
119
120 # Prepare scheduler
121 self.scheduler.set_timesteps(num_inference_steps, denoising_strength)
122
123 # Prepare latent tensors
124 if input_image is not None:
125 self.load_models_to_device(['vae_encoder'])
126 image = self.preprocess_image(input_image).to(device=self.device, dtype=self.torch_dtype)
127 latents = self.encode_image(image, **tiler_kwargs)
128 noise = self.generate_noise((1, 4, height//8, width//8), seed=seed, device=self.device, dtype=self.torch_dtype)
129 latents = self.scheduler.add_noise(latents, noise, timestep=self.scheduler.timesteps[0])
130 else:
131 latents = self.generate_noise((1, 4, height//8, width//8), seed=seed, device=self.device, dtype=self.torch_dtype)
132
133 # Encode prompts
134 self.load_models_to_device(['text_encoder'])
135 prompt_emb_posi = self.encode_prompt(prompt, clip_skip=clip_skip, positive=True)
136 prompt_emb_nega = self.encode_prompt(negative_prompt, clip_skip=clip_skip, positive=False)
137 prompt_emb_locals = [self.encode_prompt(prompt_local, clip_skip=clip_skip, positive=True) for prompt_local in local_prompts]
138
139 # IP-Adapter
140 if ipadapter_images is not None:
141 self.load_models_to_device(['ipadapter_image_encoder'])
142 ipadapter_image_encoding = self.ipadapter_image_encoder(ipadapter_images)
143 self.load_models_to_device(['ipadapter'])
144 ipadapter_kwargs_list_posi = {"ipadapter_kwargs_list": self.ipadapter(ipadapter_image_encoding, scale=ipadapter_scale)}
145 ipadapter_kwargs_list_nega = {"ipadapter_kwargs_list": self.ipadapter(torch.zeros_like(ipadapter_image_encoding))}
146 else:
147 ipadapter_kwargs_list_posi, ipadapter_kwargs_list_nega = {"ipadapter_kwargs_list": {}}, {"ipadapter_kwargs_list": {}}
148

Callers

nothing calls this directly

Calls 14

encode_imageMethod · 0.95
encode_promptMethod · 0.95
decode_imageMethod · 0.95
lets_danceFunction · 0.85
set_timestepsMethod · 0.45
load_models_to_deviceMethod · 0.45
toMethod · 0.45
preprocess_imageMethod · 0.45
generate_noiseMethod · 0.45
add_noiseMethod · 0.45

Tested by

no test coverage detected