Spaces:
Running
on
Zero
Running
on
Zero
# Open Source Model Licensed under the Apache License Version 2.0 | |
# and Other Licenses of the Third-Party Components therein: | |
# The below Model in this distribution may have been modified by THL A29 Limited | |
# ("Tencent Modifications"). All Tencent Modifications are Copyright (C) 2024 THL A29 Limited. | |
# Copyright (C) 2024 THL A29 Limited, a Tencent company. All rights reserved. | |
# The below software and/or models in this distribution may have been | |
# modified by THL A29 Limited ("Tencent Modifications"). | |
# All Tencent Modifications are Copyright (C) THL A29 Limited. | |
# Hunyuan 3D is licensed under the TENCENT HUNYUAN NON-COMMERCIAL LICENSE AGREEMENT | |
# except for the third-party components listed below. | |
# Hunyuan 3D does not impose any additional limitations beyond what is outlined | |
# in the repsective licenses of these third-party components. | |
# Users must comply with all terms and conditions of original licenses of these third-party | |
# components and must ensure that the usage of the third party components adheres to | |
# all relevant laws and regulations. | |
# For avoidance of doubts, Hunyuan 3D means the large language models and | |
# their software and algorithms, including trained model weights, parameters (including | |
# optimizer states), machine-learning model code, inference-enabling code, training-enabling code, | |
# fine-tuning enabling code and other elements of the foregoing made publicly available | |
# by Tencent in accordance with TENCENT HUNYUAN COMMUNITY LICENSE AGREEMENT. | |
import torch | |
from diffusers import EulerAncestralDiscreteScheduler | |
from diffusers import StableDiffusionControlNetPipeline, StableDiffusionXLControlNetImg2ImgPipeline, ControlNetModel, \ | |
AutoencoderKL | |
class Img2img_Control_Ip_adapter: | |
def __init__(self, device): | |
controlnet = ControlNetModel.from_pretrained('lllyasviel/control_v11f1p_sd15_depth', torch_dtype=torch.float16, | |
variant="fp16", use_safetensors=True) | |
pipe = StableDiffusionControlNetPipeline.from_pretrained( | |
'runwayml/stable-diffusion-v1-5', controlnet=controlnet, torch_dtype=torch.float16, use_safetensors=True | |
) | |
pipe.load_ip_adapter('h94/IP-Adapter', subfolder="models", weight_name="ip-adapter-plus_sd15.safetensors") | |
pipe.set_ip_adapter_scale(0.7) | |
pipe.scheduler = EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config) | |
# pipe.enable_model_cpu_offload() | |
self.pipe = pipe.to(device) | |
def __call__( | |
self, | |
prompt, | |
control_image, | |
ip_adapter_image, | |
negative_prompt, | |
height=512, | |
width=512, | |
num_inference_steps=20, | |
guidance_scale=8.0, | |
controlnet_conditioning_scale=1.0, | |
output_type="pil", | |
**kwargs, | |
): | |
results = self.pipe( | |
prompt=prompt, | |
negative_prompt=negative_prompt, | |
image=control_image, | |
ip_adapter_image=ip_adapter_image, | |
generator=torch.manual_seed(42), | |
seed=42, | |
num_inference_steps=num_inference_steps, | |
guidance_scale=guidance_scale, | |
controlnet_conditioning_scale=controlnet_conditioning_scale, | |
strength=1, | |
# clip_skip=2, | |
height=height, | |
width=width, | |
output_type=output_type, | |
**kwargs, | |
).images[0] | |
return results | |
################################################################ | |
class HesModel: | |
def __init__(self, ): | |
controlnet_depth = ControlNetModel.from_pretrained( | |
'diffusers/controlnet-depth-sdxl-1.0', | |
torch_dtype=torch.float16, | |
variant="fp16", | |
use_safetensors=True | |
) | |
self.pipe = StableDiffusionXLControlNetImg2ImgPipeline.from_pretrained( | |
'stabilityai/stable-diffusion-xl-base-1.0', | |
torch_dtype=torch.float16, | |
variant="fp16", | |
controlnet=controlnet_depth, | |
use_safetensors=True, | |
) | |
self.pipe.vae = AutoencoderKL.from_pretrained( | |
'madebyollin/sdxl-vae-fp16-fix', | |
torch_dtype=torch.float16 | |
) | |
self.pipe.load_ip_adapter('h94/IP-Adapter', subfolder="sdxl_models", weight_name="ip-adapter_sdxl.safetensors") | |
self.pipe.set_ip_adapter_scale(0.7) | |
self.pipe.to("cuda") | |
def __call__(self, | |
init_image, | |
control_image, | |
ip_adapter_image=None, | |
prompt='3D image', | |
negative_prompt='2D image', | |
seed=42, | |
strength=0.8, | |
num_inference_steps=40, | |
guidance_scale=7.5, | |
controlnet_conditioning_scale=0.5, | |
**kwargs | |
): | |
image = self.pipe( | |
prompt=prompt, | |
image=init_image, | |
control_image=control_image, | |
ip_adapter_image=ip_adapter_image, | |
negative_prompt=negative_prompt, | |
num_inference_steps=num_inference_steps, | |
guidance_scale=guidance_scale, | |
strength=strength, | |
controlnet_conditioning_scale=controlnet_conditioning_scale, | |
seed=seed, | |
**kwargs | |
).images[0] | |
return image | |