Skip to main content
Help us improve PyPI by participating in user testing. All experience levels needed!

A Python module to deal with APNG file.

Project description Documentation Status

A Python module to deal with APNG file.


  • Merge multiple images into one APNG file. (It use Pillow to convert images into PNG format)
  • Read APNG file and extract each frames into PNG file.
  • It doesn’t do any optimization but only concat the images. This might be changed in the future.


  • Pillow - Optional. You can still use pyAPNG without PIL but it can only read PNG files.

Development dependencies

  • pngcheck
  • See requirements.txt for other dev-dependencies.


>From pypi:

pip install apng


Convert a series of images into APNG animation:

from apng import APNG

APNG.from_files(["1.jpg", "2.jpg", "3.jpg"], delay=100).save("result.png")

Use different delays:

from apng import APNG

files = [
  ("1.jpg", 100),
  ("2.jpg", 200),
  ("3.jpg", 300)

im = APNG()
for file, delay in files:
  im.append_file(file, delay=delay)"result.png")

Extract frames from an APNG file:

from apng import APNG

im ="animation.png")
for i, (png, control) in enumerate(im.frames):"{i}.png".format(i=i))


If you want to convert some large JPGs into animation, the library has to convert your JPGs into PNGs then merge them into a single animation APNG file. The problems are:

  1. It is extremely slow.
  2. The file size of the APNG is extremely large. Probably 5x of the original or more.

In this case, I suggest trying an animation format called “ugoira”, which is implemented by There is also an image viewer named “HoneyView” which can view it locally.


  • Add optimizer?


  • 0.3.1 (May 13, 2018)
    • Add: universal wheel.
  • 0.3.0 (May 13, 2018)
    • Support Python 2.
    • Add: PNG method open_any, from_bytes.
    • Add: APNG method append_file, from_bytes.
    • Add: module function parse_chunks.
    • Drop: module function `is_png` and `chunks`.
    • Change: `` now only reads PNG images. To read non-PNG images, use `PNG.open_any`.
    • Change: `APNG.append` now only accepts `PNG` instance. To append PNG files, use `APNG.append_file`.
  • 0.2.1 (Apr 19, 2018)
    • Add: support num_plays. (#4)
  • 0.2.0 (Dec 8, 2017)
    • Add test.
    • Add documents.
    • Add: support path-like object.
    • Fix: some chunks must appear before IDAT. (#1)
    • Fix: change chunks order in APNG. Some chunks are moved to the end of the file.
    • Fix: remove tRNS hack.
    • Fix: is_png shouldn’t move file pointer. (#2)
  • 0.1.0 (May 30, 2016)
    • First release.

Project details

Release history Release notifications

This version
History Node


History Node


History Node


History Node


History Node


Download files

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

Filename, size & hash SHA256 hash help File type Python version Upload date
apng-0.3.1-py2.py3-none-any.whl (8.8 kB) Copy SHA256 hash SHA256 Wheel py2.py3 May 12, 2018
apng-0.3.1.tar.gz (6.3 kB) Copy SHA256 hash SHA256 Source None May 12, 2018

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page