Buli Brush Switch

First of all excellent plugin nwn, I really like the implementation, I had tried it a long time ago but for some reason Krita was slow to use it, currently with the latest version I decided to try again and now it works much better, although there is something wrong with the other tools when you switch (except with the freehand brush).

My English is not very good so I decided to record what happens to make myself understood better.

3 Likes

Hi

I’ve opened an issue to not forget this case:

Just to be sure, can you confirm:

  • You’ve got problem with plugin v0.2.1b
  • You’ve got problem with Krita 5.0.6?

Grum999

1 Like

Hi

To understand what happen and before opening a bug, I need more detail about how the plugin is configured :slight_smile:

If you can provide me a screenshot of:

Trying to understand your case, in the video, I can see plugin being activated without clicking on it
I guess you press a shortcut for that?

And the strange behavior you encounter is when you change drawing tool, plugin is sometime activated/deactivated without using shortcut?

Also, just to be sure, can you confirm:

  • You’ve got problem with plugin v0.2.1b
  • You’ve got problem with Krita 5.0.6?

Grum999

1 Like

yes…

1 Like

I only added one of the eraser brushes, the settings are the default.

Yup

The problem is that with tools other than the freehand brush there is quite a noticeable delay when changing the brush.

  • Just the delay.
  • Nope
1 Like

The problem still persists in Krita 5.1 beta 2

As you can see, whether using the keyboard shortcut or button in the panel there is a small freezing when changing brush.

As I said before, this does not happen with the free hand brush tool, it only happens when the dynamic brush or other tools is used.

This is the list of the brushes I use, they are just the erasers.

The brushes configurations are those by default.

It is the only bug that I have :pensive:

1 Like

Hi

Yes I can see it properly on the video now, I understand better what is the encountered problem.

I’m not sure why this problem occurs, I’ve to made some tests (currently on my development computer I have no lag/freeze like you)

I’ve opened a bug to be sure to not forgot it :wink:

But I currently can’t tell you when it will be fixed :confused:
I’m currently in my drawing period, and I’ll go back on coding phase when my current drawing project will be finished :grimacing:

if it’s the only one you have, that’s a good thing, it means plugin is not too much buggy :sweat_smile:

Grum999

3 Likes

I have seen that some plugins give some problems on windows, it could be that.

Thanks for answering :grinning:

1 Like

@Grum999 You did a fantastic job with this plugin, really freaking cool; I’ve been waiting for something like this for a long time. I saw it a few months ago but I was kinda lazy to read how it works wow, is so simple and effective. I test it out on the latest Krita 5.1.0 and it works well.

Here quick notes

The only issue I noticed:
Not sure if it was slow since the beginning but once you start adding more brushes, arranging them using the arrow buttons gets very slow. Not a biggy since I only have 24 brushes at the moment but if I want to have a specific order and move stuff around especially in between/middle of the list, it gets a bit annoying being slow.

Recommendation for future versions:
For the scratchpad for testing brushes, add an invert button to switch to black background or the same you did with the brush color (adding a color wheel/sliders).

Keep up the great work! :clap::clap::clap:
Testing Buli notes is next :wink:

1 Like

Hi @Giovanny_Arce

I’ve opened an issue for that:

Main idea to speed up re-arranging process is to implement drag’n’drop

I’ve also opened an enhancement for that:

Can’t tell when it will be fixed/implemented, but it’s now referenced in issue list then it won’t be forgotten for next release :wink:

:sweat_smile:
I try to build intuitive UI but it’s not easy, and everybody don’t have the same feeling than you about this one I think

Thanks for your feedback :hugs:

Don’t hesitate to post a feedback :slight_smile:

Grum999

2 Likes

Thank you @Grum999
Yes, I agree; not everybody has the same feeling I do, which is understandable. The good thing is that this is open source; if someday I learn scripting for Krita, I can make my changes and share them with the community.

Keep up the great work sir!
Maybe open a Ko-Fi profile so people can make donations or subscribe :wink:
Bests!
/Gio

2 Likes

Thanks for idea!
But currently my point of view for people who want to make a donation for my plugins is just to make a donation to Krita fundation :slight_smile:

Krita Fundation need donation more than me to keep high level quality and improvements of Krita :slight_smile:

Grum999

5 Likes

Good to know, I will look into Krita Foundation.

1 Like

Thanks! :slight_smile:

