MyPaint is a simple drawing and painting program that works well with Wacom-style graphics tablets.

Overview

MyPaint

A fast and dead-simple painting app for artists


Join us on Discord Financial Contributors on Open Collective Translation status Build status on Travis AppVeyor Packaging status

Features

  • Infinite canvas
  • Extremely configurable brushes
  • Distraction-free fullscreen mode
  • Extensive graphic tablet support
  • Speed, simplicity, and expressiveness
  • Realistic paint-like pigment model
  • 15 bit Rec 709 linear RGB colorspace
  • Brush settings stored with each stroke on the canvas
  • Layers, various modes, and layer groups

Download

Latest stable release.

Releases and prereleases contain links to standalone packages (and installers for full releases) for Windows, and AppImage files for Linux.

Nightly releases

Using alpha releases comes with its own risks. Sometimes bugs can sneak in that causes crashes, so don't be too surprised by that. If you come across any, please do report those bugs so they can be dealt with.

Linux

If you don't want to build from source, the latest AppImage files can be found in a rolling release. Just download the .AppImage file and make it executable.

Windows

The nightly installers and standalone archives can be downloaded from the AppVeyor CI

Click on the link matching your architecture (32 or 64), then the tab named "Artifacts" to get the file list. Only one of the files ending in .exe or .7z are needed. Using the standalone archive (7z) is recommended.

Windows Package Manager (winget)

The latest stable release is available to install via winget, the Windows Package Manager. To search for the package, run:

winget search MyPaint

and to install, run:

winget install --id MyPaint.MyPaint

The winget package is not maintained by the dev team.

Chocolatey (windows)

If you prefer to use the Chocolatey repository, both stable releases and pre-releases can be found there.

Build/Test/Install

MyPaint depends on its brushstroke rendering library, libmypaint, as well as its brush library mypaint-brushes. If you have those installed, plus MyPaint's third party dependencies, you can try it out without installing:

git clone https://github.com/mypaint/mypaint.git
cd mypaint
python setup.py demo

If the demo works, you can install

python setup.py managed_install
python setup.py managed_uninstall

For more details, see the Setup Instructions.

Contributing

The MyPaint project welcomes and encourages participation by everyone. We want our community to be skilled and diverse, and we want it to be a community that anybody can feel good about joining. No matter who you are or what your background is, we welcome you.

Please see the Contributing Guide for full details of how you can begin contributing. All contributors to the MyPaint project must abide by a Code of Conduct.

Community

Legal info

MyPaint is Free/Libre/Open Source software. See Licenses and Copyrights for a summary of its licensing. A list of contributors can be found in the about dialog.

Contributors

Code Contributors

This project exists thanks to all the people who contribute. [Contribute].

Financial Contributors

Become a financial contributor and help us sustain our community. [Contribute]

Individuals

Organizations

Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]

