shared_items.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. import html
  2. import sys
  3. from modules import script_callbacks, scripts, ui_components
  4. from modules.options import OptionHTML, OptionInfo
  5. from modules.shared_cmd_options import cmd_opts
  6. def realesrgan_models_names():
  7. import modules.realesrgan_model
  8. return [x.name for x in modules.realesrgan_model.get_realesrgan_models(None)]
  9. def dat_models_names():
  10. import modules.dat_model
  11. return [x.name for x in modules.dat_model.get_dat_models(None)]
  12. def postprocessing_scripts():
  13. import modules.scripts
  14. return modules.scripts.scripts_postproc.scripts
  15. def sd_vae_items():
  16. import modules.sd_vae
  17. return ["Automatic", "None"] + list(modules.sd_vae.vae_dict)
  18. def refresh_vae_list():
  19. import modules.sd_vae
  20. modules.sd_vae.refresh_vae_list()
  21. def cross_attention_optimizations():
  22. import modules.sd_hijack
  23. return ["Automatic"] + [x.title() for x in modules.sd_hijack.optimizers] + ["None"]
  24. def sd_unet_items():
  25. import modules.sd_unet
  26. return ["Automatic"] + [x.label for x in modules.sd_unet.unet_options] + ["None"]
  27. def refresh_unet_list():
  28. import modules.sd_unet
  29. modules.sd_unet.list_unets()
  30. def list_checkpoint_tiles(use_short=False):
  31. import modules.sd_models
  32. return modules.sd_models.checkpoint_tiles(use_short)
  33. def refresh_checkpoints():
  34. import modules.sd_models
  35. return modules.sd_models.list_models()
  36. def list_samplers():
  37. import modules.sd_samplers
  38. return modules.sd_samplers.all_samplers
  39. def reload_hypernetworks():
  40. from modules.hypernetworks import hypernetwork
  41. from modules import shared
  42. shared.hypernetworks = hypernetwork.list_hypernetworks(cmd_opts.hypernetwork_dir)
  43. def get_infotext_names():
  44. from modules import infotext_utils, shared
  45. res = {}
  46. for info in shared.opts.data_labels.values():
  47. if info.infotext:
  48. res[info.infotext] = 1
  49. for tab_data in infotext_utils.paste_fields.values():
  50. for _, name in tab_data.get("fields") or []:
  51. if isinstance(name, str):
  52. res[name] = 1
  53. return list(res)
  54. ui_reorder_categories_builtin_items = [
  55. "prompt",
  56. "image",
  57. "inpaint",
  58. "sampler",
  59. "accordions",
  60. "checkboxes",
  61. "dimensions",
  62. "cfg",
  63. "denoising",
  64. "seed",
  65. "batch",
  66. "override_settings",
  67. ]
  68. def ui_reorder_categories():
  69. from modules import scripts
  70. yield from ui_reorder_categories_builtin_items
  71. sections = {}
  72. for script in scripts.scripts_txt2img.scripts + scripts.scripts_img2img.scripts:
  73. if isinstance(script.section, str) and script.section not in ui_reorder_categories_builtin_items:
  74. sections[script.section] = 1
  75. yield from sections
  76. yield "scripts"
  77. def callbacks_order_settings():
  78. options = {
  79. "sd_vae_explanation": OptionHTML("""
  80. For categories below, callbacks added to dropdowns happen before others, in order listed.
  81. """),
  82. }
  83. callback_options = {}
  84. for category, _ in script_callbacks.enumerate_callbacks():
  85. callback_options[category] = script_callbacks.ordered_callbacks(category, enable_user_sort=False)
  86. for method_name in scripts.scripts_txt2img.callback_names:
  87. callback_options["script_" + method_name] = scripts.scripts_txt2img.create_ordered_callbacks_list(method_name, enable_user_sort=False)
  88. for method_name in scripts.scripts_img2img.callback_names:
  89. callbacks = callback_options.get("script_" + method_name, [])
  90. for addition in scripts.scripts_img2img.create_ordered_callbacks_list(method_name, enable_user_sort=False):
  91. if any(x.name == addition.name for x in callbacks):
  92. continue
  93. callbacks.append(addition)
  94. callback_options["script_" + method_name] = callbacks
  95. for category, callbacks in callback_options.items():
  96. if not callbacks:
  97. continue
  98. option_info = OptionInfo([], f"{category} callback priority", ui_components.DropdownMulti, {"choices": [x.name for x in callbacks]})
  99. option_info.needs_restart()
  100. option_info.html("<div class='info'>Default order: <ol>" + "".join(f"<li>{html.escape(x.name)}</li>\n" for x in callbacks) + "</ol></div>")
  101. options['prioritized_callbacks_' + category] = option_info
  102. return options
  103. class Shared(sys.modules[__name__].__class__):
  104. """
  105. this class is here to provide sd_model field as a property, so that it can be created and loaded on demand rather than
  106. at program startup.
  107. """
  108. sd_model_val = None
  109. @property
  110. def sd_model(self):
  111. import modules.sd_models
  112. return modules.sd_models.model_data.get_sd_model()
  113. @sd_model.setter
  114. def sd_model(self, value):
  115. import modules.sd_models
  116. modules.sd_models.model_data.set_sd_model(value)
  117. sys.modules['modules.shared'].__class__ = Shared