Spaces:
Runtime error
Runtime error
| import os | |
| from lama_cleaner.const import SD_CONTROLNET_CHOICES | |
| os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1" | |
| from pathlib import Path | |
| import pytest | |
| import torch | |
| from lama_cleaner.model_manager import ModelManager | |
| from lama_cleaner.schema import HDStrategy, SDSampler | |
| from lama_cleaner.tests.test_model import get_config, assert_equal | |
| current_dir = Path(__file__).parent.absolute().resolve() | |
| save_dir = current_dir / "result" | |
| save_dir.mkdir(exist_ok=True, parents=True) | |
| device = "cuda" if torch.cuda.is_available() else "cpu" | |
| device = torch.device(device) | |
| def test_runway_sd_1_5( | |
| sd_device, strategy, sampler, cpu_textencoder, disable_nsfw, sd_controlnet_method | |
| ): | |
| if sd_device == "cuda" and not torch.cuda.is_available(): | |
| return | |
| if device == "mps" and not torch.backends.mps.is_available(): | |
| return | |
| sd_steps = 1 if sd_device == "cpu" else 30 | |
| model = ModelManager( | |
| name="sd1.5", | |
| sd_controlnet=True, | |
| device=torch.device(sd_device), | |
| hf_access_token="", | |
| sd_run_local=False, | |
| disable_nsfw=disable_nsfw, | |
| sd_cpu_textencoder=cpu_textencoder, | |
| sd_controlnet_method=sd_controlnet_method, | |
| ) | |
| controlnet_conditioning_scale = { | |
| "control_v11p_sd15_canny": 0.4, | |
| "control_v11p_sd15_openpose": 0.4, | |
| "control_v11p_sd15_inpaint": 1.0, | |
| "control_v11f1p_sd15_depth": 1.0, | |
| }[sd_controlnet_method] | |
| cfg = get_config( | |
| strategy, | |
| prompt="a fox sitting on a bench", | |
| sd_steps=sd_steps, | |
| controlnet_conditioning_scale=controlnet_conditioning_scale, | |
| controlnet_method=sd_controlnet_method, | |
| ) | |
| cfg.sd_sampler = sampler | |
| name = f"device_{sd_device}_{sampler}_cpu_textencoder_disable_nsfw" | |
| assert_equal( | |
| model, | |
| cfg, | |
| f"sd_controlnet_{sd_controlnet_method}_{name}.png", | |
| img_p=current_dir / "overture-creations-5sI6fQgYIuo.png", | |
| mask_p=current_dir / "overture-creations-5sI6fQgYIuo_mask.png", | |
| fx=1.2, | |
| fy=1.2, | |
| ) | |
| def test_local_file_path(sd_device, sampler): | |
| if sd_device == "cuda" and not torch.cuda.is_available(): | |
| return | |
| if device == "mps" and not torch.backends.mps.is_available(): | |
| return | |
| sd_steps = 1 if sd_device == "cpu" else 30 | |
| model = ModelManager( | |
| name="sd1.5", | |
| sd_controlnet=True, | |
| device=torch.device(sd_device), | |
| hf_access_token="", | |
| sd_run_local=False, | |
| disable_nsfw=True, | |
| sd_cpu_textencoder=False, | |
| cpu_offload=True, | |
| sd_local_model_path="/Users/cwq/data/models/sd-v1-5-inpainting.ckpt", | |
| sd_controlnet_method="control_v11p_sd15_canny", | |
| ) | |
| cfg = get_config( | |
| HDStrategy.ORIGINAL, | |
| prompt="a fox sitting on a bench", | |
| sd_steps=sd_steps, | |
| controlnet_method="control_v11p_sd15_canny", | |
| ) | |
| cfg.sd_sampler = sampler | |
| name = f"device_{sd_device}_{sampler}" | |
| assert_equal( | |
| model, | |
| cfg, | |
| f"sd_controlnet_canny_local_model_{name}.png", | |
| img_p=current_dir / "overture-creations-5sI6fQgYIuo.png", | |
| mask_p=current_dir / "overture-creations-5sI6fQgYIuo_mask.png", | |
| ) | |
| def test_local_file_path_controlnet_native_inpainting(sd_device, sampler): | |
| if sd_device == "cuda" and not torch.cuda.is_available(): | |
| return | |
| if device == "mps" and not torch.backends.mps.is_available(): | |
| return | |
| sd_steps = 1 if sd_device == "cpu" else 30 | |
| model = ModelManager( | |
| name="sd1.5", | |
| sd_controlnet=True, | |
| device=torch.device(sd_device), | |
| hf_access_token="", | |
| sd_run_local=False, | |
| disable_nsfw=True, | |
| sd_cpu_textencoder=False, | |
| cpu_offload=True, | |
| sd_local_model_path="/Users/cwq/data/models/v1-5-pruned-emaonly.safetensors", | |
| sd_controlnet_method="control_v11p_sd15_inpaint", | |
| ) | |
| cfg = get_config( | |
| HDStrategy.ORIGINAL, | |
| prompt="a fox sitting on a bench", | |
| sd_steps=sd_steps, | |
| controlnet_conditioning_scale=1.0, | |
| sd_strength=1.0, | |
| controlnet_method="control_v11p_sd15_inpaint", | |
| ) | |
| cfg.sd_sampler = sampler | |
| name = f"device_{sd_device}_{sampler}" | |
| assert_equal( | |
| model, | |
| cfg, | |
| f"sd_controlnet_local_native_{name}.png", | |
| img_p=current_dir / "overture-creations-5sI6fQgYIuo.png", | |
| mask_p=current_dir / "overture-creations-5sI6fQgYIuo_mask.png", | |
| ) | |
| def test_controlnet_switch(sd_device, sampler): | |
| if sd_device == "cuda" and not torch.cuda.is_available(): | |
| return | |
| if device == "mps" and not torch.backends.mps.is_available(): | |
| return | |
| sd_steps = 1 if sd_device == "cpu" else 30 | |
| model = ModelManager( | |
| name="sd1.5", | |
| sd_controlnet=True, | |
| device=torch.device(sd_device), | |
| hf_access_token="", | |
| sd_run_local=False, | |
| disable_nsfw=True, | |
| sd_cpu_textencoder=False, | |
| cpu_offload=True, | |
| sd_controlnet_method="control_v11p_sd15_canny", | |
| ) | |
| cfg = get_config( | |
| HDStrategy.ORIGINAL, | |
| prompt="a fox sitting on a bench", | |
| sd_steps=sd_steps, | |
| controlnet_method="control_v11p_sd15_inpaint", | |
| ) | |
| cfg.sd_sampler = sampler | |
| name = f"device_{sd_device}_{sampler}" | |
| assert_equal( | |
| model, | |
| cfg, | |
| f"sd_controlnet_switch_to_inpaint_local_model_{name}.png", | |
| img_p=current_dir / "overture-creations-5sI6fQgYIuo.png", | |
| mask_p=current_dir / "overture-creations-5sI6fQgYIuo_mask.png", | |
| ) | |