npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

media-thumb-store

v0.1.1

Published

Media files key-value store with pluggable thumbnail generators and storage backends.

Downloads

5

Readme

media-thumb-store

Build Status Dependency Status devDependency Status

NPM Version

Media files key-value store with on the fly thumbnail generation. Support pluggable thumbnail generators for different media types. Support pluggable storage back-ends for storing file-path and file-meta-data. Include a built in thumbnail generator based on GraphicMagic. Automatically search for media files in media directory.

Included plug-ins:

mem-backend: a storage back-end for storing data in a memory dictionary.
mongoose-backend: a storage back-end for storing data in MongoDB.

gm-thumbnailer: a thumbnailer plug-in for creating image thumbnails.
    This plug-in require GraphicMagic to be installed and on the system path.
ffmpeg-thumbnailer: a thumbnailer plug-in for creating video thumbnails.
    This plug-in require ffmpeg to be installed and on the system path.

Install

use npm:

npm install media-thumb-store

Generating thumbnails with gm-thumbnailer and ffmpeg plugins

This gm plugin require GraphicMagic to be installed, download and install GraphicsMagick or use your package manager.

sudo apt-get install graphicsmagick

This ffmpeg plugin require ffmpeg to be installed, download and install ffmpeg or use your package manager.

sudo apt-get install ffmpeg

Basic Usage

var mediaThumbStore = require('media-thumb-store');

/**
 * Create a new thumbnail generator for images
 * Use the included GraphicMagic thumbnailer.
 *
 * Thumbnail images will be cached in './' folder under
 * Two sub-folders 'normal' and 'large'
 * This two sub-folders must exist before first thumbnail is cached.
 *
 *   thumb-folder|normal|thumb1.jpg
 *               |      |...
 *               |
 *               |large|thumb1.jpg
 *                     | ...
 *
 */
var imageThumbnailer = new mediaThumbStore.gmThumbnailer({
  // Set the root path for the thumbnail folders
  thumbDir: __dirname
});

/** 
 * Test our thumbnailer function
 * If the __dirname + '/normal' folder exsits a new thumbnail will
 * be created inside it.
 * @param {requestCallback} next Call next functions.
 */
function testThumbnailer(next) {
  imageThumbnailer(__dirname + '/img/happy-cat.jpg', 'normal', function(err, path) {
    if (err) {
      console.log('  Thumbnail not created');
    } else {
      console.log('  Thumbnail (size: normal) created at:' + path);
    }
    
    next();
  });
}

/**
 * Create a new media storage
 */
var myMedia = new mediaThumbStore({
  // Set the full path of the image sent if thumbnail creation fails
  defaultIcon: __dirname + '/normal/default.jpg',
  // Set the function to use for the creation of thumbnails for
  // files with 'image' mime type.
  imageThumbnailer: imageThumbnailer
});

/** 
 * Test our media storage object
 * Scan a media folder and insert all meta-data about the files 
 * to our storage object.
 * @param {requestCallback} next Call next functions.
 */
function testStorage(next) {
  myMedia.updateFromDir(__dirname + '/img', function() {
    // Print first 100 files found, order by name
    // See find method options below.
    myMedia.find({skip: 0, limit: 100, sortBy: 'name'}, function(err, results) {
      console.log(results);

      next();
    });
  });
}

/** 
 * Test our media storage thumbnailer
 * Find the happy-cat image in the storage meta-data 
 * and make a thumbnail for it.
 * @param {requestCallback} next Call next functions.
 */
function testFindThumb(next) {
  // Create thumbnail for the first image file named 'happy-cat'
  myMedia.find({where: ['mime~=^image', 'name==happy-cat']}, function(err, results) {
    // take the id of the first file found
    var id = results[0]._id;

    myMedia.findThumbById(id, 'normal', function(err, path) {
      console.log('Created thumbnail (size: normal): ' + path);
      
      next();
    });
  });
}

Options

mediaThumbStore

Options
mimeList {Array.<String>}
    An array of supported mime types.
    Defaults: ['image/jpeg',
        'image/png',
        'video/webm',
        'video/mp4',
        'audio/mpeg']
        
