Project Proposal: Asset MetaData Handling

The goal of this project is to build packages to handle meta data for assets. The meta data can be used to categorize and handle large media collections using an improved Media Module. It also can also be used to enrich the rendering of media in the frontend.

Goals of this project

Building a meta data management for assets using the CR offers a lot of possibilities. An initially provided schema of properties could be easily extended and adjusted. Meta data would also benefit of content dimensions and would be translatable. The to be built asset meta data management packages will be optional and not needed for basic asset management with neos.

The project includes

  • Providing a meta data storage, based on the CR in a well defined structure (following the IPTC standard)
  • Building an interface to manage this meta data which extends the Media Module
  • Automatic extraction of asset meta data when they are added to the asset repository or by using cli commands

Corresponding epic for this proposal: https://jira.neos.io/browse/NEOS-1645
Further thoughts and investigation on this topic by @dfeyer: http://pad.ttree.ch/p/qKkUAJo6qP
Description of a first draft: RFC: Adding additional properties to media assets

1 Like

I spent quite some time working on this project and finally uploaded the packages to the Neos github organization. Time to present the current status. The packages are for sure not feature complete, but the features which are already there are quite stable.

The meta data management currently consists of these three packages:

Neos.MetaData

  • Defines DTOs for metadata standards, like EXIF, IPTC or XMP
  • Provides a manager class to handle updated meta data
  • Already maps the DTOs to title / caption of the asset table, also the tags are mapped. Mappings can be configured using eel.

https://packagist.org/packages/neos/metadata

Neos.MetaData.Extractor

  • Provides ExtractorAdapters to 3rd party packages and converts the result to the according DTOs
  • The data can be extracted upon upload or triggered by a flow command

https://packagist.org/packages/neos/metadata-extractor

Neos.MetaData.ContentRepositoryAdapter

  • Saves the meta data into CR nodes
  • Provides FlowQueryOperations to handle meta data

Assets can be queried like normal nodes by their meta data

assets = ${q(assets).find('[instanceof Neos.MetaData:Image [authorByline*="Daniel Lienert"]')}

Or loaded using the given asset reference

metaData = ${q(node).metaData('image')}

https://packagist.org/packages/neos/metadata-contentrepositoryadapter

1 Like