the line below the version number is :
(Python 2.7.16, GTK 3.24.9, GdkPixbuf 2.38.1, Cairo 1.16.0, GLib 2.60.4)
Today I have no more this problem but I don’t know why; maybe this version is not stable.
What is a Gtk regression?
I installed version 1.2.1 and at the first stroke I get this error:
python
Mypaint version: 1.2.1+gitexport.bcf5a28d
System information: Windows-10-10.0.18362-SP0
Using: Python 2.7.13, GTK 3.22.7, GdkPixbuf 2.36.4, Cairo 1.15.4, GLib 2.50.1
Traceback (most recent call last):
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/gui/document.py”, line 623, button_release_cb(self=<gui.document.Document object>, tdw=<tileddrawwidget.TiledDrawWidget object at 0x000…0dd5faf0 (TiledDrawWidget at 0x000000000e797410)>, event=<Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>)
# Normal event dispatch
return CanvasController.button_release_cb(self, tdw, event)
variables: {‘CanvasController.button_release_cb’: (‘global’, ), ‘tdw’: (‘local’, <tileddrawwidget.TiledDrawWidget object at 0x000000000dd5faf0 (TiledDrawWidget at 0x000000000e797410)>), ‘self’: (‘local’, <gui.document.Document object at 0x000000000dd74a90>), ‘event’: (‘local’, <Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>)}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/gui/document.py”, line 114, button_release_cb(self=<gui.document.Document object>, tdw=<tileddrawwidget.TiledDrawWidget object at 0x000…0dd5faf0 (TiledDrawWidget at 0x000000000e797410)>, event=<Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>)
mode = self.modes.top
result = mode.button_release_cb(tdw, event)
self._update_last_event_info(tdw, event)
variables: {‘mode.button_release_cb’: (‘local’, <bound method FreehandMode.button_release_cb of <gui.freehand.FreehandMode object at 0x000000000f033e50>>), ‘tdw’: (‘local’, <tileddrawwidget.TiledDrawWidget object at 0x000000000dd5faf0 (TiledDrawWidget at 0x000000000e797410)>), ‘result’: (None, ), ‘event’: (‘local’, <Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>)}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/gui/freehand.py”, line 410, button_release_cb(self=<gui.freehand.FreehandMode object>, tdw=<tileddrawwidget.TiledDrawWidget object at 0x000…0dd5faf0 (TiledDrawWidget at 0x000000000e797410)>, event=<Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>)
# Notify observers after processing the event
self.doc.input_stroke_ended(event)
variables: {‘self.doc.input_stroke_ended’: (‘local’, ), ‘event’: (‘local’, <Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>)}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/lib/observable.py”, line 284, call(self=, *args=(<Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>,), **kwargs={})
try:
observer(observed, *args, **kwargs)
except BoundObserverMethod._ReferenceError:
variables: {‘observed’: (‘local’, <gui.document.Document object at 0x000000000dd74a90>), ‘args’: (‘local’, (<Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>,)), ‘observer’: (‘local’, ), ‘kwargs’: (‘local’, {})}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/lib/observable.py”, line 467, call(self=, observed=<gui.document.Document object>, *args=(<Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>,), **kwargs={})
raise self._ReferenceError
self._observer_func(observer, observed, *args, **kwargs)
del observer
variables: {‘observed’: (‘local’, <gui.document.Document object at 0x000000000dd74a90>), ‘args’: (‘local’, (<Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>,)), ‘self._observer_func’: (‘local’, <function _input_stroke_ended_cb at 0x000000000dcf5b18>), ‘observer’: (‘local’, <gui.brushmanager.BrushManager object at 0x000000000e463250>), ‘kwargs’: (‘local’, {})}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/gui/brushmanager.py”, line 787, _input_stroke_ended_cb(self=<gui.brushmanager.BrushManager object>, doc=<gui.document.Document object>, event=<Gdk.EventButton object at 0x00000000104ff3c0 (void at 0x000000000e734840)>)
for i, hb in enumerate(self.history):
hb_info = hb.brushinfo
hb_parent_name = hb_info.settings.get(“parent_brush_name”)
variables: {‘hb.brushinfo’: (‘local’, <lib.brush.BrushInfo object at 0x000000000eddef90>), ‘hb_info’: (‘local’, <lib.brush.BrushInfo object at 0x000000000edde810>)}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/gui/brushmanager.py”, line 969, get_brushinfo(self=<ManagedBrush u’history_3’ p=deevad/watercolor_expressive>)
def get_brushinfo(self):
self._ensure_settings_loaded()
return self._brushinfo
variables: {‘self._ensure_settings_loaded’: (‘local’, <bound method ManagedBrush._ensure_settings_loaded of <ManagedBrush u’history_3’ p=deevad/watercolor_expressive>>)}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/gui/brushmanager.py”, line 1211, _ensure_settings_loaded(self=<ManagedBrush u’history_3’ p=deevad/watercolor_expressive>)
logger.debug(“Loading %r…”, self)
self.load()
assert self._settings_loaded
variables: {‘self.load’: (‘local’, <bound method ManagedBrush.load of <ManagedBrush u’history_3’ p=deevad/watercolor_expressive>>)}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/gui/brushmanager.py”, line 1153, load(self=<ManagedBrush u’history_3’ p=deevad/watercolor_expressive>)
self._load_preview()
self._load_settings()
variables: {‘self._load_settings’: (‘local’, <bound method ManagedBrush._load_settings of <ManagedBrush u’history_3’ p=deevad/watercolor_expressive>>)}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/gui/brushmanager.py”, line 1175, _load_settings(self=<ManagedBrush u’history_3’ p=deevad/watercolor_expressive>)
try:
self._brushinfo.load_from_string(brushinfo_str)
except BrushInfo.ParseError, e:
variables: {‘self._brushinfo.load_from_string’: (‘local’, <bound method BrushInfo.load_from_string of <lib.brush.BrushInfo object at 0x000000000eddef90>>), ‘brushinfo_str’: (‘local’, ‘{\n “comment”: “MyPaint brush file”, \n “description”: “A brush with sensitivity on size while producing a fringe to simulate watercolor”, \n “group”: “”, \n “notes”: “A brush preset part of the Brushkit v0.6 \n created in october 2012 by David Revoy ( aka Deevad ) \n source: http://www.davidrevoy.com/article142/ressource-mypaint-brushes \n license: CC-Zero/Public-Domain”, \n “parent_brush_name”: “deevad/watercolor_expressive”, \n “settings”: {\n “anti_aliasing”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_h”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_hsl_s”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_hsv_s”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_l”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_v”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “color_h”: {\n “base_value”: 0.6566264794722573, \n “inputs”: {}\n }, \n “color_s”: {\n “base_value”: 0.7619451326933229, \n “inputs”: {}\n }, \n “color_v”: {\n “base_value”: 0.18176406445118393, \n “inputs”: {}\n }, \n “colorize”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “custom_input”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “custom_input_slowness”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “dabs_per_actual_radius”: {\n “base_value”: 2.0, \n “inputs”: {}\n }, \n “dabs_per_basic_radius”: {\n “base_value”: 6.0, \n “inputs”: {}\n }, \n “dabs_per_second”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “direction_filter”: {\n “base_value”: 2.0, \n “inputs”: {}\n }, \n “elliptical_dab_angle”: {\n “base_value”: 90.0, \n “inputs”: {\n “random”: [\n [\n 0.0, \n -180.0\n ], \n [\n 1.0, \n 180.0\n ]\n ]\n }\n }, \n “elliptical_dab_ratio”: {\n “base_value”: 4.0, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n -0.0\n ], \n [\n 0.75, \n -0.0\n ], \n [\n 1.0, \n -2.7\n ]\n ], \n “speed1”: [\n [\n 0.0, \n -0.37\n ], \n [\n 4.0, \n 0.37\n ]\n ]\n }\n }, \n “eraser”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “gridmap_scale”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “gridmap_scale_x”: {\n “base_value”: 1.0, \n “inputs”: {}\n }, \n “gridmap_scale_y”: {\n “base_value”: 1.0, \n “inputs”: {}\n }, \n “hardness”: {\n “base_value”: 0.23, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n -0.0\n ], \n [\n 0.746914, \n -0.0\n ], \n [\n 0.884375, \n -0.0\n ], \n [\n 1.0, \n -0.032083\n ]\n ]\n }\n }, \n “lock_alpha”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_2”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_2_asc”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_2_view”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_adj”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_asc”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_view”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_by_random”: {\n “base_value”: 0.0, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n 0.0\n ], \n [\n 0.75, \n 0.0\n ], \n [\n 1.0, \n 0.8\n ]\n ]\n }\n }, \n “offset_by_speed”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_by_speed_slowness”: {\n “base_value”: 1.0, \n “inputs”: {}\n }, \n “offset_multiplier”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_x”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_y”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “opaque”: {\n “base_value”: 2.0, \n “inputs”: {\n “random”: [\n [\n 0.0, \n 1.0\n ], \n [\n 1.0, \n 1.0\n ]\n ]\n }\n }, \n “opaque_linearize”: {\n “base_value”: 0.9, \n “inputs”: {}\n }, \n “opaque_multiply”: {\n “base_value”: 0.0, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n 0.0\n ], \n [\n 0.040123, \n 0.885417\n ], \n [\n 0.138889, \n 1.0\n ], \n [\n 1.0, \n 1.0\n ]\n ]\n }\n }, \n “paint_mode”: {\n “base_value”: 1.0, \n “inputs”: {}\n }, \n “posterize”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “posterize_num”: {\n “base_value”: 0.05000000074505806, \n “inputs”: {}\n }, \n “pressure_gain_log”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “radius_by_random”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “radius_logarithmic”: {\n “base_value”: 3.5, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n -2.9\n ], \n [\n 1.0, \n 0.845833\n ]\n ]\n }\n }, \n “restore_color”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “slow_tracking”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “slow_tracking_per_dab”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “smudge”: {\n “base_value”: 0.71, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n -0.65\n ], \n [\n 0.5, \n -0.358854\n ], \n [\n 0.796875, \n -0.094792\n ], \n [\n 1.0, \n 0.24375\n ]\n ], \n “speed1”: [\n [\n 0.0, \n -0.01\n ], \n [\n 4.0, \n 0.01\n ]\n ]\n }\n }, \n “smudge_bucket”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “smudge_length”: {\n “base_value”: 0.1, \n “inputs”: {}\n }, \n “smudge_length_log”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “smudge_radius_log”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “smudge_transparency”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “snap_to_pixel”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “speed1_gamma”: {\n “base_value”: 4.0, \n “inputs”: {}\n }, \n “speed1_slowness”: {\n “base_value”: 0.04, \n “inputs”: {}\n }, \n “speed2_gamma”: {\n “base_value”: 4.0, \n “inputs”: {}\n }, \n “speed2_slowness”: {\n “base_value”: 0.8, \n “inputs”: {}\n }, \n “stroke_duration_logarithmic”: {\n “base_value”: 6.5, \n “inputs”: {}\n }, \n “stroke_holdtime”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “stroke_threshold”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “tracking_noise”: {\n “base_value”: 0.0, \n “inputs”: {}\n }\n }, \n “version”: 3\n}’)}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/lib/brush.py”, line 181, load_from_string(self=<lib.brush.BrushInfo object>, settings_str=’{\n “comment”: “MyPaint brush file”, \n "des…“inputs”: {}\n }\n }, \n “version”: 3\n}’)
# new json-based brush format
self.from_json(settings_str)
elif settings_str.startswith(’#’):
variables: {‘self.from_json’: (‘local’, <bound method BrushInfo.from_json of <lib.brush.BrushInfo object at 0x000000000eddef90>>), ‘settings_str’: (‘local’, ‘{\n “comment”: “MyPaint brush file”, \n “description”: “A brush with sensitivity on size while producing a fringe to simulate watercolor”, \n “group”: “”, \n “notes”: “A brush preset part of the Brushkit v0.6 \n created in october 2012 by David Revoy ( aka Deevad ) \n source: http://www.davidrevoy.com/article142/ressource-mypaint-brushes \n license: CC-Zero/Public-Domain”, \n “parent_brush_name”: “deevad/watercolor_expressive”, \n “settings”: {\n “anti_aliasing”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_h”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_hsl_s”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_hsv_s”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_l”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “change_color_v”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “color_h”: {\n “base_value”: 0.6566264794722573, \n “inputs”: {}\n }, \n “color_s”: {\n “base_value”: 0.7619451326933229, \n “inputs”: {}\n }, \n “color_v”: {\n “base_value”: 0.18176406445118393, \n “inputs”: {}\n }, \n “colorize”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “custom_input”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “custom_input_slowness”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “dabs_per_actual_radius”: {\n “base_value”: 2.0, \n “inputs”: {}\n }, \n “dabs_per_basic_radius”: {\n “base_value”: 6.0, \n “inputs”: {}\n }, \n “dabs_per_second”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “direction_filter”: {\n “base_value”: 2.0, \n “inputs”: {}\n }, \n “elliptical_dab_angle”: {\n “base_value”: 90.0, \n “inputs”: {\n “random”: [\n [\n 0.0, \n -180.0\n ], \n [\n 1.0, \n 180.0\n ]\n ]\n }\n }, \n “elliptical_dab_ratio”: {\n “base_value”: 4.0, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n -0.0\n ], \n [\n 0.75, \n -0.0\n ], \n [\n 1.0, \n -2.7\n ]\n ], \n “speed1”: [\n [\n 0.0, \n -0.37\n ], \n [\n 4.0, \n 0.37\n ]\n ]\n }\n }, \n “eraser”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “gridmap_scale”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “gridmap_scale_x”: {\n “base_value”: 1.0, \n “inputs”: {}\n }, \n “gridmap_scale_y”: {\n “base_value”: 1.0, \n “inputs”: {}\n }, \n “hardness”: {\n “base_value”: 0.23, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n -0.0\n ], \n [\n 0.746914, \n -0.0\n ], \n [\n 0.884375, \n -0.0\n ], \n [\n 1.0, \n -0.032083\n ]\n ]\n }\n }, \n “lock_alpha”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_2”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_2_asc”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_2_view”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_adj”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_asc”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_angle_view”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_by_random”: {\n “base_value”: 0.0, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n 0.0\n ], \n [\n 0.75, \n 0.0\n ], \n [\n 1.0, \n 0.8\n ]\n ]\n }\n }, \n “offset_by_speed”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_by_speed_slowness”: {\n “base_value”: 1.0, \n “inputs”: {}\n }, \n “offset_multiplier”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_x”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “offset_y”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “opaque”: {\n “base_value”: 2.0, \n “inputs”: {\n “random”: [\n [\n 0.0, \n 1.0\n ], \n [\n 1.0, \n 1.0\n ]\n ]\n }\n }, \n “opaque_linearize”: {\n “base_value”: 0.9, \n “inputs”: {}\n }, \n “opaque_multiply”: {\n “base_value”: 0.0, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n 0.0\n ], \n [\n 0.040123, \n 0.885417\n ], \n [\n 0.138889, \n 1.0\n ], \n [\n 1.0, \n 1.0\n ]\n ]\n }\n }, \n “paint_mode”: {\n “base_value”: 1.0, \n “inputs”: {}\n }, \n “posterize”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “posterize_num”: {\n “base_value”: 0.05000000074505806, \n “inputs”: {}\n }, \n “pressure_gain_log”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “radius_by_random”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “radius_logarithmic”: {\n “base_value”: 3.5, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n -2.9\n ], \n [\n 1.0, \n 0.845833\n ]\n ]\n }\n }, \n “restore_color”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “slow_tracking”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “slow_tracking_per_dab”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “smudge”: {\n “base_value”: 0.71, \n “inputs”: {\n “pressure”: [\n [\n 0.0, \n -0.65\n ], \n [\n 0.5, \n -0.358854\n ], \n [\n 0.796875, \n -0.094792\n ], \n [\n 1.0, \n 0.24375\n ]\n ], \n “speed1”: [\n [\n 0.0, \n -0.01\n ], \n [\n 4.0, \n 0.01\n ]\n ]\n }\n }, \n “smudge_bucket”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “smudge_length”: {\n “base_value”: 0.1, \n “inputs”: {}\n }, \n “smudge_length_log”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “smudge_radius_log”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “smudge_transparency”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “snap_to_pixel”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “speed1_gamma”: {\n “base_value”: 4.0, \n “inputs”: {}\n }, \n “speed1_slowness”: {\n “base_value”: 0.04, \n “inputs”: {}\n }, \n “speed2_gamma”: {\n “base_value”: 4.0, \n “inputs”: {}\n }, \n “speed2_slowness”: {\n “base_value”: 0.8, \n “inputs”: {}\n }, \n “stroke_duration_logarithmic”: {\n “base_value”: 6.5, \n “inputs”: {}\n }, \n “stroke_holdtime”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “stroke_threshold”: {\n “base_value”: 0.0, \n “inputs”: {}\n }, \n “tracking_noise”: {\n “base_value”: 0.0, \n “inputs”: {}\n }\n }, \n “version”: 3\n}’)}
File “C:/Program Files/mypaint-w64-v12/mingw64/share/mypaint/lib/brush.py”, line 165, from_json(self=<lib.brush.BrushInfo object>, json_string=’{\n “comment”: “MyPaint brush file”, \n "des…“inputs”: {}\n }\n }, \n “version”: 3\n}’)
if k not in self.settings:
print ‘ignoring unknown brush setting %r’ % k
continue
variables: {‘k’: (‘local’, u’offset_angle_2_view’)}
IOError: [Errno 9] Bad file descriptor