(
self,
prompt,
negative_prompt="",
cfg_scale=7.5,
clip_skip=1,
num_frames=None,
input_frames=None,
ipadapter_images=None,
ipadapter_scale=1.0,
controlnet_frames=None,
denoising_strength=1.0,
height=512,
width=512,
num_inference_steps=20,
animatediff_batch_size = 16,
animatediff_stride = 8,
unet_batch_size = 1,
controlnet_batch_size = 1,
cross_frame_attention = False,
smoother=None,
smoother_progress_ids=[],
tiled=False,
tile_size=64,
tile_stride=32,
seed=None,
progress_bar_cmd=tqdm,
progress_bar_st=None,
)
| 142 | |
| 143 | @torch.no_grad() |
| 144 | def __call__( |
| 145 | self, |
| 146 | prompt, |
| 147 | negative_prompt="", |
| 148 | cfg_scale=7.5, |
| 149 | clip_skip=1, |
| 150 | num_frames=None, |
| 151 | input_frames=None, |
| 152 | ipadapter_images=None, |
| 153 | ipadapter_scale=1.0, |
| 154 | controlnet_frames=None, |
| 155 | denoising_strength=1.0, |
| 156 | height=512, |
| 157 | width=512, |
| 158 | num_inference_steps=20, |
| 159 | animatediff_batch_size = 16, |
| 160 | animatediff_stride = 8, |
| 161 | unet_batch_size = 1, |
| 162 | controlnet_batch_size = 1, |
| 163 | cross_frame_attention = False, |
| 164 | smoother=None, |
| 165 | smoother_progress_ids=[], |
| 166 | tiled=False, |
| 167 | tile_size=64, |
| 168 | tile_stride=32, |
| 169 | seed=None, |
| 170 | progress_bar_cmd=tqdm, |
| 171 | progress_bar_st=None, |
| 172 | ): |
| 173 | height, width = self.check_resize_height_width(height, width) |
| 174 | |
| 175 | # Tiler parameters, batch size ... |
| 176 | tiler_kwargs = {"tiled": tiled, "tile_size": tile_size, "tile_stride": tile_stride} |
| 177 | other_kwargs = { |
| 178 | "animatediff_batch_size": animatediff_batch_size, "animatediff_stride": animatediff_stride, |
| 179 | "unet_batch_size": unet_batch_size, "controlnet_batch_size": controlnet_batch_size, |
| 180 | "cross_frame_attention": cross_frame_attention, |
| 181 | } |
| 182 | |
| 183 | # Prepare scheduler |
| 184 | self.scheduler.set_timesteps(num_inference_steps, denoising_strength) |
| 185 | |
| 186 | # Prepare latent tensors |
| 187 | if self.motion_modules is None: |
| 188 | noise = self.generate_noise((1, 4, height//8, width//8), seed=seed, device="cpu", dtype=self.torch_dtype).repeat(num_frames, 1, 1, 1) |
| 189 | else: |
| 190 | noise = self.generate_noise((num_frames, 4, height//8, width//8), seed=seed, device="cpu", dtype=self.torch_dtype) |
| 191 | if input_frames is None or denoising_strength == 1.0: |
| 192 | latents = noise |
| 193 | else: |
| 194 | latents = self.encode_video(input_frames, **tiler_kwargs) |
| 195 | latents = self.scheduler.add_noise(latents, noise, timestep=self.scheduler.timesteps[0]) |
| 196 | |
| 197 | # Encode prompts |
| 198 | prompt_emb_posi = self.encode_prompt(prompt, clip_skip=clip_skip, positive=True) |
| 199 | prompt_emb_nega = self.encode_prompt(negative_prompt, clip_skip=clip_skip, positive=False) |
| 200 | |
| 201 | # IP-Adapter |
nothing calls this directly
no test coverage detected