You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
isoraqathedh 353b4f128c A test on making my own change parser 1 year ago
LICENSE Create LICENSE 2 years ago Done time manipulation. 1 year ago
actor-tests.lisp A test on making my own change parser 1 year ago
actor.lisp Declare that the location of the actor is at 0 0. 1 year ago
actor_.lisp Delete everything and start with Shin's base. 2 years ago
behaviour.lisp Create mechanism to set playback speed. 2 years ago
colours.lisp Minor formatting guff. Also remove some palette-related stuff that didn't pan out. 2 years ago
coordinates.lisp Split up the file into thematically appropriate components. 2 years ago
expected-usage-pattern.lisp Extra bit of script. 1 year ago
export.lisp More tentative steps toward image export. 2 years ago
mkvid.asd Create mechanism to set playback speed. 2 years ago
mkvid.lisp The enter commands won't fire if the time is too close to 0. 2 years ago
package.lisp Add a package declaration to files that don't have them. 2 years ago
patch.lisp Add temporary patch functions. 2 years ago
test.lisp Quick mock-up of what the final script would look like. 2 years ago
window.lisp Add step forward and backward function. 2 years ago
window_.lisp Delete everything and start with Shin's base. 2 years ago


This is a project to allow one to create videos with moving text, images and geometrical figures. It is essentially a bit of a manim clone, but more inspired by "PowerPoint animations" à la Vhèkkyo Boy.

Unlike other projects such as lut and bocproc, this is not a scripting language, but an actual library that's meant to integrate with the rest of Common Lisp.


A video contains a number of scenes, with a number of actors that can move around, grow, shrink or otherwise transform. It is heavily built around flare, a particle animation library, and much of its features is built around it.

How to make your own animation

The first step you need to do is to invent some actors. These are simply classes that have one of the following as a superclass:

  • entity
  • flare:container-unit

Some common types of actors are included, such as rectangles, text and an image-based sprite.

Then you need to define a paint method on it. This would automatically call flare:paint in such a way that you can assume the object is drawn with its location at (0, 0). Keep in mind that this paint uses the progn method combination, so all methods that are defined on the object's superclass will be run.

Also keep in mind that you would be drawing on a qpainter, which means you would need to use qtools or similar to do the drawing.

Once that's done you can create the scene. This scene is a presentation and the syntax goes like this:

    (define-presentation name (width height) 

where progression-definitions is exactly as in flare's progressions.

After that, you can preview the animation by running

    (present presentation-name)

Where presentation-name is the name of your presentation. This would pull up a GUI. The GUI will show your presentation at 30 frames per second. However, you do not decide on a frame rate at all while composing the presentation; anything can happen wherever a double floating point number exists. You only decide on the frame rate when it is time to export the video.

Things to come


  • Export to video
  • Fully functional UI
  • Seeking


  • Cue times: Occasionally, it makes more sense to have an accumulator time on the background, which you could then manipulate via incf or similar. Also, in other times one might find some times to be easier stated at a definition at the top, and then pop them out later via pop and cdr.
  • Rotations
  • Scaling