Move the manifest to the ZIP root
A learning management system may report a missing manifest when a ZIP contains course-folder/imsmanifest.xml instead of imsmanifest.xml at its root. This tool removes that shared enclosing path and writes a new ZIP. All course files must be inside the same manifest folder; it refuses to discard unrelated files outside it. The original ZIP is never changed.
This is a narrow packaging repair, not a SCORM validator, accessibility audit or compatibility certificate. It does not correct tracking APIs, completion rules, missing assets, schema errors, XML resource links, permissions, licensing or external URLs. After repair, test launch, navigation, bookmarking, completion and score reporting in your intended LMS. A successful download means the stated path-and-byte transformation completed, not that a learner can finish the course.
How to use the repair
Select a ZIP and choose Inspect and prepare repair. The app reads the ZIP directory, checks supported entry headers, sizes and CRC values, and finds exactly one lowercase imsmanifest.xml. That file must be UTF-8 XML with a manifest root element. XML declarations for another encoding, DTDs and entity declarations are rejected. These checks do not validate the SCORM schema or version.
Review the removed prefix and file mapping. For example, Export/course/imsmanifest.xml becomes imsmanifest.xml and Export/course/assets/start.html becomes assets/start.html. Relative relationships inside that folder stay in place because the same prefix is removed from every file. No URLs or file content are rewritten. Tick the acknowledgement, save the repaired ZIP and save the separate JSON log if you need the mapping and checksums.
The fictional example has a manifest and two small content files in course/. It demonstrates the ZIP transformation only; it is not a complete SCORM training module or an LMS test. Its text and binary files allow you to inspect how every retained byte is carried into the output.
When the app stops
A manifest already at the root needs no wrapper repair, so no rewritten ZIP is offered. A missing manifest, more than one candidate, an unreadable manifest or files outside the selected folder also stops preparation. Resolve an ambiguous export in your authoring or archive tool; this app does not guess which course or outside file to keep.
Entry paths must be relative, use forward slashes and contain no empty, dot or parent-directory segments, control characters, colon or backslash. Duplicate or case-colliding paths, symbolic links and file/directory path conflicts are rejected. Filenames must be ASCII or explicitly marked as UTF-8 in the ZIP; legacy non-ASCII encodings and alternate Unicode path extra fields are unsupported. These are conservative input limits, not proof that retained files are safe.
Encrypted, split, ZIP64 and unsupported compression formats are rejected. The app accepts stored entries and raw Deflate using the browser’s decompression API, checking declared sizes and limiting the bytes read while expanding them. It checks the input CRC for each retained file and verifies that local and central entry metadata agree. Oversized or corrupt files stop the entire repair. This is not a forensic archive validator or malware scanner.
What the downloads contain
The repaired ZIP contains the retained entries under their shortened paths. It uses uncompressed stored entries, so it can be considerably larger than the input. ZIP entry timestamps are fixed to 1980-01-01. Original ZIP comments, extra fields, ownership, permissions and timestamps are omitted. Empty ancestor folder entries belonging only to the removed prefix are listed as removed in the log; empty directories below the new root are retained.
The JSON repair log is separate from the course ZIP. It records the original archive’s name, removed prefix, original and output paths, byte sizes, CRC values and SHA-256 digests of the retained uncompressed files. The same hash is recorded for each input/output file because its content is unchanged. Hashes help compare bytes, not prove identity, authorization, malware safety or SCORM conformance. The log can reveal private course filenames, so review it before sharing.
Temporary memory and practical limits
The selected ZIP must be no larger than 20 MiB. It can contain up to 1,000 entries, with at most 10 MiB per expanded file and 40 MiB expanded content overall. The manifest is limited to 1 MiB. Large video courses may exceed these bounds and should be repaired in your authoring tool or a trusted local archive utility. Your browser must support raw Deflate decompression and Web Crypto.
The app stores no history, makes no uploads or tracking calls and requests no LMS credentials. Clear or reload removes its memory state; files you deliberately download remain on your device. Archive content is never run, shown in an iframe or fetched through its URLs. The retained course can still contain scripts or remote resources that run later if you open or publish it elsewhere. This repair neither sanitizes nor certifies those contents.
References: LearnUpon’s manifest-location troubleshooting and Rustici’s import-error guidance describe packaging problems and the need for further course testing.