MyPaint – the past, the present, and the future
This is a modal window.
The media could not be loaded, either because the server or network failed or because the format is not supported.
Formal Metadata
Title |
| |
Title of Series | ||
Part Number | 27 | |
Number of Parts | 39 | |
Author | ||
License | CC Attribution - ShareAlike 3.0 Unported: You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this | |
Identifiers | 10.5446/21720 (DOI) | |
Publisher | ||
Release Date | ||
Language | ||
Production Place | Montreal |
Content Metadata
Subject Area | ||
Genre | ||
Abstract |
| |
Keywords |
3
16
18
20
22
26
29
31
37
38
00:00
Design by contractHypermediaOpen sourceWindowSoftware developerMereologyBitoutputFocus (optics)EstimationInversion (music)Process (computing)Multiplication signRevision controlSoftwarePlanningExecution unitStudent's t-test
01:48
Correspondence (mathematics)Revision controlMenu (computing)WindowTouchscreenDirection (geometry)MereologyPressureChannel capacityNP-hardConnected spaceDynamical systemDependent and independent variablesPhysical systemRadiusComputer animation
02:57
Direction (geometry)Endliche ModelltheorieComputer animation
03:20
Asynchronous Transfer ModeConstraint (mathematics)QuicksortMultiplication signNeuroinformatikSoftwareMathematicsLecture/Conference
04:10
Graph coloringStandard deviationTerm (mathematics)Menu (computing)User interfaceMathematicsSelectivity (electronic)Group actionEntire functionComputer animation
04:46
TextsystemCartesian coordinate system1 (number)File formatMultiplication signDefault (computer science)Latent heatOpen sourceRevision controlPatch (Unix)Projective planeDoppler-EffektComputer animation
06:02
Revision controlDifferent (Kate Ryan album)Keyboard shortcutGraph coloringSource code
06:30
Presentation of a groupBitConfiguration spaceGraph (mathematics)Polar coordinate systemDirection (geometry)Default (computer science)Keyboard shortcutSound effectState of matterSampling (statistics)WebsitePoint (geometry)Multiplication signRevision controlEndliche ModelltheorieAdditionSoftware developer1 (number)Right angleContext awarenessTwitterNumberMomentumVideo gameProjective planeAreaSinc functionUniqueness quantificationRandom matrixGame theorySet (mathematics)Integrated development environmentData storage deviceVirtual machineInfinityTablet computerComputer animationLecture/Conference
11:37
Real numberMathematicsRevision controlSoftware developerCASE <Informatik>Different (Kate Ryan album)Instance (computer science)State of matterMultiplication signoutputTerm (mathematics)CausalityGreen's functionCoefficient of determinationProcedural programmingAsynchronous Transfer ModeMilitary baseFrequencyService (economics)Boundary value problemTable (information)Position operatorPixelSoftwareCategory of beingSpeech synthesisArithmetic progressionPhysicalismAreaQuantumSpacetimeSet (mathematics)ExergieWindowTouchscreenImage resolutionRight angleFrame problemDefault (computer science)Software bugMereologyComputer animationLecture/Conference
16:50
Point (geometry)Multiplication signGraph (mathematics)Raster graphicsSet (mathematics)Product (business)Sound effectRevision controlOpen setAsynchronous Transfer ModeOverlay-NetzCodeLine (geometry)PressureSoftware developerCartesian coordinate systemGroup actionDirection (geometry)Graph coloringElectronic mailing listMereologyDifferent (Kate Ryan album)Projective planeIntegrated development environmentGoodness of fitFocus (optics)MathematicsTwitterObject (grammar)Lattice (order)Web pageTelecommunicationVapor barrierOnline helpOperator (mathematics)Core dumpEmailHash functionFreewareGame theoryConstructor (object-oriented programming)Medical imagingTask (computing)QuicksortReading (process)Instance (computer science)AreaTransformation (genetics)DivisorBuildingType theoryOrder (biology)WorkloadLetterpress printingEntire functionState observerComputer animation
23:14
TesselationoutputCircleFront and back endsPhysical systemMappingGoodness of fitOnline helpProjective planeData structureSoftware developerSurfaceData dictionaryMedical imagingPlanningOperator (mathematics)QuicksortInformationSound effectTouchscreenMathematical optimizationRevision controlMoment (mathematics)Social classTupleWordInheritance (object-oriented programming)Interface (computing)Lecture/Conference
26:10
Real numberWeb pageSubsetDirection (geometry)Projective planeCodeCartesian coordinate systemSound effectSoftware developerMereologySpacetimeFrame problemInfinityMachine visionLecture/Conference
Transcript: English(auto-generated)
00:00
So the talk is titled MyPaint, the Past, the Present, and the Future. We'll go through the past really quick, give an introduction about what MyPaint is, how it got started, and some parts of the development up until now. First, about me. My name is Yul Mebe.
00:20
I also respond to John, if that's easier. On my spare time, I do MyPaint, OpenRaster mainly. I also do some GIMP development. And some GEGL development. In my day job, I work at Openismus, a company in Berlin specializing in open source software, and currently working on contracts doing MECO work.
00:43
So the past. It all started in 2004 when Martin Reynolds decided that, yeah, I want to do a bit of creative arts. And I want to draw digitally. I'm not too interested in traditional media. And I'm not happy with the solutions that are out there.
01:03
And his focus was really on the creative side. He just wanted to draw. So he is an engineer. At that time, he was a student. And he decided, yeah, I will just do it on my own. He started basically with a plain input window and a brush engine.
01:21
He kind of went input window and brush engine. He had some ideas what he wanted to do with the brush engine. And an interesting thing is that it's basically the exact same brush engine we use today. It just added some stuff. And it's a really simple brush engine, but it really works.
01:41
So his motivation was to make something that he liked using and liked developing, of course. So the initial versions looked something like this. This is now like every dialogue is on the screen. But you see the main window where you will actually be drawing is just the canvas and the menu bar,
02:03
so really about the drawing parts. And he typically works by having, well, nothing like this on the screen, just popping up those dialogue windows when he uses them. So he basically has a full screen, canvases all the time. Yes.
02:21
This is initial version of the brush engine. This dialogue just gives you every button and thing you can imagine and kind of corresponds directly to how the brush engine works. These are ways to define dynamics. So every kind of setting you see up there,
02:41
like opacity and other strange stuff, hardness, radius, can depend on stuff like the pressure on the tablet, of course, the speed you move, the direction you move. So it's a really dynamic system, and all brushes are procedural. So between 2005 and 2008, Martin basically
03:02
continued developing on his own, added more and more features. We got really kind of a unique feature pretty early on, which is infinite canvas. So you basically just start with a blank canvas. And once you start painting in some direction,
03:21
well, your canvas is that big. So it's as big as you need at any given time. And artists really love this, because one, it means you don't have to choose when you start up, oh, I want to do something that is x big, because that kind of kills creativity. And two, it's like, I have these constraints.
03:41
To actually paint beyond, to change what I was doing right now, I would have to go into some dialogue, change the size, sometimes through really crazy dialogues and not good UI. But even if the UI is good, it's still a switch from the creative mode of just drawing,
04:01
you're totally into the art, to kind of fiddling with this computer thing that you don't really care about on this software. So in 2008, it looked something like this. And it didn't change much in terms of the user interface. You see here is a more typical way of using it.
04:21
You have the entire canvas basically spread out. You have a menu bar at the top. You have a color selector. This is a standard GTK one. And the brush selection. These are the two typical actions you do. You change the color, and you change your brush. And it's, so what happened, why did I put 2008 here?
04:50
And then 2009. Well, up until now, Martin has been developing basically all on his own. He got patch sets, like four or five patches, about something specific. But in general, it was his thing, and he did all the work.
05:04
In 2009, people started joining in, switched to Git for version control, kind of spread things up for some reason. I joined, and we had some other contributors that were with us for a long time. And now it's more of an actual open source project,
05:22
in that you collaborate, and you do different things. And here, more features were added. I forgot to say that in 2008, we got layer support. And then MyPaint was the first application to use OpenRaster as a default document format. So that was kind of important for OpenRaster.
05:43
And also in these years, because of that, we've been kind of the ones pushing OpenRaster lately. OpenRaster, as you know, is a format that started at LGM, and still has kind of developed around here. Yes.
06:03
So this is how it looked like basically with the latest release version. There are no huge differences. We got a layer dialog. Actually, for one major release, we didn't have a dialog for the layers. You just had keyboard shortcuts. Now it's a really basic dialog, but it kind of does what you want.
06:22
And a new color selector. I'm not very happy about it myself, but it's there. Some people like it a lot. So the present. I should have hooked this up. But I want to show you a bit of MyPaint.
06:42
Just making sure that I don't have any configuration things. So this is the latest released MyPaint. It is available in all major distros, and the latest version of your distro will most definitely have the latest MyPaint release,
07:01
which is 0.9.1. Forgive me for my quite special desktop environment. It's not what you typically see.
07:22
But this is kind of how you would start. This is the default startup for MyPaint. So you have just showing you that you can select colors, and that you have several brushes to choose from. So these brush sets that are currently in, we have two artist brush sets.
07:41
One called Devade, which is David Revoir, who works on the Durian project. It's a really nice brush set. And we have Ramon, which is Ramon Miranda's brush set. He does game paint studio, and also in general is active in many, many projects. So the default presets show what the brush engine can
08:02
do in a pretty comprehensive way. We still have a challenge. And I will show it to you. Do you recognize this from the first screenshot? It's exactly the same as before. This has the advantage that, well, it gives you every button and tweak that you can do as far as the brush engine goes.
08:24
But could you tell me which ones of these switches or sliders, buttons, are relevant for the current behavior of the brush? Most likely, you can easily do that. And this is a problem. So this is something we're working on right now,
08:41
slightly, at least somewhat. And we have the same issue here. It's not obvious which ones of these are relevant or what they do. So that's something that we need to get some love, finally, since it's basically been the same for, well,
09:02
six, seven years now. And I want to show you some kind of unique features that MyPaint has. A long thing about Workflow first. It's kind of designed for a tablet and keyboard usage. So you kind of have your tablet at all times,
09:22
but using your right hand or left, if you choose so. And then a keyboard. So we don't do flip over tablet PCs very good, because it's kind of keyboard-centric. That's also something that we're looking to improve. It's just that none of the current developers
09:41
have such a machine. So one of the really nice things is, of course, Infinite Canvas. I mean, I start doodling here. And then I decide, well, this might be a nice doodle. And sometimes, I don't want to do a new document. I just want to do some other doodling.
10:00
And you just move to the side. You draw, and well, you can do as much as you like in any direction. And it would all be saved. And you can just go in any direction. Don't worry about document size or anything like that.
10:21
It's really unnecessary most of the time. Another nice feature that you don't know what I intended is what we call context picking or brush picking. So we actually store the data about what kind of brush did you use at any given point.
10:41
So you press W by default. See, now I have the pen brush. Here, I use some other brush. You press W, and you actually get that brush, which is quite awesome in practice, because you do a foreground layer or stuff like that. But you paint some foreground. You paint some details. You use different brushes. And you don't really care about which brush you use.
11:04
But very often, you want the same brush or something very related to it. So you see the effect of that brush. It's like, oh, I want now that, but slightly bigger, or whatever. Pick it, and then you do some tweaks. And this is something that once artists have incorporated into their workflow, they're kind of,
11:22
how do I, I don't, they don't like doing things other ways. Yes. I think those are the two major features that I want to show. Now, I will go slightly over to just show the development
11:43
version and some of the changes we had. So one feature actually comes up right away. I said that it's kind of intended that you have a full canvas. You pop up the dialogues as you need them.
12:02
But in practice, we see that a lot of people want to kind of have every dialogue at the same time. On a screen resolution like this, it doesn't make sense. But if you have a huge screen, you can basically keep everything up to the side. And people did this by positioning the windows
12:20
manually. Instead, we basically said, OK, we will do a simple mode where you can just dock things to the side. Which is, which just really helps that kind of workflow. Even though it's not the main workflow we want to kind of promote, it is a useful workflow.
12:41
So that's a new feature. One other thing is that this infinite canvas really promotes creativity. And artists generally really like it. But you have some problems if you want to do, or challenges if you want to do more design things. So you're creating a poster. It needs to have a certain physical size, or at least pixels by size, do you want.
13:02
And well, how do you do that? There's nothing here that tells you, well, this is x pixels, or this is, with a given DPI, this is x inches. So people say, oh, we actually do want a definite document size at some point, or canvas size.
13:21
And we basically, this is the oldest bug or feature request, going back almost five years. And the challenge here is that we didn't want to do a mode. So you would switch over to, OK, now your canvas is this big, and it can only be this big. So you wanted to preserve the creative workflow
13:42
that you have with infinite canvas. So you just expand it whenever you want. There's no hard boundaries. And we basically have the start of this feature right now, where you can do a document frame. And you give it some size, and you nail it.
14:04
And basically, this looks like kind of like the cropping feature in GIMP and other software. And the important thing is that you draw within these boundaries most of the time, but you can still extend out at any given time,
14:20
and kind of have this easy way of just like, yeah, you can go do that. We want to enable people to do that still. When you save to a PNG, this will be cropped to the given document size you set. But if you save to OpenRAS or a working document format,
14:41
we will save all the data by default. We might introduce some destructive, like only now you say, I want to really crop this document. But in general, we save all the data. So this is new. What will be, it's kind of blocking the 1.0 release, is having some proper UI for moving this.
15:04
So this should all happen on Canvas, of course. And yes. And also, we added just minor things, more preferences, different places in terms of what your input device is mapped to.
15:23
More importantly is that we now fully track the different input devices. So now I'm using a pencil tool here for the tip of my pen. However, you can switch to the other side and have a real eraser brush.
15:45
So you can kind of keep those in even time. But there seems to be a bug. Not nice. Well, that's the general idea. One other feature that I would like to highlight while we're at it
16:01
is the concept of an eraser mode. So I just do some, you can use any brush as an eraser, which kind of can give you this workflow that is common in pencil, traditional pencil art, where you draw, but you also kind of draw with your eraser,
16:22
these kind of a stub eraser like these, for instance. But you can then like, OK, I have some, these are all not so interesting. But what about the, OK, so this is like an airbrush. And we can just switch this to be an eraser. So I would actually now simply erase parts of the stuff
16:42
I previously drew, which kind of can enable nice workflows. So that was the present, more or less. I actually hope that we have 1.0 done for LGM. It did not happen.
17:01
There was not a lot of activity the last couple of months. So it looks like we'll be in a couple of months. One thing to note with my paint is that the Git version is really, really stable. We basically do not have pressure issues. And we have artists using it in production. And it's simple to build. It uses Python mainly.
17:21
So if you're an artist or a developer, you can easily get, well, if you're comfortable with the command line, you can get it and use the Git version. And there's no point in really waiting if you're anxious for some new features or just trying it out. So future. We have some concrete items coming up in the future,
17:40
one being Python 3. So we will move to Python 3 at some point. It's kind of becoming time to do that. We will also move to use pyg object and introspection instead of using pyg decay. It's kind of another technology change
18:01
that's happening kind of below us. We will probably do that after 1.0. Well, we will do it after. And we will do the next thing. Those are the concrete items that we have. Then it's more about visions. Where do we, or where do I, I'm only one of the developers, see my paint going? We now have the general trends that Krita especially
18:23
is becoming a really, really awesome application for the full set or full workflow for painting, drawing, and all these things. So maybe we want to position my paint officially more as a sketching tool and kind of focus on the simple, creative tools.
18:41
The thing is that most artists use my paint as part of their workflow. They start in my paint, for instance, going to Krita to do, maybe they do even most of the work in Krita. But a lot of the more active of my paint users use my paint for like 80% of their stuff. And then they, for instance, quite commonly
19:01
important to GIMP to do final crop, color corrections. Sometimes they do stuff in between. One lack we have right now is there's no different compositing modes. And we could add layer modes, but we're kind of more interested in having brush modes. So you have a lightening brush, or you have an
19:22
overlay brush, or you have a dodge brush, instead of kind of forcing people to deal with layers when they just want to lighten or get that kind of effect. So right now people transfer to GIMP to do that kind of stuff if they like it in their workflow, which is kind of why I did the open raster support in GIMP
19:43
for the first place. So kind of interchange is really important for us because we are and we will forever be just part of the workflow that, well, we don't aim to have all the sets of tools that Krita, for instance, has or GIMP. And one thing I hope is to really emphasize this point
20:03
and really build on it. And I hope to do this by moving the brush engine to GEGL. So the entire document would be described as a GEGL graph with some wiping operations. This means that you can then import it into GIMP and it
20:23
should be a much faster operation to import it into GIMP once GIMP does GEGL a lot. And to have the entire document kind of understood by GIMP, like every aspect of the MIPAINT stuff, or maybe
20:41
not every, but most. And then, perhaps more importantly, allow people to do all their GIMP operations, but have MIPAINT at least have a basic concept of all those things you did in GIMP. So the cropping transformations, all those things we don't really want to implement on our own, but we really want to enable as part of the workflow.
21:03
And then, hopefully, we could, if we had a common base with GIMP, maybe we could even do crazy stuff like having GIMP and MIPAINT edit the same document. So basically, you can just alt-tab and you have GIMP as the UI available, and all the action is exposed. And then go back to MIPAINT and kind of just go back
21:22
into your creative spirit and just do that. That's my hope. Yeah, and I said in the abstract that I would tell something about how you can influence MIPAINT's direction. And we have a lot of artists, but we always like
21:45
to get feedback. It's really important for us. It's important for everyone, but we encourage it. But in general, we need developers. Code is what makes software. And we are a very simple application.
22:01
I mean, we have a narrow scope. It's 10,000 lines of code, mainly Python, simple stuff, UI code mainly, a brush engine that is like 2,000 lines of code. And it's also quite simple conceptually. So it makes it a good project for contributors that are starting out. And we are also, I would say, really friendly to new
22:21
contributors in a small, tight environment. So you kind of get to interact with the core people at once. It's not like there's any barriers or things like that. So I really encourage anyone who's interested in kind of trying to do some development. Maybe you are a developer already, but come to us.
22:42
And if you like MyPaint or want to, help out. Questions? What does it mean, come to us? Because we will be streaming this, so maybe you can tell what it is. Our website. We have then a simple page for contributing and showing
23:02
the communication channels we have. Basically, I'm on IRC all the time. So you can join us, hash MyPaint free node. And we also have a mailing list where all the developers are, at least. Not so many users, but it's also free to use. And it's pretty well documented on our website.
23:33
So I don't know if this is going to be really a useful question or not, but I'm always amazed. How is MyPaint so fast when it comes to such huge
23:43
images, and even like, I mean, the GIMP is written in C, and when you get to really big images, it just gets slow. And MyPaint's written in Python. Do you have a C backend for this, or is it just like super smartly written? Or what's going on here?
24:01
Actually, the backend is quite an interesting story. We have the backend mainly in C++. It's basically C with classes. So we move stuff that needs to have good performance that we cannot achieve in Python. We move it down there. And we have a brush engine that you can separate out.
24:22
It's not too easy at the moment, but that's what Creator has been using. And you have the UI that exposes how you're drawing that stuff. And then you have the brush engine in between, which maps inputs to the dabs, which are just like circles you put on the screen, which makes up the stroke in the end.
24:43
Underneath that, you have the surface implementation, so what you're actually drawing on. And that is an interesting thing, because it's a C++ interface, but we actually use Python dictionaries for the tile structure. So we have this fairly well-optimized structure that
25:04
we just used. And that's kind of the trick, do what is performance critical in C++, and use existing well-optimized data structures. I would say that's the trick. But it's also a really simple brush engine.
25:23
That helps. Thanks. Just one thing. It may help when the person starting the project is an engineer working on embedded systems to keep it. Yes, Martin has a background there, so he knows some tricks. No, no, no, I'm good.
25:43
Just solely because it came up in the Creator talk, I was wondering if you had thought about multi-page documents, or if OpenRaster already supports that, and I'm just unaware of it. No, OpenRaster does not support multi-page documents. There is a film, the art director of a film in Berlin,
26:06
that's currently using MyPaint for concept art. And basically what he does, which is kind of a hack, well it works, is to use our backgrounds where we basically have a storyboard background.
26:23
I mean, in the creative workflow, this kind of can be nice, actually, because you don't have to specifically create these new frames or anything. And because of the infinite canvas, well, you can just go in a new direction, which you can do. But this has problems. You want to rearrange them sometimes. So I have toyed with the idea of having multi-page support.
26:46
But it's kind of, you don't really want to put it in MyPaint, because there's only a really small subset of users that care about it. At least if you put it in MyPaint, it should be not in their face than the other users' face.
27:02
One is also part of my vision is to, if I manage to get a MyPaint brush engine based on Gaggle, that just makes it much, much easier to reuse that code and all that stuff in other projects. So it should be pretty simple to just kind of create a new
27:23
application that really reuses all the hard stuff. So that might happen eventually. But it's kind of really in disguise. Anyone else?
27:41
Nope. Thank you.