Implementing online drawing with friends on Krita, could it be possible?

It’s not a feature request, I’m currently working on my thesis for university and my goal was to add collaborative drawing on Krita (think Aggie.io), allowing multiple users to work on the same drawing in real time.

It’s something I’m rather scared from as it seems like a really ambitious project and while I do have a few ideas on how to do it, I don’t know Krita’s architecture well enough to think of this as possible?? In particular, I have no clue on how to keep the source code as intact as possible while implementing network features (and thus how to link the network features to the source code)

Any help in knowing how to move forward would be appreciated as it’s the first time I’m doing something like this. I feel like making a private build and playing with source code would be the easier way but I’d love to be able to share this in the future

5 Likes

Hi

Lead developer @halla might be the best placed to answer you.

But currently they’re in the rush of beta2 tests and bugs fixing before final krita 5 release, not sure they can have much time to spent for aside projects :sweat_smile:

Grum999

I would welcome this if possible to achieve.
But sure seems a hard task.

Collaborative drawing, sounds fun.
Maybe making a room for random artists (not neccesarily people you know) up to 4, to draw together. (Sounds hard but interesting).
Can also be use for artists to teach each other art.

1 Like

Do you want to do this as native C++ or as a plugin?

As for the difficulty, it would depend on how you plan to go about it. Are we talking about true real time editing where people can draw at same spot on same layer? Or taking turns? Working on same layer or different layers? Same location or different corner?

Are you only drawing, or using all of Krita’s features? Do you have same resources?

Then there is the question of response time, like sending the entire thing over the network may be okayish if you got fast internet or working with small files, but for best efficiency you’d want to only want to send changes.

You can only do this in C++. (Note for KnowZero: it is also possible to write plugins in C++, and in fact, pretty much everything in Krita, from tools to filters, from python support to dockers is a plugin.)

There are two approaches, one is wrong, one is right:

The wrong one would be to send undo data between instances of Krita

The right one would extend the strokes framework that handles most pixel mangling actions, like painting, applying a filter and so on, to record the actions in some serializable form and implement replaying that. That would create a local action recorder (yay, we have wanted that for ages!)

Then you would need to implement a way to share those actions between instances of Krita over the network. You could crib that from DrawPile, since that already implements all of that.

I’m not sure if it’s thesis-worthy, since it’s all been done before, but it would be interesting, and it would be a very welcome addition to Krita.

5 Likes

Is this equivalent to a refactoring of tasksets? I feel like this is a GSOC level task …

Tasksets are based on the QAction framework, so, no. It could be an old-style gsoc project, because it will take a couple of months.