Open git-it-done opened 10 years ago
Off the top of my head here.
Sending changed tiles sounds like the best approach here (tiled data currently contains the strokemap info too, in a different place: maybe good for sharing brushes via the working doc.
You'd also have to share the undo stack state; the current abstractions should suffice provided you're not exchanging whole snapshots.
Synchronizing simultaneous brushwork-mode accesses to the same tiles would be about as awkward as synchronizing access to the undo stack.
For auth, a shared secret string would work. Not stored in the doc, but established whenever someone opens their ports.
I'd sort of like this to be done as a plugin (an idea we knocked around a while back, but it got overtaken by the GTK3 port).
We'd also need to tidy up the internal APIs a bit and... make them an actual documented API. But it's doable. Post-1.2, I think...
I never even considered asking for this, but I wish I had a long time ago. It's something I wish more programs would implement, not just art ones. It would be especially awesome with MyPaint due to the infinite canvas; just an infinite whiteboard for brainstorming sessions.
The only implementations of online collaborative image work I can think of:
None do infinite canvas, but they could still be useful for some sort of reference, especially Drawpile. Since Drawpile's dev is back at it again after a hiatus, there could be some potential for collaboration, too.
So here are my thoughts.
Do people still do WebDAV? It's not full realtime collaboration on a shared drawing space but maybe it would be an easier thing to implement in the short term?
There's another opensource program called "Drawpile" that seems to be geared towards what you're talking about here: http://drawpile.net/about/ I learned about it on the MyPaint site.
Maybe some info can be exchanged between the two, because Drawpile doesn't support pressure sensitivity from my Monoprice tablet like MyPaint does.
@AtsusaKaneytza : Drawpile's failure to support non-Wacom tablets is all due to Qt's failures, much as MyPaint's ability to support non-Wacom tablets is mostly due to GTK's abilities. Krita had to do their own tablet handling in order to support non-Wacom tablets properly, and they use Qt, so they would be much more relevant to Drawpile's problems than MyPaint.
Those of you who are interested in this extension -- I independently sketched out some design ideas on #480. @achadwick correctly marked that as a duplicate, but please have a look.
Above, @achadwick noted:
Synchronizing simultaneous brushwork-mode accesses to the same tiles would be about as awkward as synchronizing access to the undo stack.
and these two issues were my focus on #480.
Triage Note: Moving to Limbo for now since this Feature Request is technically is out-of-scope for MyPaint atm.
@git-it-done Could you move this thread over to https://community.mypaint.org/c/feature-requests? I'm working on cleaning up the issue tracker by move all feature requests there so we can get community feedback. If you can also set your post as a wiki that way we can edit the scope of the feature request that would be awesome as well. Don't forget to link back to here as well so I can keep track of it incase we need to reopen the issue.
Having this would be really nice. Much nicer than Zoom's or BigBlueButton's whiteboards. I think MyPaint could be really suitable for collaborative learning and 1:1 teaching.
@janpath Have you tried drawpile (https://github.com/drawpile/Drawpile/)? It is geared specifically for collaborative use, and is from my experience a very competent program (as well as being free/open source). It is also available for Windows/OSX as well as Linux.
I think it's unlikely that MyPaint will see networked collaboration implemented any time soon.
Mypaint currently has no networked collaboration features. I would like to change this. I was thinking that server mode and client mode should be available and that multiple clients should be able to connect as long as the server approves the handshakes. Passwords for security?
There are many ways this might be implemented, and I would appreciate any and all input.
def __deepcopy__
could take a layer and push thatThoughts? Any source files recommended as starting points? Security concerns?