Welcome to MovingImages

The automated video and image mixer for OS X and iOS. Where JSON is your recipe and image filters, images, video frames, and drawing commands are your ingredients.

MovingImages

This video was created by processing JSON command objects. The JSON command objects were generated from a ruby script and describe how to process video frames, apply filter effects, compose and save the final video.

MovingImages has various objects you can create and manipulate. These objects are sources for images and movie frames, where drawing happens, where filter chains are rendered, and video files are created and composed. Download the MovingImages scripting tool.

JSON representation

JSON objects

JSON objects, dictionaries, property lists, whatever you like to call them, that’s what MovingImages understands. Everything that happens in MovingImages is described using JSON objects.

The command JSON object is at the heart of MovingImages. There are numerous command types like draw command, add image command, and render filter command. Complex tasks are built up by creating a list of JSON command objects.

Drawing operations

Draw shapes, text, images and use the result as a source for creating new images and video frames. Images are sourced from bitmap contexts, image and video importers, or the image collection. Drawing happens in bitmap contexts, or you can draw the views and controls in a user interface.

This blog post links to the MovingImages Demo application and a few short videos that highlight the drawing features of MovingImages.

Fusion Office
CoreImage

CoreImages filters

MovingImages provides access to a comprehensive list of CoreImage filters including perspective transforms, transitions, blurs, sharpens, color adjustments and blend modes.

Like everything in MovingImages the description for creating and rendering filter chains is JSON. Filter chains are made of one or more filters. The filters are tied together in a chain by specifying the input of a subsequent filter to be the output image of an earlier filter.

Movie Editing

You create new video content using MovingImages from input movies, image files, drawing commands, and image filters. JSON commands objects are the recipe for combining these inputs and you automate video editing by writing ruby scripts to create these JSON objects.

This blog post describes the Zukini Demo application and includes two demonstration videos describing the JSON objects, the demo application, and the video output generated by the demo application.

Fusion Office
Tear drop from equations and variables

Variables and substitutions

In MovingImages numerical JSON values can be represented as equations. When JSON object commands are processed the variables are replaced with values, and the equations are evaluated using Dave DeLong’s maths parser.

MovingImages allows you to substitute strings and file paths when JSON object commands are processed.

The variables dictionary uses substitution keys and variable names as keys, and the dictionary values replace the variables in equations, or replace paths or strings.

The MovingImages platform

The OS X and iOS Framework are the core of the MovingImages platform.

The Macintosh LaunchAgent provides access to the MovingImages Framework for smig. The moving_images ruby gem is a library for creating the JSON command objects.

You can use the ruby gem to create content for later use, or you can use the Smig module methods of the gem to call the command line tool smig and post the command to the OS X Launch Agent to be processed immediately.

Tear drop from equations and variables
Documentation contents start screen shot

Documentation

The documentation is focussed on writing scripts for the Mac to automate the processing and editing of video content. The overview documentation describes how everything fits together, the JSON object commands, and related material.

The ruby documentation is a complete reference for writing automation scripts using the ‘moving_images’ ruby gem. This documentation is also useful for developers who would like to recreate the functionality provided by the ruby gem for other scripting languages.