hololens's picture
Upload folder using huggingface_hub
e04dce3 verified
# DepthMap can be run inside stable-diffusion-webui, but also separately.
# All the stable-diffusion-webui stuff that the DepthMap relies on
# must be resided in this file (or in the scripts folder).
import pathlib
from datetime import datetime
import enum
import sys
class BackboneType(enum.Enum):
WEBUI = 1
STANDALONE = 2
try:
# stable-diffusion-webui backbone
from modules.images import save_image # Should fail if not on stable-diffusion-webui
from modules.devices import torch_gc # TODO: is this really sufficient?
from modules.images import get_next_sequence_number
from modules.call_queue import wrap_gradio_gpu_call
from modules.shared import listfiles
def get_opt(name, default):
from modules.shared import opts
if hasattr(opts, name):
return opts.__getattr__(name)
return default
def get_cmd_opt(name, default):
"""Get command line argument"""
from modules.shared import cmd_opts
if hasattr(cmd_opts, name):
return cmd_opts.__getattribute__(name)
return default
def gather_ops():
"""Parameters for depthmap generation"""
ops = {}
for s in ['boost_rmax', 'precision', 'no_half', 'marigold_ensembles', 'marigold_steps']:
c = get_opt('depthmap_script_' + s, None)
if c is None:
c = get_cmd_opt(s, None)
if c is not None:
ops[s] = c
# sanitize for integers.
for s in ['marigold_ensembles', 'marigold_steps']:
if s in ops:
ops[s] = int(ops[s])
return ops
def get_outpath():
"""Get path where results are saved by default"""
path = get_opt('outdir_samples', None)
if path is None or len(path) == 0:
path = get_opt('outdir_extras_samples', None)
assert path is not None and len(path) > 0
return path
def unload_sd_model():
from modules import shared, devices
if shared.sd_model is not None:
if shared.sd_model.cond_stage_model is not None:
shared.sd_model.cond_stage_model.to(devices.cpu)
if shared.sd_model.first_stage_model is not None:
shared.sd_model.first_stage_model.to(devices.cpu)
# Maybe something else???
def reload_sd_model():
from modules import shared, devices
if shared.sd_model is not None:
if shared.sd_model.cond_stage_model is not None:
shared.sd_model.cond_stage_model.to(devices.device)
if shared.sd_model.first_stage_model:
shared.sd_model.first_stage_model.to(devices.device)
# Maybe something else???
def get_hide_dirs():
import modules.shared
return modules.shared.hide_dirs
USED_BACKBONE = BackboneType.WEBUI
except:
# Standalone backbone
print( # " DepthMap did not detect stable-diffusion-webui; launching with the standalone backbone.\n"
" The standalone mode is not on par with the stable-diffusion-webui mode.\n"
" Some features may be missing or work differently. Please report bugs.\n")
def save_image(image, path, basename, **kwargs):
import os
os.makedirs(path, exist_ok=True)
if 'suffix' not in kwargs or len(kwargs['suffix']) == 0:
kwargs['suffix'] = ''
else:
kwargs['suffix'] = f"-{kwargs['suffix']}"
format = get_opt('samples_format', kwargs['extension'])
fullfn = os.path.join(
path, f"{basename}-{get_next_sequence_number(path, basename)}{kwargs['suffix']}.{format}")
image.save(fullfn, format=format)
def torch_gc():
# TODO: is this really sufficient?
import torch
if torch.cuda.is_available():
with torch.cuda.device('cuda'):
torch.cuda.empty_cache()
torch.cuda.ipc_collect()
launched_at = int(datetime.now().timestamp())
backbone_current_seq_number = 0
# Make sure to preserve the function signature when calling!
def get_next_sequence_number(outpath, basename):
global backbone_current_seq_number
backbone_current_seq_number += 1
return int(f"{launched_at}{backbone_current_seq_number:04}")
def wrap_gradio_gpu_call(f): return f # Displaying various stats is not supported
def listfiles(dirname):
import os
filenames = [os.path.join(dirname, x) for x in sorted(os.listdir(dirname)) if not x.startswith(".")]
return [file for file in filenames if os.path.isfile(file)]
def get_opt(name, default): return default # Configuring is not supported
def get_cmd_opt(name, default): return default # Configuring is not supported
def gather_ops(): # Configuring is not supported
return {'boost_rmax': 1600,
'precision': 'autocast',
'no_half': False,
'marigold_ensembles': 5,
'marigold_steps': 12}
def get_outpath(): return str(pathlib.Path('.', 'outputs'))
def unload_sd_model(): pass # Not needed
def reload_sd_model(): pass # Not needed
def get_hide_dirs(): return {} # Directories will not be hidden from traversal (except when starts with the dot)
USED_BACKBONE = BackboneType.STANDALONE