Skip to main content

python-exiv2 is a low level interface (or binding) to the exiv2 C++ library. It is built using SWIG to automatically generate the interface code. The intention is to give direct access to all of the top-level classes in libexiv2, but with additional “Pythonic” helpers where necessary. Not everything in libexiv2 is available in the Python interface. If you need something that’s not there, please let me know.

Introduction

There are several other ways to access libexiv2 from within Python. The first one I used was pyexiv2 (old). After its development ceased I moved on to using gexiv2 and PyGObject. This works well, providing a Metadata object with high level functions such as set_tag_string and set_tag_multiple to get and set metadata values.

A more recent development is pyexiv2 (new). This new project is potentially very useful, providing a simple interface with functions to read and modify metadata using Python dict parameters.

For more complicated metadata operations I think a lower level interface is required, which is where this project comes in. Here is an example of its use:

Python 3.6.12 (default, Dec 02 2020, 09:44:23) [GCC] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import exiv2
>>> image = exiv2.ImageFactory.open('IMG_0211.JPG')
>>> image.readMetadata()
>>> data = image.exifData()
>>> data['Exif.Image.Artist']._print()
'Jim Easterbrook'
>>>

Documentation

The libexiv2 library is well documented for C++ users, in Doxygen format. Recent versions of SWIG can convert this documentation to pydoc format in the Python interface:

$ pydoc3 exiv2.Image.exifData

Help on method_descriptor in exiv2.Image:

exiv2.Image.exifData = exifData(...)
    Returns an ExifData instance containing currently buffered
        Exif data.

    The contained Exif data may have been read from the image by
    a previous call to readMetadata() or added directly. The Exif
    data in the returned instance will be written to the image when
    writeMetadata() is called.

    :rtype: :py:class:`ExifData`
    :return: modifiable ExifData instance containing Exif values

Assignment

libexiv2 stores metadata values in a generalised container whose type can be set by the type of a value assigned to it, for example:

// C or C++
exifData["Exif.Image.SamplesPerPixel"] = uint16_t(162);

This forces the Exif.Image.SamplesPerPixel value to be an unsigned short. Python doesn’t have such specific integer types, so if you want to set the type you need to create an exiv2 value of the appropriate type and assign that:

# Python
exifData["Exif.Image.SamplesPerPixel"] = exiv2.UShortValue(162)

This allows you to set the value to any type, just like in C++, but the Python interface warns you if you set a type that isn’t the default for that tag. Alternatively you can use any Python object and let libexiv2 convert the string representation of that object to the appropriate type:

# Python
exifData["Exif.Image.SamplesPerPixel"] = 162

Iterators

Several libexiv2 classes use C++ iterators to expose private data, for example the ExifData class has a private member of std::list<Exifdatum> type. The classes have public begin and end methods that return std::list iterators. In C++ you can dereference one of these iterators to access the Exifdatum object, but Python doesn’t have a dereference operator.

This Python interface converts the std::list iterator to a Python object that has access to all the Exifdatum object’s methods. For example:

Python 3.6.12 (default, Dec 02 2020, 09:44:23) [GCC] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import exiv2
>>> image = exiv2.ImageFactory.open('IMG_0211.JPG')
>>> image.readMetadata()
>>> data = image.exifData()
>>> b = data.begin()
>>> b.key()
'Exif.Image.ProcessingSoftware'
>>>

The Python objects can be used to iterate over the data in a very C++ like style:

>>> data = image.exifData()
>>> b = data.begin()
>>> e = data.end()
>>> while b != e:
...     b.key()
...     next(b)
...
'Exif.Image.ProcessingSoftware'
<Swig Object of type 'ExifDataIterator *' at 0x7f2cbf6c2fb8>
'Exif.Image.ImageDescription'
<Swig Object of type 'ExifDataIterator *' at 0x7f2cbf6c2fb8>
[skip 227 line pairs]
'Exif.Thumbnail.JPEGInterchangeFormat'
<Swig Object of type 'ExifDataIterator *' at 0x7f2cbf6c2fb8>
'Exif.Thumbnail.JPEGInterchangeFormatLength'
<Swig Object of type 'ExifDataIterator *' at 0x7f2cbf6c2fb8>
>>>

