DrCyanide / cyanic-sd-krita

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

Krita error (unexpected type 'float') #3

Closed Miraihi closed 10 months ago

Miraihi commented 11 months ago

After fiddling a bit with the latest commit (I think I've only set "denoising strength" in Inpaint to 100%), I've found extension to be refusing to work. The error log is as follows:


TypeError: setMinimum(self, int): argument 1 has unexpected type 'float'

TypeError
Python 3.10.7: C:\Program Files (x86)\Steam\steamapps\common\Krita\krita\bin\krita.exe
Wed Oct 11 02:30:07 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>)
   50 
   51         # Set the initial page
   52         self.change_page()
   53 
   54     # This was part of the template, might be relevant later
self = <cyanic.cyanic.CyanicDocker object>
self.change_page = <bound method CyanicDocker.change_page of <cyanic.cyanic.CyanicDocker object>>

 C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\cyanic.py in change_page(self=<cyanic.cyanic.CyanicDocker object>)
   62                 self.settings_controller.set('pages.last', page['name'])
   63                 self.settings_controller.save()
   64                 page['content']()
   65         self.update()
   66 
page = {'content': <bound method CyanicDocker.show_img2img of <cyanic.cyanic.CyanicDocker object>>, 'name': 'Img2Img'}

 C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\cyanic.py in show_img2img(self=<cyanic.cyanic.CyanicDocker object>)
   73 
   74     def show_img2img(self):
   75         self.content_area.setWidget(Img2ImgPage(self.settings_controller, self.api))
   76 
   77     def show_inpaint(self):
self = <cyanic.cyanic.CyanicDocker object>
self.content_area = <PyQt5.QtWidgets.QScrollArea object>
self.content_area.setWidget = <built-in method setWidget of QScrollArea object>
global Img2ImgPage = <class 'cyanic.pages.img2img.Img2ImgPage'>
self.settings_controller = <cyanic.settings_controller.SettingsController object>
self.api = <cyanic.sdapi_v1.SDAPI object>

 C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\pages\img2img.py in __init__(self=<cyanic.pages.img2img.Img2ImgPage object>, settings_controller=<cyanic.settings_controller.SettingsController object>, api=<cyanic.sdapi_v1.SDAPI object>)
   34         self.layout().addWidget(seed_collapsed)
   35 
   36         self.extension_widget = ExtensionWidget(self.settings_controller, self.api)
   37         extension_collapsed = CollapsibleWidget('Extensions', self.extension_widget)
   38         self.layout().addWidget(extension_collapsed)
self = <cyanic.pages.img2img.Img2ImgPage object>
self.extension_widget undefined
global ExtensionWidget = <class 'cyanic.widgets.extensions.ExtensionWidget'>
self.settings_controller = <cyanic.settings_controller.SettingsController object>
self.api = <cyanic.sdapi_v1.SDAPI object>

 C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\widgets\extensions.py in __init__(self=<cyanic.widgets.extensions.ExtensionWidget object>, settings_controller=<cyanic.settings_controller.SettingsController object>, api=<cyanic.sdapi_v1.SDAPI object>)
   18 
   19         if self.server_supported['controlnet']:
   20             self.controlnet_widget = ControlNetExtension(self.settings_controller, self.api)
   21             controlnet_collapse = CollapsibleWidget('ControlNet', self.controlnet_widget)
   22             self.layout().addWidget(controlnet_collapse)
self = <cyanic.widgets.extensions.ExtensionWidget object>
self.controlnet_widget undefined
global ControlNetExtension = <class 'cyanic.extension_widgets.controlnet.ControlNetExtension'>
self.settings_controller = <cyanic.settings_controller.SettingsController object>
self.api = <cyanic.sdapi_v1.SDAPI object>

 C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\extension_widgets\controlnet.py in __init__(self=<cyanic.extension_widgets.controlnet.ControlNetExtension object>, settings_controller=<cyanic.settings_controller.SettingsController object>, api=<cyanic.sdapi_v1.SDAPI object>)
   27         tab_widget = QTabWidget()
   28         for i in range(0, self.cnapi.tabs):
   29             self.units.append(ControlNetUnit(self.settings_controller, self.api, self.cnapi))
   30             tab_widget.addTab(self.units[i], 'Unit %s' % i)
   31 
self = <cyanic.extension_widgets.controlnet.ControlNetExtension object>
self.units = []
self.units.append = <built-in method append of list object>
global ControlNetUnit = <class 'cyanic.extension_widgets.controlnet.ControlNetUnit'>
self.settings_controller = <cyanic.settings_controller.SettingsController object>
self.api = <cyanic.sdapi_v1.SDAPI object>
self.cnapi = <cyanic.extension_widgets.controlnet.ControlNetAPI object>

 C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\extension_widgets\controlnet.py in __init__(self=<cyanic.extension_widgets.controlnet.ControlNetUnit object>, settings_controller=<cyanic.settings_controller.SettingsController object>, api=<cyanic.sdapi_v1.SDAPI object>, cnapi=<cyanic.extension_widgets.controlnet.ControlNetAPI object>)
  191         fine_controls.setLayout(QFormLayout())
  192         fine_controls.layout().setContentsMargins(0,0,0,0)
  193         control_weight = self._setup_row('Weight', 0.0, 2.0, 1.0, 'weight', step=0.05)
  194         start_step = self._setup_row('Start %', 0, 100, 0, 'start')
  195         end_step = self._setup_row('End %', 0, 100, 100, 'end')
