DrCyanide / cyanic-sd-krita

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

Exclude from sharing checkbox error #9

Closed Miraihi closed 10 months ago

Miraihi commented 10 months ago

When I try to uncheck the box "Inpaint" from the newly added "Exclude from sharing", I get a non-fatal error:

EDIT: Actually it happens with any box out of the three.

TypeError: 'str' object cannot be interpreted as an integer

TypeError
Python 3.10.7: C:\Program Files (x86)\Steam\steamapps\common\Krita\krita\bin\krita.exe
Wed Oct 18 17:09:30 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:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\pages\settings.py in <lambda>()
   80         exclude_inpaint = QCheckBox('Inpaint')
   81         exclude_inpaint.setChecked('inpaint' in self.settings_controller.get('prompts.exclude_sharing'))
   82         exclude_inpaint.toggled.connect(lambda: self._toggle_and_save('prompts.exclude_sharing', 'inpaint'))
   83         exclude_form.layout().addWidget(exclude_inpaint)
   84 
exclude_inpaint undefined
self = <cyanic.pages.settings.SettingsPage object>
self._toggle_and_save = <bound method SettingsPage._toggle_and_save of <cyanic.pages.settings.SettingsPage object>>

 C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\pages\settings.py in _toggle_and_save(self=<cyanic.pages.settings.SettingsPage object>, key='prompts.exclude_sharing', value='inpaint')
   97 
   98     def _toggle_and_save(self, key, value):
   99         self.settings_controller.toggle(key, value)
  100         self.settings_controller.save()
  101 
self = <cyanic.pages.settings.SettingsPage object>
self.settings_controller = <cyanic.settings_controller.SettingsController object>
self.settings_controller.toggle = <bound method SettingsController.toggle of <cyanic.settings_controller.SettingsController object>>
key = 'prompts.exclude_sharing'
value = 'inpaint'

 C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\settings_controller.py in toggle(self=<cyanic.settings_controller.SettingsController object>, key='prompts.exclude_sharing', value='inpaint')
  110             elif value is not None:
  111                 if value in self.settings[split_key[0]][split_key[1]]:
  112                     self.remove(key, value)
  113                 else:
  114                     self.append(key, value)
self = <cyanic.settings_controller.SettingsController object>
self.remove = <bound method SettingsController.remove of <cyanic.settings_controller.SettingsController object>>
key = 'prompts.exclude_sharing'
value = 'inpaint'

 C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\settings_controller.py in remove(self=<cyanic.settings_controller.SettingsController object>, key='prompts.exclude_sharing', value='inpaint')
   89                 self.settings[split_key[0]] = {}
   90             if value in self.settings[split_key[0]][split_key[1]]:
   91                 self.settings[split_key[0]][split_key[1]].pop(value)
   92 
   93     def toggle(self, key, value=None):
self = <cyanic.settings_controller.SettingsController object>
self.settings = {'adetailer': {'model': 'face_yolov8n.pt'}, 'batch': {'count': 1, 'size': 1}, 'controlnet': {'control_mode': 'Balanced', 'low_vram': False, 'pixel_perfect': False, 'resize_mode': 'Just Resize'}, 'defaults': {'cfg_scale': 7, 'color_correction': True, 'denoise_strength': 1.0, 'face_restorer': '', 'match_colors': True, 'model': 'jamJustAnotherMerge_v19BakedvaePruned.safetensors [4bfc37dab6]', 'refiner': '', 'sampler': 'DPM++ 2M SDE Karras', 'sampling_steps': 25, 'upscaler': '', ...}, 'extra_networks': {'show_descriptions': True, 'show_thumbnails': True, 'visible': False}, 'hide_ui': {'batch': True, 'cfg': True, 'clip_skip': True, 'color_correction': True, 'face_restore': True, 'highres_fix': True, 'seed': False, 'styles': True, 'tiling': True}, 'inpaint': {'inpaint_area': 1, 'mask_blur': 4, 'mask_mode': 0, 'masked_content': 3, 'padding': 30}, 'pages': {'last': 'Settings'}, 'previews': {'enabled': True, 'refresh_seconds': 1.0}, 'prompts': {'adetailer_negative_prompt': '', 'adetailer_prompt': '', 'exclude_sharing': ['adetailer', 'inpaint'], 'img2img_negative_prompt': '', 'img2img_prompt': '', 'inpaint_negative_prompt': 'Negative_ng_deepnegative_v1_75t, Negative_badhan...quality, bad quality:1.35), logo, watermark, text', 'inpaint_prompt': 'Realistic, goth, big black lips, (gigantic breas...quality, perfect lighting, trending on artstation', 'save_prompts': True, 'share_prompts': True, 'shared_negative_prompt': 'Negative_ng_deepnegative_v1_75t, Negative_badhan...quality, bad quality:1.35), logo, watermark, text', ...}, ...}
split_key = ['prompts', 'exclude_sharing']
].pop = <built-in method pop of list object>
value = 'inpaint'
TypeError: 'str' object cannot be interpreted as an integer
    __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 = ("'str' object cannot be interpreted as an integer",)
    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:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\pages\settings.py", line 82, in <lambda>
    exclude_inpaint.toggled.connect(lambda: self._toggle_and_save('prompts.exclude_sharing', 'inpaint'))
  File "C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\pages\settings.py", line 99, in _toggle_and_save
    self.settings_controller.toggle(key, value)
  File "C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\settings_controller.py", line 112, in toggle
    self.remove(key, value)
  File "C:\Users\Miraihi\AppData\Roaming\krita\pykrita\cyanic\settings_controller.py", line 91, in remove
    self.settings[split_key[0]][split_key[1]].pop(value)
TypeError: 'str' object cannot be interpreted as an integer
DrCyanide commented 10 months ago

Woops, looks like I only tested the adding it, not the removing it. It should be fixed now.