Browse files

Initial code commit

  • Loading branch information...
1 parent 20d805f commit 9cf9f879e55b1b8cb90246e21c23f68e2d5d720e Doug Anarino committed Oct 14, 2014
Showing 801 changed files with 78,803 additions and 3 deletions.
@@ -0,0 +1,3 @@
+ "directory": "app/bower_components"
@@ -0,0 +1,21 @@
+# EditorConfig helps developers define and maintain consistent
+# coding styles between different editors and IDEs
+root = true
+# Change these settings to your own preference
+indent_style = tab
+indent_size = 1
+# We recommend you to keep these unchanged
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+trim_trailing_whitespace = false
@@ -0,0 +1 @@
+* text=auto
@@ -0,0 +1,10 @@
@@ -0,0 +1,68 @@
+/*global module:false*/
+module.exports = function(grunt) {
+ 'use strict';
+ grunt.initConfig({
+ pkg: grunt.file.readJSON('package.json'),
+ concat: {
+ options: {
+ banner: '/*! <%= %> - v<%= pkg.version %> - '+
+ '<%="yyyy-mm-dd") %>\n'+
+ '<%= pkg.homepage ? "* " + pkg.homepage + "\\n" : "" %>' +
+ '* Copyright (c) <%="yyyy") %> <%= %>;' +
+ ' Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */\n',
+ footer: '\n'
+ },
+ moviemasher: {
+ src: ['src/*.js'],
+ dest: 'dist/<%= %>.js'
+ }
+ },
+ copy: {
+ moviemasher:{
+ src: '<%= uglify.moviemasher.dest %>',
+ dest: 'app/components/<%= %>.min.js'
+ }
+ },
+ jshint: {
+ options: {
+ "-W086": true, /* allow fall through in switches */
+ curly: false,
+ eqeqeq: true,
+ immed: true,
+ latedef: true,
+ newcap: true,
+ noarg: true,
+ sub: true,
+ undef: true,
+ unused: true,
+ boss: false,
+ eqnull: true,
+ evil: true,
+ browser: true,
+ devel: true,
+ globalstrict: true,
+ },
+ gruntfile: {
+ src: 'Gruntfile.js'
+ },
+ moviemasher: {
+ src: '<%= concat.moviemasher.dest %>'
+ },
+ app: {
+ src: 'app/app.js'
+ }
+ },
+ uglify: {
+ options: {},
+ moviemasher: {
+ src: '<%= concat.moviemasher.dest %>',
+ dest: 'dist/<%= %>.min.js'
+ }
+ }
+ });
+ grunt.loadNpmTasks('grunt-contrib-concat');
+ grunt.loadNpmTasks('grunt-contrib-copy');
+ grunt.loadNpmTasks('grunt-contrib-jshint');
+ grunt.loadNpmTasks('grunt-contrib-uglify');
+ grunt.registerTask('default', ['concat', 'jshint', 'uglify', 'copy']);
@@ -1,4 +1,70 @@
+[![Image]( "")](
+**[moviemasher.js]( "stands below angular-moviemasher, providing audiovisual playback handling and edit support in a web browser") | angular-moviemasher | [moviemasher.rb]( "sits behind angular-moviemasher, providing processor intensive video transcoding services through a simple API")**
+*Example deployment of moviemasher.js and moviemasher.rb utilizing AngularJS, Bootstrap and PHP*
+Use angular-moviemasher to integrate audio/video editing features into your existing web site or as a starting point for further development. It builds upon both the moviemasher.js and moviemasher.rb projects, as well as the popular PHP middleware layer and AngularJS+Bootstrap for the UI (only Bootstrap's CSS is used).
+- **empower** your site visitors to edit high quality video and audio
+- **integrate** with your existing authentication and storage mechanisms
+- **customize** the user interface, workflow and available media
+![Image]( "User Interfacee")
+The project includes an AngularJS module that manifests a time-based video editing interface, as well as a set of server-side PHP scripts it interacts with. Both the client and server sides are effectively abstractions, sheltering you from the complexity of the underlying moviemasher.js and moviemasher.rb projects respectively.
+The client module wraps around a player object instanced from moviemasher.js, which provides the preview and maintains undo/redo history. The module adds familiar play/pause, volume and associated controls to the player as well as constructing a media browser, timeline and inspector panel. Files from the user's machine can be dropped into the media browser to initiate uploading and preprocessing, and there is a render button that will initiate encoding of the mash into true video format.
+The PHP scripts wrap around and monitor the API provided by moviemasher.rb, which handles processor intensive transcode operations like preprocessing of uploads and rendering of mashes. The scripts add basic content management functionality, first authenticating users then storing and retrieving their data.
+### Amazon Web Services Integration
+There are optional PHP configuration settings that support two specfic AWS offerings: S3 for media storage and SQS for job queueing. If set to use an S3 bucket then users will securely upload files directly there without stressing your web server - each request is signed with your key so the bucket can remain read-only to the public. If set to use an SQS queue then jobs are placed in them instead of written to the local queue directory. Callbacks are also added to the job description so job progress can be monitored.
+Additionally, the Movie Masher AMI is available in Marketplace and includes all three projects preconfigured to run together as a standalone deployment for testing and building upon. Launching it from their console is by far the simplest way to see the whole system in action - no coding or set up required. It can also be launched with user data in a headless mode with only moviemasher.rb configured to process jobs found in an SQS queue. This allows the AMI to be used in a pooled cluster that can automatically scale up and down depending on the number of jobs pending in the SQS queue.
+### How to Install on Your Web Host
+It's important to remember this project is just an *example* deployment and not intended to be a fully functional user-driven site out of the box. For instance, by default it uses HTTP authentication that accepts any username and password combination - hardly a reccommended mechanism! It also stores all data locally in JSON files instead of using a database or other mechanism.
+1. edit the config/moviemasher.ini file and place outside your web root directory
+2. add its parent directory to PHP's include_path configuration option somehow or edit app/php/include/authutils.php to specify its full path
+3. if `file` option is 's3' then create the s3 bucket
+4. or if `file` option is 'local' then change the permissions of the directory specified in the `user_media_directory` option such that the web server can work with it
+5. if `client` option is 'sqs' then create the sqs queue, and set `sqs_queue_url` option in moviemasher.rb configuration
+6. or if `client` option is 'local' then set `queue_directory` in moviemasher.rb and change its permissions so the web server can work with it
+7. change the permissions of the directories specified in `temporary_directory` and `user_data_directory` such that the web server process can work with them
+8. install the app directory somewhere under web root and load index.html in a web browser
+### Further Customization
+- change the interface by editing app.css and HTML fragments in the views directory
+- add custom fonts and a font.json file for each describing the `font` module to the module directory
+- override authentication mechanisms in app/php/include/authutils.php
+- override data storage mechanisms in app/php/include/datautils.php
+- create your own `theme`, `effect`, `transition`, `scaler` or `merger` modules and add them to the module directory with a corresponding .json file describing each one
+### Included Requirements
+- angular
+- angular-bootstrap-colorpicker
+- angular-file-upload
+- angular-resource
+- bootstrap
+- Font.js
+- moviemasher.js
+### Developer Steps
+1. install git, npm, bower and grunt
+2. npm install
+3. bower install
+4. grunt
+##### Known issues in Version 1.0.01
+- timeline allows clips to be positioned atop one another
+- uploads can only be dragged into browser panel
+- freeze frame not yet supported
+- cut/copy/paste not yet supported
-Example deployment of moviemasher.js utilizing AngularJS
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.

0 comments on commit 9cf9f87

Please sign in to comment.