The 5.7 branch of Magnolia reached End-of-Life on December 31, 2023, as specified in our End-of-life policy. This means the 5.7 branch is no longer maintained or supported. Please upgrade to the latest Magnolia release. By upgrading, you will get the latest release of Magnolia featuring significant improvements to the author and developer experience. For a successful upgrade, please consult our Magnolia 6.2 documentation. If you need help, please contact info@magnolia-cms.com.

The DAM Preview module creates static preview images of video and PDF assets. You can see the preview image in the thumbnail view and in the action bar in the Assets app. The DAM Preview module is an optional add-on. Without the module Magnolia creates previews of image assets only. All previews are generated by the Magnolia Imaging module. The DAM Preview module installs a configurable image provider which can handle common video and PDF formats.

The module uses external libraries to decode and manipulate the binaries:

  • Swinglab's PDF Renderer for PDFs.
  • JCodec for video and audio codecs and formats that use H264 encoding.
  • Xuggle for MOV, AVI and other video formats that cannot be handled by JCodec.

Installing

Maven is the easiest way to install the module. Add the following to your bundle. The parent POM of your webapp project should set the latest version of the module automatically. Should you need to use a specific module version, you can define it using the <version/> in the dependency.

<dependency>
  <groupId>info.magnolia.dam</groupId>
  <artifactId>magnolia-dam-preview</artifactId>
</dependency>

Image provider

Node nameValue

 
modules


 
dam-app


 
assets


 
subApp


 
browser


 
imageProvider


 
generators


 
avi

xuggle

 
m4v

jcodec

 
mov

xuggle 

 
mp4

jcodec

 
pdf

pdf

 
quicktime

xuggle 

 
class

info.magnolia.dam.preview.imageprovider.MultiGeneratorImageProviderDefinition 

 
imageProviderClass

info.magnolia.dam.preview.imageprovider.MultiGeneratorImageProvider

 
originalImageNodeName

jcr:content

Nodes and properties:

  • imageProvider:  See Image provider definition for more.
    • generators: Each media type is associated with the appropriate image generator configured in the Imaging module. See Image generators below for more. You can add configuration nodes for additional media types and swap between jcodec and xuggle for movie formats. jcodec works perfectly for most media types that use H264 encoding, but not for the mov or quicktime formats.
    • class
      $webResourceManager.requireResource("info.magnolia.sys.confluence.artifact-info-plugin:javadoc-resource-macro-resources") MultiGeneratorImageProviderDefinition
      adds support for multiple generators.
    • imageProviderClass:
      $webResourceManager.requireResource("info.magnolia.sys.confluence.artifact-info-plugin:javadoc-resource-macro-resources") MultiGeneratorImageProvider
        provides portrait or thumbnail images for objects of MIME type image/*. It relies on the Imaging module to generate and store the previews.
    • originalImageNodeName: Name of the JCR node where the original source image is stored.

Image generators

The module installs two image generators for each library; one for portrait and one for the thumbnail images.

These are configured in the Imaging module at /modules/imaging/config/generators

Node nameValue

 
modules


 
imaging


 
config


 
generators


 
large


 
portrait


 
thumbnail


 
stk


 
portrait-pdf


 
operations


 
load


 
class

info.magnolia.dam.preview.ViaPdfRenderer

 
extends

../portrait 

 
thumbnail-pdf


 
portrait-zuggle


 
thumbnail-zuggle


 
operations


 
load


 
class

info.magnolia.dam.preview.ViaXuggle 

 
extends

../thumbnail 

 
portrait-jcodec


 
thumbnail-jcodec


Nodes and properties:

  • operations:
    • load: There is one load ImageOperation class for each provider that loads both the thumbnail and portrait images.
      • class: The classes all extend
        $webResourceManager.requireResource("info.magnolia.sys.confluence.artifact-info-plugin:javadoc-resource-macro-resources") FromBinaryNode
        image operation class.
        • $webResourceManager.requireResource("info.magnolia.sys.confluence.artifact-info-plugin:javadoc-resource-macro-resources") ViaPdfRenderer
          :  Draws the first page of the PDF to an image, gets the width and height for the doc at the default zoom, and generates the image.
        • $webResourceManager.requireResource("info.magnolia.sys.confluence.artifact-info-plugin:javadoc-resource-macro-resources") ViaJCodec
          : Calls InputStreamSeekableChannel to grab the first frame or second of the video and generates the image. (warning) This implementation is not thread safe. It is a simple buffer for forward reading. Writing or setting the position back is not supported or possible.
        • $webResourceManager.requireResource("info.magnolia.sys.confluence.artifact-info-plugin:javadoc-resource-macro-resources") ViaXuggle
          : Calls XuggleCaptureFrames to extract the first frame or second of the video and generates the image.

Memory limitations

  • Each of the codecs uses 512K of memory buffer per video to generate frames from video files. Xuggle uses a temp file in addition to this.
  • The xuggle-xuggler-5.x jar is approximately 66MB (about 99% of the size of the bundle).