Skip to main content

Python bindings for Glaxnimate

Project description

Python Glaxnimate

Python bindings for Glaxnimate.

Allows to create and modify vector animations. With support for Lottie, SVG, and other formats.

See the documentation page for more details.


Convert animated SVG to Lottie

import glaxnimate

# Set up environment
with glaxnimate.environment.Headless():
    # Create a document object
    document = glaxnimate.model.Document("")

    # Load an animated SVG
    with open("MyFile.svg", "rb") as input_file:"svg").load(document,

    # ...

    # Write to Lottie
    with open("MyFile.json", "wb") as output_file:

Render Lottie to gif

from PIL import Image
from PIL import features
import glaxnimate

def png_gif_prepare(image):
    Converts the frame image from RGB to indexed, preserving transparency
    if image.mode not in ["RGBA", "RGBa"]:
        image = image.convert("RGBA")
    alpha = image.getchannel("A")
    image = image.convert("RGB").convert('P', palette=Image.ADAPTIVE, colors=255)
    mask = Image.eval(alpha, lambda a: 255 if a <= 128 else 0)
    image.paste(255, mask=mask)
    return image

def save_gif(document, file, skip_frames=1):
    start = int(document.main.animation.first_frame)
    end = int(document.main.animation.last_frame)

    # Get all frames as PIL images
    frames = []
    for i in range(start, end+1, skip_frames):

    # Save as animation
    duration = int(round(1000 / document.main.fps * skip_frames / 10)) * 10

# Initialize environment
with glaxnimate.environment.Headless():

    document = glaxnimate.model.Document("")

    # Load the lottie JSON
    with open("MyFile.json", "rb") as input_file:"json").load(document,

    # Save as GIF
    with open("MyFile.gif", "rb") as output_file:
        save_gif(document, output_file)

Create animations from code

import glaxnimate

with glaxnimate.environment.Headless():
    # Create an empty document
    document = glaxnimate.model.Document("")

    # Add a layer
    layer = document.main.add_shape("Layer")

    # The fill will be applied to all following shapes in the same group / layer
    fill = layer.add_shape("Fill")
    fill.color.value = "#ff0000"

    # A simple circle moving left and right
    ellipse = layer.add_shape("Ellipse")
    radius = 64
    ellipse.position.set_keyframe(0, glaxnimate.utils.Point(radius, document.size.height / 2))
    ellipse.position.set_keyframe(90, glaxnimate.utils.Point(document.size.width-radius, document.size.height / 2))
    ellipse.position.set_keyframe(180, glaxnimate.utils.Point(radius, document.size.height / 2))
    ellipse.size.value = glaxnimate.utils.Size(radius, radius)

    # Export it
    with open("MyFile.svg", "wb") as output_file:

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for glaxnimate, version 0.4.6
Filename, size File type Python version Upload date Hashes
Filename, size glaxnimate-0.4.6-py3-none-macosx_10_15_x86_64.whl (6.6 MB) File type Wheel Python version py3 Upload date Hashes View
Filename, size glaxnimate-0.4.6-py3-none-manylinux1_x86_64.whl (75.8 MB) File type Wheel Python version py3 Upload date Hashes View
Filename, size glaxnimate-0.4.6-py3-none-win32.whl (1.2 MB) File type Wheel Python version py3 Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page