The <Swig Object of type 'ExifDataIterator *' at 0x7f2cbf6c2fb8> lines are the Python interpreter showing the return value of next(b). You can also iterate in a more Pythonic style:

>>> data = image.exifData()
>>> for datum in data:
...     datum.key()
...
'Exif.Image.ProcessingSoftware'
'Exif.Image.ImageDescription'
[skip 227 lines]
'Exif.Thumbnail.JPEGInterchangeFormat'
'Exif.Thumbnail.JPEGInterchangeFormatLength'
>>>

Warning: segmentation faults

It is easy to crash python-exiv2 if you delete objects which contain data that another object is pointing to. For example, deleting an Image after extracting its metadata can cause a segfault when the metadata is accessed. Ideally the Python interface to libexiv2 would use Python objects’ reference counts to ensure this doesn’t happen, preventing the deletion of the Image object until all references to it have been deleted. Unfortunately I haven’t found a sensible way to do this in the Python interface, so some care is needed when using it.

Error handling

libexiv2 has a multilevel warning system a bit like Python’s standard logger. The Python interface redirects all Exiv2 messages to Python logging with an appropriate log level. The exiv2.LogMsg.setLevel function can be used to control what severity of messages are logged.

Installation

Python “wheels” are available for Windows (Python 3.5 to 3.9) and Linux & MacOS (Python 3.6 to 3.10). These include the libexiv2 library and should not need any other software to be installed. They can be installed with Python’s pip package. For example, on Windows:

C:\Users\Jim>pip install python-exiv2

or on Linux or MacOS:

$ sudo pip3 install python-exiv2

You can install for a single user with the --user option:

$ pip3 install --user python-exiv2

If the available wheels are not compatible with your operating system then pip will download the python-exiv2 source and attempt to compile it. For more information, and details of how to compile python-exiv2 and libexiv2, see INSTALL.rst.

Problems?

Please email jim@jim-easterbrook.me.uk if you find any problems (or solutions!).

Download files

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

Source Distribution

