App-MaMGal

 view release on metacpan or  search on metacpan

mamgal  view on Meta::CPAN


MaMGal was inspired by imageindex(1) and as such aims for a similar featureset
but higher efficiency and better code architecture.

=over

=item *

Index and slide views, simple layouts.

=item *

Image captions extracted from comments embedded in images themselves. This way
your photo descriptions will never get lost.

=item *

Static HTML output, no need for PHP or other server-side execution support.

=item *

Designed with efficiency in mind - only reads and processes the files which
were modified since the last run.

=item *

Image creation time extracted from EXIF metadata.

=back

=head2 Supported images

For the purpose of creating icons and slides, MaMGal supports the same images
as ImageMagick and the same films as mplayer.  However it decides whether a
file is an image, film or something else, based on file extension. Please report
any file extensions that should be treated as an image or film, but are not.

=head2 Created files

In each directory mamgal creates an 'index.html' and a number of hidden files
and directories whose names start with '.mamgal-':

=over

=item .mamgal-root

an empty marker file placed in the gallery root directory

=item .mamgal-slides

a directory containing HTML files presenting one image each

=item .mamgal-medium

a directory containing images scaled to be viewable on screen when shown within the slides

=item .mamgal-thumbnails

a directory containing "iconized" versions of images

=item .mamgal-index.png

a montage image showing the contents of the given directory

=item .mamgal-style.css

a stylesheet for the HTML files in the given tree

=item .mamgal-tmp

a temporary file that might be left over from a crash

=back

=head2 Performance

MaMGal was designed with efficiency in mind, for example:

=over

=item *

loads image data or metadata lazily, only when (and if) it needs it,

=item *

only processes files when it needs to refresh or create an output file when it
is stale or missing,

=item *

runs as a single process, does not reexecute itself when recursing,

=item *

uses Perl calls and ImageMagick library to load and scale images, create and
delete files, rather than executing external shell commands to do this (mplayer
being the only exception).

=back

Here is some example data of processing 15GB worth of images (9100 files in a
tree of 528 directories), compared to imageindex(1):

=over

=item generating a gallery from scratch:

=over

=item imageindex:

3 hours, 96%CPU usage, 170K major + 227M minor pagefaults

=item mamgal:

1.5 hours, 92%CPU usage, 146K major + 102M minor pagefaults

=back

=item re-run on a freshly generated gallery:



( run in 1.147 second using v1.01-cache-2.11-cpan-8dfa8b56332 )