control_weight undefined
self = <cyanic.extension_widgets.controlnet.ControlNetUnit object>
self._setup_row = <bound method ControlNetUnit._setup_row of <cyan...ension_widgets.controlnet.ControlNetUnit object>>
step undefined

 C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\extension_widgets\controlnet.py in _setup_row(self=<cyanic.extension_widgets.controlnet.ControlNetUnit object>, label='Weight', min=0.0, max=2.0, value=1.0, variable_name='weight', step=0.05)
  209 
  210         slider = QSlider(Qt.Horizontal)
  211         slider.setMinimum(min)
  212         slider.setMaximum(max)
  213         slider.setValue(value)
slider = <PyQt5.QtWidgets.QSlider object>
slider.setMinimum = <built-in method setMinimum of QSlider object>
min = 0.0
TypeError: setMinimum(self, int): argument 1 has unexpected type 'float'
    __cause__ = None
    __class__ = <class 'TypeError'>
    __context__ = None
    __delattr__ = <method-wrapper '__delattr__' of TypeError object>
    __dict__ = {}
    __dir__ = <built-in method __dir__ of TypeError object>
    __doc__ = 'Inappropriate argument type.'
    __eq__ = <method-wrapper '__eq__' of TypeError object>
    __format__ = <built-in method __format__ of TypeError object>
    __ge__ = <method-wrapper '__ge__' of TypeError object>
    __getattribute__ = <method-wrapper '__getattribute__' of TypeError object>
    __gt__ = <method-wrapper '__gt__' of TypeError object>
    __hash__ = <method-wrapper '__hash__' of TypeError object>
    __init__ = <method-wrapper '__init__' of TypeError object>
    __init_subclass__ = <built-in method __init_subclass__ of type object>
    __le__ = <method-wrapper '__le__' of TypeError object>
    __lt__ = <method-wrapper '__lt__' of TypeError object>
    __ne__ = <method-wrapper '__ne__' of TypeError object>
    __new__ = <built-in method __new__ of type object>
    __reduce__ = <built-in method __reduce__ of TypeError object>
    __reduce_ex__ = <built-in method __reduce_ex__ of TypeError object>
    __repr__ = <method-wrapper '__repr__' of TypeError object>
    __setattr__ = <method-wrapper '__setattr__' of TypeError object>
    __setstate__ = <built-in method __setstate__ of TypeError object>
    __sizeof__ = <built-in method __sizeof__ of TypeError object>
    __str__ = <method-wrapper '__str__' of TypeError object>
    __subclasshook__ = <built-in method __subclasshook__ of type object>
    __suppress_context__ = False
    __traceback__ = <traceback object>
    args = ("setMinimum(self, int): argument 1 has unexpected type 'float'",)
    with_traceback = <built-in method with_traceback of TypeError 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 52, in __init__
    self.change_page()
  File "C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\cyanic.py", line 64, in change_page
    page['content']()
  File "C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\cyanic.py", line 75, in show_img2img
    self.content_area.setWidget(Img2ImgPage(self.settings_controller, self.api))
  File "C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\pages\img2img.py", line 36, in __init__
    self.extension_widget = ExtensionWidget(self.settings_controller, self.api)
  File "C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\widgets\extensions.py", line 20, in __init__
    self.controlnet_widget = ControlNetExtension(self.settings_controller, self.api)
  File "C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\extension_widgets\controlnet.py", line 29, in __init__
    self.units.append(ControlNetUnit(self.settings_controller, self.api, self.cnapi))
  File "C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\extension_widgets\controlnet.py", line 193, in __init__
    control_weight = self._setup_row('Weight', 0.0, 2.0, 1.0, 'weight', step=0.05)
  File "C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\extension_widgets\controlnet.py", line 211, in _setup_row
    slider.setMinimum(min)
TypeError: setMinimum(self, int): argument 1 has unexpected type 'float'
DrCyanide commented 11 months ago

It's really odd to me that my setup isn't displaying these "got a float, expected an int" errors. My crashes show Python 3.8.1, but that's not my system default, just whatever Krita itself is using. What version of Krita are you using? I'm wondering if I switch if I'll be able to find these bugs faster.

The issue is with how I display ControlNet's UI (in particular, the ControlNet Weight slider). While trying to fix that specific issue, I'm running into several other issues - where dragging the slider around too fast causes a crash, or where changing the Control Type can cause a crash.

With all of these errors and crashes coming up, I might have to rethink how I display (or at least build) the ControlNet UI.

Miraihi commented 11 months ago

What version of Krita are you using?

It's 5.2.0, the latest one. It's released on 11'th October so that may be the reason.

Miraihi commented 11 months ago

I can confirm that the plugin still works in earlier versions of Krita.

DrCyanide commented 10 months ago

I think I have fixed these crashes in Krita 5.2 now. They'll likely need more testing to ensure everything is working correctly, but it should be better than it was.