For monthly donation, look at:

Or for one time donation, look at:

Grum999

2 Likes

Here is an experiment for Huion - KeyDial so I can paste it using Pureref for muscle memory training :stuck_out_tongue: . Kinda tricky to configure since the settings layout is only available vertically. Work in progress, trying to figure out how to map the rest of the brushes (icons on the left) since the settings panel currently doesn’t have an option for using the same key for switching to another shortcut (let’s say I press shift+the same key a couple of times to cycle between shortcuts).

1 Like

I think it should be possible to implement something for that.

  1. Add possibility to group brushes
  2. Add option of shortcut for group
    – If a shortcut is defined at group level it will be used to cycle over brushes from group

I don’t have so many brushes in my list :sweat_smile:
But clearly I understand the need of shortcut/group and facility to update brushes order…

You can display list as grid:


Maybe be it could be easier to have an overview of brushes

What I can try to do in grid mode if implementing group of brushes, is:

And in list mode, use a classic folder tree

I’m not sure to understand meaning for this screenshot :slight_smile:

Grum999

3 Likes
  • Yes! that looks more like it, I like that idea:

About the last screenshot:

  • Ah, my bad, I figure it was going to be confusing since I forgot to explain. That’s a radial menu that comes directly from the Huion KeyKial, the 2 shortcut configurations on the right side are for accessing the blur and sharp fx brushes because the shortcuts are complete (no more space for keys). Curious if someone has done a third-party with open source access on Github for a different Settings panel for configuration.

Thanks a lot for the fast response!

1 Like

Added in to do list

Oh ok!
Thanks for explanation :slight_smile:

Grum999

1 Like

I’m experiencing a lag of more than a second when selecting brushes through this addon, either by pressing the brush icon up top, or using a hotkey!
Is there any information I can provide to help you determine the cause?
edit: I see @SchrodingerCat has the same issue, but a little less lag. I should mention that it does slow down on the Freehand Brush tool for me as well!

System: Windows 10, Krita 5.1.0, Buli Brush Switch 0.2.1b

1 Like

I also just got this error:

"TypeError
Python 3.8.1: C:\Program Files\Krita (x64)\bin\krita.exe
Wed Sep 14 11:09:02 2022

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\32496\AppData\Roaming\krita\pykrita\bulibrushswitch\bbs\bbswbrushes.py in data(self=<bulibrushswitch.bbs.bbswbrushes.BBSBrushesModel object>, index=<PyQt5.QtCore.QModelIndex object>, role=1)
  946                 if column==BBSBrushesModel.COLNUM_ICON:
  947                     # QIcon
  948                     return QIcon(QPixmap.fromImage(item.image()))
  949         elif role == Qt.ToolTipRole:
  950             id=self.__items[row]
global QIcon = <class 'PyQt5.QtGui.QIcon'>
global QPixmap = <class 'PyQt5.QtGui.QPixmap'>
QPixmap.fromImage = <built-in function fromImage>
item = <BBSBrush(a7ddb048-66bd-41fc-8d28-ad4c74a8f5e6, rfi) Magicfill 100%, None)>
item.image = <bound method BBSBrush.image of <BBSBrush(a7ddb0...c-8d28-ad4c74a8f5e6, rfi) Magicfill 100%, None)>>
TypeError: fromImage(QImage, flags: Union[Qt.ImageConversionFlags, Qt.ImageConversionFlag] = Qt.AutoColor): argument 1 has unexpected type 'NoneType'
    __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 = ("fromImage(QImage, flags: Union[Qt.ImageConversio...Color): argument 1 has unexpected type 'NoneType'",)
    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\32496\AppData\Roaming\krita\pykrita\bulibrushswitch\bbs\bbswbrushes.py", line 948, in data
    return QIcon(QPixmap.fromImage(item.image()))
TypeError: fromImage(QImage, flags: Union[Qt.ImageConversionFlags, Qt.ImageConversionFlag] = Qt.AutoColor): argument 1 has unexpected type 'NoneType'

"

It occured when I added two new brushes and gave them hotkeys. I noticed later that one of the hotkeys (4) conflicted with a default hotkey, maybe that’s the issue?
I got a lot of popups. About 10 more popped up when I shut Krita down

edit: upon a restart, no more popups.

I did find an issue with the settings though:

That setting won’t take, and: my brush hotkeys are deleted all the time!

1 Like