MyPaintEdSlides

Dear MyPaint-Community,

I’ve started a small project, aiming at converting MyPaints .ora files
into an .html presentation. For this task, I used python to
read, compose the .ora files and generate a reveal.js presentation.

A first result can be seen here:
https://github.com/SteffenPL/MyPaintEdSlides

Demo slides:
https://steffenpl.github.io/MyPaintEdSlides/test/output_complete/index.html

Now, I was wondering if maybe this could be converted or recreated into a proper MyPaint feature
oder Add-On? The basic idea is to allow exporting layers into a “presentation format”.

I’m may interested in writing a plugin on my own, but I can’t foresee how difficult it is
to write small GUI elements and add them to MyPaint.

I would love to get feedback on the idea, any kind of hints or suggestions!

There is some feature I would like to implement for my project, but I don’t know how:
Is there some way to get “real-time” access to MyPaints current layers?
I would love to be able to “paint” on the slides during the presentation.
(Optionally with having a proper MyPaint window on a second screen
and only the content of the active frame being visible for the audience.)

Kind regards
Steffen

Background
I’m using MyPaint in a rather unusual way, primarily for mathematics.
Making notes and creating nice sheets to explain maths in a fun way works great for me.

1 Like

Very cool idea!

I’d start here:
https://github.com/mypaint/mypaint/blob/master/gui/tileddrawwidget.py#L1336-L1386

and maybe work your way backwards a bit, figure out how to create a new window and render a “2nd” copy of the drawing surface into the new window. I think the new window will probably have different dimensions (since the toolbars and such affect the rendering window size) so you’d want fully render it.

As far as showing the “active layer” only, if you hold down CTRL and hit the eye-ball icon you can activate a single-layer-only mode that would be nice for slidehow. However, in this mode it doesn’t seem like the background is rendered so maybe that can be a small feature request to have that available (or maybe there is a way to turn it on that I can’t see).

Thanks for the positive feedback and also for pointing me to the python class to start with. Let’s see how far I get.

About the “active layer only” mode:
I think pressing “Pos1” (or clicking View->Single Layer) does the job already, i.e. it disables all layers except the current one and the background.

For me that’s not really relevant, since in my case each slide is a combination of multiple layers.
That’s more or less the core of my idea, since to explain mathematical proofs, it’s crucial to
do it step by step. The names of the layers define currently, which layers are combined together
into one slide. (For example ‘x:ab*’ defines a slide containting layer ‘a’,‘b’ and all layers from the previous slide. And ‘x’ is the new internal name of the layer for further referencing.)
If I would use one layer for each slide, it would be really time consuming to
fix mistakes in the first step of a proof, since I then would need to change multiple layers equally.)

Have you considered using layer “Groups” instead of names to organize the slideshow? For instance, maybe each top level layer group is an individual “slide”. Then, within that group, each layer is the animation step that the up/down arrows reveals?

Maybe further levels of groups can make it easier to manage the steps. Maybe a new toggle button (similar to the lock icon) on a layer/group would indicate that it should persist (be combined with subsequent steps) until the next group is traversed (so you can build incrementally on steps/layers without duplicating)

1 Like

Wow, somehow I never recognised that groups exists.
That’s perfect for my task and simplifies it a lot!
I will definitely change to groups!

Thanks for your hint, that’s really helpful for me!

1 Like

Haha glad to help. If you get the latest development version there are now “views” too, which might somehow be helpful. You can snapshot the configuration of your layers and give it a name and switch between these named states. Although I still think traversing a tree model might be the way to go

Oh I just remembered how gimp handles animation with layer names. Basically include the word “combine” or “replace” in the layer name to control how the layer persists. I think you’d find that very useful

giftut7

It’s been a while, but I improved MyPaintEdSlides in the last years for my needs and I am still using it. Now I have new ideas for the project :slight_smile:

Short recall: it’s a python script which creates slides out of the painting layers (and groups) of an ORA file.
example1, example2

I am currently thinking about making it more accessible and to advertise it properly,
since some friends started using it and most people seem to like the resulting slides.
As a young developer, I would also be happy to contribute some useful open source stuff :slight_smile:

Before I start to invest time into the project, I wanted to ask:

  • Is it ok if I keep the name ‘MyPaintEdSlides’? It’s a well-intended reference to MyPaint and I don’t want to make money out of it. But if I am advertising the project somewhere, I don’t want to use that name if you are not fine with it! Is there something I need to keep in mind when using the name?
    (The program actually works with any ORA file, e.g. one can also use Krita to create slides).

  • Is there a new alternative way to create slides with MyPaint? I couldn’t find anything, but I haven’t watched the development of MyPaint actively.

My next goal is to make the installation of the ‘MyPaintEdSlides’ script easier and to add a simple user-interface for converting ORA files into slides.

PS:
@briend I used the ideas you had: groups define the slides (or subelements of slides) and keywords allow to add special functionality.

1 Like

Honestly, I don’t think we’ll have an issue with you using MyPaintEdSlides. Just keep in mind that MyPaint itself if license as GPLv2 so if you want to have it license compatible, you’ll either have to make your code GPLv2 as well or BSD License like our Brush Engine is. Or just make it public domain.

If we ever get a plugin system implemented into MyPaint, this would be one of the first projects I would consider to be a use case. It a tool that technically out of MyPaint scope, but still useful for edge cases( I hear from a bunch of users who use MyPaint for teaching for its sear simplicity so a competitor to Blackboard for ex.). If you want to tackle creating a plugin system with your scripts being the primary test case, I wouldn’t hesitate help you out as well.

Either way this looks to be an awesome tool and I look forward with what it evolves to. Heck, you are more than welcome to take the brush engine and create your own interface that would be more useful for those who would love to have an opensource alternative for blackboard. Or you can help us improve the UI flow as well to address those issues too. Your choice. :smile:

1 Like

Just for naming ideas, you could just name it OratoSlidesExporter, or OraSlides too. That way it more advertise the OpenRaster file spec with Krita and MyPaint being the primary apps that support it. Also that means your can have a voice with modifying the OpenRaster file spec to support what you need as well.

1 Like

That sounds great. Thanks for the fast reply, amazing :slight_smile:

I would pick GPLv2 and keep the name for now. I like that MyPaintEdSlides sounds quite catchy :wink:

I like the idea of making a plugin out of it. That would give some new possibilities, maybe even presenting the slides in the fullscreen view of MyPaint.

Are there already thoughts around a plugin system? Are there other potential plugins?

How would I start? I imaging that I could fork MyPaint, add my stuff and, then, we could think about how to fit that into a plugin interface.

Minimal requirements for my plugin would be:

  • reading access to layers
  • ability to keep some local assets somewhere (i.e. the reveal.js files)
  • ability to open a file dialogue (to select the directory in which the slides are stored)
  • control visibility of layers
  • adding a plugin widget

Fancy features would be:

  • ability to open a fullscreen view and change which layers are visible (aka go to next slides)
  • ability to do basic image operations

I can’t estimate how difficult a plugin system would be for you?
I haven’t worked with the MyPaint source code yet and I doubt that I could create a good plugin system myself for you. So, I would rely on help…