Skip to main content

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 for project.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_size or visible_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[] and course.scenes.variables[] for a Scenes course; course.objectives, course.locales and course.translations alongside.
  • 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_ids it 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_size on the lesson: each attempt shows every non-question block and that many of its question blocks.
  • A Scenes slide pool is settings.draw on the slide: { "group": …, "pick": … }.
  • Scenes objects carry their states, triggers, animations, timeline and accessibility fields as stored; variables are listed under course.scenes.variables and 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.