imageThumbnailer {function(mediaPath, size, callback(Error, thumbPath)}
    A function that get a path to a media file and callback with
    a path to a generated/cached thumbnail image
    Used for files with image mime type.
    Media and Thumbnail paths are absolute.
    Defaults: null, use default icon image
    
audioThumbnailer {function(mediaPath, size, callback(Error, thumbPath)}
    A function that get a path to a media file and callback with
    a path to a generated/cached thumbnail image
    Used for files with audio mime type.
    Defaults: null, use default icon image
    
videoThumbnailer {function(mediaPath, size, callback(Error, thumbPath)}
    A function that get a path to a media file and callback with
    a path to a generated/cached thumbnail image
    Used for files with video mime type.
    Defaults: null, use default icon image
    
store
    A back-end store module for data storage.
    The store module should implement:
        find(options, callback(err, results))
        findById(key, callback(err, result))
        create(object, callback(err))
    Defaults: null, ( fall back to memStore )
    
defaultIcon {String}
    Path a default image file, used when thumbnailer fails
Implements:
find([options], callback(err, results))
    Get media items from the data storage.
    Options are passed to the storae backend, 
    Backend should implement:
        skip {Number}
        limit {Number}
        sortBy {String}
        where {String[]} ( * See format of where string )
    
findById(key, callback(err, result))
    Get one media item from the data storage.

findThumbById(key, size, callback(err, result))
    Get a path to cached/generated thumbnail image of a media item.

create(filePath, callback(err))
    Append a media item to the data storage.

updateFromDir(root, callback(err))
    Recurcivly append/update all media items in a root folder.
Format of where string: '{field}{operator}{value}'
implemented Operators:
    ~= Regular exprsion
    == Equal to
    <  Less then
    >  greater then

For example:
    'name~=yosi' filter results where name
    match the regular exprsion /yosi/
    
    'name==yosi' filter results where name
    is exactly 'yosi'

gmThumbnailer

Options
keyGenerator {function({String})}
    Key generator is a function that generates a unique key for the
    object path field {String}.
    Default is md5 of the objects path field.
    
thumbDir {String}
    Path to the thumbnail directory
    
thumbSizes {Object}
    The default sizes of the generated thumbnails
    Defaults to {normal: 128, large: 256}
    
thumbQuality {Number}
    The generated thumbnail quality (1 bad .. 100 best)
    Defaults to 50

ffmpegThumbnailer

Options
keyGenerator {function({String})}
    Key generator is a function that generates a unique key for the
    object path field {String}.
    Default is md5 of the objects path field.
    
thumbDir {String}
    Path to the thumbnail directory
    
thumbSizes {Object}
    The default sizes of the generated thumbnails
     Defaults to {normal: 128, large: 256}
    
thumbQuality {Number}
    The generated thumbnail quality (1 bad .. 100 best)
    Defaults to 50

memStore

Options
keyGenerator {function({String})}
    Key generator is a function that generates a unique key for the
    object path field {String}.
    Default is md5 of the objects path field.
Implements
find(options, callback(err, results))
findById(key, callback(err, result))
create(object, callback(err))
update(key, object, callback(err))
remove(key, callback(err))
removeAll(callback(err))

mongooseStore

Options
url {String}
    MongoDB database url.
    Default to 'mongodb://localhost/mediafiles'
Implements
find(options, callback(err, results))
findById(key, callback(err, result))
create(object, callback(err))
update(key, object, callback(err))
remove(key, callback(err))
removeAll(callback(err))

User plugins

Thumbnailers plugins

The thumbnailer is a function that gets a path to a media file, and A callback function(err, thumbnailPath). If successful it will call the callback function with a path to Generated thumbnail. On fail it will set the thumbnailPath To null.

Example:

/** 
 * An example thumbnailer function that always return the same thumb
 * Not very useful...
 *
 * @param {String} path The path to a media file
 * @param {String} size The size of the thumbnail ('normal', 'large')
 * @param {function({Error} err, {String} path)} callback The 
 *    callback function that will receive the thumb image file path
 */
var thumbnailer = function(path, size, callback) {
  // do nothing with image in path
  // ...
  // set err to null, and send back a static image path
  callback(err, 'my-thumb.jpg');
};

( An example thumbnail module is in lib/thumbnailers/ )

Backend storage plug-ins

A plug-in store module for data storage

The store module should implement:
    find(options, callback(err, results))
    findById(key, callback(err, result))
    create(object, callback(err))

The find function options:
    limt {Nuber} max number of results
    
    skip {Number} start at result
    
    sortBy {String} field name to sort by:
        'name' will sort result by the 'name' field
        '-name' will sort by 'name' backwords
        
    where {String[]} a list of where strings
        

( An example store module is in lib/backends/ )