[{"data":1,"prerenderedAt":813},["ShallowReactive",2],{"footer-categories":3,"app-search-categories":227,"category-converters-migration":237,"mdc-tjn05r-key":770},[4,30,55,80,105,130,155,180,205],{"id":5,"title":6,"extension":7,"faq":8,"icon":21,"intro":22,"meta":23,"name":24,"order":25,"slug":26,"stem":27,"tagline":28,"__hash__":29},"categories\u002Fcategories\u002Fauthoring-tools.yml","SCORM authoring tools and course frameworks","yml",[9,12,15,18],{"q":10,"a":11},"Which authoring tools publish cmi5?","Far fewer than claim to. cmi5 needs the full AU lifecycle — launch, session identifier, moveOn rules — not just an xAPI endpoint. The standards matrix on each listing shows what we could verify and where the claim came from; the cmi5 hub page lists the tools together.\n",{"q":13,"a":14},"Do I need a paid authoring tool at all?","Not necessarily. If your courses are text, images and simple assessment, an open-source framework or a markdown-to-SCORM converter produces a perfectly conformant package. Paid suites earn their money on complex interactions, branching simulation, review workflows and support.\n",{"q":16,"a":17},"What is the difference between SCORM 1.2 and 2004 output?","1.2 is simpler, universally supported, and limited: one completion status, a coarse data model. 2004 adds sequencing and navigation, a separate success\u002Fcompletion distinction, and richer objectives — at the cost of LMSs implementing it inconsistently. Publish 1.2 unless something specific requires 2004.\n",{"q":19,"a":20},"Can I move a course between authoring tools?","Rarely without rework. Published packages are portable; source projects generally are not. That lock-in is the strongest argument for the code-first frameworks in this category, where the source is plain text you own.\n","i-lucide-pen-tool","The authoring tool decides what standard your course speaks, long before anyone uploads it. That makes\n\"which standards does it publish?\" the first question worth asking, and the one vendor comparison pages\nanswer least clearly — plenty of tools advertise xAPI support that turns out to mean a statement endpoint\nrather than a conformant launch.\n\nThree quite different things live in this category. **GUI authoring tools** are the familiar commercial\nsuites: you assemble slides, interactions and quizzes, then publish a package. **Code-first frameworks**\nhand you a build pipeline instead, which is the right shape when courses are versioned in git and reviewed\nlike software. **Markdown and document converters** sit between the two, turning writing into a package\nwith the least ceremony.\n\nTwo practical notes. Publishing SCORM 1.2 remains the safest default for reaching old LMSs, and most tools\nstill offer it alongside 2004 — check which edition. And accessibility varies enormously between tools that\nclaim WCAG conformance; if that matters to your client, test the published output rather than trusting the\nbrochure.\n",{},"Authoring tools & course frameworks","1","authoring-tools","categories\u002Fauthoring-tools","Where the course gets made — and where its SCORM output is decided.","CkWCyRM7Yrc2GVdbc65rAQjKCeNcgRzCqKcYYXPQVQk",{"id":31,"title":32,"extension":7,"faq":33,"icon":46,"intro":47,"meta":48,"name":49,"order":50,"slug":51,"stem":52,"tagline":53,"__hash__":54},"categories\u002Fcategories\u002Fconverters-migration.yml","SCORM converters and migration tools",[34,37,40,43],{"q":35,"a":36},"How do I convert PowerPoint to SCORM?","Either with a self-serve converter that wraps the exported slides in a player and manifest, or by rebuilding the deck in an authoring tool. The first is minutes and cheap; the second gives you real interactions, narration and accessibility. Both appear in this directory.\n",{"q":38,"a":39},"Does converting a deck preserve animations and narration?","It depends entirely on the export path. Tools that go through PDF or images lose both. Tools that drive PowerPoint itself can keep timings and audio. Check the listing, and test with your most complicated slide rather than your simplest.\n",{"q":41,"a":42},"Can I convert an existing SCORM package to xAPI?","Partly. Wrappers exist that intercept SCORM API calls and re-emit them as xAPI statements, which preserves completion and score. What they cannot do is give you the richer verbs that make xAPI worth having — that needs authoring for xAPI in the first place.\n",{"q":44,"a":45},"Is SCORM 1.2 to 2004 conversion safe?","Structurally, usually. Behaviourally, test it. 2004's stricter data model rejects values 1.2 tolerated, and sequencing defaults can change how a multi-SCO course navigates.\n","i-lucide-repeat","Most SCORM work does not start from a blank canvas. It starts with a PowerPoint deck that has been through\nfour rounds of review, a folder of MP4s, an H5P activity, or a course built for a platform the client has\nsince left. The tools here move that content across the gap.\n\nThey divide by what goes in. **Document and deck converters** wrap slides into a package, usually adding a\nplayer shell, navigation and a completion rule. **Video and media wrappers** do the same for a single asset,\nwhere the only real question is what counts as \"complete\". **Format bridges** move between the standards\nthemselves — SCORM to xAPI, SCORM 1.2 to 2004, H5P to SCORM — and are the fiddliest, because the two ends\ndisagree about what a result means.\n\nThe honest caveat for the whole category: a converter can guarantee a conformant package, but it cannot\ninvent instructional design. A converted deck is a deck in an LMS. That is often exactly what a compliance\nmodule needs, and rarely what a flagship course needs — worth being clear about before the budget is set.\n",{},"Converters & migration","2","converters-migration","categories\u002Fconverters-migration","Turning what you already have — decks, video, H5P, old packages — into something an LMS accepts.","l5wpzElL1rBxqlsmtpMVsuvZRxfSFas4hwwMc2CXT5o",{"id":56,"title":57,"extension":7,"faq":58,"icon":71,"intro":72,"meta":73,"name":74,"order":75,"slug":76,"stem":77,"tagline":78,"__hash__":79},"categories\u002Fcategories\u002Fplayers-runtimes-debuggers.yml","SCORM players, runtimes and debuggers",[59,62,65,68],{"q":60,"a":61},"What is the difference between a SCORM player and a SCORM runtime?","A runtime is a library that implements the SCORM API surface a course calls; a player is a whole application that loads a package, hosts it in an iframe and provides that runtime. Every player contains a runtime, but you can embed a runtime without a player.\n",{"q":63,"a":64},"Do I need a full LMS just to check a package works?","No. An in-browser debugger will unzip the package locally, serve it, and show you every API call it makes. That catches the majority of packaging faults — missing manifest entries, wrong SCORM version, completion never being set — in a minute rather than a deployment cycle.\n",{"q":66,"a":67},"Why does my course work in one player but not in an LMS?","Usually one of three things: the LMS enforces the data-model constraints the player relaxes (string lengths, vocabularies, read-only elements), the LMS restricts cross-origin access to the API object, or the course relies on a sequencing behaviour the LMS implements differently. Tools with LMS quirk profiles exist specifically to reproduce these differences.\n",{"q":69,"a":70},"Which JavaScript runtime should I embed in a new project?","Look for one that supports both SCORM 1.2 and 2004, is still receiving commits, and has an explicit persistence interface so you can decide where learner state goes. The listings here show the standards matrix and the last commit date for exactly that comparison.\n","i-lucide-play-circle","A SCORM package is inert until something gives it an API to talk to. That something is a runtime: the\nJavaScript object a course looks for on `window.API` (SCORM 1.2) or `window.API_1484_11` (SCORM 2004),\nwhich answers `LMSInitialize`, `GetValue`, `SetValue` and `Commit` and persists the data model somewhere.\n\nThe tools here fall into three groups that are easy to confuse. **Runtimes and API wrappers** are libraries\nyou embed — either in a course, to talk to whatever LMS it lands in, or in your own application, to play the\nrole of the LMS. **Players** are complete applications that unzip a package, serve it, and drive it end to\nend. **Debuggers** are players with the lid off: they show the API call transcript, the current CMI data\nmodel, suspend data, sequencing decisions and the moment something returns error 101.\n\nIf you are testing whether a package works before it reaches a client's LMS, start with a debugger. If you\nare building a product that must host SCORM content, start with a runtime and read its persistence adapter\ncarefully — that is where most integrations go wrong.\n",{},"Players, runtimes & debuggers","3","players-runtimes-debuggers","categories\u002Fplayers-runtimes-debuggers","Run a SCORM package outside an LMS — and watch what it actually does.","hcDF7H9nETO_B5A3g2eWnh5kzICgufiyMse4cjh7gHk",{"id":81,"title":82,"extension":7,"faq":83,"icon":96,"intro":97,"meta":98,"name":99,"order":100,"slug":101,"stem":102,"tagline":103,"__hash__":104},"categories\u002Fcategories\u002Ftesting-validation-conformance.yml","SCORM testing, validation and conformance tools",[84,87,90,93],{"q":85,"a":86},"How do I test a SCORM package without an LMS?","Use an in-browser debugger or a local test harness: both provide the SCORM API, record every call, and show you the resulting data model. For automated checks, a harness that can be scripted lets you assert on completion and score in CI.\n",{"q":88,"a":89},"Is there an official SCORM conformance test?","Yes — ADL publishes conformance test suites for SCORM 1.2 and SCORM 2004, and a separate suite for xAPI. They are the reference for whether an implementation is conformant. They are exacting and slow, which is why lighter validators exist for day-to-day work.\n",{"q":91,"a":92},"What should be in a SCORM QA checklist?","At minimum: the package imports cleanly, the correct SCORM version is declared, initialise and terminate are called, completion and success statuses are set as intended, score is reported in the right range, suspend data survives a resume, and the package behaves when the LMS returns an error. Testing against more than one LMS catches the rest.\n",{"q":94,"a":95},"Why does the same package pass one validator and fail another?","Validators differ in strictness and in which optional parts of the specification they enforce. A package can be schema-valid and still break in an LMS that applies stricter data-model rules — which is why manifest validation and runtime testing are two different jobs.\n","i-lucide-check-check","Most SCORM failures are found late, by the wrong person, in production. The course was signed off, uploaded\nto the client's LMS, and then learners' completions did not record — and now the problem is a support ticket\nrather than a build step.\n\nThe tools in this category move that discovery earlier. **Manifest validators** check `imsmanifest.xml`\nagainst the schema and the common packaging mistakes (missing resources, wrong `scormType`, broken hrefs,\nidentifiers that collide). **Test harnesses** drive a package programmatically and assert on what it sent —\nuseful in CI, where a regression in a course template can otherwise ship silently. **Conformance test\nsuites**, notably ADL's, are the formal article: they exercise the full data model and sequencing behaviour\na conformant implementation must support. **Test packages** are the inverse — known-good and known-bad\ncontent you fire at an LMS to find out what *it* actually implements.\n\nA note on the word \"certified\": conformance certification is granted by the bodies that own the\nspecifications, not by tools and not by us. Where a product appears in an official registry we link to it\nand mark the fact `registry-verified`; everything else is a vendor's own claim or our own check.\n",{},"Testing, validation & conformance","4","testing-validation-conformance","categories\u002Ftesting-validation-conformance","Prove a package is correct before a client's LMS proves it isn't.","NiGuliqtBVM9lTcU49a0WOVt0jMaZ2d1QAI3sJyZhdY",{"id":106,"title":107,"extension":7,"faq":108,"icon":121,"intro":122,"meta":123,"name":124,"order":125,"slug":126,"stem":127,"tagline":128,"__hash__":129},"categories\u002Fcategories\u002Fpackagers-sdks-libraries.yml","SCORM packagers, SDKs and libraries for developers",[109,112,115,118],{"q":110,"a":111},"Which JavaScript SCORM library should I use?","Look for one supporting SCORM 1.2 and 2004, still receiving commits, with an explicit persistence interface. The listings show licence, stars and last commit so you can judge maintenance rather than guess. Several long-abandoned wrappers still rank well in search — the badges here say plainly which.\n",{"q":113,"a":114},"Do I need a library, or can I call the SCORM API directly?","You can call it directly; it is not a large API. What libraries buy you is the tedious part — finding the API object across nested frames, handling initialisation order, normalising the differences between 1.2 and 2004, and coping with LMSs that return errors in creative ways.\n",{"q":116,"a":117},"What is the difference between a packager and an authoring tool?","A packager takes content you have already built and wraps it conformantly. An authoring tool creates the content. If you have a web app and need it to run in an LMS, you want a packager.\n",{"q":119,"a":120},"Are these production-ready?","Some are used in thousands of courses; some are a weekend project with three stars. The maintenance badge and the metrics panel on each listing exist precisely so you can tell which is which.\n","i-lucide-package","This is the developer end of the directory, and the part no other directory covers — general software\nindexes exclude libraries and CLIs, and e-learning listings only track products with a pricing page.\n\n**Packagers and CLIs** take a built web app and emit a conformant zip: manifest, resource declarations,\nthe right SCORM version, sensible identifiers. Several are bundler plugins, so a course built with Vite or\nwebpack produces a package as a build artefact rather than a manual step. **API wrappers** live on the\ncontent side and give your application a sane interface over the raw SCORM API — initialise, get, set,\ncommit, terminate — while handling the LMS quirks that make raw integration miserable. **Manifest tooling**\nparses and validates `imsmanifest.xml`, which is where a surprising share of import failures originate.\n**Framework integrations** wrap all of that for React, Vue, Angular, Svelte, Unity and Godot.\n\nWhat to look at before adopting one: does it support both SCORM 1.2 and 2004, does it expose a persistence\nboundary you can control, and is it still maintained? Every listing here carries the licence, the last\ncommit date and an honest maintenance badge, because a wrapper abandoned in 2019 can still be the right\nanswer — but you should know that going in.\n",{},"Packagers, SDKs & libraries","5","packagers-sdks-libraries","categories\u002Fpackagers-sdks-libraries","The pieces you build with when the course is an application, not a slide deck.","3KvCkFwRNYzh9-fZmEfQdmLiSCT3pp7bsS3eQcBnG6c",{"id":131,"title":132,"extension":7,"faq":133,"icon":146,"intro":147,"meta":148,"name":149,"order":150,"slug":151,"stem":152,"tagline":153,"__hash__":154},"categories\u002Fcategories\u002Flms-and-plugins.yml","Learning management systems with SCORM support",[134,137,140,143],{"q":135,"a":136},"Which LMSs support cmi5?","Genuine cmi5 support is still uncommon, and considerably rarer than the marketing suggests. The cmi5 standards page groups every listing we could verify, and flags which claims are vendor-stated rather than checked.\n",{"q":138,"a":139},"Why does my package work in one LMS and not another?","Usually strictness. A permissive LMS accepts data-model values the specification forbids; a stricter one rejects them, and the course silently stops recording. Sequencing and cross-origin access to the API object are the other two common causes.\n",{"q":141,"a":142},"Is an open-source LMS good enough for SCORM?","Often better than the alternatives, because the implementation is inspectable and its bugs are public. Moodle's SCORM module in particular has been exercised by more courses than most commercial engines.\n",{"q":144,"a":145},"Do I need an LMS at all to deliver SCORM?","No. Distribution and licensing platforms in this directory host the content and report back without a full LMS, which suits publishers selling courses into clients' own systems.\n","i-lucide-graduation-cap","Every SCORM package eventually meets an LMS, and the LMS decides whether the standard is honoured or\nmerely claimed. That gap is why this category exists in a tools directory: not to rank platforms on\nfeatures, but to record what each one actually does with a package.\n\nIncluded here are **open-source platforms** whose SCORM implementation you can read, **commercial platforms**\nwhose support you have to take on trust or test, and **plugins** that add or replace SCORM handling in a\nplatform that ships with something weaker. The plugins matter more than they look: a good deal of real-world\nSCORM behaviour on any given installation comes from a module rather than core.\n\nThe facts worth comparing are narrow and specific. Which SCORM version, and which 2004 edition. Whether\nsequencing is implemented or quietly ignored. How suspend data is stored and how much of it survives.\nWhether xAPI and cmi5 are genuinely supported or approximated. Each listing carries these with provenance,\nbecause vendor marketing and vendor documentation frequently disagree with each other.\n",{},"LMS & LMS plugins","6","lms-and-plugins","categories\u002Flms-and-plugins","Where the package finally has to run — and how well each platform actually implements the spec.","xW4Pab08lObiEGf6iWf0S-QGh8jj2jJWV3vWoKcRrFU",{"id":156,"title":157,"extension":7,"faq":158,"icon":171,"intro":172,"meta":173,"name":174,"order":175,"slug":176,"stem":177,"tagline":178,"__hash__":179},"categories\u002Fcategories\u002Fxapi-cmi5.yml","xAPI learning record stores and cmi5 tooling",[159,162,165,168],{"q":160,"a":161},"What is the difference between xAPI and cmi5?","xAPI is a statement format and a store API — deliberately unopinionated. cmi5 is a profile of xAPI that specifies how a course is launched, how a session is identified, and how completion is determined. If you need SCORM-like accountability with xAPI's reach, you need cmi5, not xAPI alone.\n",{"q":163,"a":164},"Do I need an LRS?","Only if you are using xAPI or cmi5. SCORM reports to the LMS and needs nothing extra. Once statements leave the LMS, something has to store them, and that something is an LRS.\n",{"q":166,"a":167},"Is xAPI replacing SCORM?","Not in practice, and not soon. SCORM remains what procurement asks for and what every LMS imports. xAPI is additive — it captures what SCORM cannot — and most real deployments run both.\n",{"q":169,"a":170},"How do I know an LRS is conformant?","ADL publishes a conformance test suite and maintains a list of adopters. We link that registry rather than certifying anything ourselves; listings backed by it carry the Verified chip.\n","i-lucide-share-2","SCORM records what happened inside a course, in a course's own terms, to the LMS that launched it. xAPI\nbreaks all three assumptions: any activity, anywhere, reported to any record store. cmi5 then puts the\ndiscipline back — it is an xAPI profile that restores the parts of SCORM an administrator actually needs,\na defined launch, a session, and rules for what counts as completion.\n\nThis category holds the infrastructure. **Learning record stores** receive, validate and serve statements;\nthey are ordinary databases with a specific API and specific conformance expectations, and several good\nopen-source ones exist. **Client libraries** send statements from courses and applications. **cmi5 tooling**\ncovers players, assignable-unit runtimes and the conformance test suite that decides whether an\nimplementation is real.\n\nA caution worth stating plainly, because it is the fact this directory most often has to correct: an xAPI\nendpoint is not cmi5 support. Receiving statements is the easy half. Honouring the AU lifecycle, the\nsession identifier and the moveOn rules is what makes a completion mean something — and it is what we\ncheck before recording cmi5 as supported.\n",{},"xAPI & cmi5","7","xapi-cmi5","categories\u002Fxapi-cmi5","The standards after SCORM — and the tools that actually implement them.","Z08AoeVOVPwRcuEk4GxjtdqYuXVacfkkSSQMb14CEP4",{"id":181,"title":182,"extension":7,"faq":183,"icon":196,"intro":197,"meta":198,"name":199,"order":200,"slug":201,"stem":202,"tagline":203,"__hash__":204},"categories\u002Fcategories\u002Fdistribution-licensing.yml","SCORM distribution, licensing and hosting platforms",[184,187,190,193],{"q":185,"a":186},"What is SCORM dispatch?","A small SCORM package that acts as a pointer rather than the content. The LMS imports and launches it normally; the package fetches the real course from a hosting platform and relays tracking back. The client's LMS sees an ordinary course; you keep the file.\n",{"q":188,"a":189},"Why not just send the client a zip?","You can, and for a one-off it is fine. What you lose is control of updates, any visibility of usage, and any ability to time-limit access — which is precisely what a licensing arrangement needs.\n",{"q":191,"a":192},"Does dispatch work in every LMS?","Not quite. Some LMSs sandbox course content in ways that break the proxy's connection back to its origin, and some corporate networks block the content domain. Any serious platform in this category publishes a tested-LMS list; ask for it before committing.\n",{"q":194,"a":195},"What happens when a licence expires?","Platform-dependent, and worth testing. The good implementations fail politely with a message; weaker ones leave a blank frame and an LMS recording an incomplete attempt.\n","i-lucide-send","If you sell courses, you have the publisher's problem: the client wants the content inside their own LMS,\nand the moment you hand over a zip you have handed over the asset. Every update becomes a redistribution\nexercise, and you cannot tell how many people took the course or when the licence should end.\n\nThe tools here solve it the same way. The client installs a small proxy package — a few kilobytes, a\nmanifest and a launcher — which streams the real content from the platform at run time and reports tracking\nback. The course never leaves your control, updates take effect without anyone re-importing anything, and\nlicences can carry seat counts, expiry dates and domain locks.\n\nThe vocabulary varies: dispatch, distribution, licensing, content delivery. What differentiates them in\npractice is narrower than the marketing suggests — whether the proxy works in restrictive LMSs that block\ncross-origin access, what happens when the licence expires mid-session, how tracking is reconciled if the\nconnection drops, and whether you can white-label the whole thing for your own clients.\n",{},"Distribution, licensing & hosting","8","distribution-licensing","categories\u002Fdistribution-licensing","Getting a course into someone else's LMS without giving away the course.","nkIpVD2NvqBC7m2F3MZ57C3AjDoCZ0eJjUNGd2oE9ZI",{"id":206,"title":207,"extension":7,"faq":208,"icon":218,"intro":219,"meta":220,"name":221,"order":222,"slug":223,"stem":224,"tagline":225,"__hash__":226},"categories\u002Fcategories\u002Fanalytics-tracking.yml","SCORM and xAPI analytics and tracking tools",[209,212,215],{"q":210,"a":211},"Can I get analytics from SCORM without moving to xAPI?","Yes, within limits. SCORM reports completion, score, time and a small data model — enough for drop-off and pass rates, not enough for fine-grained interaction analysis. Launch-tracking tools add a layer of their own without requiring you to re-author anything.\n",{"q":213,"a":214},"Do I need a separate analytics tool if I have an LRS?","Often, yes. Most record stores are built to store and serve statements correctly rather than to visualise them well. Some ship a reporting layer; the rest expect you to bring one.\n",{"q":216,"a":217},"What should I measure?","Start with completion rate, time to complete, and per-question failure. They are cheap, comparable across courses, and answer the question that actually gets asked — is this course working?\n","i-lucide-bar-chart-3","An LMS will tell you who completed a course. It is usually much less helpful about anything else: where\npeople dropped out, which question everybody fails, whether the course is worth its production cost, or\nwhat happened across the six systems your organisation actually uses.\n\nThe tools here fill that gap from two directions. **Statement analytics** sit on top of an xAPI record store\nand turn a stream of statements into dashboards, cohorts and reports — the natural pairing if you have\nalready adopted xAPI. **Launch and delivery tracking** works at the package level instead, recording when\nand where a course was opened and how far it got, which is the pragmatic option when the content is SCORM\nand always will be.\n\nOne thing to settle early, because it is a data-protection question and not just a technical one: how much\nof this is personally identifiable, how long it is kept, and who can see it. Learner-level analytics are\ngenuinely useful and genuinely sensitive, and the answer should be written down before the dashboard is\nbuilt rather than after someone asks.\n",{},"Analytics & tracking","9","analytics-tracking","categories\u002Fanalytics-tracking","Turning completion records into something worth reading.","eGUFwQLbgbMeYmVcG_VLX1KbidUQxzBPyNR2G2IyenU",[228,229,230,231,232,233,234,235,236],{"slug":26,"name":24},{"slug":51,"name":49},{"slug":76,"name":74},{"slug":101,"name":99},{"slug":126,"name":124},{"slug":151,"name":149},{"slug":176,"name":174},{"slug":201,"name":199},{"slug":223,"name":221},{"category":238,"categories":245,"tools":308},{"id":31,"title":32,"extension":7,"faq":239,"icon":46,"intro":47,"meta":244,"name":49,"order":50,"slug":51,"stem":52,"tagline":53,"__hash__":54},[240,241,242,243],{"q":35,"a":36},{"q":38,"a":39},{"q":41,"a":42},{"q":44,"a":45},{},[246,253,260,267,274,281,288,295,302],{"id":5,"title":6,"extension":7,"faq":247,"icon":21,"intro":22,"meta":252,"name":24,"order":25,"slug":26,"stem":27,"tagline":28,"__hash__":29},[248,249,250,251],{"q":10,"a":11},{"q":13,"a":14},{"q":16,"a":17},{"q":19,"a":20},{},{"id":31,"title":32,"extension":7,"faq":254,"icon":46,"intro":47,"meta":259,"name":49,"order":50,"slug":51,"stem":52,"tagline":53,"__hash__":54},[255,256,257,258],{"q":35,"a":36},{"q":38,"a":39},{"q":41,"a":42},{"q":44,"a":45},{},{"id":56,"title":57,"extension":7,"faq":261,"icon":71,"intro":72,"meta":266,"name":74,"order":75,"slug":76,"stem":77,"tagline":78,"__hash__":79},[262,263,264,265],{"q":60,"a":61},{"q":63,"a":64},{"q":66,"a":67},{"q":69,"a":70},{},{"id":81,"title":82,"extension":7,"faq":268,"icon":96,"intro":97,"meta":273,"name":99,"order":100,"slug":101,"stem":102,"tagline":103,"__hash__":104},[269,270,271,272],{"q":85,"a":86},{"q":88,"a":89},{"q":91,"a":92},{"q":94,"a":95},{},{"id":106,"title":107,"extension":7,"faq":275,"icon":121,"intro":122,"meta":280,"name":124,"order":125,"slug":126,"stem":127,"tagline":128,"__hash__":129},[276,277,278,279],{"q":110,"a":111},{"q":113,"a":114},{"q":116,"a":117},{"q":119,"a":120},{},{"id":131,"title":132,"extension":7,"faq":282,"icon":146,"intro":147,"meta":287,"name":149,"order":150,"slug":151,"stem":152,"tagline":153,"__hash__":154},[283,284,285,286],{"q":135,"a":136},{"q":138,"a":139},{"q":141,"a":142},{"q":144,"a":145},{},{"id":156,"title":157,"extension":7,"faq":289,"icon":171,"intro":172,"meta":294,"name":174,"order":175,"slug":176,"stem":177,"tagline":178,"__hash__":179},[290,291,292,293],{"q":160,"a":161},{"q":163,"a":164},{"q":166,"a":167},{"q":169,"a":170},{},{"id":181,"title":182,"extension":7,"faq":296,"icon":196,"intro":197,"meta":301,"name":199,"order":200,"slug":201,"stem":202,"tagline":203,"__hash__":204},[297,298,299,300],{"q":185,"a":186},{"q":188,"a":189},{"q":191,"a":192},{"q":194,"a":195},{},{"id":206,"title":207,"extension":7,"faq":303,"icon":218,"intro":219,"meta":307,"name":221,"order":222,"slug":223,"stem":224,"tagline":225,"__hash__":226},[304,305,306],{"q":210,"a":211},{"q":213,"a":214},{"q":216,"a":217},{},[309,396,461,516,587,635,692],{"id":310,"title":311,"addedAt":312,"alternatives":313,"body":314,"categories":346,"checkedAt":312,"claimed":347,"description":320,"docs":347,"editorsPick":348,"extension":349,"faq":350,"firstParty":348,"foundedYear":347,"hosting":357,"hqCountry":358,"license":359,"listing":360,"logo":347,"meta":361,"name":311,"navigation":362,"openSource":362,"path":363,"platforms":364,"pricing":368,"registries":371,"repo":372,"seo":373,"standards":374,"status":387,"stem":388,"tagline":389,"tags":390,"vendor":394,"website":372,"__hash__":395},"tools\u002Ftools\u002Flearning-records-converter.md","Learning Records Converter","2026-08-24",[],{"type":315,"value":316,"toc":342},"minimark",[317,321,336,339],[318,319,320],"p",{},"The Learning Records Converter comes out of Prometheus-X, the EU-funded data-space initiative for education and skills, and was built by Inokufu. Its purpose is normalisation: an institution holding tracking data in several formats cannot combine it, so everything is translated into xAPI and then conformed to the DASES profiles for LMS, forum and assessment activity.",[318,322,323,324,328,329,328,332,335],{},"The architecture is the interesting part. Input formats are declared as Pydantic models, and the actual translation lives in YAML mapping files — ",[325,326,327],"code",{},"mapping_scorm2004_to_xapi.yml",", ",[325,330,331],{},"mapping_imscaliper_1_1_to_xapi.yml",[325,333,334],{},"mapping_matomo_to_xapi.yml"," — where each rule names input fields and a switch of lambda conditions producing xAPI output. That makes adding a proprietary format a data exercise rather than a code one, and it makes the existing mappings auditable, which matters when the output is going into a shared data space.",[318,337,338],{},"Be clear about scope before adopting it. Only SCORM 2004 is covered, not 1.2; the output is always xAPI; and it operates on records, not packages. It is a FastAPI service with Docker Compose, so it is deployed rather than imported.",[318,340,341],{},"Four stars, last pushed August 2025, and the mappers still carry a French-language TODO about completion thresholds. That is the honest state: a funded project's deliverable, useful as a starting point for a migration and as a well-designed example of declarative record mapping, rather than a finished product with a community behind it.",{"title":343,"searchDepth":344,"depth":344,"links":345},"",2,[],[51],null,false,"md",[351,354],{"q":352,"a":353},"Will it convert my SCORM packages to xAPI courses?","No, and this is the most common misreading of the name. It converts learning *records* — the tracking data a SCORM 2004 runtime produced — into xAPI statements. The course content is untouched.\n",{"q":355,"a":356},"Can I add my own format?","Yes, and that is the intended extension point. Formats are declared as a Pydantic model plus a YAML mapping file with lambda conditions, and there is a custom-formats module kept separate from the core enumeration.\n","self-hosted","FR","GPL-3.0","full",{},true,"\u002Ftools\u002Flearning-records-converter",[365,366,367],"library","cli","web",{"model":369,"currency":370,"freeTier":362},"open-source","EUR",[],"https:\u002F\u002Fgithub.com\u002FPrometheus-X-association\u002Flearning-records-converter",{"description":320},{"scorm2004":375,"scorm12":380,"xapi":382,"cmi5":385},{"supported":362,"editions":376,"provenance":377,"checkedAt":312,"source":378,"note":379},[],"editor-checked","https:\u002F\u002Fgithub.com\u002FPrometheus-X-association\u002Flearning-records-converter\u002Fblob\u002Fmain\u002Fdata\u002Fmappers\u002Fmapping_scorm2004_to_xapi.yml","A SCORM_2004 input format with a Pydantic data model and a YAML mapper translating completion_status, entry, exit, learner identity, progress_measure, score.scaled, session_time and success_status to xAPI verbs and results. This converts runtime records, not packages, and no specific 2004 edition is distinguished. Read in source, August 2026.\n",{"supported":348,"provenance":377,"checkedAt":312,"note":381},"The trace-format enumeration lists only SCORM_2004; there is no 1.2 data model or mapper.\n",{"supported":362,"provenance":377,"checkedAt":312,"source":383,"note":384},"https:\u002F\u002Fgithub.com\u002FPrometheus-X-association\u002Flearning-records-converter\u002Fblob\u002Fmain\u002Fapp\u002Fcommon\u002Fenums\u002Ftrace_formats.py","xAPI is the only output format, and a profile enricher validates and annotates statements against the DASES JSON-LD profiles. Read in source, August 2026.\n",{"supported":348,"provenance":377,"checkedAt":312,"note":386},"The README states cmi5 is treated as an xAPI profile rather than a separate input format, and there is no cmi5 mapper in the repository.\n","maintained","tools\u002Flearning-records-converter","Python API that maps SCORM 2004, IMS Caliper and Matomo traces into xAPI",[391,392,393],"xapi","python","data-migration","Inokufu","KTQztLY_Mc4SDYCXE9MPxx7K4emy5yeZMvMnVs_6gkM",{"id":397,"title":398,"addedAt":312,"alternatives":399,"body":400,"categories":424,"checkedAt":312,"claimed":347,"description":425,"docs":347,"editorsPick":348,"extension":349,"faq":426,"firstParty":348,"foundedYear":347,"hosting":365,"hqCountry":347,"license":433,"listing":360,"logo":347,"meta":434,"name":435,"navigation":362,"openSource":362,"path":436,"platforms":437,"pricing":438,"registries":440,"repo":439,"seo":441,"standards":442,"status":453,"stem":454,"tagline":455,"tags":456,"vendor":459,"website":439,"__hash__":460},"tools\u002Ftools\u002Fscorm-to-xapi-wrapper.md","Scorm To Xapi Wrapper",[],{"type":315,"value":401,"toc":422},[402,409,412,419],[318,403,404,405,408],{},"A migration aid from ADL, from the period when organisations were being encouraged to move from SCORM to xAPI without reauthoring their content. You replace the standard ",[325,406,407],{},"APIWrapper.js"," in each SCO with ADL's modified copy, add two script tags, and every run-time call the course makes is mirrored into an LRS as an xAPI statement following the draft xAPI SCORM Profile.",[318,410,411],{},"For a library of legacy SCORM courses that must keep working in an existing LMS while feeding a new analytics store, the idea is still the right one, and the mapping is worth reading if you are implementing that translation yourself.",[318,413,414,415,418],{},"As deployable code it has aged badly, and its own repository says so. The archive flag was set by ADL, the last commit to ",[325,416,417],{},"master"," was March 2017, the SCORM 1.2 wrapper carries an unresolved out-of-date warning, the profile it implements never left draft, and LRS credentials sit in a file shipped to the browser. There is no licence file, which rules it out of client work regardless of the technical state.",[318,420,421],{},"Ninety-nine stars mean it remains the first result people find. Treat it as documentation of an approach — read the mapping, then implement it against a maintained xAPI client.",{"title":343,"searchDepth":344,"depth":344,"links":423},[],[51],"A migration aid from ADL, from the period when organisations were being encouraged to move from SCORM to xAPI without reauthoring their content. You replace the standard APIWrapper.js in each SCO with ADL's modified copy, add two script tags, and every run-time call the course makes is mirrored into an LRS as an xAPI statement following the draft xAPI SCORM Profile.",[427,430],{"q":428,"a":429},"Where do the LRS credentials live?","In a `config` object inside APIWrapper.js, shipped in the course package — endpoint, username and password in plain JavaScript the learner can read. That was normal in 2014 and is not acceptable now; anything using this approach today needs a server-side proxy or scoped credentials.\n",{"q":431,"a":432},"Does it replace the LMS's own SCORM tracking?","No, it duplicates it. SCORM calls still go to the LMS; xAPI statements go to your LRS in addition. The README warns explicitly that learner data will start arriving in the LRS as soon as it is installed.\n","none",{},"SCORM-to-xAPI Wrapper","\u002Ftools\u002Fscorm-to-xapi-wrapper",[367,365],{"model":369,"source":439},"https:\u002F\u002Fgithub.com\u002Fadlnet\u002FSCORM-to-xAPI-Wrapper",[],{"description":425},{"scorm12":443,"scorm2004":446,"xapi":450},{"supported":362,"provenance":377,"checkedAt":312,"source":444,"note":445},"https:\u002F\u002Fgithub.com\u002Fadlnet\u002FSCORM-to-xAPI-Wrapper\u002Ftree\u002Fmaster\u002FSCORM1.2","A SCORM1.2 wrapper is present, but the README states in capitals that this version is out of date and directs readers to the 2004 wrapper instead. That warning has stood since the repository was archived.\n",{"supported":362,"editions":447,"provenance":377,"checkedAt":312,"source":448,"note":449},[],"https:\u002F\u002Fgithub.com\u002Fadlnet\u002FSCORM-to-xAPI-Wrapper\u002Ftree\u002Fmaster\u002FSCORM2004","The 2004 wrapper is the maintained-as-of-archival path. No edition is specified in the repository.\n",{"supported":362,"provenance":377,"checkedAt":312,"source":451,"note":452},"https:\u002F\u002Fgithub.com\u002Fadlnet\u002FSCORM-to-xAPI-Wrapper\u002Fblob\u002Fmaster\u002FSCORMToXAPIFunctions.js","Statements follow the xAPI SCORM Profile, which the README itself describes as being in draft. Sending requires the ADL xAPIWrapper and an LRS endpoint configured in the file.\n","archived","tools\u002Fscorm-to-xapi-wrapper","ADL's drop-in APIWrapper.js that re-emits SCORM calls as xAPI statements",[457,458,453],"adl","javascript","Advanced Distributed Learning Initiative","tBBRiGU6uEb95plBR-dfuTc88Egc4WanvWelqbS_mBc",{"id":462,"title":463,"addedAt":312,"alternatives":464,"body":465,"categories":489,"checkedAt":312,"claimed":347,"description":469,"docs":347,"editorsPick":348,"extension":349,"faq":490,"firstParty":348,"foundedYear":347,"hosting":365,"hqCountry":494,"license":433,"listing":360,"logo":347,"meta":495,"name":496,"navigation":362,"openSource":362,"path":497,"platforms":498,"pricing":499,"registries":501,"repo":500,"seo":502,"standards":503,"status":507,"stem":508,"tagline":509,"tags":510,"vendor":514,"website":500,"__hash__":515},"tools\u002Ftools\u002Fmarkdown2scorm.md","Markdown2scorm",[],{"type":315,"value":466,"toc":487},[467,470,473,484],[318,468,469],{},"A small command-line tool from Naturalis Biodiversity Center that converts Markdown lecture notes into a SCORM package. The Perl script shells out to pandoc to produce either a standalone HTML file or a slide deck — S5, Slidy, Slideous, DZSlides or reveal.js — copies in a bundled build of the libscorm run-time library, fills in a manifest template and zips the result. The README explains the motivation clearly: write teaching material collaboratively in Git, and deliver it into Blackboard alongside quizzes and slides from elsewhere.",[318,471,472],{},"The idea is sound, and for a team already living in Markdown and pandoc it removes a genuinely irritating manual step. Read as a worked example of the minimum a SCORM package needs — manifest, schema files, a run-time wrapper, one SCO — it is instructive.",[318,474,475,476,479,480,483],{},"As a dependency, treat it cautiously. The last commit was in May 2019, it has nine stars, no issues and no releases; the bundled libscorm assets include a Flash-era ",[325,477,478],{},"swfobject.js"," and an ",[325,481,482],{},"expressInstall.swf",". It emits SCORM 1.2 only, one SCO per package, with no 2004, no xAPI and no configurable tracking. And there is no licence file at all, which matters more than the age.",[318,485,486],{},"Useful as a reference implementation or a starting fork. Not something to build a content pipeline on today.",{"title":343,"searchDepth":344,"depth":344,"links":488},[],[51],[491],{"q":492,"a":493},"Is there a licence?","No. The repository contains no LICENCE file and none is declared, so the code is under default copyright. That is a blocker for reuse in client work, whatever the intent of the authors.\n","NL",{},"markdown2scorm","\u002Ftools\u002Fmarkdown2scorm",[366],{"model":369,"source":500},"https:\u002F\u002Fgithub.com\u002Fnaturalis\u002Fmarkdown2scorm",[],{"description":469},{"scorm12":504},{"supported":362,"provenance":377,"checkedAt":312,"source":505,"note":506},"https:\u002F\u002Fgithub.com\u002Fnaturalis\u002Fmarkdown2scorm\u002Fblob\u002Fmaster\u002Fassets\u002Fscaffold\u002Fimsmanifest.xml","The manifest template declares `\u003Cschemaversion>1.2\u003C\u002Fschemaversion>` against the adlcp_rootv1p2 namespace, and the only schema files in the repository are the 1.2 set.\n","stale","tools\u002Fmarkdown2scorm","A Perl script that runs Markdown through pandoc and wraps the result as SCORM 1.2",[511,512,513],"markdown","pandoc","perl","Naturalis Biodiversity Center","CNIDvMTpjfNUrZf-QRJTv2cNIzZHcNJ0p1Ac6rSlaWw",{"id":517,"title":518,"addedAt":312,"alternatives":519,"body":520,"categories":543,"checkedAt":312,"claimed":347,"description":524,"docs":347,"editorsPick":348,"extension":349,"faq":544,"firstParty":362,"foundedYear":347,"hosting":551,"hqCountry":552,"license":553,"listing":360,"logo":347,"meta":554,"name":555,"navigation":362,"openSource":348,"path":556,"platforms":557,"pricing":558,"registries":564,"repo":347,"seo":565,"standards":566,"status":578,"stem":579,"tagline":580,"tags":581,"vendor":585,"website":563,"__hash__":586},"tools\u002Ftools\u002Fppt-to-scorm.md","Ppt To Scorm",[],{"type":315,"value":521,"toc":541},[522,525,528,531,534],[318,523,524],{},"A deck is the most common starting point for a compliance module and the worst thing to hand an LMS directly. ppt-to-scorm.com takes the PowerPoint and returns a conformant SCORM 1.2 or 2004 package: player shell, manifest, navigation and a completion rule that fires when the learner reaches the end.",[318,526,527],{},"The self-serve path suits simple decks — upload, choose a SCORM version, download. Above that the work becomes human: narration, quiz interactions, video, and WCAG 2.2 AA remediation, which a converter cannot invent and which is usually the reason a deck was not already a course. Pricing reflects that split, starting at £150 for a self-serve conversion and rising for the rebuilt tiers.",[318,529,530],{},"Packages are tested against Moodle, Cornerstone, TalentLMS, Docebo, Totara and SAP SuccessFactors. That list matters more than it looks: conversion output that works in one LMS and silently fails to record in another is the standard failure mode in this category, and it comes from the player shell rather than the slides.",[318,532,533],{},"There is a separate SCORM Audit service for packages that already exist and do not behave.",[318,535,536,540],{},[537,538,539],"strong",{},"Disclosure:"," built by LOST END FOUND, which publishes this directory. It sits in the same category as competing converters, under the same rules, and is never an editor's pick.",{"title":343,"searchDepth":344,"depth":344,"links":542},[],[51],[545,548],{"q":546,"a":547},"What does the free tier actually give you?","A watermarked SCORM 1.2 package, limited to a few conversions per email address. It is enough to prove the package imports and reports completion in your LMS before any money changes hands.\n",{"q":549,"a":550},"Are animations and narration preserved?","On the paid tiers, yes — the conversion drives PowerPoint rather than exporting flat images, so timings and embedded audio survive. Complex trigger-based animation is the usual exception; test your worst slide first.\n","saas","GB","proprietary",{},"ppt-to-scorm.com","\u002Ftools\u002Fppt-to-scorm",[367,551],{"model":559,"priceFrom":560,"currency":561,"period":562,"freeTier":362,"source":563},"freemium",150,"GBP","one-time","https:\u002F\u002Fppt-to-scorm.com",[],{"description":524},{"scorm12":567,"scorm2004":569,"xapi":574,"cmi5":575,"aicc":576,"lti":577},{"supported":362,"provenance":568,"source":563},"vendor-stated",{"supported":362,"editions":570,"provenance":568,"source":563},[571,572,573],"2nd","3rd","4th",{"supported":348},{"supported":348},{"supported":348},{"supported":348},"active","tools\u002Fppt-to-scorm","PowerPoint decks turned into packages that actually record completion",[582,583,584],"powerpoint","conversion","service","LOST END FOUND LTD","EsxMEppqPgpEQUi5lAtvtJctByISp3UfhtvMDN1xZZE",{"id":588,"title":589,"addedAt":312,"alternatives":590,"body":591,"categories":607,"checkedAt":312,"claimed":347,"description":595,"docs":347,"editorsPick":348,"extension":349,"faq":608,"firstParty":348,"foundedYear":347,"hosting":365,"hqCountry":347,"license":433,"listing":360,"logo":347,"meta":615,"name":616,"navigation":362,"openSource":362,"path":617,"platforms":618,"pricing":619,"registries":621,"repo":622,"seo":623,"standards":624,"status":507,"stem":630,"tagline":631,"tags":632,"vendor":347,"website":622,"__hash__":634},"tools\u002Ftools\u002Fpptx-to-scorm.md","Pptx To Scorm",[],{"type":315,"value":592,"toc":605},[593,596,599,602],[318,594,595],{},"pptx_to_scorm is a small set of Ruby scripts for turning a PowerPoint deck into a browser slideshow packaged in SCORM's directory layout. Slides are exported as PNGs, thumbnails are generated with ImageMagick, embedded media is pulled out of the pptx's own zip, and the images are dropped into a jQuery-based slider template with a manifest alongside. A companion script can substitute YouTube iframes for extracted video.",[318,597,598],{},"It is a genuine solution to a genuine problem — rendering a deck as images sidesteps every font and animation fidelity issue — and the extraction code is a readable example of treating a pptx as the zip archive it is.",[318,600,601],{},"It is also unfinished. There are three commits, all from late January 2019, no licence file at all, no README, and no zipping step, so producing the final package is manual. Most importantly, the template's SCORM wrapper is commented out and the file it references was never committed: the output declares SCORM 1.2 and calls nothing. It will upload, it will display, and it will never record a completion.",[318,603,604],{},"Six stars for a repository with no documentation suggests people find it while searching for exactly this problem. Treat it as a worked example of the image-extraction and templating steps rather than a converter you can run — and expect to write the SCORM runtime half yourself, or to use a maintained tool instead.",{"title":343,"searchDepth":344,"depth":344,"links":606},[],[51],[609,612],{"q":610,"a":611},"Will the output track completion in an LMS?","Not as it stands. The template declares SCORM 1.2 but its wrapper script is commented out and missing, so no LMSInitialize is ever called. You would need to supply a wrapper and call it from the slideshow yourself.\n",{"q":613,"a":614},"What does it actually need to run?","Ruby with rubyzip and mustache, ImageMagick's `convert` on the path for thumbnails, and slide images already exported as PNG. It is a pipeline of separate scripts rather than one command.\n",{},"pptx_to_scorm","\u002Ftools\u002Fpptx-to-scorm",[366],{"model":369,"currency":620,"freeTier":362},"USD",[],"https:\u002F\u002Fgithub.com\u002Faprajnaparamita\u002Fpptx_to_scorm",{"description":595},{"scorm12":625,"scorm2004":628},{"supported":362,"provenance":377,"checkedAt":312,"source":626,"note":627},"https:\u002F\u002Fgithub.com\u002Faprajnaparamita\u002Fpptx_to_scorm\u002Fblob\u002Fmaster\u002Ftemplate\u002Findex.html","The output template carries a SCORM 1.2 manifest, but its only SCORM script tag is commented out and the referenced scormify.js is not present in the repository. The result is a well-formed SCORM 1.2 content package that makes no runtime API calls, so it will import but never report completion without work. Read in source, August 2026.\n",{"supported":348,"editions":629,"provenance":377,"checkedAt":312},[],"tools\u002Fpptx-to-scorm","Ruby scripts that turn PowerPoint slides into an HTML slideshow in a SCORM folder",[582,633,583],"ruby","wwDRPaG6P5iQueXrL7prMd1yw_1MxpMyj9JDHxkTozQ",{"id":636,"title":637,"addedAt":312,"alternatives":638,"body":639,"categories":666,"checkedAt":312,"claimed":347,"description":667,"docs":347,"editorsPick":348,"extension":349,"faq":668,"firstParty":348,"foundedYear":347,"hosting":357,"hqCountry":347,"license":672,"listing":360,"logo":347,"meta":673,"name":674,"navigation":362,"openSource":362,"path":675,"platforms":676,"pricing":677,"registries":679,"repo":680,"seo":681,"standards":682,"status":507,"stem":686,"tagline":687,"tags":688,"vendor":347,"website":680,"__hash__":691},"tools\u002Ftools\u002Fscorm-h5p-wrapper.md","Scorm H5p Wrapper",[],{"type":315,"value":640,"toc":664},[641,652,655,658],[318,642,643,644,647,648,651],{},"A Node application that takes an ",[325,645,646],{},".h5p"," file and returns a SCORM zip. It bundles h5p-standalone so the content runs without an H5P server, adds a small adaptor that maps the H5P ",[325,649,650],{},"xAPI"," completion event onto SCORM score and status calls, and hands the whole thing to simple-scorm-packager. It runs as a local web app with an upload form, and there is a Docker image and an optional CSV log of successful packagings.",[318,653,654],{},"The README is unusually fair about its own trade-offs, listing four disadvantages before any instructions: no shared caching of H5P libraries across packages, no in-LMS editing, no benefit from H5P core updates, and larger files. Take that seriously — it is the correct summary of when this approach is wrong.",[318,656,657],{},"Where it fits is narrow and real: an LMS with no H5P module, a client who must receive a self-contained file, or content that has to stay exactly as it was when it was signed off.",[318,659,660,661,663],{},"On maintenance, look past the repository's recent activity. Those pushes are Renovate and Dependabot branches; the ",[325,662,417],{}," branch has not changed since January 2020, and the hosted instance the README points at no longer resolves. It packages fine, but the H5P runtime inside it is six years old.",{"title":343,"searchDepth":344,"depth":344,"links":665},[],[51],"A Node application that takes an .h5p file and returns a SCORM zip. It bundles h5p-standalone so the content runs without an H5P server, adds a small adaptor that maps the H5P xAPI completion event onto SCORM score and status calls, and hands the whole thing to simple-scorm-packager. It runs as a local web app with an upload form, and there is a Docker image and an optional CSV log of successful packagings.",[669],{"q":670,"a":671},"Should I use this instead of my LMS's H5P plugin?","Usually not, and the README says so itself. If your LMS has a working H5P module, use it — packaging costs you shared library caching, in-place editing and upstream H5P updates. The wrapper earns its place when the LMS has no H5P support at all, or when the content must be frozen.\n","MIT",{},"scorm-h5p-wrapper","\u002Ftools\u002Fscorm-h5p-wrapper",[366,367],{"model":369,"source":678},"https:\u002F\u002Fgithub.com\u002Fsr258\u002Fscorm-h5p-wrapper\u002Fblob\u002Fmaster\u002FLICENSE",[],"https:\u002F\u002Fgithub.com\u002Fsr258\u002Fscorm-h5p-wrapper",{"description":667},{"scorm12":683},{"supported":362,"provenance":377,"checkedAt":312,"source":684,"note":685},"https:\u002F\u002Fgithub.com\u002Fsr258\u002Fscorm-h5p-wrapper\u002Fblob\u002Fmaster\u002Fsrc\u002Fcreator.js","`creator.js` calls simple-scorm-packager with `version: \"1.2\"` hard-coded. The bundled adaptor branches on SCORM 2004 elements as well, but no 2004 package is ever produced without editing the source.\n","tools\u002Fscorm-h5p-wrapper","Web app that packs an H5P file into a self-contained SCORM 1.2 package",[689,690,357],"h5p","node","0NVIic68CzssfAGAr6D_DoJVOY7_1GHYk3ESBoTkt-c",{"id":693,"title":694,"addedAt":312,"alternatives":695,"body":696,"categories":742,"checkedAt":312,"claimed":347,"description":743,"docs":347,"editorsPick":348,"extension":349,"faq":744,"firstParty":348,"foundedYear":347,"hosting":365,"hqCountry":347,"license":672,"listing":360,"logo":347,"meta":751,"name":752,"navigation":362,"openSource":362,"path":753,"platforms":754,"pricing":755,"registries":756,"repo":757,"seo":758,"standards":759,"status":387,"stem":764,"tagline":765,"tags":766,"vendor":347,"website":757,"__hash__":769},"tools\u002Ftools\u002Fscorm-converter-2004.md","Scorm Converter 2004",[],{"type":315,"value":697,"toc":740},[698,717,720,733],[318,699,700,701,704,705,708,709,712,713,716],{},"This is a hundred-line Python utility across three files, written for one migration and published as-is. The author's organisation was moving from ILIAS to SAP SuccessFactors and found that SCORM 2004 3rd Edition packages which ran happily in the old system were rejected by the new one. Rather than re-author, they wrote a script that unzips each package, rewrites the ",[325,702,703],{},"schemaversion"," element in ",[325,706,707],{},"imsmanifest.xml"," to \"2004 4th Edition\", strips the ",[325,710,711],{},"imsss:sequencing"," and ",[325,714,715],{},"metadata"," elements out of the organization and its items, and zips it back up.",[318,718,719],{},"Understanding what that is, and is not, matters. It is not a conversion between editions — no data-model migration, no sequencing translation, no validation of the result. It is a workaround for an importer stricter than the specification requires, and dropping the sequencing rules is a silent behavioural change rather than a side effect.",[318,721,722,723,328,726,712,729,732],{},"Judged as a product it is unremarkable: three commits, all on one day in October 2024, no stars, no tests, and a README that documents its own dependencies as ",[325,724,725],{},"os",[325,727,728],{},"ZIP",[325,730,731],{},"ParseXML",". Two details should stop you running it unattended: it deletes each source zip after extraction, and it joins paths with hardcoded Windows backslashes.",[318,734,735,736,739],{},"Judged as what it is — a shared workaround for a common and badly documented import failure — it is worth reading. The forty lines of ",[325,737,738],{},"ParseXML.py"," will tell you in two minutes whether your rejected package has the same cause, which is more than most vendor support tickets achieve.",{"title":343,"searchDepth":344,"depth":344,"links":741},[],[51],"This is a hundred-line Python utility across three files, written for one migration and published as-is. The author's organisation was moving from ILIAS to SAP SuccessFactors and found that SCORM 2004 3rd Edition packages which ran happily in the old system were rejected by the new one. Rather than re-author, they wrote a script that unzips each package, rewrites the schemaversion element in imsmanifest.xml to \"2004 4th Edition\", strips the imsss:sequencing and metadata elements out of the organization and its items, and zips it back up.",[745,748],{"q":746,"a":747},"Does it actually convert 3rd Edition to 4th Edition?","Not in the sense the name implies. It changes the declared schemaversion and deletes the sequencing and metadata elements that were causing the target LMS to reject the package. Content, data-model usage and the rest of the manifest are untouched.\n",{"q":749,"a":750},"What happens to my sequencing rules?","They are removed. If your course relied on imsss sequencing for prerequisites or rollup, that behaviour is gone after conversion. For a single-SCO package this costs nothing; for a structured multi-SCO course it is a real loss.\n",{},"scormConverter","\u002Ftools\u002Fscorm-converter-2004",[366],{"model":369,"currency":370,"freeTier":362},[],"https:\u002F\u002Fgithub.com\u002FhoedlChr\u002FscormConverter",{"description":743},{"scorm2004":760},{"supported":362,"editions":761,"provenance":377,"checkedAt":312,"source":762,"note":763},[572,573],"https:\u002F\u002Fgithub.com\u002FhoedlChr\u002FscormConverter\u002Fblob\u002Fmain\u002FParseXML.py","ParseXML.py rewrites the manifest's schemaversion element to \"2004 4th Edition\" and removes imsss:sequencing and metadata elements from the organization and its items. It does not otherwise transform the package. Read in source, August 2026.\n","tools\u002Fscorm-converter-2004","Python script that relabels SCORM 2004 3rd Edition packages as 4th Edition",[392,767,768],"manifest","migration","DqAy9B42lLafrfWYCXQ-FsQJNpNjrws7im5837mZ3xI",{"data":771,"body":772},{},{"type":773,"children":774},"root",[775,782,808],{"type":776,"tag":318,"props":777,"children":778},"element",{},[779],{"type":780,"value":781},"text","Most SCORM work does not start from a blank canvas. It starts with a PowerPoint deck that has been through\nfour rounds of review, a folder of MP4s, an H5P activity, or a course built for a platform the client has\nsince left. The tools here move that content across the gap.",{"type":776,"tag":318,"props":783,"children":784},{},[785,787,792,794,799,801,806],{"type":780,"value":786},"They divide by what goes in. ",{"type":776,"tag":537,"props":788,"children":789},{},[790],{"type":780,"value":791},"Document and deck converters",{"type":780,"value":793}," wrap slides into a package, usually adding a\nplayer shell, navigation and a completion rule. ",{"type":776,"tag":537,"props":795,"children":796},{},[797],{"type":780,"value":798},"Video and media wrappers",{"type":780,"value":800}," do the same for a single asset,\nwhere the only real question is what counts as \"complete\". ",{"type":776,"tag":537,"props":802,"children":803},{},[804],{"type":780,"value":805},"Format bridges",{"type":780,"value":807}," move between the standards\nthemselves — SCORM to xAPI, SCORM 1.2 to 2004, H5P to SCORM — and are the fiddliest, because the two ends\ndisagree about what a result means.",{"type":776,"tag":318,"props":809,"children":810},{},[811],{"type":780,"value":812},"The honest caveat for the whole category: a converter can guarantee a conformant package, but it cannot\ninvent instructional design. A converted deck is a deck in an LMS. That is often exactly what a compliance\nmodule needs, and rarely what a flagship course needs — worth being clear about before the budget is set.",1789388510620]