Speed sensor in brush settings doesn't seem to work correctly?

I’m currently drawing with my finger on a tablet, and I need a basic brush whose brush size depends on the speed at which you move your brush: slow movements means small size, and moving the brush faster makes the brush bigger.

So I go to brush settings > size > speed, and have the checkboxes enabled, and curves look fine.

The problem is that half the time, some of my strokes start off big (at 100% brush size) at the beginning and some milliseconds later it goes to small where it should start out as. The other half of the time it works correctly, starting small as indicated by my curve.

Here is a pic of my test strokes (stroke direction is downward), all made at the same speed.

As you can see, they are inconsistent, despite the fact that my speed has remained consistent. No matter how I manipulate my curve, for some reason it has a tendency to randomly start a stroke at 100% size before correcting itself milliseconds later.

Krita is the only app that treats my size-by-speed brush strokes this way, and I have no idea why. Help?

Edit: Recorded video to better illustrate my point. Included another app’s speed sensor for comparison:

https://youtu.be/NuftXt1ibEU

https://youtu.be/NuftXt1ibEU

Here are some more strokes in a downward direction. Note how some of them start super big before going small.

Rightward direction:

It’s difficult to precisely control the speed of a stroke, especially at the beginning of the stroke. Having said that, you do have previous experience of size by speed control of brush stokes.

Something I’ve noticed, but I haven’t fully checked, is that the speed seems to be in pixels per second. This means that you can’t get high speeds unless you have a large image size. The consequence that I’ve seen is that an A4 300ppi image needs a very fast movement across the canvas to reach the ‘fast’ end of the graph.

You may want to experiment with that and try a bigger image size than you’re already using.

I dont think the canvas size really matters. Whether 2k, 4k, 8k. It’s not about the size, it’s about the INCONSISTENCY of each stroke and how strokes begin so big. I recorded a video to better illustrate my point in the below link. Added a demonstration of Infinite painter at the beginning for comparison, followed by Krita and the inconsistent sizes I get:

https://youtu.be/NuftXt1ibEU
https://youtu.be/NuftXt1ibEU

I’ve gone back to this to have another look.

I was opposite-wrong about the canvas size. The internal speed calculation seems to be some kind of inverse pixels per second so that I can get higher speed values on a smaller canvas. This is a definite effect and I think it’s wrong and I’ll put a formal bug report in about it, eventually.

The startup blob that you’re seeing is very strange and should not happen of course.

Here is a 512 x512 canvas with a size controlled by speed brush preset with the straight line transfer curve from botton left to top right.
Red lines are using the stylus on the drawing tablet and blue lines are using my finger on the drawing tablet (which I’m not at all good at):


I’ve done quite a few tests with various canvas sizes and I never had a startup blob with the stylus.
As you can see from the image, the first finger drawn line had some kind of startup blob and that did happen in other tests but rarely.

All krita can do is work with the sequence of position coordinates that it gets from the screen/tablet and if the finger sensing is affected by which part of a fairly fat finger (much fatter that a stylus) is actually touching the screen/tablet then that could lead to a startup transient.

It may be that the other application you use doesn’t have this problem because it performs intial transient filtering or even continuous transient filtering internally.

However, it does look like your screen tends to give startup transients whereas my drawing tablet does not except for the occasional one.

Is that an iPad?

That’s an Android build on a Galaxy Tab S6, but the same thing happens on Windows on my Surface Pro.

I also noticed that using the same brush settings, this issue only occurs when using your finger. It works as I want it to with a mouse.

It is probably tied to the rate of events then… like, a mouse has a very little amount of events sending.

Here’s a video of the same speed brush being used, both by mouse and finger. Mouse is bottom row, finger is top two rows. Drawing with finger definitely generates different results. Finger drawing starts out much thicker than by mouse. I feel tempted to call this a bug…

Hi, all!

I have fixed all the issues of Speed sensor. The fix is in master, but not in 4.4.0 because of the hard freeze.

The patches are in this branch and will be released in 4.4.1:
https://invent.kde.org/dkazakov/krita/-/commits/kazakov/for/4.4.1

Here is a testing package for Windows: https://yadi.sk/d/3NNloKkrfmV_oQ

2 Likes

Hi Dmitry,

Thank you for providing this for testing. I’ve just tried it but it doesn’t ‘feel’ any better on the canvas.
Here is an example of my attempts with the speed range 0-100% giving size 0-100%. The topmost left to right stoke is a reference stroke using pressure -> size to give a roughly smooth 0- 100% size transition. The remaining strokes are me trying to do very fast speed->size strokes across the canvas.
As you can see, I have great difficulty getting a high speed:

For this setting the behaviour on the brush editor scratchpad is quite different. Making strokes on the scratchpad seems to have much more sensitivity to speed. Also, there are some blobs at the start of some lines.
The two large blobs at the bottom of the scratchpad happened as I accidentally touched it with the stylus tip but they only happened twice:

If I modify the transfer curve to give a 0-25% speed range giving a 0-100% size variation then I get a more usable characteristic as shown below. Again, the topmost stoke is a reference stroke with 0-100% pressure giving 0-100% size.
Even then the speed required to give 100% size is quite large and is uncontrolled scribbling:

I remember that the difference between on-scratchpad resoponse and on-canvas response has been noted before.

I’ve been testing the max speed setting for the speed sensor, but I still can’t get it to work as I would expect (increase the flow with a lower brush speed and decrease with a higher speed).


I have been testing speed settings between 5 and 30 pix/ms. Could anyone else confirm this? The “use tablet driver timestamps” also doesn’t seem to affect my strokes.

The speed control needs some adjustment and because it’s in canvas px/ms then the effect varies with canvas size.
Using Flow decreasing with speed, I get this result at 6px/ms on a 1024 x 1024 canvas:

I’ve always found manual speed control to be difficult and it’s barely repeatable even when I get used to it.

In my tablet tester, I got a max speed of 6 px/ms, but that’s only a small window. I really hoped that that option would allow me to use the speed sensor.

I hade to move the stylus very quickly for that, accelerating from the left side to the right.
It also depends on the Flow transfer curve characteristic. What does that look like?
What canvas size do you have?
Have you tried reducing to 3px/ms?
Do you find that you have to draw too fast for your personal liking or too slow for your personal liking to get the effect that you want?

It shouldn’t be speed according to canvas, but rather speed according to physical screen dimensions if possible or Operating system cursor speed.