A SCORM package looks like a special format and is not one. It is a zip holding ordinary web files, with a file called imsmanifest.xml on top that tells an LMS which page to launch and what to track. Take the manifest away and what is left is a website. That is why a course usually plays perfectly well on your own machine, and why the parts that need an LMS are the only parts that break.
The two-minute version
1Unzip it
Right-click the zip and extract it to its own folder. Do not double-click your way inside the zip and try to run the course from there: Windows will open the page without its neighbors and you will get a blank screen and the wrong idea.
2Open the right file
Which file that is depends on who published the course, and the two you will meet most often are these.
- Storyline 360: open
story.htmlat the top of the folder. It plays.index_lms.htmlnext to it is the version for the LMS, so start with story.html. - Rise 360: open
scormcontent/index.html. In the export I tested it played straight off the disk. If you get the error further down this page instead, that section fixes it. - Anything else: open
imsmanifest.xmlin a text editor and look forhref=on the resource element. That filename is what the LMS launches, so it is what you launch.
3Expect the tracking to do nothing
No LMS means no bookmarking, no completion, no score reported, and nothing remembered when you close the tab. The course still runs and the quiz still tells you whether you were right. It just tells nobody else, and starts from the beginning next time.
“Content launched outside of a supported LMS environment”
Some courses check for an LMS before they will start, and Rise is one of them. In my testing the same Rise package played when the file was opened from disk and showed that message when the folder was served from a local web server, so which way you open it matters.
If you hit the message, give the course something that looks like an LMS. Save this as player.html inside the unzipped folder, next to imsmanifest.xml:
<!doctype html>
<meta charset="utf-8">
<title>Local SCORM stand-in</title>
<style>html,body{margin:0;height:100%} iframe{border:0;width:100%;height:100%}</style>
<script>
// A SCORM API that stores nothing. Enough for a course to start.
var data = {};
window.API = { // SCORM 1.2
LMSInitialize: function () { return "true"; },
LMSFinish: function () { return "true"; },
LMSGetValue: function (k) { return data[k] || ""; },
LMSSetValue: function (k, v) { data[k] = v; return "true"; },
LMSCommit: function () { return "true"; },
LMSGetLastError: function () { return "0"; },
LMSGetErrorString: function () { return "No error"; },
LMSGetDiagnostic: function () { return ""; }
};
window.API_1484_11 = { // SCORM 2004
Initialize: function () { return "true"; },
Terminate: function () { return "true"; },
GetValue: function (k) { return data[k] || ""; },
SetValue: function (k, v) { data[k] = v; return "true"; },
Commit: function () { return "true"; },
GetLastError: function () { return "0"; },
GetErrorString: function () { return "No error"; },
GetDiagnostic: function () { return ""; }
};
</script>
<iframe src="scormdriver/indexAPI.html"></iframe>Then point the last line at whatever the manifest says to launch (scormdriver/indexAPI.html for Rise, index_lms.html for Storyline), serve the folder, and open player.html. Serving matters: browsers will not let a page opened from disk talk to a page inside its own frame, so this recipe needs a local server. One line, in the unzipped folder:
python -m http.server 8000
Then go to http://localhost:8000/player.html. The course starts, the fake LMS accepts everything it is told and remembers none of it, which is exactly what you want for a look.
When you need the tracking to work too
If the question is not “what is in this course” but “will it report properly”, a stand-in will not answer it. Put the package in SCORM Cloud, which is the reference implementation everyone tests against. Its free tier was three courses and ten resettable registrations when this was written, which is enough to prove a package works before you blame your LMS.
Before that, it is worth knowing whether the package is even valid. A surprising share of “my LMS will not take it” cases are a manifest promising files that are not in the zip.
When you do not want to run it at all
Often the real question is what is inside: how long the course is, what it weighs and why, whether the narration is captioned, what the quiz asks. Running the course to find that out is the slow way.
The Course File Inspector reads the package and reports the inventory: slides, narration runtime and word count, caption coverage, and what is eating the megabytes. Course Content Recovery goes further and takes the content back out as a storyboard, the questions with their answers, and the media named by slide, which is the tool to reach for when the source file is gone.
One caution before you open a stranger’s package
A SCORM package is a pile of HTML and JavaScript, and opening it runs that JavaScript on your machine, inside the browser’s sandbox. For a course from a vendor you are working with, that is fine. For a zip that arrived from someone you do not know, treat it the way you would treat any unknown web page: look at it in a browser profile you do not care about, and do not type credentials into anything it shows you.