(p: processing.StableDiffusionProcessing, output)
| 367 | |
| 368 | |
| 369 | def process_refine(p: processing.StableDiffusionProcessing, output): |
| 370 | # optional refiner pass or decode |
| 371 | if (output is None) or not hasattr(output, 'images') or (output.images is None): |
| 372 | return output |
| 373 | if is_refiner_enabled(p): |
| 374 | if shared.opts.samples_save and not p.do_not_save_samples and shared.opts.save_images_before_refiner and hasattr(shared.sd_model, 'vae'): |
| 375 | save_intermediate(p, latents=output.images, suffix="-before-refiner") |
| 376 | if shared.opts.diffusers_move_base: |
| 377 | log.debug('Moving to CPU: model=base') |
| 378 | sd_models.move_model(shared.sd_model, devices.cpu) |
| 379 | if shared.state.interrupted or shared.state.skipped: |
| 380 | shared.sd_model = orig_pipeline |
| 381 | return output |
| 382 | jobid = shared.state.begin('Refine') |
| 383 | shared.sd_model = sd_models.apply_balanced_offload(shared.sd_model) |
| 384 | if shared.opts.diffusers_move_refiner: |
| 385 | sd_models.move_model(shared.sd_refiner, devices.device) |
| 386 | if hasattr(shared.sd_refiner, 'unet'): |
| 387 | sd_models.move_model(shared.sd_model.unet, devices.device) |
| 388 | if hasattr(shared.sd_refiner, 'transformer'): |
| 389 | sd_models.move_model(shared.sd_model.transformer, devices.device) |
| 390 | p.ops.append('refine') |
| 391 | p.is_refiner_pass = True |
| 392 | |
| 393 | sd_models_compile.openvino_recompile_model(p, hires=False, refiner=True) |
| 394 | shared.sd_model = sd_models.set_diffuser_pipe(shared.sd_model, sd_models.DiffusersTaskType.TEXT_2_IMAGE) |
| 395 | shared.sd_refiner = sd_models.set_diffuser_pipe(shared.sd_refiner, sd_models.DiffusersTaskType.IMAGE_2_IMAGE) |
| 396 | for i in range(len(output.images)): |
| 397 | image = output.images[i] |
| 398 | noise_level = round(350 * p.denoising_strength) |
| 399 | refiner_output_type = output_type |
| 400 | if 'Upscale' in shared.sd_refiner.__class__.__name__ or 'Flux' in shared.sd_refiner.__class__.__name__ or 'Kandinsky' in shared.sd_refiner.__class__.__name__: |
| 401 | image = processing_vae.vae_decode(latents=image, model=shared.sd_model, vae_type=p.vae_type, output_type='pil', width=p.width, height=p.height) |
| 402 | p.extra_generation_params['Noise level'] = noise_level |
| 403 | refiner_output_type = 'np' |
| 404 | update_sampler(p, shared.sd_refiner, second_pass=True) |
| 405 | sched_eta = p.scheduler_eta if p.scheduler_eta is not None else shared.opts.scheduler_eta |
| 406 | refiner_args = set_pipeline_args( |
| 407 | p=p, |
| 408 | model=shared.sd_refiner, |
| 409 | prompts=[p.refiner_prompt] if len(p.refiner_prompt) > 0 else p.prompts[i], |
| 410 | negative_prompts=[p.refiner_negative] if len(p.refiner_negative) > 0 else p.negative_prompts[i], |
| 411 | num_inference_steps=calculate_refiner_steps(p), |
| 412 | eta=sched_eta, |
| 413 | noise_level=noise_level, # StableDiffusionUpscalePipeline only |
| 414 | guidance_scale=p.cfg_image if p.cfg_image is not None and p.cfg_image > -1 else p.cfg_scale, |
| 415 | guidance_rescale=p.cfg_rescale if p.cfg_rescale is not None and p.cfg_rescale > -1 else None, |
| 416 | true_cfg_scale=p.cfg_true if p.cfg_true is not None and p.cfg_true > -1 else None, |
| 417 | denoising_start=p.refiner_start if p.refiner_start > 0 and p.refiner_start < 1 else None, |
| 418 | denoising_end=1 if p.refiner_start > 0 and p.refiner_start < 1 else None, |
| 419 | image=image, |
| 420 | output_type=refiner_output_type, |
| 421 | clip_skip=p.clip_skip, |
| 422 | prompt_attention='fixed', |
| 423 | desc='Refiner', |
| 424 | ) |
| 425 | refiner_steps = refiner_args.get('prior_num_inference_steps', None) or p.steps or refiner_args.get('num_inference_steps', None) |
| 426 | shared.state.update(get_job_name(p, shared.sd_refiner), refiner_steps, 1) |
no test coverage detected