# <img alt="dmtools" src="docs/branding/dmtools_dark.png" height="90">
[](https://pypi.python.org/pypi/dmtools/)
[](https://app.circleci.com/pipelines/github/henryrobbins/dmtools)
[](https://dmtools.readthedocs.io/en/latest/?badge=latest)
[](https://codecov.io/gh/henryrobbins/dmtools)
dmtools (Digital Media Tools) is a Python package providing low-level tools for
working with digital media programmatically. It supports the PNG and [Netpbm][1]
image file formats as well as the MPEG-4 and [WAV][2] video and audio file
formats respectively.
The `transform` module provides image transformation tools such as rescale
(based on the [ImageMagick][3] implementation) and composite (based on the
[Cairo][4] implementation). The `adjustments` module provides a curves tool and
the `colorspace` module provides colorspace conversion tools. The `arrange`
module provides image layout tools. Lastly, the `animation` and `sound` modules
provide tools for working with video and sound respectively. For more details,
see the [Documentation][8].
# Installations
The quickest way to get started is with a pip install.
```
pip install dmtools
```
The `animation` module requires [ffmpeg][5] which you can install with a package
manager like [Homebrew][6]. Note that this may take some time to install.
```
brew install ffmpeg
```
For in-depth installation instructions see [Installation][7].
# Usage
The usage example below illustrates how an image can be read, manipulated,
and exported using dmtools. It features a change of color space, inversion of
the red channel, and blur. For more usage examples, see the
[Introduction to dmtools][9] in [Tutorials][10]. Both the input image
`checks_5.png` and output image `result.png` can be found in the [dmtools][11]
GitHub repository.
```python
import dmtools
from dmtools import colorspace, transform, adjustments, arrange
image = dmtools.read("checks_5.png")
image = colorspace.gray_to_RGB(image)
image = adjustments.apply_curve(image, lambda x: 1 - x, 0)
image = transform.blur(image, 5)
image = arrange.image_grid([image]*2, 2, 1, 15, color=1)
dmtools.write_png(image, "result.png")
```

*checks_5.png*

*result.png*
## License
Licensed under the [MIT License](https://choosealicense.com/licenses/mit/)
[1]: <http://netpbm.sourceforge.net/> "Netpbm"
[2]: <https://en.wikipedia.org/wiki/WAV> "WAV"
[3]: <https://legacy.imagemagick.org/Usage/resize/> "ImageMagick"
[4]: <https://cairographics.org/operators/> "Cairo"
[5]: <https://ffmpeg.org/about.html> "ffmpeg"
[6]: <https://brew.sh/> "Homebrew"
[7]: <https://dmtools.henryrobbins.com/en/latest/install/index.html> "Installation"
[8]: <https://dmtools.henryrobbins.com/en/latest/modules.html> "Documentation"
[9]: <https://dmtools.henryrobbins.com/en/latest/tutorials/dmtools.html> "Introduction"
[10]: <https://dmtools.henryrobbins.com/en/latest/tutorials/index.html> "Tutorials"
[11]: <https://github.com/henryrobbins/dmtools> "dmtools"