The project export format
What is inside a Scormbusters project export: project.json, the media folder and the JSON Schema — how courses, Scenes slides, triggers, question pools and translations are written, and how to import one back.
Last updated 5 min read
What is in the zip
project.json— the whole course.media/— every file the course keeps in Scormbusters storage.opencourse-course.schema.json— the JSON Schema forproject.json, also published at /formats/opencourse-course.schema.json.README.md— a short description of the above.
How project.json is written
The file starts with "format": "opencourse.course" and "version": 2, then course and media.
- Field names are Scormbusters' own column names, such as
passing_score,question_pool_sizeorvisible_by_default, so nothing is renamed between the product and the file. - Nesting says what belongs to what:
course.modules[].lessons[].blocks[]for block lessons;course.scenes.slides[].layers[]and.objects[],course.scenes.masters[]andcourse.scenes.variables[]for a Scenes course;course.objectives,course.localesandcourse.translationsalongside. - Array position is the order. There are no sort fields to keep consistent.
- `id` fields are references within the file: a trigger names the slide it jumps to and the layer it shows by id, a flow graph names lessons, a translation names the block it translates, a lesson lists the
objective_idsit teaches.
Media
Each file in media/ is named <8 characters>-<original name>. Wherever the course used the file — a block's url, an <img> inside a paragraph's HTML, a slide background — project.json says media/<file>. The media list at the end gives each file's size, type and SHA-256. Media embedded from elsewhere on the web stays a web address.
Question pools, triggers and the rest
- A block lesson's question pool is
question_pool_sizeon the lesson: each attempt shows every non-question block and that many of its question blocks. - A Scenes slide pool is
settings.drawon the slide:{ "group": …, "pick": … }. - Scenes objects carry their
states,triggers, animations, timeline and accessibility fields as stored; variables are listed undercourse.scenes.variablesand triggers refer to them by name. - The course's theme, settings, pass mark, certificate and completion email are fields on
course.
Importing a project export
Choose Import on the Courses page and pick the .opencourse.zip. It becomes a new draft course: every id is reassigned and every reference rewritten, so importing the same file twice gives two independent courses, and the media is uploaded to your workspace. Bringing back your own course is not a migration and is never counted.
From a library export, zip one course's folder and import that zip. Older .opencourse.json files (format version 1, block lessons only) still import too.
Editing the file by hand
project.json is plain, pretty-printed JSON, so it diffs well in version control and can be generated by a script. Rows you add need no id — one is assigned on import. On import every field is checked against its type and anything the format does not define is ignored, so a file cannot change who owns the course or who may edit it.
Part of the documentation: Deliver.
Found something here that does not match what the product does? That is a bug in the guide — see all guides or tell us from the Help Center.