shared_items.py 5.1 KB

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