# JPEGData
The JPEGData library for Python provides a streamlined way to work with JPEG image files
offering the ability to extract certain file metadata.
### Requirements
The JPEGData library has been tested to work with Python 3.10, 3.11, 3.12 and 3.13, but
has not been tested, nor is its use supported with earlier versions of Python.
### Installation
The library is available from the PyPI repository, so may be added easily to a project's
dependencies via its `requirements.txt` file or similar by referencing the library's
name, `jpegdata`, or the library may be installed directly onto your local development
system using `pip install` by entering the following command:
$ pip install jpegdata
### Classes, Methods & Properties
The JPEGData library's main class is the `JPEG` class through which JPEG image files can
be loaded, modified via the supported actions, and saved. The library supports reading
several common JPEG file formats including JFIF, EXIF, CCIF and SPIFF formatted JPEG files.
Currently the library does not support more recent JPEG formats and derivations such as
JPEG XL, JPEG-2000, JPEG XR, etc.
The `JPEG` class offers the following methods:
* `JPEG(filepath: str)` – The `JPEG()` class constructor expects an absolute filepath at
a minimum for the JPEG file you wish to open. Upon initialising the class with the file,
the library will then attempt to load and parse the file. Assuming that the file is a
valid JPEG file, the library will parse the file, identify any segments contained within
the file, and any data associated with each of the segments, and will determine several
intrinsic properties of the JPEG image including the canvas width and height.
The `JPEG` class offers the following properties:
* `info` (`Information`) – The `info` property can be used to access the `Information`
class instance that is created when the `JPEG` class instance is created and the file is
parsed. The `Information` class instance contains core information about the parsed file
including the `filepath`, `filesize`, (byte) `order`, and `format`.
This property is used internally by the class to populate the corresponding top level
properties of the same names noted below.
* `filepath` (`str`) – The `filepath` property can be used to get the original file path
that was specified at the time the class was initialised.
* `filesize` (`int`) – The `filesize` property can be used to get the original file size
of the file that was specified at the time the class was initialised.
* `datetime_created` (`datetime`) – The `datetime_created` property can be used to access
the date/time that the loaded JPEG file was created according to filesystem metadata.
* `datetime_modified` (`datetime`) – The `datetime_modified` property can be used to access
the date/time that the loaded JPEG file was modified according to filesystem metadata.
* `order` (`ByteOrder`) – The `order` property can be used to determine the byte order
of the JPEG file. As all JPEG files are encoded as big-endian, the property will always
report `ByteOrder.BigEndian`.
* `format` (`Format`) – The `format` property can be used to determine the file format
of the JPEG file. The property will report one of the following `Format` enumeration values:
* `Format.JPEG` for baseline formatted JPEG files;
* `Format.JFIF` for JPEG File Interchange Format (JFIF) formatted JPEG files;
* `Format.EXIF` for Extensible Image Format (EXIF) formatted JPEG files;
* `Format.CCIF` for Canon Camera Image File Format (CCIF) formatted JPEG files;
* `Format.SPIFF` for Still Picture Interchange File Format (SPIFF) formatted JPEG files.
* `encoding` (`Encoding`) – The `encoding` property can be used to determine the encoding
used for the JPEG file, which will report one of the following `Encoding` enumeration values:
* `Encoding.BaselineDCT` for baseline DCT encoded images;
* `Encoding.ProgressiveDCT` for progressive DCT encoded images.
* `width` (`int`) – The `width` property can be used to access the parsed pixel width of the image.
* `height` (`int`) – The `height` property can be used to access the parsed pixel height of the image.
* `precision` (`int`) – The `precision` property can be used to access the parsed precision of the image.
* `transform` (`ColourTransform`) – The `transform` property can be used to determine the
colour transform used for the JPEG file, which will report one of the following `ColourTransform` enumeration
values:
* `ColourTransform.Unknown` used when the colour transform cannot be determined.
* `ColourTransform.RGB` for RGB images.
* `ColourTransform.YCbCr` for YCbCr images.
* `ColourTransform.YCCK` for YCCK images.
* `ColourTransform.Greyscale` (also available as the aliased `Grayscale`) for greyscale images.
* `ColourTransform.CMYK` for CMYK images.
* `components` (`int`) – The `components` property can be used to determine the number
of colour components used for the JPEG file, reported as an integer value.
### Example of Use
To create an instance of the `JPEG` class, import the `JPEG` class from the library and
specify the absolute file path to the JPEG file you wish to open as the first argument.
If the specified file can be opened successfully, the library will return an instance of
either the `JPEG`, `JFIF`, `EXIF`, `CCIF` or `SPIFF` subclasses, depending on the file
format of the specified JPEG file; these subclasses are all subclasses of the library's
`JPEG` base class.
<!--pytest.mark.skip-->
```python
from jpegdata import JPEG, Format, Encoding, ColourTransform
filepath = "/path/to/file.jpeg"
# Initialize the library with the absolute file path of the JPEG file to load
jpeg = JPEG(filepath=filepath)
assert isinstance(jpeg, JPEG)
# Use the parsed properties of the file
assert jpeg.format is Format.EXIF
assert jpeg.encoding is Encoding.BaselineDCT
assert jpeg.precision == 8
assert jpeg.width == 600
assert jpeg.height == 400
assert jpeg.components == 3
assert jpeg.transform is ColourTransform.YCbCr
# If desired, iterate through the segments held within the file:
for segment in jpeg:
print(segment)
```
### Command Line Tool
The `jpegdata` command line tool, installed alongside the library, provides a command
line interface to print out the information parsed from the specified JPEG file.
The tool can print out the information directly to the command line either as plain text
or as a JSON-serialised payload.
To print the help information for the tool, pass the `--help` argument.
```shell
$ jpegdata ./path/to/file.jpeg
```
The above command will generate output similar to the following:
```plain
File Name: ./path/to/file.jpeg
File Path: /absolute/path/to/file.jpeg
File Size: 3890 bytes
File Created Date: 2025-08-10 17:15:13.892694
File Modified Date: 2025-08-10 17:15:07.312874
Byte Order: MSB
Format: JPEG Extensible Image File (EXIF) format
Encoding: Baseline DCT
Image Width: 3 pixels
Image Height: 3 pixels
Image Size: 3x3 pixels
Megapixels: 0.000009
Bits Per Sample: 8
Colour Components: 3
Colour Transform: YCbCr
```
To emit the parsed information as a JSON-serialised payload, pass the `--format json`
argument to the command:
```shell
$ jpegdata ./path/to/file.jpeg --format json
```
The above command will generate output similar to the following:
```json
{
"filename": "./path/to/file.jpeg",
"filepath": "/absolute/path/to/file.jpeg",
"filesize": 3890,
"filedate": {
"created": "2025-08-10 17:15:13.892694",
"modified": "2025-08-10 17:15:07.312874"
},
"byte_oder": "MSB",
"encoding": "BaselineDCT",
"precision": 8,
"width": 3,
"height": 3,
"colour": {
"components": 3,
"transform": "YCbCr"
}
}
```
To emit the verbose form of output, pass the `--verbose` argument, which will include
information about the parsed segment markers found in the file. This is included in both
the plain text and JSON-serialised output formats.
### Disclaimer
While every effort has been made to ensure that the library works reliably with JPEG
files and embedded metadata, you must ensure that all files are backed up before using
the JPEGData library with any files, especially as the library is in early development.
Furthermore, the library may not be able to read nor preserve all metadata or other data
within a JPEG file, especially if manufacturer specific, custom or other "private" data
are present. As such, it is possible that loss of data could occur if an image is loaded
and is then overwritten by saving the file back to the same file path, _when saving is
available in future versions of the library (currently the library is read-only)_.
Use of the library is entirely at your own risk and the authors bear no responsibility
for losses of any kind. By using the software you assume all such risk and liability.
THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
OR OTHER DEALINGS IN THE SOFTWARE.
### Credits & References
The JPEG file format, and the related EXIF, IPTC and XMP metadata model specifications
were researched across various sources. Please visit these valuable online resources to
learn more about the JPEG file format and related metadata model specifications and to
support these world class organisations and their products:
* JPEG File Format
* https://www.loc.gov/preservation/digital/formats/fdd/fdd000619.shtml
* https://en.wikipedia.org/wiki/JPEG (JPEG)
* https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format (JFIF)
* https://www.loc.gov/preservation/digital/formats/fdd/fdd000018.shtml (JFIF)
* https://www.loc.gov/preservation/digital/formats/fdd/fdd000147.shtml (EXIF)
* https://cran.r-project.org/web/packages/ctypesio/vignettes/parse-jpeg.html
* https://dev.exiv2.org/projects/exiv2/wiki/The_Metadata_in_JPEG_files
* EXIF Metadata Model & Fields
* https://www.cipa.jp/e/index.html
* https://www.loc.gov/preservation/digital/formats/fdd/fdd000146.shtml
* https://exiftool.org/TagNames/EXIF.html
* https://www.media.mit.edu/pia/Research/deepview/exif.html
* https://exiv2.org/tags.html
* IPTC Metadata Model & Fields
* https://www.iptc.org/std/photometadata/specification/IPTC-PhotoMetadata
* https://exiftool.org/TagNames/IPTC.html
* XMP Metadata Model & Fields
* https://www.adobe.com/products/xmp.html
* https://exiftool.org/TagNames/XMP.html
### Copyright & License Information
Copyright © 2025 Daniel Sissman; licensed under the MIT License.
Raw data
{
"_id": null,
"home_page": null,
"name": "jpegdata",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "image, metadata, jpeg, data",
"author": "Daniel Sissman",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/79/00/71c13d7c38d1b34e4dd5a360551a5e90ee7a26898b2d4af2ae17329d8387/jpegdata-0.1.3.tar.gz",
"platform": "any",
"description": "# JPEGData\n\nThe JPEGData library for Python provides a streamlined way to work with JPEG image files\noffering the ability to extract certain file metadata.\n\n### Requirements\n\nThe JPEGData library has been tested to work with Python 3.10, 3.11, 3.12 and 3.13, but\nhas not been tested, nor is its use supported with earlier versions of Python.\n\n### Installation\n\nThe library is available from the PyPI repository, so may be added easily to a project's\ndependencies via its `requirements.txt` file or similar by referencing the library's\nname, `jpegdata`, or the library may be installed directly onto your local development\nsystem using `pip install` by entering the following command:\n\n\t$ pip install jpegdata\n\n### Classes, Methods & Properties\n\nThe JPEGData library's main class is the `JPEG` class through which JPEG image files can\nbe loaded, modified via the supported actions, and saved. The library supports reading\nseveral common JPEG file formats including JFIF, EXIF, CCIF and SPIFF formatted JPEG files.\nCurrently the library does not support more recent JPEG formats and derivations such as\nJPEG XL, JPEG-2000, JPEG XR, etc.\n\nThe `JPEG` class offers the following methods:\n\n* `JPEG(filepath: str)` \u2013 The `JPEG()` class constructor expects an absolute filepath at\na minimum for the JPEG file you wish to open. Upon initialising the class with the file,\nthe library will then attempt to load and parse the file. Assuming that the file is a \nvalid JPEG file, the library will parse the file, identify any segments contained within\nthe file, and any data associated with each of the segments, and will determine several\nintrinsic properties of the JPEG image including the canvas width and height.\n\nThe `JPEG` class offers the following properties:\n\n * `info` (`Information`) \u2013 The `info` property can be used to access the `Information`\n class instance that is created when the `JPEG` class instance is created and the file is\n parsed. The `Information` class instance contains core information about the parsed file\n including the `filepath`, `filesize`, (byte) `order`, and `format`.\n \n This property is used internally by the class to populate the corresponding top level\n properties of the same names noted below.\n\n * `filepath` (`str`) \u2013 The `filepath` property can be used to get the original file path\n that was specified at the time the class was initialised.\n\n * `filesize` (`int`) \u2013 The `filesize` property can be used to get the original file size\n of the file that was specified at the time the class was initialised.\n\n * `datetime_created` (`datetime`) \u2013 The `datetime_created` property can be used to access\n the date/time that the loaded JPEG file was created according to filesystem metadata.\n\n * `datetime_modified` (`datetime`) \u2013 The `datetime_modified` property can be used to access\n the date/time that the loaded JPEG file was modified according to filesystem metadata.\n\n * `order` (`ByteOrder`) \u2013 The `order` property can be used to determine the byte order\n of the JPEG file. As all JPEG files are encoded as big-endian, the property will always\n report `ByteOrder.BigEndian`.\n\n * `format` (`Format`) \u2013 The `format` property can be used to determine the file format\n of the JPEG file. The property will report one of the following `Format` enumeration values:\n\n * `Format.JPEG` for baseline formatted JPEG files;\n * `Format.JFIF` for JPEG File Interchange Format (JFIF) formatted JPEG files;\n * `Format.EXIF` for Extensible Image Format (EXIF) formatted JPEG files;\n * `Format.CCIF` for Canon Camera Image File Format (CCIF) formatted JPEG files;\n * `Format.SPIFF` for Still Picture Interchange File Format (SPIFF) formatted JPEG files.\n\n * `encoding` (`Encoding`) \u2013 The `encoding` property can be used to determine the encoding\n used for the JPEG file, which will report one of the following `Encoding` enumeration values:\n\n * `Encoding.BaselineDCT` for baseline DCT encoded images;\n * `Encoding.ProgressiveDCT` for progressive DCT encoded images.\n\n * `width` (`int`) \u2013 The `width` property can be used to access the parsed pixel width of the image.\n\n * `height` (`int`) \u2013 The `height` property can be used to access the parsed pixel height of the image.\n \n * `precision` (`int`) \u2013 The `precision` property can be used to access the parsed precision of the image.\n\n * `transform` (`ColourTransform`) \u2013 The `transform` property can be used to determine the\n colour transform used for the JPEG file, which will report one of the following `ColourTransform` enumeration\n values:\n\n * `ColourTransform.Unknown` used when the colour transform cannot be determined.\n * `ColourTransform.RGB` for RGB images.\n * `ColourTransform.YCbCr` for YCbCr images.\n * `ColourTransform.YCCK` for YCCK images.\n * `ColourTransform.Greyscale` (also available as the aliased `Grayscale`) for greyscale images.\n * `ColourTransform.CMYK` for CMYK images.\n\n * `components` (`int`) \u2013 The `components` property can be used to determine the number\n of colour components used for the JPEG file, reported as an integer value.\n\n### Example of Use\n\nTo create an instance of the `JPEG` class, import the `JPEG` class from the library and\nspecify the absolute file path to the JPEG file you wish to open as the first argument.\nIf the specified file can be opened successfully, the library will return an instance of\neither the `JPEG`, `JFIF`, `EXIF`, `CCIF` or `SPIFF` subclasses, depending on the file\nformat of the specified JPEG file; these subclasses are all subclasses of the library's\n`JPEG` base class.\n\n<!--pytest.mark.skip-->\n\n```python\nfrom jpegdata import JPEG, Format, Encoding, ColourTransform\n\nfilepath = \"/path/to/file.jpeg\"\n\n# Initialize the library with the absolute file path of the JPEG file to load\njpeg = JPEG(filepath=filepath)\n\nassert isinstance(jpeg, JPEG)\n\n# Use the parsed properties of the file\nassert jpeg.format is Format.EXIF\nassert jpeg.encoding is Encoding.BaselineDCT\nassert jpeg.precision == 8\nassert jpeg.width == 600\nassert jpeg.height == 400\nassert jpeg.components == 3\nassert jpeg.transform is ColourTransform.YCbCr\n\n# If desired, iterate through the segments held within the file:\nfor segment in jpeg:\n print(segment)\n```\n\n### Command Line Tool\n\nThe `jpegdata` command line tool, installed alongside the library, provides a command\nline interface to print out the information parsed from the specified JPEG file.\n\nThe tool can print out the information directly to the command line either as plain text\nor as a JSON-serialised payload.\n\nTo print the help information for the tool, pass the `--help` argument.\n\n```shell\n$ jpegdata ./path/to/file.jpeg\n```\n\nThe above command will generate output similar to the following:\n\n```plain\nFile Name: ./path/to/file.jpeg\nFile Path: /absolute/path/to/file.jpeg\nFile Size: 3890 bytes\nFile Created Date: 2025-08-10 17:15:13.892694\nFile Modified Date: 2025-08-10 17:15:07.312874\nByte Order: MSB\nFormat: JPEG Extensible Image File (EXIF) format\nEncoding: Baseline DCT\nImage Width: 3 pixels\nImage Height: 3 pixels\nImage Size: 3x3 pixels\nMegapixels: 0.000009\nBits Per Sample: 8\nColour Components: 3\nColour Transform: YCbCr\n```\n\nTo emit the parsed information as a JSON-serialised payload, pass the `--format json`\nargument to the command:\n\n```shell\n$ jpegdata ./path/to/file.jpeg --format json\n```\n\nThe above command will generate output similar to the following:\n\n```json\n{\n \"filename\": \"./path/to/file.jpeg\",\n \"filepath\": \"/absolute/path/to/file.jpeg\",\n \"filesize\": 3890,\n \"filedate\": {\n \"created\": \"2025-08-10 17:15:13.892694\",\n \"modified\": \"2025-08-10 17:15:07.312874\"\n },\n \"byte_oder\": \"MSB\",\n \"encoding\": \"BaselineDCT\",\n \"precision\": 8,\n \"width\": 3,\n \"height\": 3,\n \"colour\": {\n \"components\": 3,\n \"transform\": \"YCbCr\"\n }\n}\n```\n\nTo emit the verbose form of output, pass the `--verbose` argument, which will include\ninformation about the parsed segment markers found in the file. This is included in both\nthe plain text and JSON-serialised output formats.\n\n### Disclaimer\n\nWhile every effort has been made to ensure that the library works reliably with JPEG\nfiles and embedded metadata, you must ensure that all files are backed up before using\nthe JPEGData library with any files, especially as the library is in early development.\n\nFurthermore, the library may not be able to read nor preserve all metadata or other data\nwithin a JPEG file, especially if manufacturer specific, custom or other \"private\" data\nare present. As such, it is possible that loss of data could occur if an image is loaded\nand is then overwritten by saving the file back to the same file path, _when saving is\navailable in future versions of the library (currently the library is read-only)_.\n\nUse of the library is entirely at your own risk and the authors bear no responsibility\nfor losses of any kind. By using the software you assume all such risk and liability.\n\nTHIS SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE\nOR OTHER DEALINGS IN THE SOFTWARE.\n\n### Credits & References\n\nThe JPEG file format, and the related EXIF, IPTC and XMP metadata model specifications\nwere researched across various sources. Please visit these valuable online resources to\nlearn more about the JPEG file format and related metadata model specifications and to\nsupport these world class organisations and their products:\n\n * JPEG File Format\n * https://www.loc.gov/preservation/digital/formats/fdd/fdd000619.shtml\n * https://en.wikipedia.org/wiki/JPEG (JPEG)\n * https://en.wikipedia.org/wiki/JPEG_File_Interchange_Format (JFIF)\n * https://www.loc.gov/preservation/digital/formats/fdd/fdd000018.shtml (JFIF)\n * https://www.loc.gov/preservation/digital/formats/fdd/fdd000147.shtml (EXIF)\n * https://cran.r-project.org/web/packages/ctypesio/vignettes/parse-jpeg.html\n * https://dev.exiv2.org/projects/exiv2/wiki/The_Metadata_in_JPEG_files\n\n * EXIF Metadata Model & Fields\n * https://www.cipa.jp/e/index.html\n * https://www.loc.gov/preservation/digital/formats/fdd/fdd000146.shtml\n * https://exiftool.org/TagNames/EXIF.html\n * https://www.media.mit.edu/pia/Research/deepview/exif.html\n * https://exiv2.org/tags.html\n\n * IPTC Metadata Model & Fields\n * https://www.iptc.org/std/photometadata/specification/IPTC-PhotoMetadata\n * https://exiftool.org/TagNames/IPTC.html\n\n * XMP Metadata Model & Fields\n * https://www.adobe.com/products/xmp.html\n * https://exiftool.org/TagNames/XMP.html\n\n### Copyright & License Information\n\nCopyright \u00a9 2025 Daniel Sissman; licensed under the MIT License.\n",
"bugtrack_url": null,
"license": null,
"summary": "Streamlined JPEG image metadata parsing and updating.",
"version": "0.1.3",
"project_urls": {
"changelog": "https://github.com/bluebinary/jpegdata/blob/main/CHANGELOG.md",
"documentation": "https://github.com/bluebinary/jpegdata/blob/main/README.md",
"homepage": "https://github.com/bluebinary/jpegdata",
"issues": "https://github.com/bluebinary/jpegdata/issues",
"repository": "https://github.com/bluebinary/jpegdata"
},
"split_keywords": [
"image",
" metadata",
" jpeg",
" data"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "5118d61f85b87faa7c573f4876b80c110ea0d0f254b9e0a20adfdcf4c14da3a9",
"md5": "681bf605d270cd3905933e8874ef717d",
"sha256": "d334a7fb1e7591ad5fb78f4262a9a738f6d1556c2039ebb40ac11a7fe28b218a"
},
"downloads": -1,
"filename": "jpegdata-0.1.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "681bf605d270cd3905933e8874ef717d",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 20279,
"upload_time": "2025-09-10T08:25:39",
"upload_time_iso_8601": "2025-09-10T08:25:39.486142Z",
"url": "https://files.pythonhosted.org/packages/51/18/d61f85b87faa7c573f4876b80c110ea0d0f254b9e0a20adfdcf4c14da3a9/jpegdata-0.1.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "790071c13d7c38d1b34e4dd5a360551a5e90ee7a26898b2d4af2ae17329d8387",
"md5": "fee2c42920957d31610bd2fd477451e8",
"sha256": "d9ebd90171d78948ed6759232183c7250add2fc0c2f7a786b59388452d3dbc61"
},
"downloads": -1,
"filename": "jpegdata-0.1.3.tar.gz",
"has_sig": false,
"md5_digest": "fee2c42920957d31610bd2fd477451e8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 21405,
"upload_time": "2025-09-10T08:25:40",
"upload_time_iso_8601": "2025-09-10T08:25:40.821973Z",
"url": "https://files.pythonhosted.org/packages/79/00/71c13d7c38d1b34e4dd5a360551a5e90ee7a26898b2d4af2ae17329d8387/jpegdata-0.1.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-10 08:25:40",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "bluebinary",
"github_project": "jpegdata",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "enumerific",
"specs": [
[
">=",
"1.0.7"
]
]
},
{
"name": "caselessly",
"specs": [
[
">=",
"1.0.0"
]
]
},
{
"name": "deliciousbytes",
"specs": [
[
">=",
"1.0.4"
]
]
},
{
"name": "tabulicious",
"specs": [
[
">=",
"0.5.0"
]
]
}
],
"lcname": "jpegdata"
}