Comments
  • v1.2.1-beta.0 python2w.exe crash after install

    v1.2.1-beta.0 python2w.exe crash after install

    I just tried to install MyPaint v1.2.1-beta.0 on Windows 7 x64. Immediately after install launching the program results in an error "python2w.exe has stopped working" This is a fresh install of Windows 7 so i'm not sure if i'm missing something or if this is a genuine bug. Since the program doesn't even launch, I am not sure how to provide more info about this problem but if you'd direct me i'd be willing to help.

    error

    windows upstream needs-info crasher 
    opened by karma12gaming 49
  • MyPaint 1.2.0-3 Not working anymore with Gnome 3 under Wayland

    MyPaint 1.2.0-3 Not working anymore with Gnome 3 under Wayland

    Hi,

    I cannot launch anymore MyPaint.

    MyPaint version: 1.2.0-3 Operating system: Debian SID Desktop environment: GNOME 3.22 under Wayland

    Steps to reproduce

    1. Start MyPaint
    2. MyPaint never start

    Backtraces or error messages

    In a terminal, any option return this:

    mypaint
    INFO: mypaint: Installation layout: conventional POSIX-like structure with prefix u'/usr'
    INFO: lib.i18n: POSIX: LANG='en_US.utf8'
    INFO: lib.i18n: POSIX: LANGUAGE=None
    
    ** (mypaint:29940): WARNING **: Couldn't connect to accessibility bus: Failed to connect to socket /tmp/dbus-JzvpLY1s8t: Connection refused
    Gdk-Message: Unable to load bogosity from the cursor theme
    Traceback (most recent call last):
      File "/usr/bin/mypaint", line 462, in <module>
        main.main(datapath, iconspath, old_confpath, version=version)
      File "/usr/share/mypaint/gui/main.py", line 95, in main
        from gui import application
      File "/usr/share/mypaint/gui/application.py", line 53, in <module>
        import gui.device
      File "/usr/share/mypaint/gui/device.py", line 25, in <module>
        import gui.mode
      File "/usr/share/mypaint/gui/mode.py", line 809, in <module>
        class SingleClickMode (InteractionMode):
      File "/usr/share/mypaint/gui/mode.py", line 813, in SingleClickMode
        cursor = gdk.Cursor(gdk.BOGOSITY)
      File "/usr/lib/python2.7/dist-packages/gi/overrides/Gdk.py", line 329, in __new__
        return cls.new(*args, **kwds)
    TypeError: constructor returned NULL
    
    
    user-support works-for-me exception 
    opened by DigitalKO 41
  • Brushes hosted in mypaint-brushes and libmypaint as a normal dependency

    Brushes hosted in mypaint-brushes and libmypaint as a normal dependency

    I rebased my change from pull request #302. Unfortunately this closed #302 and I can't reopen it, so I create this new pull request.

    Apart from rebasing, I changed the implementation by checking mypaint-data through pkg-config, and not using a git submodule anymore. Indeed using a git submodule, we would reinstall the mypaint-data package specially for mypaint, which goes against the very idea of having it as a separate shared package usable by other apps.

    I also updated mypaint-data (https://github.com/Jehan/mypaint-data), which is now set to use the latest brush data from current mypaint repo, and it will now be installed in a proper separate directory $datadir/mypaint-data/. I have tested against my mypaint repo installed in a separate prefix and it works well. I have also already prepare the code for GIMP which is ready to be committed if and when you will accept the pull request. The discovery through pkg-config in GIMP works well as well.

    enhancement 
    opened by Jehan 39
  • Surface Pro 3, 4 (N-Trig hardware): pressure sensitivity stops working after moving pen away from screen

    Surface Pro 3, 4 (N-Trig hardware): pressure sensitivity stops working after moving pen away from screen

    The latest changes have resolved some strange problems, thanks everyone!

    Now, it seems the last major hurdle is getting pressure sensitivity to work. I realize this very well could be related to Gtk/Gdk upstream, but figured I'd open it up here:

    If my stylus isn't near the screen, when I launch MyPaint, pressure sensitivity works! But once I move the pen away from the screen, I loose pressure sensitivity.

    Any ideas where this might be coming from? I see two devices in the preferences: System Aggregated Pointer and N-trig DuoSense device Stylus. This is under Windows 10, btw.

    Thanks!

    windows upstream needs-info 
    opened by crydalch 37
  • Strokes go haywire after touch input on Surface Pro 3

    Strokes go haywire after touch input on Surface Pro 3

    If I keep my hand away from the screen, it draws just fine, with pressure and everything (WinTab installed). However, if I touch the screen with my palm, things go haywire, and from then on (until I re-run MyPaint), they stay screwed up even with pen input. The upper left two strokes were prior to my palm touching the screen, the others are after.

    mypaint-dev-strokes

    I see it with both 32 and 64 bits, using the October 8, 2014 build from http://opensourcepack.blogspot.fr/2013/01/mypaint-and-pygi.html. I don't have this problem in MyPaint 1.0, however.

    Any ideas?

    Thanks!

    bug windows upstream stale 
    opened by crydalch 37
  • mypaint-2.0.1: Crashes immediately with numpy assertion (_npy_alloc_cache: Assertion `NPY_CHECK_GIL_HELD()' failed.)

    mypaint-2.0.1: Crashes immediately with numpy assertion (_npy_alloc_cache: Assertion `NPY_CHECK_GIL_HELD()' failed.)

    Description of the problem

    Building mypaint 2.0.1 either within the ebuild packaged for Gentoo or the original release tarball will result in a crash (core dumped) with a numpy assertion.

    Running installed mypaint

    The canvas appears. When drawing a stroke with the default tool, it (slowly) appears then crashes with the same error.

    Running demo

    The demo shows the same behaviour as the installed mypaint.

    Running tests

    They fail with the same assertion but no user interaction is required.

    Basic system details

    MyPaint version: 2.0.1 Operating system: Gentoo Linux (downstream bug) Desktop environment: KDE Plasma 5.19.5 General system information: see here

    Steps to reproduce

    1. Start MyPaint
    2. Draw a brush stroke (or run tests)
    3. Crashes

    Backtraces or error messages

    Demo/installed mypaint crash after painting stroke
    INFO: mypaint: Installation layout: conventional POSIX-like structure with prefix '/usr'
    WARNING: gui.userconfig: Failed to load settings file: /home/sam/.config/mypaint/settings.json
    WARNING: gui.userconfig: Failed to load settings: using defaults
    INFO: gui.main: No locale setting found, using system locale
    INFO: lib.i18n: POSIX: LANG='en_GB.UTF-8'
    INFO: lib.i18n: POSIX: LANGUAGE='en_GB:en_US'
    INFO: lib.i18n: Value of LANGUAGE after cleanup: 'en_GB:en_US:C'
    WARNING: gui.userconfig: Failed to load settings file: /home/sam/.config/mypaint/settings.json
    WARNING: gui.userconfig: Failed to load settings: using defaults
    INFO: gui.compatibility: Setting mode to 2.x (standard)
    INFO: gui.compatibility: Setting default layer type to Pigment
    INFO: gui.device: New device 'SEM USB Keyboard Consumer Control' (GDK_SOURCE_MOUSE, axes:4, class=X11DeviceXI2, vendor='1a2c', product='0e24')
    INFO: gui.device: New device 'Lenovo Optical Mouse' (GDK_SOURCE_MOUSE, axes:4, class=X11DeviceXI2, vendor='17ef', product='600e')
    INFO: gui.device: New device 'Virtual core XTEST pointer' (GDK_SOURCE_MOUSE, axes:2, class=X11DeviceXI2, vendor=None, product=None)
    INFO: gui.document: Initialized background from '/usr/share/mypaint/backgrounds/mrmamurk/mamurk_e_1.png'
    WARNING: gui.keyboard: Ignoring keybinding for '<Actions>/BrushModifierActions/BlendModeMenu'
    INFO: gui.brushmanager: Switching default pigment setting to On
    INFO: gui.compatibility: Setting default layer type to Pigment
    python3.7: numpy/core/src/multiarray/alloc.c:70: _npy_alloc_cache: Assertion `NPY_CHECK_GIL_HELD()' failed.
    Aborted (core dumped)
    
    Running tests

    The test which fails is consistently test_docpaint (numpy: 1.16.5)

    copying /var/tmp/portage/media-gfx/mypaint-2.0.1/work/mypaint-2.0.1_python3.7/lib/lib/_mypaintlib.cpython-37m-x86_64-linux-gnu.so -> lib
    test_docpaint (tests.mypaintlib.DocPaint)
    Saved and reloaded documents look identical ... python3.7: numpy/core/src/multiarray/alloc.c:70: _npy_alloc_cache: Assertion `NPY_CHECK_GIL_HELD()' failed.
    /var/tmp/portage/media-gfx/mypaint-2.0.1/temp/environment: line 1814:    49 Aborted                 (core dumped) "${@}"
    

    The assertion is slightly different with a newer numpy, such as 1.19.1 (which is where I originally discovered the issue):

    test_docpaint (tests.mypaintlib.DocPaint)
    Saved and reloaded documents look identical ... python3.7: numpy/core/src/multiarray/alloc.c:91: _npy_alloc_cache: Assertion `PyGILState_Check()' failed.
    /var/tmp/portage/media-gfx/mypaint-2.0.1/temp/environment: line 1814:    49 Aborted                 (core dumped) "${@}"
    
    Running demo with debugging symbols

    At this point, I found mypaint's debugging guide. I followed the instructions there and obtained this output (full output is in with the full backtrace log, linked below)

    [...]
    python: lib/fill/fill_common.hpp:146: PixelBuffer<C>::PixelBuffer(PyObject*) [with C = short unsigned int; PyObject = _object]: Assertion `PyArray_DIM(arr_buf, 2) == sizeof(C)' failed.
    
    Program received signal SIGABRT, Aborted.
    0x00007ffff7b16301 in raise () from /lib64/libc.so.6
    

    I've also attached the full backtrace here (snippet below):

    (gdb) bt
    #0  0x00007ffff7b16301 in raise () at /lib64/libc.so.6
    #1  0x00007ffff7aff536 in abort () at /lib64/libc.so.6
    #2  0x00007ffff7aff41f in  () at /lib64/libc.so.6
    #3  0x00007ffff7b0e742 in  () at /lib64/libc.so.6
    #4  0x00007ffff595be99 in PixelBuffer<unsigned short>::PixelBuffer(_object*) (this=0x7fffffff7860, buf=<numpy.ndarray at remote 0x7ffff37d9170>) at lib/fill/fill_common.hpp:146
    #5  0x00007ffff59614f9 in ConstTiles::init() () at lib/fill/fill_constants.cpp:21
    #6  0x00007ffff59615c2 in ConstTiles::ALPHA_OPAQUE() () at lib/fill/fill_constants.cpp:40
    #7  0x00007ffff5920cd3 in _wrap_ConstTiles_ALPHA_OPAQUE(PyObject*, PyObject*) (args=0x0) at lib/mypaintlib_wrap.cpp:17350
    #8  0x00007ffff7d2fac4 in _PyMethodDef_RawFastCallKeywords (method=0x7ffff59b4400 <SwigMethods+7968>, self=<module at remote 0x7ffff59ef710>, args=<optimized out>, nargs=nargs@entry=0, kwnames=0x0) at Objects/call.c:632
    #9  0x00007ffff7d2fde8 in _PyCFunction_FastCallKeywords
        (func=func@entry=<built-in method ConstTiles_ALPHA_OPAQUE of module object at remote 0x7ffff59ef710>, args=<optimized out>, nargs=nargs@entry=0, kwnames=kwnames@entry=0x0) at Objects/call.c:732
    #10 0x00007ffff7d08a77 in call_function (pp_stack=pp_stack@entry=0x7fffffff7a50, oparg=<optimized out>, kwnames=kwnames@entry=0x0) at Python/ceval.c:4568
    

    Please let me know if I can provide any more useful information.

    opened by thesamesam 35
  • Offset between cursor and drawing in dual screen mode

    Offset between cursor and drawing in dual screen mode

    I use Win 8 on a Surface Pro 8, and draw with a Wacom Intuos Pen&Touch Medium CTH-680 (not with the tablet pen). When using only tablet screen, drawing is as expected. When I connect my second screen, the drawing no longer appears under the cursor. An offset appears both when I draw on the main (tablet) screen, and on the secondary monitor; however the offset is in a different direction on either screen. The offset is not present when drawing with the mouse. Is any workaround known?

    (Maybe this issue is not due to MyPaint... when I tried screen capturing this using an animated gif screen capture program, the pen/mouse pointer offset was different from what it is on the screen, and also the mouse showed an offset -- ok, ignore this extra info if it's confusing.)

    user-support windows upstream needs-info 
    opened by sebastien-bratieres 35
  • Add Flatpak packaging

    Add Flatpak packaging

    Flatpak is a great way to distribute applications in modern GNU/Linux distributions.

    To build a flatpak package locally, follow this steps:

    cd flatpak
    flatpak remote-add --no-gpg-verify --user my-repo ~/flatpak-repo
    flatpak-builder --repo=~/flatpak-repo --force-clean my-build org.mypaint.MyPaint.json
    flatpak --user install my-repo org.mypaint.MyPaint
    

    Then it can be run from the command line like this:

    flatpak run org.mypaint.MyPaint
    

    A flatpak repository can be created to easily install MyPaint from a browser with one click. Is also possible to build a bundle for sharing with flatpak build-bundle. A central place for building and hosting Flatpak builds named Flathub is in the works. And Alexander Larsson showed interest in adding MyPaint to it.

    opened by manuq 33
  • Broken lines with devices that use the evdev driver (UC-Logic-based, Monoprice, Genius... and Wacom!)

    Broken lines with devices that use the evdev driver (UC-Logic-based, Monoprice, Genius... and Wacom!)

    (Migration of gna bug 20883)

    MyPaint is currently unusable when using the evdev xorg driver due to the strokes breaking up frequently. Known to affect multiple UC-Logic devices from multiple vendors, including Monoprice, Huion, and whatever device this forum user was using. (Probably a Genius-branded one, according to digimend.) May affect other evdev-using devices, but uc-logic devices are more common than others.

    Non-wacom devices are becoming more prevalent, especially with the recent proliferation of affordable Cintiq alternatives, and everyone but wacom seems to be standardised on using evdev, so this is a fairly nasty issue. Gtk2 apps such as Gimp, Inkscape, and older builds of MyPaint work with the evdev driver. Krita 2.8 and newer works as well.

    Some devices can use the xorg wacom driver as a workaround, but this isn't a proper fix. Doing so means access to some xinput settings are lost, such as calibration ("evdev axis calibration"), which is useful for tablet display devices such as the ones by Monoprice and Huion.

    The poster of the original port provided a couple sample videos and log information:

    Video of the behaviour in MyPaint: https://www.youtube.com/watch?v=MnNbCo2dWlk Video of testinput + console output: https://www.youtube.com/watch?v=L_Iqs-bGWaI Log of "xinput test" and screenshot of image made during test: log, image

    My device (Monoprice 19" pen display) has the same input problem and "xinput test" produces the same gaps, though in my case the gaps are more frequent and more pronounced.

    He also opened a bug report against gtk3 to get help, but nothing was resolved there. Someone indicated that a difference in evdev and wacom driver's behaviour regarding coordinate reporting may be at fault, but that the behaviour difference itself isn't a bug. ref.: https://bugzilla.gnome.org/show_bug.cgi?id=703610

    Affects all version of gtk3 + git-mypaint tested so far. He tested gtk 3.6.2, 3.6.4, 3.8.2; I tested 3.10.7, 3.12.0, 3.12.2.

    bug upstream 
    opened by Marand- 31
  • Auto-save working doc, tweaks to cache area, proper replace()

    Auto-save working doc, tweaks to cache area, proper replace()

    This is one that could do with some code review and testing. It's a partial fix for mypaint/mypaint#90 that'll allow us to move on with that, and hopefully make the code more robust all over. Quick summary:

    • The per-document cache folder now lives in ~/.cache/mypaint/doc.XXXXXX (on POSIX systems). It used to be down in /tmp somewhere.
    • Automatically snapshot write the working document to doc.XXXXXX/autosave during inactive periods, in small, low-priority, queued chunks.
    • Implements and uses a proper cross-platform file replace(), in lieu of Python3's equivalent os.replace().

    This needs testing to be certain that all the autosave activity doesn't kill painting responsiveness in freehand mode, and also to be sure that the autosave_dirty flags it sets when the document's current (and saveable) state changes are being a) respected, b) set appropriately, and c) not set too frequently. It's a good idea to point a file manager at your ~/.cache/mypaint and just watch to be certain that the autosaves are doing their thing appropriately. Quick guide to how this autosave implementation works:

    • Data layers know when a change they see changes their current state in a way that should be saved. Things like a painting layer's stroke_to(), or a file-backed layer's load-from-edited-file method do this now.
    • All they do is set an autosave_dirty flag on themselves, however. This does nothing by itself.
    • Autosaving is launched by an observer method watching the undo stack. If a new command is pushed to it, that's the cue to save out any dirty layer tree state and the document itself.
    • The autosave is requested up by visiting all the layers and getting them to queue up autosave work if they're interested, and also to declare their data files in a manifest for the save and make some index XML for themselves in advance.
    • The autosave ends up being a lightweight update of the tree rooted at ~/.cache/mypaint/doc.xxxxxx/autosave/. Only what's changed is updated, and writes happen at as low a priority as we can manage.
    • UUIDs. UUIDs everywhere. Just because layers need a consistent identity that's independent of the tree structure for this to work.
    • When the autosave chunks are all run, and all thumbnails and index stuff have been written, we clean the tree up to weed out any left-over state or tempfiles left lying around from this run or from previous runs.

    There are three branches of interest here:

    1. https://github.com/achadwick/mypaint/tree/issue90-autosave-threaded-1
    2. https://github.com/achadwick/mypaint/tree/issue90-autosave-threaded-2
    3. https://github.com/achadwick/mypaint/tree/issue90-autosave-chunked ← the one in this PR, and my favourite

    I really don't like the threaded versions on vast documents however: the autosaves basically kill all performance when they kick in, even though they work off RO snapshots enough to avoid faffing with locking. You'd think this stuff would be mostly IO-bound and therefore good for threading, but nuh~uh apparently. Maybe I just misunderstand Python threading though: in fact, that's quite likely.

    enhancement 
    opened by achadwick 29
  • mypaint has file conflict with libmypaint

    mypaint has file conflict with libmypaint

    Description of the problem

    Hi, I recently packaged libmypaint 1.3.0 for Debian and Ubuntu as a required dependency for gimp 2.10 RC1.

    I just noticed that there is a file conflict. Both libmypaint and mypaint ship the translation files named libmypaint.mo

    What do you recommend we do here?

    1. Is it practical to package a newer version of mypaint that uses the shared libmypaint?

    2. Should I disable translations in libmypaint for now? Are any of those translatable strings exposed in gimp's user interface?

    Basic system details

    MyPaint version: 1.2.0 Operating system: Ubuntu 18.04

    user-support 
    opened by jbicha 28
  • Added webapp storyboard background

    Added webapp storyboard background

    This background is intended for making mockups for web applications.

    It assumes that 1920x1080 is the standard screen size. It has dots every 12th of the screen, this reflects a common way of thinking of webapps in twelves.

    It has partitions to indicate thirds of the screen, and the center half of the screen.

    This has the additional benefit of helping the artist think in a mobile first mindset, as the centermost partition is about the same dimensions as some cellphones.

    I've been told it also would appeal to webtoon artists, and I believe it would also be good for mocking up game screens.

    The sides also allow for notes when not being used as part of the app's design.

    Here is a zoomed out example of it in use. image

    opened by kinostl 0
  • python: fix for Python 3.11

    python: fix for Python 3.11

    • python 3 always open in universal mode, U is default mode in 3.0, and removed in 3.11
    • mypaint doesn't use ld?n?gettext, so bind_textdomain_codeset isn't needed, that function is deprecated in 3.8 and is no-ops in 3.10 and removed in 3.11
    opened by sgn 0
  • Cursor size limit too low (Windows 10)

    Cursor size limit too low (Windows 10)

    Description of the problem

    Brush cursor not growing after a small limit. Once it reaches a certain size the cursor will no longer reflect the actual size of the brush, which would be fine if it was an obscurely large brush size however the limit was far too small. However this is only on Windows, I have used mypaint on linux and the cursor size limit was much higher and usable without any workarounds.

    Basic system details

    MyPaint version: 2.0.1 w64 Operating system: Windows 10

    Steps to reproduce

    1. Start MyPaint on Windows 10
    2. Increase brush size until it is visible that it does not grow after increasing just a few times from the default brush size

    Workaround

    Editing line 82 in mypaint-w64\mingw64\lib\mypaint\gui\cursor.py so that the max_cursor_size = 9999999999999999 (or some other large value) This will allow the brush size to be reflected into the cursor size far beyond the default limit (which strangely seems to work fine as expected on linux)

    opened by hungercp 0
  • Please migrate away from nose unittest framework

    Please migrate away from nose unittest framework

    Description of the problem

    Currently mypaint uses nose for unittests via python3 setup.py nosetests command. However, the original nose framework has ceased its development since 2015, and will be removed from Debian (and derivatives). See https://bugs.debian.org/1018417 for more information.

    As a result, please consider migrating away from original nose onto other active projects, such as nose2, pytest, or python3-builtin unittests framework.

    opened by hosiet 0
  • Error saving a large file

    Error saving a large file

    After painting a large number of pixels the program just give an error during the saving. Normally i use a 3000 x 3000 pixel board to do my draws. This problem isnt new, since i use this program for years, and in different computers, and i get the same error everytime. It's annoying because everytime i click on the "save" button i dont know if im gonna lose all the progress i made since the last save.

    Basic system details

    MyPaint version: [✍ 2.0.1+git.478280f2 ] Operating system: [✍ Windows 10]

    Steps to reproduce

    1. Start MyPaint
    2. Have at least 3000 x 3000 pixel background to work with.
    3. Make a draw that needs a lot of different colors.
    4. Save frequently

    Backtraces or error messages

    
    ERROR: lib.fileutils: Save method failed
    TypeError: file arg has no file descriptor or FILE* associated with it
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/fileutils.py", line 108, in _wrapped_save_method
        save_result = save_method(self, temp_path, *args, **kwds)
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/document.py", line 1776, in save_ora
        thumbnail = _save_layers_to_new_orazip(
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/document.py", line 2085, in _save_layers_to_new_orazip
        root_stack_elem = root_stack.save_to_openraster(
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/tree.py", line 2541, in save_to_openraster
        stack_elem = super(RootLayerStack, self).save_to_openraster(
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/group.py", line 527, in save_to_openraster
        layer_elem = layer.save_to_openraster(orazip, tmpdir, layer_path,
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/group.py", line 527, in save_to_openraster
        layer_elem = layer.save_to_openraster(orazip, tmpdir, layer_path,
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/data.py", line 1642, in save_to_openraster
        elem = super(StrokemappedPaintingLayer, self).save_to_openraster(
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/data.py", line 411, in save_to_openraster
        return self._save_rect_to_ora(orazip, tmpdir, "layer", path,
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/data.py", line 472, in _save_rect_to_ora
        self._surface.save_as_png(pngpath, *rect, progress=progress, **kwargs)
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/tiledsurface.py", line 651, in save_as_png
        lib.surface.save_as_png(self, filename, *args, **kwargs)
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/surface.py", line 277, in save_as_png
        pngsave = mypaintlib.ProgressivePNGWriter(
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/mypaintlib.py", line 777, in __init__
        _mypaintlib.ProgressivePNGWriter_swiginit(self, _mypaintlib.new_ProgressivePNGWriter(file, w, h, has_alpha, save_srgb_chunks))
    SystemError: <built-in function new_ProgressivePNGWriter> returned a result with an error set
    ERROR: lib.fileutils: cleanup: failed to remove temp path too
    TypeError: file arg has no file descriptor or FILE* associated with it
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/gui/filehandling.py", line 1170, in save_cb
        self.save_file(self.filename)
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/gui/filehandling.py", line 926, in save_file
        thumbnail_pixbuf = self._save_doc_to_file(
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/gui/filehandling.py", line 1001, in _save_doc_to_file
        thumbnail_pixbuf = ioui.call(doc.model.save, filename, **options)
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/gui/widgets.py", line 182, in wrapper
        return func(self, *args, **kwargs)
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/gui/filehandling.py", line 319, in call
        result = func(*args, **kwargs)
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/document.py", line 1441, in save
        result = save(filename, **kwargs)
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/fileutils.py", line 115, in _wrapped_save_method
        raise ex
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/fileutils.py", line 108, in _wrapped_save_method
        save_result = save_method(self, temp_path, *args, **kwds)
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/document.py", line 1776, in save_ora
        thumbnail = _save_layers_to_new_orazip(
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/document.py", line 2085, in _save_layers_to_new_orazip
        root_stack_elem = root_stack.save_to_openraster(
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/tree.py", line 2541, in save_to_openraster
        stack_elem = super(RootLayerStack, self).save_to_openraster(
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/group.py", line 527, in save_to_openraster
        layer_elem = layer.save_to_openraster(orazip, tmpdir, layer_path,
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/group.py", line 527, in save_to_openraster
        layer_elem = layer.save_to_openraster(orazip, tmpdir, layer_path,
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/data.py", line 1642, in save_to_openraster
        elem = super(StrokemappedPaintingLayer, self).save_to_openraster(
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/data.py", line 411, in save_to_openraster
        return self._save_rect_to_ora(orazip, tmpdir, "layer", path,
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/data.py", line 472, in _save_rect_to_ora
        self._surface.save_as_png(pngpath, *rect, progress=progress, **kwargs)
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/tiledsurface.py", line 651, in save_as_png
        lib.surface.save_as_png(self, filename, *args, **kwargs)
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/surface.py", line 277, in save_as_png
        pngsave = mypaintlib.ProgressivePNGWriter(
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/mypaintlib.py", line 777, in __init__
        _mypaintlib.ProgressivePNGWriter_swiginit(self, _mypaintlib.new_ProgressivePNGWriter(file, w, h, has_alpha, save_srgb_chunks))
    SystemError: <built-in function new_ProgressivePNGWriter> returned a result with an error set
    TypeError: file arg has no file descriptor or FILE* associated with it
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/document.py", line 591, in _autosave_countdown_cb
        self._queue_autosave_writes()
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/document.py", line 630, in _queue_autosave_writes
        root_elem = self.layer_stack.queue_autosave(
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/tree.py", line 2565, in queue_autosave
        stack_elem = super(RootLayerStack, self).queue_autosave(
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/group.py", line 554, in queue_autosave
        layer_elem = layer.queue_autosave(
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/group.py", line 554, in queue_autosave
        layer_elem = layer.queue_autosave(
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/data.py", line 1682, in queue_autosave
        elem = super(StrokemappedPaintingLayer, self).queue_autosave(
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/data.py", line 435, in queue_autosave
        task = tiledsurface.PNGFileUpdateTask(
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/tiledsurface.py", line 1287, in __init__
        self._png_writer = mypaintlib.ProgressivePNGWriter(
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/mypaintlib.py", line 777, in __init__
        _mypaintlib.ProgressivePNGWriter_swiginit(self, _mypaintlib.new_ProgressivePNGWriter(file, w, h, has_alpha, save_srgb_chunks))
    SystemError: <built-in function new_ProgressivePNGWriter> returned a result with an error set
    
    
    Mypaint version: 2.0.1+git.478280f2
    System information: Windows-10-10.0.19041-SP0
    Using: Python 3.8.3, GTK 3.24.20, GdkPixbuf 2.40.0, Cairo 1.16.0, GLib 2.64.1
    Traceback (most recent call last):
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/gui/filehandling.py", line 1170, save_cb(self=<gui.filehandling.FileHandler object>, action=<Gtk.Action object at 0x00000000123afec0 (GtkAction at 0x0000000011576a00)>)
                else:
                    self.save_file(self.filename)
      variables: {'self.save_file': ('local', <bound method FileHandler.save_file of <gui.filehandling.FileHandler object at 0x0000000012399d60>>), 'self.filename': ('local', 'C:/Users/35191/Desktop/deub.ora')}
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/gui/filehandling.py", line 926, save_file(self=<gui.filehandling.FileHandler object>, filename='C:/Users/35191/Desktop/deub.ora', export=False, **options={})
                """
                thumbnail_pixbuf = self._save_doc_to_file(
                    filename,
      variables: {'thumbnail_pixbuf': (None, []), 'self._save_doc_to_file': ('local', <bound method FileHandler._save_doc_to_file of <gui.filehandling.FileHandler object at 0x0000000012399d60>>), 'filename': ('local', 'C:/Users/35191/Desktop/deub.ora'), 'self.doc': ('local', <gui.document.Document object at 0x00000000124cae50>), 'export': ('local', False), 'use_statusbar': (None, []), 'options': ('local', {})}
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/gui/filehandling.py", line 1001, _save_doc_to_file(self=<gui.filehandling.FileHandler object>, filename='C:/Users/35191/Desktop/deub.ora', doc=<gui.document.Document object>, export=False, use_statusbar=True, **options={'save_srgb_chunks': True})
                thumbnail_pixbuf = ioui.call(doc.model.save, filename, **options)
                self.lastsavefailed = not ioui.success
      variables: {'thumbnail_pixbuf': ('local', None), 'ioui.call': ('local', <bound method _IOProgressUI.call of <gui.filehandling._IOProgressUI object at 0x0000000015d51970>>), 'doc.model.save': ('local', <bound method Document.save of <Document nlayers=92 bbox=Rect(-64, -1472, 3136, 3072) paintonly=False>>), 'filename': ('local', 'C:/Users/35191/Desktop/deub.ora'), 'options': ('local', {'save_srgb_chunks': True})}
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/gui/widgets.py", line 182, wrapper(self=<gui.filehandling._IOProgressUI object>, *args=(<bound method Document.save of <Document nlayers...ox=Rect(-64, -1472, 3136, 3072) paintonly=False>>, 'C:/Users/35191/Desktop/deub.ora'), **kwargs={'save_srgb_chunks': True})
                try:
                    return func(self, *args, **kwargs)
                    # gtk main loop may be called in here...
      variables: {'func': ('local', <function _IOProgressUI.call at 0x00000000120044c0>), 'self': ('local', <gui.filehandling._IOProgressUI object at 0x0000000015d51970>), 'args': ('local', (<bound method Document.save of <Document nlayers=92 bbox=Rect(-64, -1472, 3136, 3072) paintonly=False>>, 'C:/Users/35191/Desktop/deub.ora')), 'kwargs': ('local', {'save_srgb_chunks': True})}
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/gui/filehandling.py", line 319, call(self=<gui.filehandling._IOProgressUI object>, func=<bound method Document.save of <Document nlayers...ox=Rect(-64, -1472, 3136, 3072) paintonly=False>>, *args=('C:/Users/35191/Desktop/deub.ora',), **kwargs={'progress': <Progress 51.7/100>, 'save_srgb_chunks': True})
                try:
                    result = func(*args, **kwargs)
                except (FileHandlingError, AllocationError, MemoryError) as e:
      variables: {'result': ('local', None), 'func': ('local', <bound method Document.save of <Document nlayers=92 bbox=Rect(-64, -1472, 3136, 3072) paintonly=False>>), 'args': ('local', ('C:/Users/35191/Desktop/deub.ora',)), 'kwargs': ('local', {'save_srgb_chunks': True, 'progress': <Progress 51.7/100>})}
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/document.py", line 1441, save(self=<Document nlayers=92 bbox=Rect(-64, -1472, 3136, 3072) paintonly=False>, filename='C:/Users/35191/Desktop/deub.ora', **kwargs={'progress': <Progress 51.7/100>, 'save_srgb_chunks': True})
                try:
                    result = save(filename, **kwargs)
                except GObject.GError as e:
      variables: {'result': ('local', None), 'save': ('local', <bound method Document.save_ora of <Document nlayers=92 bbox=Rect(-64, -1472, 3136, 3072) paintonly=False>>), 'filename': ('local', 'C:/Users/35191/Desktop/deub.ora'), 'kwargs': ('local', {'save_srgb_chunks': True, 'progress': <Progress 51.7/100>})}
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/fileutils.py", line 115, _wrapped_save_method(self=<Document nlayers=92 bbox=Rect(-64, -1472, 3136, 3072) paintonly=False>, filename='C:/Users/35191/Desktop/deub.ora', *args=(), **kwds={'progress': <Progress 51.7/100>, 'save_srgb_chunks': True})
                        logger.error("cleanup: failed to remove temp path too")
                    raise ex
                if not os.path.exists(temp_path):
      variables: {'ex': (None, [])}
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/fileutils.py", line 108, _wrapped_save_method(self=<Document nlayers=92 bbox=Rect(-64, -1472, 3136, 3072) paintonly=False>, filename='C:/Users/35191/Desktop/deub.ora', *args=(), **kwds={'progress': <Progress 51.7/100>, 'save_srgb_chunks': True})
                    logger.debug("Writing to temp path %r", temp_path)
                    save_result = save_method(self, temp_path, *args, **kwds)
                except Exception as ex:
      variables: {'save_result': (None, []), 'save_method': ('local', <function Document.save_ora at 0x0000000011d09a60>), 'self': ('local', <Document nlayers=92 bbox=Rect(-64, -1472, 3136, 3072) paintonly=False>), 'temp_path': ('local', 'C:/Users/35191/Desktop/.tmpsave.deub.ora'), 'args': ('local', ()), 'kwds': ('local', {'save_srgb_chunks': True, 'progress': <Progress 51.7/100>})}
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/document.py", line 1776, save_ora(self=<Document nlayers=92 bbox=Rect(-64, -1472, 3136, 3072) paintonly=False>, filename='C:/Users/35191/Desktop/.tmpsave.deub.ora', options=None, **kwargs={'progress': <Progress 51.7/100>, 'save_srgb_chunks': True})
                self.sync_pending_changes(flush=True)
                thumbnail = _save_layers_to_new_orazip(
                    self.layer_stack,
      variables: {'thumbnail': (None, []), '_save_layers_to_new_orazip': ('global', <function _save_layers_to_new_orazip at 0x0000000011b39dc0>), 'self.layer_stack': ('local', <RootLayerStack len=8 'Raiz'>), 'filename': ('local', 'C:/Users/35191/Desktop/.tmpsave.deub.ora'), 'bbox': (None, []), 'tuple': ('builtin', <class 'tuple'>), 'self.get_user_bbox': ('local', <bound method Document.get_user_bbox of <Document nlayers=92 bbox=Rect(-64, -1472, 3136, 3072) paintonly=False>>), 'xres': (None, []), 'self._xres': ('local', <Document nlayers=92 bbox=Rect(-64, -1472, 3136, 3072) paintonly=False>), 'yres': (None, []), 'self._yres': ('local', <Document nlayers=92 bbox=Rect(-64, -1472, 3136, 3072) paintonly=False>), 'frame_active': (None, []), 'self.frame_enabled': ('local', True), 'settings': (None, []), 'dict': ('builtin', <class 'dict'>), 'self._settings': ('local', ObservableDict({'layervis': {'views': [], 'active_view': None, 'layer_views': [[[0], []], [[0, 0], []], [[0, 1], []], [[0, 2], []], [[0, 3], []], [[0, 4], []], [[0, 5], []], [[0, 6], []], [[0, 7], []], [[1], []], [[1, 0], []], [[1, 1], []], [[2], []], [[2, 0], []], [[2, 1], []], [[2, 2], []], [[2, 3], []], [[2, 4], []], [[3], []], [[3, 0], []], [[3, 1], []], [[3, 2], []], [[3, 3], []], [[3, 4], []], [[3, 5], []], [[3, 6], []], [[3, 7], []], [[3, 8], []], [[3, 9], []], [[3, 10], []], [[3, 11], []], [[3, 12], []], [[3, 13], []], [[3, 14], []], [[3, 15], []], [[3, 16], []], [[4], []], [[4, 0], []], [[4, 1], []], [[4, 2], []], [[4, 3], []], [[5], []], [[5, 0], []], [[5, 1], []], [[5, 2], []], [[5, 3], []], [[5, 4], []], [[5, 5], []], [[5, 6], []], [[5, 7], []], [[5, 8], []], [[5, 9], []], [[5, 10], []], [[5, 11], []], [[5, 12], []], [[5, 13], []], [[5, 14], []], [[5, 15], []], [[5, 16], []], [[5, 17], []], [[5, 18], []], [[5, 19], []], [[5, 20], []], [[5, 21], []], [[5, 22], []], [[5, 23], []], [[5, 24], []], [[5, 25], []], [[5, 26], []], [[5, 27], []], [[5, 28], []], [[5, 29], []], [[5, 30], []], [[5, 31], []], [[5, 32], []], [[5, 33], []], [[5, 34], []], [[5, 35], []], [[5, 36], []], [[5, 37], []], [[5, 38], []], [[5, 39], []], [[5, 40], []], [[5, 41], []], [[6], []], [[6, 0], []], [[6, 1], []], [[6, 2], []], [[6, 3], []], [[6, 4], []], [[6, 5], []], [[7], []]]}})), 'kwargs': ('local', {'save_srgb_chunks': True, 'progress': <Progress 51.7/100>})}
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/document.py", line 2085, _save_layers_to_new_orazip(root_stack=<RootLayerStack len=8 'Raiz'>, filename='C:/Users/35191/Desktop/.tmpsave.deub.ora', bbox=(0, 0, 3000, 1552), xres=None, yres=None, frame_active=True, progress=<Progress 51.7/100>, settings={'layervis': {'active_view': None, 'layer_views': [[[0], []], [[0, 0], []], [[0, 1], []], [[0, 2], []], [[0, 3], []], [[0, 4], []], [[0, 5], []], [[0, 6], []], [[0, 7], []], [[1], []], [[1, 0], []], [[1, 1], []], [[2], []], [[2, 0], []], [[2, 1], []], [[2, 2], []], [[2, 3], []], [[2, 4], []], [[3], []], [[3, 0], []], ...], 'views': []}}, **kwargs={'save_srgb_chunks': True})
            root_stack_path = ()
            root_stack_elem = root_stack.save_to_openraster(
                orazip, tempdir, root_stack_path,
      variables: {'root_stack_elem': (None, []), 'root_stack.save_to_openraster': ('local', <bound method RootLayerStack.save_to_openraster of <RootLayerStack len=8 'Raiz'>>), 'orazip': ('local', <zipfile.ZipFile filename='C:/Users/35191/Desktop/.tmpsave.deub.ora' mode='w'>), 'tempdir': ('local', 'C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint'), 'root_stack_path': ('local', ()), 'data_bbox': ('local', (-64, -1472, 3136, 3072)), 'bbox': ('local', (0, 0, 3000, 1552)), 'progress': ('local', <Progress 51.7/100>), 'progress.open': ('local', <bound method Progress.open of <Progress 51.7/100>>), 'kwargs': ('local', {'save_srgb_chunks': True})}
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/tree.py", line 2541, save_to_openraster(self=<RootLayerStack len=8 'Raiz'>, orazip=<zipfile.ZipFile filename='C:/Users/35191/Desktop/.tmpsave.deub.ora' mode='w'>, tmpdir='C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint', path=(), canvas_bbox=(-64, -1472, 3136, 3072), frame_bbox=(0, 0, 3000, 1552), progress=<Progress 5.7/10>, **kwargs={'save_srgb_chunks': True})
                # First 90%: save the stack contents normally.
                stack_elem = super(RootLayerStack, self).save_to_openraster(
                    orazip, tmpdir, path, canvas_bbox,
      variables: {'stack_elem': (None, []), 'super': ('builtin', <class 'super'>), 'RootLayerStack': ('global', <class 'lib.layer.tree.RootLayerStack'>), 'self': ('local', <RootLayerStack len=8 'Raiz'>), 'save_to_openraster': (None, []), 'orazip': ('local', <zipfile.ZipFile filename='C:/Users/35191/Desktop/.tmpsave.deub.ora' mode='w'>), 'tmpdir': ('local', 'C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint'), 'path': ('local', ()), 'canvas_bbox': ('local', (-64, -1472, 3136, 3072)), 'frame_bbox': ('local', (0, 0, 3000, 1552)), 'progress': ('local', <Progress 5.7/10>), 'progress.open': ('local', <bound method Progress.open of <Progress 5.7/10>>), 'kwargs': ('local', {'save_srgb_chunks': True})}
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/group.py", line 527, save_to_openraster(self=<RootLayerStack len=8 'Raiz'>, orazip=<zipfile.ZipFile filename='C:/Users/35191/Desktop/.tmpsave.deub.ora' mode='w'>, tmpdir='C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint', path=(), canvas_bbox=(-64, -1472, 3136, 3072), frame_bbox=(0, 0, 3000, 1552), progress=<Progress 5.7/9>, **kwargs={'save_srgb_chunks': True})
                    layer_path = tuple(list(path) + [layer_idx])
                    layer_elem = layer.save_to_openraster(orazip, tmpdir, layer_path,
                                                          canvas_bbox, frame_bbox,
      variables: {'layer_elem': ('local', <Element 'stack' at 0x0000000015bbdc20>), 'layer.save_to_openraster': ('local', <bound method LayerStack.save_to_openraster of <LayerStack len=42 'Grupo 1'>>), 'orazip': ('local', <zipfile.ZipFile filename='C:/Users/35191/Desktop/.tmpsave.deub.ora' mode='w'>), 'tmpdir': ('local', 'C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint'), 'layer_path': ('local', (5,)), 'canvas_bbox': ('local', (-64, -1472, 3136, 3072)), 'frame_bbox': ('local', (0, 0, 3000, 1552)), 'progress': ('local', <Progress 5.7/9>), 'progress.open': ('local', <bound method Progress.open of <Progress 5.7/9>>), 'kwargs': ('local', {'save_srgb_chunks': True})}
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/group.py", line 527, save_to_openraster(self=<LayerStack len=42 'Grupo 1'>, orazip=<zipfile.ZipFile filename='C:/Users/35191/Desktop/.tmpsave.deub.ora' mode='w'>, tmpdir='C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint', path=(5,), canvas_bbox=(-64, -1472, 3136, 3072), frame_bbox=(0, 0, 3000, 1552), progress=<Progress 32.0/43>, **kwargs={'save_srgb_chunks': True})
                    layer_path = tuple(list(path) + [layer_idx])
                    layer_elem = layer.save_to_openraster(orazip, tmpdir, layer_path,
                                                          canvas_bbox, frame_bbox,
      variables: {'layer_elem': ('local', <Element 'layer' at 0x0000000015d62400>), 'layer.save_to_openraster': ('local', <bound method StrokemappedPaintingLayer.save_to_openraster of <PaintingLayer 'Camada 16'>>), 'orazip': ('local', <zipfile.ZipFile filename='C:/Users/35191/Desktop/.tmpsave.deub.ora' mode='w'>), 'tmpdir': ('local', 'C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint'), 'layer_path': ('local', (5, 32)), 'canvas_bbox': ('local', (-64, -1472, 3136, 3072)), 'frame_bbox': ('local', (0, 0, 3000, 1552)), 'progress': ('local', <Progress 32.0/43>), 'progress.open': ('local', <bound method Progress.open of <Progress 32.0/43>>), 'kwargs': ('local', {'save_srgb_chunks': True})}
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/data.py", line 1642, save_to_openraster(self=<PaintingLayer 'Camada 16'>, orazip=<zipfile.ZipFile filename='C:/Users/35191/Desktop/.tmpsave.deub.ora' mode='w'>, tmpdir='C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint', path=(5, 32), canvas_bbox=(-64, -1472, 3136, 3072), frame_bbox=(0, 0, 3000, 1552), **kwargs={'progress': <Progress 0.0/6>, 'save_srgb_chunks': True})
                elem = super(StrokemappedPaintingLayer, self).save_to_openraster(
                    orazip, tmpdir, path,
      variables: {'elem': (None, []), 'super': ('builtin', <class 'super'>), 'StrokemappedPaintingLayer': ('global', <class 'lib.layer.data.StrokemappedPaintingLayer'>), 'self': ('local', <PaintingLayer 'Camada 16'>), 'save_to_openraster': (None, []), 'orazip': ('local', <zipfile.ZipFile filename='C:/Users/35191/Desktop/.tmpsave.deub.ora' mode='w'>), 'tmpdir': ('local', 'C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint'), 'path': ('local', (5, 32)), 'canvas_bbox': ('local', (-64, -1472, 3136, 3072)), 'frame_bbox': ('local', (0, 0, 3000, 1552)), 'kwargs': ('local', {'progress': <Progress 0.0/6>, 'save_srgb_chunks': True})}
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/data.py", line 411, save_to_openraster(self=<PaintingLayer 'Camada 16'>, orazip=<zipfile.ZipFile filename='C:/Users/35191/Desktop/.tmpsave.deub.ora' mode='w'>, tmpdir='C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint', path=(5, 32), canvas_bbox=(-64, -1472, 3136, 3072), frame_bbox=(0, 0, 3000, 1552), **kwargs={'progress': <Progress 0.0/6>, 'save_srgb_chunks': True})
                rect = self.get_bbox()
                return self._save_rect_to_ora(orazip, tmpdir, "layer", path,
                                              frame_bbox, rect, **kwargs)
      variables: {'self._save_rect_to_ora': ('local', <bound method SurfaceBackedLayer._save_rect_to_ora of <PaintingLayer 'Camada 16'>>), 'orazip': ('local', <zipfile.ZipFile filename='C:/Users/35191/Desktop/.tmpsave.deub.ora' mode='w'>), 'tmpdir': ('local', 'C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint'), 'path': ('local', (5, 32)), 'frame_bbox': ('local', (0, 0, 3000, 1552)), 'rect': ('local', Rect(2048, 704, 128, 320)), 'kwargs': ('local', {'progress': <Progress 0.0/6>, 'save_srgb_chunks': True})}
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/layer/data.py", line 472, _save_rect_to_ora(self=<PaintingLayer 'Camada 16'>, orazip=<zipfile.ZipFile filename='C:/Users/35191/Desktop/.tmpsave.deub.ora' mode='w'>, tmpdir='C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint', prefix='layer', path=(5, 32), frame_bbox=(0, 0, 3000, 1552), rect=Rect(2048, 704, 128, 320), progress=<Progress 0.0/6>, **kwargs={'save_srgb_chunks': True})
                t0 = time.time()
                self._surface.save_as_png(pngpath, *rect, progress=progress, **kwargs)
                t1 = time.time()
      variables: {'self._surface.save_as_png': ('local', <bound method MyPaintSurface.save_as_png of <lib.tiledsurface.MyPaintSurface object at 0x0000000019db7ee0>>), 'pngpath': ('local', 'C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint/layer-05-32.png'), 'rect': ('local', Rect(2048, 704, 128, 320)), 'progress': ('local', <Progress 0.0/6>), 'kwargs': ('local', {'save_srgb_chunks': True})}
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/tiledsurface.py", line 651, save_as_png(self=<lib.tiledsurface.MyPaintSurface object>, filename='C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint/layer-05-32.png', *args=(2048, 704, 128, 320), **kwargs={'alpha': True, 'progress': <Progress 0.0/6>, 'save_srgb_chunks': True})
                    kwargs['single_tile_pattern'] = True
                lib.surface.save_as_png(self, filename, *args, **kwargs)
      variables: {'lib.surface.save_as_png': ('global', <function save_as_png at 0x0000000004302550>), 'self': ('local', <lib.tiledsurface.MyPaintSurface object at 0x0000000019db7ee0>), 'filename': ('local', 'C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint/layer-05-32.png'), 'args': ('local', (2048, 704, 128, 320)), 'kwargs': ('local', {'progress': <Progress 0.0/6>, 'save_srgb_chunks': True, 'alpha': True})}
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/surface.py", line 277, save_as_png(surface=<lib.tiledsurface.MyPaintSurface object>, filename='C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint/layer-05-32.png', *rect=(2048, 704, 128, 320), **kwargs={})
                with open(filename, "wb") as writer_fp:
                    pngsave = mypaintlib.ProgressivePNGWriter(
                        writer_fp,
      variables: {'pngsave': (None, []), 'mypaintlib.ProgressivePNGWriter': ('global', <class 'lib.mypaintlib.ProgressivePNGWriter'>), 'writer_fp': ('local', <_io.BufferedWriter name='C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint/layer-05-32.png'>), 'w': ('local', 128), 'h': ('local', 320), 'alpha': ('local', True), 'save_srgb_chunks': ('local', True)}
      File "C:/Program Files/mypaint-w64/mingw64/lib/mypaint/lib/mypaintlib.py", line 777, __init__(self=<lib.mypaintlib.ProgressivePNGWriter;  >, file=<_io.BufferedWriter name='C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint/layer-05-32.png'>, w=128, h=320, has_alpha=True, save_srgb_chunks=True)
            def __init__(self, file, w, h, has_alpha, save_srgb_chunks):
                _mypaintlib.ProgressivePNGWriter_swiginit(self, _mypaintlib.new_ProgressivePNGWriter(file, w, h, has_alpha, save_srgb_chunks))
      variables: {'_mypaintlib.ProgressivePNGWriter_swiginit': ('global', <built-in function ProgressivePNGWriter_swiginit>), 'self': ('local', <lib.mypaintlib.ProgressivePNGWriter;  >), '_mypaintlib.new_ProgressivePNGWriter': ('global', <built-in function new_ProgressivePNGWriter>), 'file': ('local', <_io.BufferedWriter name='C:/Users/35191/AppData/Local/Temp/save77inbbwqmypaint/layer-05-32.png'>), 'w': ('local', 128), 'h': ('local', 320), 'has_alpha': ('local', True), 'save_srgb_chunks': ('local', True)}
    SystemError: <built-in function new_ProgressivePNGWriter> returned a result with an error set
    
    opened by 2201157 0
  • Having issues enabling pressure sensitivity in MyPaint on Surface Studio

    Having issues enabling pressure sensitivity in MyPaint on Surface Studio

    Been having issues with trying to figure out how to get the pressure sensitivity to work on my Surface Studio laptop and had the same issues with the previous laptop I had, which was a Surface Pro 4. How do I enable it for the laptop with the Surface Pen.

    opened by BlueRascal 0
Releases(v2.0.1)
  • v2.0.1(May 29, 2020)

    This is a bugfix release for v2.0.0.

    :exclamation: Important

    For those who primarily use the 2.x mode (the default mode), this is an important upgrade. A color conversion function in the v2.0.0 release has an error that can (and usually will) cause image degradation over multiple save/load cycles. Big thanks to gwojcik for noticing and fixing this. The 1.x mode has not been affected by this.

    v2.0.1 requires libmypaint v1.6.0 or higher to run. This is not something Windows users or Appimage users have to worry about.

    Changelog

    • HSV/HCY brush dynamics in 2.x mode fixed.
    • Undo/Redo stack size made configurable and more efficient.
    • Undo/Redo stack default size increased to 40.
    • Rounding error when saving files in 2.x mode fixed.
    • Invalid l11n strings fixed.
    • Translated strings added/updated for several languages.
    • Dependency on intltool removed (still required for libmypaint).
    • Variables in l11n strings validated on build (xml tags are not validated yet, however).
    • libmypaint translations are now bound, making them work properly in the appimages.
    • OARS rating added to appdata (relevant for app-distribution software, but not much else).
    • A number of Py3 compatibility issues were fixed.
    • Svg icons fixed - some were previously considered invalid by librsvg >= 2.48.
    • Svg icon sizes reduced across the board.
    • Windows build now uses openmp, which should improve performance on most systems.
    • Size of Windows install bundle significantly reduced. (installed size by ~50%, bundle size by ~70% for installers)
    • Size of AppImage files reduced by ~9MB
    • AppImages now handle external editing better (no longer overrides the host environment for the launched programs)
    • Typos in documentation fixed (not user-facing typos).

    AppImage compatibility

    The smaller AppImage bundles have been confirmed to run on clean installs of the following systems:

    • Ubuntu 14.04, 16.04, 18.04
    • Fedora 30
    • Manjaro 20
    • CentOS 7
    • OpenSUSE Leap 15.1
    • Debian sid (for the day of the release)
    • Slacko Puppy Linux 6.3.2

    If they do not run, or are otherwise buggy on your <6 year old distro, open an issue in the tracker.

    Additionally, you can try the MyPaint-v2.0.1-alt.AppImage if the smaller ones do not run on your system.

    Source code(tar.gz)
    Source code(zip)
    checksums.sha256.asc(1.50 KB)
    mypaint-2.0.1.sha256.asc(955 bytes)
    mypaint-2.0.1.tar.xz(6.95 MB)
    MyPaint-v2.0.1-alt.AppImage(45.66 MB)
    MyPaint-v2.0.1-no-translations.AppImage(20.99 MB)
    MyPaint-v2.0.1.AppImage(28.55 MB)
    mypaint-w32-2.0.1-installer.exe(36.26 MB)
    mypaint-w32-2.0.1-standalone.7z(34.61 MB)
    mypaint-w64-2.0.1-installer.exe(36.98 MB)
    mypaint-w64-2.0.1-standalone.7z(35.55 MB)
  • v2.0.0(Feb 15, 2020)


    Edit: 2020-02-20

    Uploaded corrected AppImage files, which are actually built against the bundled dependencies and with openmp support enabled (the old versions were built on vanilla Ubuntu 16.04, but packaged on a CentOS 7 docker image).


    After a bit of a lull in development, MyPaint 2.0 has arrived at last! Many have already tried out the new features in the new automated continuous appimage releases, but for those who prefer to use stable releases, this is the time to pester your distro's package maintainers (or better yet, package and take a maintainer role yourself).

    Why is this 2.0 and not 1.3?

    MyPaint 2.0 adds a new layer mode and uses a different compositing method than before (by default, this is configurable), which means that you can create files in 2.0 that will not look the same when opened in earlier versions. Additionally, changes to the brush parameters means that you can create stroke data in 2.0 that cannot be safely used in earlier versions.

    Major New Features

    • Linear compositing and spectral blending (pigment).
    • Layer views.
    • Brush strokes dependent on view rotation and view zoom.
    • Additional symmetry modes: vertical, vertical+horizontal, rotational, snowflake.
    • Expanded flood fill functionality: offset, feather, gap detection and more.
    • New brush settings: offsets, gridmap, additional smudge settings, posterize, pigment.
    • New brush inputs: barrel rotation, base radius, zoom level, gridmap x/y, direction 360, attack angle.

    See the change log for more.

    Binaries

    For Linux users, the appimage files should work fine on both fairly old (~6 years) and new distros alike. For Windows users, it is strongly recommended to uninstall any old versions of MyPaint you have installed on your system before installing the new one.

    Changelog

    This is a condensed list of changes since 1.2.1.

    • Full Python3 support (Python2 still supported)
    • Tons of style consistency updates (flake8).
    • Switch to PyGI
    • New ability to simplify nodes in Inking tool.
    • New ability to delete autosaves from recovery dialog.
    • Improved user messages.
    • Scratchpad no longer scrolls on size changes
    • Integrated bug reporting w. issue template
    • Use external libmypaint (>= 1.5).
    • Most (possibly all) IO uses context managers.
    • Layer manipulability dependent on visibility.
    • Brush description shown in tooltip in quick choice dialog.
    • AppImage builds added.
    • Move build to setuptools/distutils.
    • New keyboard shortcuts/defaults.
    • New symmetry modes (vertical, vert+horz, rotational, snowflake).
    • Flatpak support added (currently not functional?).
    • Maximum input mapping curve points increased to 64.
    • Curve editor points snaps on 0.5 increments.
    • Input curve reset button clears the graph.
    • New Import Layers feature.
    • Zoom and view-rotation-dependent painting.
    • New debug command: Vacuum Empty Tiles.
    • Progress feedback for loading/saving.
    • New Layer Properties dialog.
    • New separate H/C/Y pickers.
    • Per-document settings.
    • New Layer Views.
    • Layer rendering code reworked.
    • New Remove Layer Backdrop command.
    • New Refactor Layer Group commands.
    • Linear compositing.
    • Spectral mixing (pigment mode).
    • Ability to emulate inputs with modifier keys.
    • Support for barrel rotation input.
    • Floodfill performance improved.
    • Offset, feathering and gap detection added to Floodfill.
    • Source, blend mode and opacity added to Floodfill.
    • Erase / Lock Alpha / Colorize modes respected by Floodfill.
    • Floodfill is now cancellable.
    • Configurable layer blinking on layer switching.
    • Fix crash when moving empty layer group.
    • Interface language configurable in user preferences.
    • Add version info to .ora files and compatibility checks.
    • Bundled backgrounds optimized for size.
    • Lots of bugs, crashers and other annoyances fixed.

    Known issues

    There are still plenty of input issues on Windows, ranging from offset bugs when using multiple monitors, to pressure not working with certain devices and generally worse support for some of the more advanced features, like external editing. Some of these issues will hopefully be resolved by fixing instances where deprecated interfaces are used, but if they are not, the situation is unlikely to change unless a Windows-using developer joins the team to investigate the underlying issues.

    Moving forward

    The next minor release will focus on fixing the use of deprecated interfaces, as well as general improvements to the user interface, hopefully alongside general performance improvements (particularly for the spectral blending) and some new features as well.

    Dependencies & Packaging

    This release requires libmypaint >= 1.5.0 and mypaint-brushes-2.0.2 (technically v2.0.0 and v2.0.1 will work as well, but do use v2.0.2)

    Note that this is different from the master branch, which requires the libmypaint-2.0 dev library.

    See BUILDING.md for the other dependencies.

    MyPaint now uses setuptools for its build, but cannot be built/distributed as a pip package (at least not easily). This may change in the future, but would/will require a fair amount of restructuring.

    The astute observer will notice that the source package for v1.2.1 was over 36MB, whereas the one for v2.0.0 is just under 7MB. This is not a packaging mistake, but merely (mostly) a consequence of a culling and optimization effort of the bundled backgrounds (png files).

    Source code(tar.gz)
    Source code(zip)
    mypaint-2.0.0.sha256.asc(955 bytes)
    mypaint-2.0.0.tar.xz(6.97 MB)
    MyPaint-v2.0.0-1-no-translations.AppImage(30.21 MB)
    MyPaint-v2.0.0-1-no-translations.AppImage.sha256sum(108 bytes)
    MyPaint-v2.0.0-1.AppImage(37.70 MB)
    MyPaint-v2.0.0-1.AppImage.sha256sum(92 bytes)
    mypaint-w32-2.0.0-installer.exe(126.05 MB)
    mypaint-w32-2.0.0-standalone.7z(82.79 MB)
    mypaint-w64-2.0.0-installer.exe(127.99 MB)
    mypaint-w64-2.0.0-standalone.7z(82.44 MB)
  • v2.0.0-beta.0(Dec 20, 2019)

    The road to the release

    At long last, we're moving into beta, meaning that no more features will be added before the 2.0.0 release, and no translatable source strings will be added or changed (unless absolutely necessary, if a source string turns out to be completely wrong).

    This is now the best time to contribute to the translation effort over at Weblate. Translation is not easy, and should not be rushed. It doesn't matter if the translation covers 100% of the strings if 90% of the translations are incomprehensible or confusing. It's better to spend more time to try to make the translations consistent, and as clear as possible (while being reasonably terse, I did say it wasn't easy, right?). We aim for a full release at the end of January, so there are at least five weeks available to work on translations.

    If the meaning of a source string is ambiguous, or generally lacking context/clarity, make a comment for that string in the Weblate interface. Make sure that the scope is set to "Source string comment, ..." so we can see it. Even though we won't add or change source strings, we can add source string comments to provide more information to translators.

    We don't expect the (many) new languages that have been added to be fully or even partially translated in time for the release (aimed for the end of January 2020), but hope that most of the older major translation will be updated and improved (most of them are at least 75% done, string-wise). The languages that have been continuously updated during the past 5 months have less than 30 new strings that need to be translated.


    Apart from the translations, the goal is now to find and fix any bugs we can fix (generally this does not cover input bugs on Windows, unfortunately). If you find a bug *, search for it on the tracker. If you find it on the tracker, make a comment to indicate that it's still a problem, and if you do not find it, report it in a new issue.

    * That is, an actual bug - something that does not work, causes an exception or crashes the program - and not missing features you would like to have (for that, you can request/discuss/vote for features on the forums). Do report input bugs, even though we may not be able to fix them for this release.

    Changes since alpha 13

    Compatibility modes

    Anyone who has used the prereleases knows that the 2.0 release brings with it the awesome spectral subtractive color mixing features - allowing colors to mix more like real paint would. They may also have noticed that their old files don't look quite the same when opened with those prereleases, and that painting can be a bit laggy when working with high resolutions.

    In order to support working with old files, and for those who don't really need the new color blending (though you should try it out!), MyPaint now supports two compatibility modes:

    1.x

    When in 1.x mode (indicated in the window title):

    • The rendering mode is the same as in 1.2.1 and earlier (sRGB).
    • The default layer is "Normal" (configurable).
    • The default Pigment brush setting is off (configurable).
    • Spectral blending (pigment mode) will not work quite as it should.

    2.x

    When in 2.x mode (default, configurable):

    • The rendering is adapted for the spectral blending (Linear sRGB + non-linear blending).
    • The default layer is "Pigment" (configurable).
    • The default Pigment brush setting is on (configurable).
    • Painting will be slower *

    Each document keeps track of which mode it was using when it is saved, but it's also possible to override that mode when opening files. For old documents, which do not have the mode information stored, the mode used can be configured to either be one of "1.x" and "2.x" or opening in "1.x" unless there are Pigment layers present (from files saved in 2.0.0 alphas).

    * This will almost certainly be addressed in the future. @briend has already made an experimental branch with drastically improved performance and quality of results. To some extent the spectral blending will always be a bit slower, but it can be made a lot faster than it is today

    Other changes

    • The new brush settings are now properly categorized. You will no longer see the "Experimental" group, and can find the new settings under the "Color" and "Smudge" categories.
    • Painting with the new symmetry modes is a lot faster. The entire area is no longer processed, avoiding the quadratic slowdown. Symmetry mode can still be slow when using the line/curve/ellipse modes, but that might be addressed in time for 2.0. Nevertheless, bear in mind that it will always be slower to paint with more symmetry lines - using e.g. 12 lines with the snowflake symmetry mode is the equivalent of painting a stroke that's 24x as long as the distance of your actual stroke.
    • Version information and compatibility warnings have been added, warning when attempting to open a file created with a newer version of MyPaint. There are two separate warnings shown for different levels of incompatibility, they can be disabled separately (and of course, you won't be able to see them at all until future releases).
    • Python 3 is now used for the Windows build *.
    • Preparations for adjustable symmetry angles - unfortunately this won't be part of the 2.0 release, but will be ready for 2.1.

    * In just 11 short days, Python 2.7 will be EOL. In general we'll keep supporting Python 2.7 for MyPaint 2.0 and probably 2.1, but support will be dropped for the 2.2 release (so the code can be cleaned up).

    Source code(tar.gz)
    Source code(zip)
    mypaint-git-w32-2.0.0-alpha-v2.0.0-beta.0.591-installer.exe(154.04 MB)
    mypaint-git-w32-2.0.0-alpha-v2.0.0-beta.0.591-standalone.7z(110.56 MB)
    mypaint-git-w64-2.0.0-alpha-v2.0.0-beta.0.591-installer.exe(155.47 MB)
    mypaint-git-w64-2.0.0-alpha-v2.0.0-beta.0.591-standalone.7z(109.68 MB)
    MyPaint-v2.0.0-beta.0-2019-12-20_12.11.AppImage(75.09 MB)
    MyPaint-v2.0.0-beta.0-2019-12-20_12.11.AppImage.sha256sum(114 bytes)
  • v2.0.0-alpha.13(Nov 9, 2019)

    Changes Since the Last Alpha

    • Translations - tons of translated strings have been merged - check out https://hosted.weblate.org/projects/mypaint/mypaint/ if you want to help out by contributing to your own language's missing or outdated translations.
    • Language selection - you can now select the language you want to use from the preferences window under the "View" tab. The alpha releases ship with all translations, so beware that a lot of them are incomplete.
    • Floodfill - some bug fixes, ability to use arbitrary blend modes, adjustable opacity, colorize mode
    • Layer blink option - showing layers in isolation for a brief time period, when changing or selecting them, is now optional.
    • AppImage improvements - the appimages will now work out of the box on Ubuntu 14.04 and later. If they don't work on your distro (preferably not-too-obscure or older than 2015), create an issue in the tracker (after a quick search in it for your problem). The issues with themes and icons should also be resolved, and gtk localizations are now fully supported. The latest appimage builds (based on the latest error-free commit) can always be found here.
    • 32bit builds for Windows are back (though the demand is probably not that high).
    • Some crash fixes in both MyPaint and libmypaint
    • Fixes for some cosmetic bugs (frame window outline, some text formatting glitches)
    • Wayland GUI freeze workaround added (MyPaint will just try to use XWayland for now).
    • Fixes for a bunch of Gtk deprecations (should not make any difference for users).
    • ...and a fair amount of administrative and build-related stuff that should improve the dev experience.

    Attention Windows Users!

    We've switched the standalone archives from ordinary zip to 7z, so you'll need some archiving program to decompress them (I would recommend https://www.7-zip.org/).

    If you really want to use the installers instead, you can download them here:

    These links are only valid for six months, but the full release should be out by then anyway.

    Also, if you are a developer who likes MyPaint and also happens to like and work on Windows, your help with some of our windows-only bugs (and there are quite a few) would be most welcome! There are also Windows-only issues related to the external-edit functionality that could be improved with input from an expert on how Windows handles default applications, application candidates and similar. These problems will unfortunately not fix themselves.

    Source code(tar.gz)
    Source code(zip)
    mypaint-git-w32-2.0.0-alpha-master.564-standalone.7z(103.66 MB)
    mypaint-git-w64-2.0.0-alpha-master.564-standalone.7z(102.92 MB)
    MyPaint-v2.0.0-alpha.13-398-ge7e9b6f-2019-11-07_21.50.AppImage(75.02 MB)
  • v2.0.0-alpha.12(Jun 22, 2019)

  • v2.0.0-alpha.11(Mar 31, 2019)

    This pre-release brings back floating windows on Windows OS; it seems the related GTK issues have been resolved.

    On libmypaint, the smudge sampling now respects the pigment mode setting as well. Instead of additively averaging pixels within the smudge radius you can average subtractively, or blend the two methods. To improve performance only a small random selection of pixels will be sampled within the smudge radius, which doesn't seem to negatively affect the results.

    Source code(tar.gz)
    Source code(zip)
    MyPaint---20190331.AppImage(73.32 MB)
    MyPaint---20190331.AppImage.sha256sum(94 bytes)
    mypaint-git-w64-2.0.0-alpha-master.486-installer.exe(128.70 MB)
    mypaint-git-w64-2.0.0-alpha-master.486-standalone.zip(142.98 MB)
  • v2.0.0-alpha.10(Mar 22, 2019)

  • v2.0.0-alpha.8(Feb 10, 2019)

    Added "fake inputs" for pressure and barrel rotation. Now you can make on-the-fly expressive adjustments to your brush even while using a mouse! Change pressure with alt+shift+(a,s) and change the "twist" with alt+shift+(d,f).

    To try the barrel rotation, please try out this special brush pack to see how it works. If you have a fancy stylus like a Wacom Art Pen that supports real barrel rotation only Linux seems to have this support from the GTK libraries at the moment. Look for new preferences (in settings.json) that affect barrel rotation offsets and to disable it if necessary.

    Merging layers is improved, but some work to do still for groups. If your merge a pigment layer down the result will remain as a pigment layer instead of switching to Normal additive, and vice versa.

    Spectral Paint/Pigment layer and brush mode Linear blending for non-pigment layers and brush modes Smudge enhancements Layer "views" Fullscreen improvements Python3 compatibility Art Pen/ Barrel rotation input Fake inputs for pressure and Barrel Rotation- use your keyboard! A bunch of other stuff!

    Please note, old files will composite layers in a linear "more physically correct" way. This might look different, better, or perhaps worse. We could add legacy modes but it is probably better to move on if possible, or render old files with an older version of MyPaint if necessary (or even Gimp/Krita).

    The pigment mode is default for all brushes and new layers. If for some reason you don't like it, or it is too slow, you can slide the "Pigment" slider to off (from the tool options panel), and change the layer mode to Normal. This will go back to a linear RGB blend mode (but not non-linear like the old MyPaint).

    Highly recommend my brush pack ("Dieterle", included in AppImage and Windows) to see many new features in action.

    special thanks to @aferrero2707 for the appimage build setup

    Source code(tar.gz)
    Source code(zip)
    MyPaint---20190213.AppImage(73.32 MB)
    MyPaint---20190213.AppImage.sha256sum(94 bytes)
    mypaint-git-w64-2.0.0-alpha-master.467-installer.exe(128.70 MB)
    mypaint-git-w64-2.0.0-alpha-master.467-standalone.zip(142.91 MB)
  • v1.2.1(Jan 30, 2017)

    “A lucky past full of shallow cunning”

    This is a maintenance release that fixes several reported bugs in stable MyPaint. The Windows builds below contain new GTK3 libraries for Windows that fix a number of issues with tablet support on that platform. Several Linux-specific bugs in MyPaint that affect newer GTK libs released with various Linux distribution updates have also been fixed.

    Binaries

    Windows users can run the installers below. Please uninstall all old versions of MyPaint before you do this, especially if you're about to install over an existing location. You shouldn't lose your settings or scraps if your old install is normal. Use “Add or Remove Programs” to do the removal(s), and make backups of your important files if you're worried. Alternatively, please try the standalone zipfile bundles. These need to be unpacked somewhere before they can be used, for example onto a portable USB drive, and the integration with Windows is more limited.

    Users of Ubuntu or its derivatives can add the MyPaint-Testing PPA as a software repository, and they'll then receive automatic updates.

    For other operating systems, please contact your friendly maintainers and ask them to make fresh builds from these sources. Thanks!

    Release notes and ongoing bugs

    • 2017-01-29 Build updated to fix bug #771. Files mypaint-w*-1.2.1-20170129a-*.* replace mypaint-w*-1.2.1-1-*.* (we'll use dates for the build identifiers from now on)
    • 2017-01-29 Windows techies only: slot-in debugging libs are now available, for use with GDB and (ideally) standalone builds.
    • 2017-01-29 KNOWN BUG FIXED: Windows "w32" builds would not run on 32-bit architecture. Fixed with a fresh build (bug #771).
    • (Windows only) this build contains GTK 3.22.7, a large increment which fixes a lot of graphics tablet bugs and crashes.
    • (Windows only) we have changed the installer again (sorry!). Please use “Add and Remove Programs” to remove previously installed versions of MyPaint before installing 1.2.1. Your settings and brushes will be retained.
    • (Windows only) MyPaint no longer supports floating panel windows (too many bugs upstream, sorry). They must be docked into a sidebar at all times.
    • Removing the Favourites group makes the brush menu unusable (#706, #641)

    Changes since 1.2.0-beta.1

    • Make sure layer clones get selected immediately.
    • Fix hypersensitive tab drags.
    • Fix accelerator mapping sort order.
    • Fix exceptions when loading a corrupt thumbnail during thumb updates.
    • Fix GTK removing the main canvas widget.
    • BrushManager: use UUIDs for device brush names, backwards-compatibly.
    • Fix repeated pixbuflist redraws.
    • Wayland: remove references to cursors that don't exist.
    • Windows: drop support for floating windows till upstream support's OK.
    • Windows: new installer mechanism, see the note above.
    • Windows build: now includes a debug launcher, and GTK3-Demo for testing that your tablet will work.
    • Windows build: MyPaint is now usefully pinnable to the taskbar.
    Source code(tar.gz)
    Source code(zip)
    mypaint-1.2.1-backgrounds.zip(28.72 MB)
    mypaint-1.2.1.tar.xz(36.14 MB)
    mypaint-1.2.1.tar.xz.asc(833 bytes)
    mypaint-w32-1.2.1-20170129a-installer.exe(89.66 MB)
    mypaint-w32-1.2.1-20170129a-standalone.zip(100.59 MB)
    mypaint-w32-debuglibs.20170124.zip(17.73 MB)
    mypaint-w64-1.2.1-20170129a-installer.exe(93.29 MB)
    mypaint-w64-1.2.1-20170129a-standalone.zip(103.69 MB)
    mypaint-w64-debuglibs.20170124.zip(18.79 MB)
    SHA256SUMS-sources.txt(969 bytes)
    SHA256SUMS-windows-20170129a.txt(1.28 KB)
    SHA256SUMS-windows-debuglibs.txt(1.05 KB)
  • v1.2.1-beta.1(Apr 30, 2016)

    MyPaint v1.2.1-beta.1 (2016-04-30)

    “Someone left the cake out in the rain”

    This beta release contains fixed GTK libs for a major tablet initialization crasher under Windows, and fixes other more minor annoyances on all platforms. Windows users please note: the all-in-one bundles below contain bleeding-edge libs. The proper 1.2.1 release on Windows will contain something a bit more stable :smile:

    Binaries

    • Windows users can run the “kitchen sink” installers below.
    • Users of Ubuntu or its derivatives can add the MyPaint-Testing PPA as a software repository, and receive automatic updates.

    Changes since 1.2.0-beta.0

    • Fix palette drag issues with GTK 3.19.8+.
    • Fix exception in the colours tab of the background chooser dialog.
    • Fix UI glitch: mark cloned layer as selected after duplicate.
    • Fix a potential exception with the brush and colour history features.
    • About box: report versions better under Windows.

    Windows users: the installers below contain a fix for #636 (upstream bug 764664).

    Errata

    The detached signature for mypaint-w64-1.2.1-beta.1-setup.exe did not match the installer, so I've pulled the -w64 release while I investigate (or just make a new release). Thanks to sapphirepaw for noticing and reporting this! The sha256 checksums of the removed files were

    5cb06e066d15aebb639ecbe1271301689004eb606de272168bddd50dc1698411  mypaint-w64-1.2.1-beta.1-setup.exe
    2407573024826c84a903e56e9aafe87b892a9df09f62ec9e9a4d272380bbd82c  mypaint-w64-1.2.1-beta.1-setup.exe.asc
    

    In all probability, nothing nefarious has happened at github. The cause is likely to be a cockup at my end, sorry. The checksums match what I've had cached on my developer laptop since the release, so your existing downloads are very likely to be as I built them. Just being cautious here.

    Source code(tar.gz)
    Source code(zip)
    mypaint-1.2.1-beta.1.tar.xz(36.14 MB)
    mypaint-1.2.1-beta.1.tar.xz.asc(819 bytes)
    mypaint-w32-1.2.1-beta.1-setup.exe(79.70 MB)
    mypaint-w32-1.2.1-beta.1-setup.exe.asc(819 bytes)
  • v1.2.1-beta.0(Apr 2, 2016)

    MyPaint v1.2.1-beta.0 (2016-04-02)

    “We Thought It Was Just Another Snake Cult”

    When it's ready, MyPaint version 1.2.1 will be a minor bugfix release. This means that it fixes bugs present in v1.2.0 without adding new features. I'm hoping the beta cycle for it will be short.

    Our current plan is for MyPaint's stable Windows build for 1.2.1 to contain older GTK libs than its betas, just like the 1.2.0 release. This plan may change, but people tracking MyPaint know that there been some problems with speed and responsiveness with newer GTK versions recently.

    That said, this beta ships with bleeding edge packages from MSYS2, just so we can test them. The Windows beta installers below bundle Python 2.7.11, GTK 3.20.1, GdkPixbuf 2.34.0, Cairo 1.15.2,and GLib 2.48.0. Please test the installers. Who knows, the lag bug may be fixed in upstream now! :grinning:

    Binaries

    • Windows users can run the installers below.
    • Users of Ubuntu or its derivatives can add the MyPaint-Testing PPA as a software repository, and receive automatic updates.

    Known issues

    • FIXED: #638 (about box escaping).
    • CONFIRMED: #636 (testing has revealed a nasty bug affecting MyPaint builds using Windows GDK 3.20.1 and 3.20.2. Thanks, @zb13y! The issue is being reported upstream)
    • UNCONFIRMED (you can help here): lots of dockpanel problems in (just?) win10: #639 #640.

    Changes since 1.2.0

    • Fix failure to start under GLib 2.48.
    • Fix failure to start when config and user data dirs are missing.
    • GNOME: Update mypaint.appdata.xml.
    • Fix failure to start when no translations are present.
    • Fix pure-black being duplicated in the colour history.
    • Fix glitch stroke when Inking is exited & the default tool entered.
    • OSX: fix exception if AppKit isn't installed.
    • Fix mispositioned windows in multi-monitor setups.
    • Windows: fix inability to paste more than the 1st copied image.
    • Fix exception when pasting into a layer group.
    • Fix incorrect numeric range check on x-axis tilts.
    • Fix layers blinking when selected in layer-solo mode.
    Source code(tar.gz)
    Source code(zip)
    mypaint-1.2.1-beta.0.tar.xz(36.14 MB)
    mypaint-1.2.1-beta.0.tar.xz.asc(819 bytes)
    mypaint-w32-1.2.1-beta.0-setup.exe(79.89 MB)
    mypaint-w32-1.2.1-beta.0-setup.exe.asc(819 bytes)
    mypaint-w64-1.2.1-beta.0-setup.exe(80.71 MB)
    mypaint-w64-1.2.1-beta.0-setup.exe.asc(819 bytes)
  • v1.2.0(Jan 15, 2016)

    MyPaint v1.2.0 (2016-01-15)

    It's been a long time since the last stable release, but we're happy to announce that MyPaint version 1.2.0 is ready. The official sources can be downloaded below, along with installers for Windows. We've made packages for Ubuntu too, and you can get them from the mypaint-testing PPA. Other Linux and OS X distributions will release binaries through their usual channels in due course.

    Changes since the last stable release

    • New intuitive Inking tool for smooth strokes.
    • New Flood Fill tool.
    • Automated backups of your working docs, with recovery on startup.
    • Improved symmetry-setting and frame-setting modes.
    • New workspace UI: two sidebars, with dockable tabbed panels.
    • Smoother scrolling and panning.
    • New brush pack.
    • New brush and color history panel.
    • New layer trimming command in frame options.
    • Added layer groups.
    • New layer modes: several masking modes added.
    • Add display filters: greyscale, simulate dichromacy for trichromats.
    • New color wheel options: Red/Yellow/Blue, Red-Green/Blue-Yellow.
    • Uses dark theme variant by default.
    • Clearer icons, prettier freehand cursors.
    • Device prefs allow glitchy devices to be restricted.
    • Eraser mode no longer changes the size of the brush.
    • New vector layers, editable in an external app (Inkscape recommended).
    • New fallback layer types: non-PNG image, data.
    • More kinds of images now work as backgrounds.
    • Improved Windows support
    • Ported to GTK3.
    • Accelerator map editor has moved to preferences.
    • Many other bugfixes, translations, and code quality improvements.

    Source code

    The official source tarball for this release is mypaint-1.2.0.tar.xz, and it contains libmypaint. Binaries linked below are built from this source.

    Windows binaries

    Windows binaries can be found below. Thanks @tumagonx!

    You'll need to fully uninstall any earlier stable MyPaint releases or beta versions of MyPaint before installing these files.

    To install the new version, download the file ending in -setup.exe below and open it in Windows. It's an Inno Setup installer, which will ask for local admin rights before installing MyPaint.

    Some tablet drivers are known to interface better with the w32 build, and some work better with the w64 one. You will probably get more reliable pressure support if you ensure that your tablet is plugged in and that you can move the pointer on screen with it before starting MyPaint.

    This Windows version is built against GTK (and GDK) 3.14, which is an older version than the one used for the recent betas (which picked up GTK 3.18). This official release may suffer from less drawing lag as a result of using the earlier GTK libraries (issue #390), but it's a hedged bet.

    Technical info: this Windows build of MyPaint 1.2.0 is bundled with libgtk-3-0.dll 3.14.15 and libglib-2.0-0.dll 2.44.1.

    Linux and Mac binaries

    Linux and OS X binaries will be available through the usual repositories for those systems. Expect downstreams to build v1.2.0 packages, and please nag them to do it if one isn't available for your system yet!

    Ubuntu testing binaries

    These can be obtained through the mypaint-testing PPA.

    Source code(tar.gz)
    Source code(zip)
    mypaint-1.2.0.tar.xz(36.13 MB)
    mypaint-1.2.0.tar.xz.asc(819 bytes)
    mypaint-w32-1.2.0-setup.exe(36.93 MB)
    mypaint-w64-1.2.0-setup.exe(37.08 MB)
  • v1.2.0-beta.4(Jan 1, 2016)

    MyPaint v1.2.0-beta.4 (2016-01-01)

    “I think you’ll find it's more complicated than that.”

    This is hopefully the last pre-release before MyPaint 1.2.0.

    Changes since the last prerelease

    • Many, many translation updates.
    • Descriptions for brushes: #533
    • Windows: Tweaked the event masks - seems to remove a source lag for some Windows systems (#516, #514 hopefully)
    • Windows: Reverted some deglitching code that was causing issues elsewhere: #537, #500.
    • Windows: Workaround for an upstream regession when opening vector layers externally: #531.
    • File→New now resets the background to the default, like you'd expect: #520
    • Windows: fix an autosave recovery exception: ad1915347d6737b295cd634bec82a058ae78cb60
    • Fix a potential for overwriting your data after manual autosave recovery when you cancel the suggested save dialog: #508
    • Improved textarea layout for the brush import summary dialog: 441c04d6541008d652f704837ca1c70b0f9f9c24

    Source code

    The official source tarball for this release is mypaint-1.2.0-beta.4.tar.xz, and it contains libmypaint. The Windows and Ubuntu test binaries are built from this source.

    Windows testing binaries

    Download the appropriate -setup.exe and open it in Explorer. Note that the "w32" build can be more compatible with some tablet drivers, and the "w64" one can be more compatible with other brands. If you get glitches, please try both.

    Technical info: this Windows build of MyPaint 1.2.0-beta.4 is bundled with libgtk-3-0.dll 3.18.6 and libglib-2.0-0.dll 2.46.2.0

    Ubuntu testing binaries

    Available from the MyPaint-testing PPA: https://launchpad.net/~achadwick/+archive/ubuntu/mypaint-testing. This build covers trusty, vivid, wily, and xenial.

    Known issues

    • Some Windows devices suffer from enough lag to make these builds unusable.
      • For the final release, we're working on a good compromise between usability and having up to date GTK libraries here: #390.
    Source code(tar.gz)
    Source code(zip)
    mypaint-1.2.0-beta.4.tar.xz(36.12 MB)
    mypaint-1.2.0-beta.4.tar.xz.asc(819 bytes)
    mypaint-w32-1.2.0-beta.4-setup.exe(78.65 MB)
    mypaint-w32-1.2.0-beta.4-setup.exe.asc(819 bytes)
    mypaint-w64-1.2.0-beta.4-setup.exe(79.49 MB)
    mypaint-w64-1.2.0-beta.4-setup.exe.asc(819 bytes)
  • v1.2.0-beta.3(Nov 21, 2015)

    MyPaint v1.2.0-beta.3 (2015-11-21)

    Changes since v1.2.0-beta.2

    • Suppress redraws during load and save (mypaint/mypaint#468)
    • Better reporting when loading layer data from a GdkPixbuf file fails, especially relevant for external file editing (mypaint/mypaint#476)
    • Translation updates
    • Fix attempt for some multi-source based glitches (mypaint/mypaint#460, mypaint/mypaint#177), needs testing.
    • Fix out-of-range tilt values (mypaint/mypaint#460)
    • Close a loophole allowing an initialization race condition (mypaint/mypaint#485)
    • Translations are optional for the Windows installer (mypaint/mypaint#348), as a workaround.
    • Reposition Layer is now in the layer context menu in the layers panel (mypaint/mypaint#489)
    • Fix an annoying bug in the accelerator map editor (mypaint/mypaint#497)
    • Assorted Windows build fixes.

    Windows binaries

    They're right here. Download the appropriate -setup.exe and open it in Explorer. Note that the "w32" build can be more compatible with some tablet drivers, and the "w64" one can be more compatible with other brands. If you get glitches, please try both.

    Technical info: this Windows build of MyPaint 1.2.0-beta.3 is bundled with libgtk-3-0.dll 3.18.3 and libglib-2.0-0.dll 2.46.2.0.

    Ubuntu binaries

    Available from the MyPaint-testing PPA: https://launchpad.net/~achadwick/+archive/ubuntu/mypaint-testing. This build covers trusty, vivid, and wily – and xenial too if they're accepting it yet ☺

    Known issues

    Mostly Windows tablet woes right now.

    • Glitches aplenty for Genius/Monoprice/Ugee clone tablets. Some may be fixed in this beta.
    • Some combinations of hardware and Wacom tablets make drawing unbearably laggy on Windows.

    Unfortunately the "threadfun" build I was asking people to test for the last beta hasn't worked out as well as I'd hoped. It's just not stable enough to go into master yet (sorry!), and I don't want to delay the release for a Windows-specific bug that doesn't even affect every user.

    Source code(tar.gz)
    Source code(zip)
    mypaint-1.2.0-beta.3.tar.xz(36.11 MB)
    mypaint-1.2.0-beta.3.tar.xz.asc(819 bytes)
    mypaint-w32-1.2.0-beta.3-setup.exe(78.58 MB)
    mypaint-w32-1.2.0-beta.3-setup.exe.asc(819 bytes)
    mypaint-w64-1.2.0-beta.3-setup.exe(79.43 MB)
    mypaint-w64-1.2.0-beta.3-setup.exe.asc(819 bytes)
  • v1.2.0-beta.2(Oct 28, 2015)

    MyPaint v1.2.0-beta.2 (2015-10-28)

    “Binary and desperate”

    Pre-releases of MyPaint 1.2.0 for testers. Milestone: https://github.com/mypaint/mypaint/milestones/MyPaint%201.2.0-beta

    Changes since v1.2.0-beta.1.168

    The links here are for developers only - see below for binary and source releases. If you're using Ubuntu, check out the official mypaint-testing PPA!

    • Fix a duplicate keybinding in the default keymap (#457)
    • Fix an exception with the "R" key and the preview window (#446)
    • Pick Color has changed due to emergent upstream bugs and my dissatisfaction with the old code. You can no longer pick from outside the MyPaint working canvas, and display filters no longer affect the colour you pick (#444 and #333).

    Windows users: builds are back, but only for Win64 due to an upstream build bug (Alexpux/MINGW-packages#845) which is causing the Win32 build to fail. The GTK 3.18.2 bundled with MyPaint v.1.2.0-beta.2 is a local build, containing a fix for a horrible upstream bug which crashed the program when dragging tabs (bug 756160. I'm still working on a fix for the tablet-related slowdowns (#390), and there may be some additional test binaries here with some workarounds for testing.

    MyPaint v1.2.0-beta.2.0.threadfun (2015-10-29)

    This is a HIGHLY EXPERIMENTAL threaded drawing queue version, for investigation of mypaint/mypaint#390 (the Windows laggy-stroke bug). This is v1.2.0-beta.2 with the threadfun branches of achadwick/mypaint and achadwick/libmypaint merged. It is fully functional, but may not be very stable.

    Windows users are encouraged to test out this experimental branch and report back in the issue thread: mypaint/mypaint#390

    Source code(tar.gz)
    Source code(zip)
    mypaint-1.2.0-beta.2.0.threadfun.tar.xz(36.11 MB)
    mypaint-1.2.0-beta.2.0.threadfun.tar.xz.asc(819 bytes)
    mypaint-1.2.0-beta.2.tar.xz(36.08 MB)
    mypaint-1.2.0-beta.2.tar.xz.asc(819 bytes)
    mypaint-w64-1.2.0-beta.2-setup.exe(90.38 MB)
    mypaint-w64-1.2.0-beta.2-setup.exe.asc(819 bytes)
    mypaint-w64-1.2.0-beta.2.0.threadfun-setup.exe(90.37 MB)
    mypaint-w64-1.2.0-beta.2.0.threadfun-setup.exe.asc(819 bytes)
  • v1.2.0-beta.1(Aug 6, 2015)

    MyPaint v1.2.0-beta.1 (plus 1 point release)

    “Exploding on the basis of false data”

    Pre-releases of MyPaint 1.2.0 for testers. Milestone: https://github.com/mypaint/mypaint/milestones/MyPaint%201.2.0-beta

    ChangeLog

    MyPaint v1.2.0-beta.1.168 (2015-10-13)

    Note: There is no Windows build of this yet. I'm waiting on a couple of upstream showstoppers to be fixed or rebuilt in MSYS2's GTK, which has just turned 3.18.x. These are: upstream GTK bug 756160 "Crash/segfault when dragging tabs (after 2nd/3rd/4th+ drag)", and Alexpux/MINGW-packages#818 (fixed, but needs rebuild as of the time of writing).

    Ubuntu users can find binaries in the usual place when they're built: https://launchpad.net/~achadwick/+archive/ubuntu/mypaint-testing

    • Better "move layer" icon (#81)
    • Assorted GtkRectangle replacements to work around broken typelibs (#437, #433)
    • Sharper on-screen buttons for Frame and Inking mode (02f3e11228aac1a667ca7186a6eb6484bff61ee7), especially for Intel graphics hardware (5246883a4d63ee3d42767e3a717aa3362cceecb2)
    • Sharper on-screen elements (f7f83a5d60871cd8228c095d3e37c86cb72ac410, 84cead644cea73d6bf06e3cccaa3b4adb4df9899)
    • Fix divider positions in the sidebars being reset on startup (46e2b72c085babed7d2979085ccc8ecd8b31b725, 6361199d9147e85db65226add981b38bd432336b)
    • Slower redraws for the preview window, to address lag when it's open (#379)
    • Fix a non-fatal exception when loading brush packs containing more than one group (#425)
    • Finally remove the deprecated GtkHSV triangle. Please don't hate me! (#268)
    • Better consistency for colour selectors (#432. Thanks, @ShadowKyogre !)
    • Sometimes GDK doesn't know about monitor geometries, or has a broken typelib: fix an exception when dealing with the fallout from this: #424
    • Prettier layout for the inking mode buttons (ca55c4df3ef1d75587623a14fb3c12f60049e403)
    • Layout fixes for GTK 3.16+: c88f04fbe3ca1e9c2d492c31e84154ff6b2cafda
    • Workspace dividers now look as though they can be moved again, and the scrollbar no longer covers the tab close button (69383e944b0a05d6657c18dbbcf800491d14564e, thanks a bunch Adwaita theme!)
    • Fullscreening and un-fullscreening no longer makes a stack of internal viewports around the main canvas (#92)
    • Fix broken history popup behaviour ("X" key, #93)
    • Make the revealed drop area for tabs in the sidebar bigger (0bc870ac320b57aa71a85a35c703b99b6bbfa097)
    • No unnecessary re-rendering after hide/show UI (Tab key, 0daecbbf1be2f03107209cf9892f68f163e0fc48)
    • Fix eye dropper tool on the scratchpad (#272, thanks @iSoron !)
    • Allow the scratchpad to be panned with the space bar again (#244, thanks again @iSoron !)
    • Fix an obscure Ubuntu icon-visibility bug in the layers panel (#414, thanks @ydahhrk !)
    • Remember the last open tab in dockpanel notebooks (#412, thanks @iSoron !)
    • Abide by a CoC (#364)
    • Fixed up a load of tests, and wired them into Travis (68739c780adf8c21a320795c3d32253978c1c7b7)
    • Speed up the pick-stroke sysetm generally (a5f6016c58a5a7412c7be47fc9c60b8f13a915f7, b0e9d7fefd363df682afaed69d283cc51a595d1d), and fix a long-standing bug where the overlay persisted after it should have been automatically removed (#8) amongst other brokenness (7c94bbd4636851a563f90d19b4ed2e44d43b307b)
    • German translation is now 100% complete (67365bf7f6e68408af2054e8ffcfddb2d031f1c7)!
    • Fix a UI clunkiness with the HSV Square colour selector (#338)
    • Add a Layers panel button for creating layer groups (#406, good idea @loentar !)
    • In-program profiler improvements (bae0db944dc1dd2afd7a5026d36cd395bd4f372e) to allow .pstats files to be generated from Windows
    • Fix/address a few random exceptions (#403, #402)
    • Windows users can now configure devices individually! Well, assuming their wintab32.dll is up to spec: (#401)
    • Lots of translation updates and other minor fixes.

    MyPaint v1.2.0-beta.1 (2015-08-06)

    • Several bugfixes and improvements since the last beta
      • Improved layout for the layers panel (#144)
      • Fix broken move in Frame Edit mode (#210)
      • Windows: the .ora file extensions can be associated with MyPaint if you want (#383)
      • Fix junk entries in the recent files menu (#267)
      • Assorted i18n fixes (#389)
      • Fix the preview panel not updating when zoomed (#313)
      • Fix lack of previews and misleading previews in the file load/save dialogs (#382)
      • Fix brush DnD, and make it "less weird" (#359, b8f0b620b7bf82863064d6573f98febde77a8493)
      • Minor path detection updates (#378)
      • Loads of filename-to-uri fixes (#372, 193264857ced956ebb591e3451b428b707414cf0)
      • Loads of fixes for multilingual user homes and %USERPROFILE% folders on Windows (#372, #374, #391, 0f75096e1764f745e356fcc034e85fa3c48214d7)
      • Fix some panel display issues (#377)
      • Windows users can now submit console logging output more easily (#385 (sorry for bad summary))
      • Fix and improve builds (#397, #396, d38996267b09ef6b31a4eae1d8fb06318d1e26d2)
    • Loads of updated translations! (most other commits...)

    Ubuntu users: go here for binaries: https://launchpad.net/~achadwick/+archive/ubuntu/mypaint-testing

    Source code(tar.gz)
    Source code(zip)
    mypaint-1.2.0-beta.1.168.tar.xz(36.08 MB)
    mypaint-1.2.0-beta.1.168.tar.xz.asc(819 bytes)
    mypaint-1.2.0-beta.1.tar.xz(36.07 MB)
    mypaint-1.2.0-beta.1.tar.xz.asc(819 bytes)
    mypaint-w32-1.2.0-beta.1-setup.exe(86.55 MB)
    mypaint-w32-1.2.0-beta.1-setup.exe.asc(819 bytes)
    mypaint-w64-1.2.0-beta.1-setup.exe(87.34 MB)
    mypaint-w64-1.2.0-beta.1-setup.exe.asc(819 bytes)
  • v1.2.0-beta.0(Jul 28, 2015)

    MyPaint v1.2.0-beta.0 (2015-07-21)

    Early pre-release of MyPaint 1.2.0 for testers. Milestone: https://github.com/mypaint/mypaint/milestones/MyPaint%201.2.0-beta.

    I'd really appreciate a deployment test of the Windows installers in this release. They were generated and tested under Windows 7 64-bit only, and I'd love some feedback about your testing in Windows 8 and 10. Success stories to Twitter (@MyPaintApp) please, but send failure reports with long wads of detail to the issue tracker here!

    This release supports Ubuntu and its derivatives through the mypaint-testing PPA. You can find 1.2.0~beta.0 and instructions on how to subscribe to testing releases at https://launchpad.net/~achadwick/+archive/ubuntu/mypaint-testing.

    MyPaint v1.2.0-beta.0.73 (update 2015-07-28)

    New translations, and several Windows bugfixes relating to filename handling and icons on the Win64 build.

    The PPA has been updated too. Please note that Ubuntu themselves have dropped support for Utopic, so packages will no longer be updated for that Ubuntu release.

    Source code(tar.gz)
    Source code(zip)
    mypaint-1.2.0-beta.0.73.tar.xz(36.05 MB)
    mypaint-1.2.0-beta.0.73.tar.xz.asc(819 bytes)
    mypaint-1.2.0-beta.0.tar.xz(36.03 MB)
    mypaint-1.2.0-beta.0.tar.xz.asc(819 bytes)
    mypaint-w32-1.2.0-beta.0-setup.exe(88.60 MB)
    mypaint-w32-1.2.0-beta.0-setup.exe.asc(819 bytes)
    mypaint-w32-1.2.0-beta.0.73-setup.exe(86.47 MB)
    mypaint-w32-1.2.0-beta.0.73-setup.exe.asc(819 bytes)
    mypaint-w64-1.2.0-beta.0-setup.exe(89.41 MB)
    mypaint-w64-1.2.0-beta.0-setup.exe.asc(819 bytes)
    mypaint-w64-1.2.0-beta.0.73-setup.exe(87.26 MB)
    mypaint-w64-1.2.0-beta.0.73-setup.exe.asc(819 bytes)
  • v1.1.0(Jul 29, 2015)

  • v1.1.0-rc3(Jul 29, 2015)

  • v1.1.0-rc2(Jul 29, 2015)

  • v1.1.0-rc1(Jul 29, 2015)

  • v1.0.0(Jul 29, 2015)

    Unsupported old binary and source release. Version 1.0.0 of MyPaint is no longer supported (since v1.2.0-beta.0), but the packages and build artefacts from the old dl.gna.org folder are mirrored here as a public service (with thanks to Github!). They are not signed.

    Please use a more recent release if you can!

    Source code(tar.gz)
    Source code(zip)
    mypaint-1.0.0-win32-backgroundpack.exe(28.74 MB)
    mypaint-1.0.0-win32-installer.exe(8.58 MB)
    mypaint-1.0.0-win32-installer_old.exe(8.69 MB)
    mypaint-1.0.0.tar.bz2(35.04 MB)
    mypaint-1.0.0.tar.xz(34.73 MB)
    MyPaint-1.0.0v2.pkg(26.95 MB)
    MyPaint-1.0.0v3.pkg(26.75 MB)
    mypaint-1.0.0_win64_installer.exe(9.17 MB)
  • v0.9.1(Jul 29, 2015)

  • v0.9.0(Jul 29, 2015)

  • v0.9.0-beta1(Jul 29, 2015)

  • v0.8.2(Jul 29, 2015)

  • v0.8.1(Jul 29, 2015)

    Unsupported old source-only release. This version of MyPaint is no longer supported, but the packages and build artefacts from the old dl.gna.org folder are mirrored here as a public service (with thanks to Github!). They are not signed.

    Please use a more recent release if you can!

    Source code(tar.gz)
    Source code(zip)
    mypaint-0.8.1.tar.bz2(5.57 MB)
  • v0.8.0(Jul 29, 2015)

  • v0.7.1(Aug 3, 2015)

Owner
MyPaint
Painting and drawing program that works nicely with pressure-sensitive tablets, and its dynamic brush engine library.
MyPaint
DrawBot is a powerful, free application for macOS that invites you to write Python scripts to generate two-dimensional graphics

DrawBot is a powerful, free application for macOS that invites you to write Python scripts to generate two-dimensional graphics.

Frederik Berlaen 344 Jan 6, 2023
sK1 2.0 cross-platform vector graphics editor

sK1 2.0 sK1 2.0 is a cross-platform open source vector graphics editor similar to CorelDRAW, Adobe Illustrator, or Freehand. sK1 is oriented for prepr

sK1 Project 238 Dec 4, 2022
Turtle graphics || Python

turtle Turtle graphics || Python Rainbow (রংধনু) : Rainbow.using.Python.--.Python.Turtle.graphics.mp4 Human robot (মানব রোবট) : Draw.a.human.robot.usi

Jubair Ahmed Junjun 1 Oct 8, 2021
Python library for ascii graphics

Python library for ascii graphics

Anton 6 Oct 20, 2021
Next-generation of the non-destructive, node-based 2D image graphics editor

Non-destructive, node-based 2D image graphics editor written in Python, focused on simplicity, speed, elegance, and usability

Gimel Studio 238 Dec 30, 2022
display: a browser-based graphics server

display: a browser-based graphics server Installation Quick Start Usage Development A very lightweight display server for Torch. Best used as a remote

Szymon Jakubczak 205 Oct 17, 2022
GIMP script to export bitmap as GRAPHICS 4 file (aka SCREEN 5)

gimpfu-msx-gr4.py GIMP script to export bitmap as GRAPHICS 4 file (aka SCREEN 5). GRAPHICS 4 specs are: 256x212 (or 256x192); 16 color palette (from 5

Pedro de Medeiros 4 Oct 17, 2022
Python script to generate vector graphics of an oriented lattice unit cell

unitcell Python script to generate vector graphics of an oriented lattice unit cell Examples unitcell --type hexagonal --eulers 12 23 34 --axes --crys

Philip Eisenlohr 2 Dec 10, 2021
Python binding to Skia Graphics Library

Skia python binding Python binding to Skia Graphics Library. Binding based on pybind11. Currently, the binding is under active development. Install Bi

Kota Yamaguchi 170 Jan 6, 2023
Pixel art as well as various sets for hand crafting

Pixel art as well as various sets for hand crafting

null 1 Nov 9, 2021
A tool for making simple-style text posters or wallpapers with high resolution.

PurePoster PurePoster is a fancy tool for making arbitrary-resolution, simple-style posters or wallpapers with text in center. Functionality PurePoste

Renyang Guan 4 Jul 9, 2022
Collection of SVG diagrams about how UTF-8 works

Diagrams Repository of diagrams made for articles on my blog. All diagrams are created using diagrams.net. UTF-8 Licenses Copyright 2022 Seth Michael

Seth Michael Larson 24 Aug 13, 2022
Anaglyph 3D Converter - A python script that adds a 3D anaglyph style effect to an image using the Pillow image processing package.

Anaglyph 3D Converter - A python script that adds a 3D anaglyph style effect to an image using the Pillow image processing package.

Kizdude 2 Jan 22, 2022
Simple program to easily view Euler parameters in 3D.

Simple program to easily view Euler parameters in 3D.

null 5 Aug 20, 2021
Python Image Morpher (PIM) is a program that can take two images and blend them to whatever extent or precision that you like

Python Image Morpher (PIM) is a program that can take two images and blend them to whatever extent or precision that you like! It is designed to emulate some of Python's OpenCV image processing from scratch without reference.

David Dowd 108 Dec 19, 2022
A python program to generate ANSI art from images and videos

ANSI Art Generator A python program that creates ASCII art (with true color support if enabled) from images and videos Dependencies The program runs u

Pratyush Kumar 12 Nov 8, 2022
Program designed to mass edit and watermark all photos in a directory

Photographer-All-In-One This is a program designed for photographers to mass edit or watermark photos (.jpg || .png) You can run this program from any

Brad Martin 2 Nov 23, 2021
Program for analyzing shadows from Cassini images

Moons: An Analysis Module for Vicar Files General This packages/program was created for my bachelor's thesis for the Astronomy department at Universit

Joni 1 Jul 16, 2021
Python Program that lets you write in your handwriting!

Handwriting with Python Python Program that lets you write in your handwriting! Inspired by: thaisribeiro.in How to run? Install Unidecode and Pillow

Amanda Rodrigues Vieira 2 Oct 25, 2021