Import SCORM packages and web exports from other authoring tools into
Praxity Studio course folders: course.yaml, .prax
lessons and assets/, plus a report of anything that did not carry over.
Content, questions (answer keys, feedback, attempts, pass marks) and as much of
the source's design as it records (theme, slide or page format, heroes,
columns, spacing) carry over; the same package always gives the same output.
pnpm install
node src/cli.ts path/to/course.zip --output my-course --verify--verify needs the Studio 0.3.0 CLI or later. Download
praxity-cli-0.3.0-macos-arm64.tar.gz (Apple Silicon) or
praxity-cli-0.3.0-macos-x64.tar.gz (Intel) from the
Studio 0.3.0 release,
unpack it and set PRAXITY_CLI to studio-cli/praxity.mjs:
tar -xzf praxity-cli-0.3.0-macos-arm64.tar.gz
export PRAXITY_CLI="$PWD/studio-cli/praxity.mjs"Studio publishes the CLI for macOS only, so --verify does not support
Windows yet. Importing without --verify works on any platform.
- Agents and scripts: skill/SKILL.md documents the CLI contract and how to review an import.
- Design: docs/adr/. ADR 0001 covers the pipeline and loss reporting; ADR 0002 covers how layout and theme are mapped from what the source records.
- Testing against real packages: the corpus folder is
$PRAXITY_IMPORT_CORPUS, orcorpus/local/by default, and never leaves the machine.pnpm corpusfetches the public packages listed incorpus/sources.json; private ones are listed in the folder's ownsources.local.json.pnpm benchimports everything listed, twice, and writesout/bench/scoreboard.tsv; a missing input fails it, andpnpm bench --releasealso requires the private list.pnpm corpus --lockrecords every file's SHA-256 in the folder'smanifest.json, andpnpm corpus --checkcompares against it.
Requires Node 24.18+.
From a clean, committed checkout with dependencies installed:
pnpm package --output /path/to/new/praxity-import-0.1.0
node /path/to/new/praxity-import-0.1.0/src/cli.ts --help
node /path/to/new/praxity-import-0.1.0/src/cli.ts /path/to/course.zip --output my-courseThe new directory contains runtime TypeScript, production dependencies,
licences and notices, the agent skill and its linked references, and a tiny
synthetic SCORM fixture at fixtures/smoke/scorm. It needs only Node 24.18+
to import, without a package manager or network. --verify and
--convert-media still need their external tools.
inventory.json records the committed revision, dependency versions and each
payload file's SHA-256, size and mode. It excludes itself from its hash list.
Packaging refuses dirty trees, existing outputs, unsafe references, unaudited
dependencies, binary files and machine paths. Text uses LF; launchers use mode
0755. Archive the directory under praxity-import-0.1.0/ and extract with
stripComponents: 1. The same archive supports every platform with Node 24.
Other projects read parts of the same published formats. Rise Course Text Extractor extracts Rise text to Markdown and records what it skips; course-builder imports Rise into its own course model and reports dropped content; risefix adapts Rise packages; SCORMToIMSCC and SCORM-to-PDF-Transformer extract Storyline text; and the Captivate superWrapper reads Captivate's runtime model. Praxity Import was written independently and uses no code from them. It brings Rise, Storyline, Captivate, iSpring, Lectora, Adapt, LiaScript, Xerte and static HTML packages into one deterministic import with explicit loss reporting. Commercial conversion services also exist.
Praxity Import by Ariel Harlap. Source-available under the PolyForm Perimeter License 1.0.1: free at home and at work, including paid client work. See LICENSING.md. NOTICE.md has the trademark and non-affiliation statement for the authoring tools it reads.