python-exiv2-0.6.0.zip (4.4 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

python_exiv2-0.6.0-cp310-cp310-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.10Windows x86-64

python_exiv2-0.6.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (6.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.12+ x86-64

python_exiv2-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

python_exiv2-0.6.0-cp39-cp39-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.9Windows x86-64

python_exiv2-0.6.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (6.6 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64

python_exiv2-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

python_exiv2-0.6.0-cp38-cp38-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.8Windows x86-64

python_exiv2-0.6.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (6.6 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64

python_exiv2-0.6.0-cp38-cp38-macosx_10_9_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

python_exiv2-0.6.0-cp37-cp37m-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.7mWindows x86-64

python_exiv2-0.6.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (6.5 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64

python_exiv2-0.6.0-cp37-cp37m-macosx_10_9_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

python_exiv2-0.6.0-cp36-cp36m-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.6mWindows x86-64

python_exiv2-0.6.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (6.5 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ x86-64

python_exiv2-0.6.0-cp36-cp36m-macosx_10_9_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

python_exiv2-0.6.0-cp35-cp35m-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.5mWindows x86-64

File details

Details for the file python-exiv2-0.6.0.zip.

File metadata

  • Download URL: python-exiv2-0.6.0.zip
  • Upload date:
  • Size: 4.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.26.0 setuptools/40.5.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.6.12

File hashes

Hashes for python-exiv2-0.6.0.zip
Algorithm Hash digest
SHA256 1553ba1d448301623a3448c8dcb7eaea08cc8f59a36fd65b6e9f3e5b362fa3f3
MD5 8ee0a1bba49675e4ef921a458b13479a
BLAKE2b-256 721b766ccf4e7a4c294c457972334a983f2393bfa12767216e32a3e44c1c8834

See more details on using hashes here.

File details

Details for the file python_exiv2-0.6.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: python_exiv2-0.6.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.26.0 setuptools/40.5.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.6.12

File hashes

Hashes for python_exiv2-0.6.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e957d2f0c667bd7808b2e3ac643fe2d6a1936d1e5977f4103c778518eb2b3cc3
MD5 da8982cca71a84b294f00e88dfde09f6
BLAKE2b-256 a0da5df45ffc063248d0564027119d2ab518b30860b4e1c7bceee3d7ada4e720

See more details on using hashes here.

File details

Details for the file python_exiv2-0.6.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for python_exiv2-0.6.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 45c902b544a4f8ea1748f163b66ae81ce2b86d51b2d2a36ca97c1a2e55d631ca
MD5 22b6df11dc8743f9e33893ba12b7cb97
BLAKE2b-256 78f10aa1e9787e2908181b52d9bbc2d4423a570c598ca6e1d48a13f98152a833

See more details on using hashes here.

File details

Details for the file python_exiv2-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: python_exiv2-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.10, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.26.0 setuptools/40.5.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.6.12

File hashes

Hashes for python_exiv2-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f004043c5a62237219a06b95c5d41bc0095610c0c6fcaaa7c9624ef4ece856c0
MD5 b279a975cd58eecd808b0016d9036e2d
BLAKE2b-256 2cc7fde69ba783d2ec57368a149ef00b9f88cdd4d9421842a242e48d347507e2

See more details on using hashes here.

File details

Details for the file python_exiv2-0.6.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: python_exiv2-0.6.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.26.0 setuptools/40.5.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.6.12

File hashes

Hashes for python_exiv2-0.6.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 726cd9976b59a8fa2b3d6580a281fcad0e7c4a2a7caf763a3f658db9751f1a87
MD5 40d46eef773b8ae6830bab7c9a85a79a
BLAKE2b-256 3bb64d82972493ebfa3ecc34555c6216d7e169a1b9056d45e7bfa832ae219ce8

See more details on using hashes here.

File details

Details for the file python_exiv2-0.6.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for python_exiv2-0.6.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 2a53a9ec54c218d5da4f086b08e882ee1b721bc78cc2c3acb3f64910023aab77
MD5 f525e46f73560a4655c93ef0ff500976
BLAKE2b-256 b5ee6bd15cd4d3a7e77ee67568f1880008d5d93ec2ec09572d26c557e5e06216

See more details on using hashes here.

File details

Details for the file python_exiv2-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: python_exiv2-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.26.0 setuptools/40.5.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.6.12

File hashes

Hashes for python_exiv2-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 092a13764bf34f6f4d249e5aed1e8ffc31c841362d75ba6bfbb55429303f103d
MD5 89b455a8bbcfcb186b48f2c17e9f8f1c
BLAKE2b-256 f0bebf27de06fa68fe137fb10d461dfdf3d4538ed711f86276b51265836cc888

See more details on using hashes here.

File details

Details for the file python_exiv2-0.6.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: python_exiv2-0.6.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.26.0 setuptools/40.5.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.6.12

File hashes

Hashes for python_exiv2-0.6.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 6ec28f63bda6d3889bce826ad136508bb094c41ee42b9e2072d906806aa1164d
MD5 3cc98146dc016c9c26ee40e6e576899b
BLAKE2b-256 8ec69b1882c18e42b736c78036bc5a712e8a8becd86748fc16c089c3adb70b39

See more details on using hashes here.

File details

Details for the file python_exiv2-0.6.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for python_exiv2-0.6.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 2938ab50661e4bc2cf8b6a5abb4203f65c595823717ccb9fb0bfea83277be503
MD5 097969b75dcc970c3fb37d75ae0becb7
BLAKE2b-256 5a4c3c18deb845d13d84a70367ec2d830f95a5f7817c5fb6d104375d3e6a6fbd

See more details on using hashes here.

File details

Details for the file python_exiv2-0.6.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: python_exiv2-0.6.0-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.26.0 setuptools/40.5.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.6.12

File hashes

Hashes for python_exiv2-0.6.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e89a8eca99df9b2b93f1d7d28d4cdfb24703d98a5d63818879477d0ed68c202b
MD5 ba6a464de4a6d56153f6b1c60b4c0b20
BLAKE2b-256 42259fd06e888612f7aff268720f84a68202c5660629d275a02c03d234b73464

See more details on using hashes here.

File details

Details for the file python_exiv2-0.6.0-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: python_exiv2-0.6.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.26.0 setuptools/40.5.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.6.12

File hashes

Hashes for python_exiv2-0.6.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 9a57722b228d07a7695382078bd13d434d507e99f038648645b748b402e68e9c
MD5 122924c5847d2d95327e12673c961818
BLAKE2b-256 a07810338d1bdfb5d467c9337074b045a65e84fbaeba23973e67d4987c8c3b8b

See more details on using hashes here.

File details

Details for the file python_exiv2-0.6.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for python_exiv2-0.6.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 305f4b5611a9f8a562d09fca715331dd7e275aa976fd8b6999223a272e5a34b9
MD5 f3b528d2e52023bd7b330b99cbfa3650
BLAKE2b-256 6f999d12c3e218786fc2fe8ed3dbdfd863abd3fd58e6a3b41319a5f0d8915a2f

See more details on using hashes here.

File details

Details for the file python_exiv2-0.6.0-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: python_exiv2-0.6.0-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.26.0 setuptools/40.5.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.6.12

File hashes

Hashes for python_exiv2-0.6.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4e919871404712c84e88cb2f97191378f4c117c878cc0571b7eae3e0224678fe
MD5 721157018140e3ec7bd42d46bd8f8d17
BLAKE2b-256 653078e3e3fb714b1abdb7d20eca8efcd00608b60cbe0a97399e0021cbf52cc2

See more details on using hashes here.

File details

Details for the file python_exiv2-0.6.0-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: python_exiv2-0.6.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.26.0 setuptools/40.5.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.6.12

File hashes

Hashes for python_exiv2-0.6.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 fa835b089081d3a74c4668d576b9c5cc32384634389cbf69c5d2aad1c092e122
MD5 47276bec7c7c047f6c3135ae38fa929e
BLAKE2b-256 7fa69e19fb7445fbef3ba1c78ee5379687610cf3501c1415b8822b03b6f6d6f7

See more details on using hashes here.

File details

Details for the file python_exiv2-0.6.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for python_exiv2-0.6.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 bc7929cf2d828f36a834e2eeea68087340691fe6347345b39b8b316943600203
MD5 3d1acde59da7597a8138a264b1f4aed0
BLAKE2b-256 c79815594c180f5f7bc7d061f8af6641410ba591db744a0166ce9d4dc0e2a0ad

See more details on using hashes here.

File details

Details for the file python_exiv2-0.6.0-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: python_exiv2-0.6.0-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.26.0 setuptools/40.5.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.6.12

File hashes

Hashes for python_exiv2-0.6.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5e10b8ddb3b6679372870f254e30e6921382e95feee50e41d48ebc0b56a23a05
MD5 2023e4cdb15be4052e488704e1a2dadf
BLAKE2b-256 ba483ac8c10590742a88f3c44964c248cc399804af8ecca5d4610cf5f3aa3ebb

See more details on using hashes here.

File details

Details for the file python_exiv2-0.6.0-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: python_exiv2-0.6.0-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.26.0 setuptools/40.5.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.6.12

File hashes

Hashes for python_exiv2-0.6.0-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 dd0ce7fa10ca0712336306c7333166606bd4706ec3159f05687d7322351c46e0
MD5 59b144f2eb1c29d7fb5a4ad9bea68e88
BLAKE2b-256 9f15329e097f686ce682b12b00ea6a504489a1fea218e236003bc22cdc349ef7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page