Other demo animation (12 seconds, 304 Kb)


Dnotes, first frame

Dnotes (download source) is a basic animation program. It runs on both Linux and Windows (and very probably MacOS too). It requires Python (2.*) and Pygame to run.

There is a modified linux version (download source) that is also able to export the animation to mp4 using ffmpeg. It will work on windows, except that it will crash if you try to export the animation.


Just save the .py file in any directory, give it execution rights and run it with python.

Installation for (very) lazy people

  1. Open a terminal
  2. Paste the following

mkdir dnotes
cd dnotes
wget -O dnotes.py http://leximnesia.org/files/dnotes_2_mp4-0.3.py
chmod +x dnotes.py
wget http://leximnesia.org/files/test-morphing.da
./dnotes.py test-morphing.da


python dnotes.py [FILE] * will launch dnotes on FILE (creates it if non existent) python dnotes_2_mp4.py FILE * will launch dnotes on FILE (don’t pay attention to the program name: this is just the same as dnotes.py with 2 additional functions)

Drawing / erasing

  • mouse drag with left button: draw
  • mouse drag with right button: erase
  • SHIFT+left click: draw a line between the last recorded position and the mouse position
  • ALT+left click: draw a rectangle between the last recorded position an the mouse position
  • CTRL+mouse drag with left button: draw in red (on the pseudo-onion skin layer)
  • BACKSPACE: deletes the last drawn line
  • SHIFT+BACKSPACE: deletes the 5 last drawn lines
  • SPACE: erase everything in the frame

Managing frames

  • n: new empty frame
  • c: new frame with a copy of the previous frame as a sort of "onion skin" (in red)
  • d: delete current frame (unless there is only 1 frame)
  • mouse wheel: next / previous frame
  • RIGHT/LEFT: next / previous frame
  • CTRL+RETURN: play / stop the animation
  • ALT+mouse wheel: increase / decrease frame rate (but this is not saved, though it is taken into account when exporting to mp4).

Managing display

  • r: redraws the frame without the "onion skin" (which is then lost)
  • RETURN: makes the "onion skin" real (and redraws).

File operations

  • s: save the file
  • l: load the last saved version of the file
  • Alt+F4 (or whatever sends the normal termination signal to the app): save and close (careful).
  • q: quit without saving.


  • SHIFT+mouse wheel: change the eraser size
  • CTRL+mouse wheel: change the precision (in other words, the minimum delay before a mouse motion is taken into account)

Only in the modified linux version

  • SHIFT+r: reorder the frames so that the current one becomes the first one
  • SHIFT+s: converts each frame to a png file in a temporary folder, then uses ffmpeg to convert it to mp4 (saved in the hidden directory ~/.dnotes/)

Meaning of the bottom line

  • First you have the file path and name.
  • Then 4 numbers enclosed in parentheses:
    • number of lines in current frame
    • precision of the drawing tool (sort of) : delay between two mouse position capture in "drag" mode.
    • frame rate (number of images per second).
    • size of the eraser
  • Then 2 numbers: the frame number and the total frame count


  • real onion skin, no more red stuff → will probably be done one day ☺.
  • windows version of the ffmpeg export (and merging the unix and windows versions) → little chance, I’m not so motivated
  • text tool of some sort → maybe…
  • moving one frame before the previous one or after the next one → easily programmed, will surely be done. ☺.
  • HOME key to go to 1st frame → easily programmed, will surely be done.
  • Some sort of a help system (but I want to keep the single-file philosophy, so maybe it will be an embedded drawing of all key shortcuts ?) → ☺
  • Changing the brush thickness… I hesitate: I prefer to keep the drawing tools very basic. I won’t add color, for instance.

Web version

I am currently trying to port this to HTML5+Javascript using the canvas element. It will probably work better (and faster) than the python one, but I still prefer python’s way of coding. And saving will also be a problem (I don’t really want to use a php backend – what about offline – nor localStorage). The current solution (marshalling into/loading from a textArea) is not ideal but works.

Currently there is no eraser in the Web version, and a lot of other options are missing, but the basic tools are there (and onion skin too).


You can click (first within the iframe but outside the canvas, then in the canvas) and start using

  • left mouse drag (draw),
  • right mouse drag (eraser),
  • space (erase frame),
  • N (new frame),
  • O (onion toggle),
  • return (play/stop),
  • S (save in textarea),
  • L (load from textarea),
  • mouse wheel (next/prev frame),
  • backspace (erase last line),
  • shift+backspace (erase last 5 lines),
  • alt+backspace (restore last erased lines).

Design et site: Florian Mortgat
Moteur wiki dérivé de: Wikiss
fr, en, de

edit menu left/menu top