DrCyanide / cyanic-sd-krita

A Stable Diffusion plugin for Krita, compatible with A1111 and SD.Next
70 stars 4 forks source link

Startup error #12

Closed Miraihi closed 1 year ago

Miraihi commented 1 year ago

Getting an error at startup at the latest commit (d586519). Reverting to the previous commit (d586519) fixes the issue.

Log:

AttributeError
Python 3.10.7: C:\Program Files (x86)\Steam\steamapps\common\Krita\krita\bin\krita.exe
Thu Oct 19 23:12:33 2023

A problem occurred in a Python script.  Here is the sequence of
function calls leading up to the error, in the order they occurred.

 C:\Program Files (x86)\Steam\steamapps\common\Krita\krita\lib\krita-python-libs\krita\dockwidgetfactory.py in createDockWidget(self=<krita.dockwidgetfactory.DockWidgetFactory object>)
   14         super(DockWidgetFactory, self).__init__(_id, _dockPosition)
   15         self.klass = _klass
   16 
   17     def createDockWidget(self):
   18         return self.klass()
self = <krita.dockwidgetfactory.DockWidgetFactory object>
self.klass = <class 'cyanic.cyanic.CyanicDocker'>

 C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\cyanic.py in __init__(self=<cyanic.cyanic.CyanicDocker object>)
   12         super().__init__()
   13         self.settings_controller = SettingsController()
   14         self.api = SDAPI(self.settings_controller.get('server.host') if self.settings_controller.has_key('server.host') else DEFAULT_HOST)
   15 
   16         self.setWindowTitle("Cyanic SD")
self = <cyanic.cyanic.CyanicDocker object>
self.api undefined
global SDAPI = <class 'cyanic.sdapi_v1.SDAPI'>
self.settings_controller = <cyanic.settings_controller.SettingsController object>
self.settings_controller.get = <bound method SettingsController.get of <cyanic.settings_controller.SettingsController object>>
self.settings_controller.has_key = <bound method SettingsController.has_key of <cyanic.settings_controller.SettingsController object>>
global DEFAULT_HOST = 'http://127.0.0.1:7860'

 C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\sdapi_v1.py in __init__(self=<cyanic.sdapi_v1.SDAPI object>, host='http://127.0.0.1:7860')
   34         self.connected = False
   35         self.last_url = ''
   36         self.init_api()
   37 
   38     def change_host(self, host=DEFAULT_HOST):
self = <cyanic.sdapi_v1.SDAPI object>
self.init_api = <bound method SDAPI.init_api of <cyanic.sdapi_v1.SDAPI object>>

 C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\sdapi_v1.py in init_api(self=<cyanic.sdapi_v1.SDAPI object>)
   61         ]
   62         for process in init_processes:
   63             process()
   64 
   65     def post(self, url, data):
process = <bound method SDAPI.get_options of <cyanic.sdapi_v1.SDAPI object>>

 C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\sdapi_v1.py in get_options(self=<cyanic.sdapi_v1.SDAPI object>)
  105         self.default_settings = self.get("/sdapi/v1/options")
  106         # self.defaults['sampler'] = There isn't one in settings
  107         self.defaults['model'] = self.default_settings.get('sd_model_checkpoint', '')
  108         self.defaults['vae'] = self.default_settings.get('sd_vae', '')
  109         # self.defaults['upscaler'] = There isn't one in settings
self = <cyanic.sdapi_v1.SDAPI object>
self.defaults = {'color_correction': True, 'face_restorer': '', 'model': '', 'refiner': '', 'sampler': '', 'upscaler': '', 'vae': ''}
self.default_settings = None
self.default_settings.get undefined
AttributeError: 'NoneType' object has no attribute 'get'
    __cause__ = None
    __class__ = <class 'AttributeError'>
    __context__ = None
    __delattr__ = <method-wrapper '__delattr__' of AttributeError object>
    __dict__ = {}
    __dir__ = <built-in method __dir__ of AttributeError object>
    __doc__ = 'Attribute not found.'
    __eq__ = <method-wrapper '__eq__' of AttributeError object>
    __format__ = <built-in method __format__ of AttributeError object>
    __ge__ = <method-wrapper '__ge__' of AttributeError object>
    __getattribute__ = <method-wrapper '__getattribute__' of AttributeError object>
    __gt__ = <method-wrapper '__gt__' of AttributeError object>
    __hash__ = <method-wrapper '__hash__' of AttributeError object>
    __init__ = <method-wrapper '__init__' of AttributeError object>
    __init_subclass__ = <built-in method __init_subclass__ of type object>
    __le__ = <method-wrapper '__le__' of AttributeError object>
    __lt__ = <method-wrapper '__lt__' of AttributeError object>
    __ne__ = <method-wrapper '__ne__' of AttributeError object>
    __new__ = <built-in method __new__ of type object>
    __reduce__ = <built-in method __reduce__ of AttributeError object>
    __reduce_ex__ = <built-in method __reduce_ex__ of AttributeError object>
    __repr__ = <method-wrapper '__repr__' of AttributeError object>
    __setattr__ = <method-wrapper '__setattr__' of AttributeError object>
    __setstate__ = <built-in method __setstate__ of AttributeError object>
    __sizeof__ = <built-in method __sizeof__ of AttributeError object>
    __str__ = <method-wrapper '__str__' of AttributeError object>
    __subclasshook__ = <built-in method __subclasshook__ of type object>
    __suppress_context__ = False
    __traceback__ = <traceback object>
    args = ("'NoneType' object has no attribute 'get'",)
    name = 'get'
    obj = None
    with_traceback = <built-in method with_traceback of AttributeError object>

The above is a description of an error in a Python program.  Here is
the original traceback:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Steam\steamapps\common\Krita\krita\lib\krita-python-libs\krita\dockwidgetfactory.py", line 18, in createDockWidget
    return self.klass()
  File "C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\cyanic.py", line 14, in __init__
    self.api = SDAPI(self.settings_controller.get('server.host') if self.settings_controller.has_key('server.host') else DEFAULT_HOST)
  File "C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\sdapi_v1.py", line 36, in __init__
    self.init_api()
  File "C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\sdapi_v1.py", line 63, in init_api
    process()
  File "C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\sdapi_v1.py", line 107, in get_options
    self.defaults['model'] = self.default_settings.get('sd_model_checkpoint', '')
AttributeError: 'NoneType' object has no attribute 'get'
DrCyanide commented 1 year ago

Ah... looks like the changes I made to how I handled API requests broke how I determined if the server was running or not. The plugin always thought the server was running and would try to get data, which would be None, which broke everything else...

This should be fixed now.