Media Ninja

The Media Scormification Ninja converts your streaming video or audio file to a SCORM package, so that you can get a completion after the user watches a certain amount of the media.

  • Uncluttered options - only what you need

  • Specify a video and when it completes - simple.

Add completions to videos.

Media Ninja lets you watch a video (or listen to an audio file) then get a completion after you reach a certain amount

7-day Trial

Your first 7 days are free. Simply purchase the app using the store links, and you'll have 7 days to try the app risk free before you are charged. You can cancel any time.

How does it work?

This tool will wrap content that is hosted by streaming providers such as YouTube and Vimeo in a special player that knows how far through a user has watched. You can optionally hide the "scrubber" bar (the draggable item that lets users skip ahead or back in a video) so your learners can't skip ahead. You then simply set a condition regarding when to mark the media as completed - typically by setting a time/percentage watched. After that marker is reached, we send a SCORM completion to your LMS.

Frequently asked stuff

Why would I want to track videos with SCORM?

Let's say your learners need to watch material in order to gain a Continuing Professional Development (CPD) credit. Their industries' rules state that they need to watch at least 45 minutes of a 1 hour video in order to gain 1 point.

The tool lets you do that. You can specify a video URL, set the completion requirement to 75%, and publish it as a SCORM package. You then just drop this into your LMS and start recording the completions.

We also record how much of the video has been watched. This has two benefits - for the learner it means they can exit the activity and come back another time and have the video pick back up where they left off; and for the trainer it means you can report on exactly how much of the media an individual is actually watching or listening to.

What SCORM version do you publish to?

We package using SCORM 1.2, as it is the most widely implemented version.

What are the video sizes?

It's generally recommended to use the Responsive size, as this means the video will scale to fit its container whilst maintaining a 16:9 aspect ratio.

Media sizes are taken from the default options for each of the players' embed options. These are:

  • YouTube - Small: 560px x 315px, Large: 853px x 480px, Responsive: 100% x 56.25%
  • Vimeo - Small: 500px x 281px, Large: 960px x 540px, Responsive: 100% x 56.25%
  • SoundCloud - Small: 100% x 166px (Standard layout), Large: 100% x 450px (Visual layout), Responsive: 100% x 56.25% (Visual layout)
Which Learning Management Systems do you support?

Any SCORM 1.2 compliant LMS, such as Moodle, Janison CLS, Course Cloud, Totara, Scorm Cloud, Blackboard, or hundreds of others.

What if a learner only watches some of the video and returns later to watch the rest?

They will resume the video or sound file at the exact moment they left the package when they return -and their completion will occur when they reach the desired percentage of media to be viewed.

What about privacy? I don’t want the whole world being able to access our videos.

You need to consult the options for your video host. For instance, some Vimeo accounts can restrict which domains are able to watch the video.

Do I need to download any software to use this app?

Since it is web based, it requires no installation or any plugins

Why the Ninja?

Because it’s cool. We like ninjas.

Why only support streaming media?

BrightCove, YouTube, Vimeo and SoundCloud all work very hard to support the widest range of browsers and platforms for their content - its in their best interest. This means that your media will play in desktop, tablet and phone devices alike. We also use their standard players (not custom 'skins' or players) to ensure the maximum flexibility and compatibility. Conversely, embedding media means also embedding a range of possible players, skins, and script files to account for different devices, different browser capabilities, and so on (in most cases duplicating the media in multiple formats): it's much harder, more bug-prone, less customisable, and makes huge files which you then have to deal with.

Using streaming services is cheaper for you: It saves your servers bandwidth (data-transfer quota and costs per megabyte) from serving potentially large media files. Media is uploaded only once - but can be used in multiple courses and sites, in formats that are correct for the clients browsers or devices. If changes are made to the media, all courses and sites using that media will all automatically get the most current version of the material.

Under the hood

So you might be wondering what the innards of this thing actually are (how it works). It uses a minimal SCORM 1.2 based engine that, like most wrappers, expects the SCORM API to exist in a parent frame or window. It also has hand-coded listeners that tap the player API's that BrightCove, YouTube, Vimeo and SoundCloud expose on order to capture information about the media being played. These wrappers call SCORM commands as the media plays.

Click here for all the gory details
  1. onload:
    1. perform a scorm initialise (gets the api)
    2. read cmi.core.entry (set to ab-initio on first launch)
    3. read cmi.core.lesson_location (last position in video)
  2. on video start:
    1. set cmi.core.exit to "suspend"
    2. set cmi.core.lesson_status to "incomplete"
    3. perform a scorm commit
  3. periodically (as video is playing):
    1. set cmi.core.lesson_location to the number of seconds the video is up to. You can use this value to check how much a learner actually viewed through to.
    2. Check the required amount to be watched, and if it matches or is greater, perform a completion (see below).
  4. on pause, rebuffer, or end:
    1. Call LMS Commit to persist the changed data (e.g. seconds played)
  5. on completion:
    1. set cmi.core.exit to "" (blank string, effectively means "logout" according to the SCORM spec)
    2. set cmi.core.lesson_status to "completed"
    3. set cmi.core.score.min to "0"
    4. set cmi.core.score.max to "100"
    5. set cmi.core.score.raw to the required percentage
    6. perform a scorm commit
  6. onunload:
    1. perform a scorm commit
    2. perform a scorm finish

Effectively, this means the video is able to be resumed from the point the learner leaves, as lesson_location is being stored. It also means that the score required for completion in your LMS is the same percentage that needs to be watched.

Setting it up in a LMS

  • Make sure you are embedding this into a SCORM-compliant LMS.
  • Base your completion on the SCORE rather than a lesson_status (because the completed / passed status is buggy in a number of LMS's due to ambiguity in the SCORM specification).
  • Set the completion required score to the percentage watched that is set for the video (shown when you set a marker).


We know you love Internet Explorer, but it just isn't supported anymore. Please use a modern browser instead.