If you need to go the other way (extract .sb3 to editable ZIP):
def sb3_to_zip(sb3_path, zip_output_path=None):
sb3_path = Path(sb3_path)
if zip_output_path is None:
zip_output_path = sb3_path.with_suffix('.zip')
shutil.copyfile(sb3_path, zip_output_path)
print(f"✅ Extracted ZIP: zip_output_path")
An .sb3 file is not a single file. It is a disguised ZIP archive. Rename any .sb3 to .zip, and you can open it to find:
Even experienced creators make these mistakes. Avoid them for pristine SB3 output.
| Mistake | Quality Impact | Fix |
|---------|----------------|-----|
| Using built-in macOS “Compress” function | Adds __MACOSX and .DS_Store files → project fails to load | Use Keka or Terminal zip -X |
| Renaming .rar or .7z to .zip | Corrupts entire structure | Convert only real ZIP files, not other archives |
| Keeping backup files inside (e.g., script.js~) | Causes JSON parsing errors | Delete all hidden files before zipping |
| Zipping the parent folder | Creates ProjectFolder/project.json → Scratch sees no root JSON | cd into the folder, then zip contents |
| Using online converters | Uploads your assets to unknown servers + often re-samples images to 72dpi | Use offline tools only | zip to sb3 extra quality
The simplest method involves renaming the file extension.
The Risk: This method frequently fails if the ZIP file was compressed using "solid" compression or strict archiving methods (like 7-Zip's ultra-compression). Scratch can be finicky about how the internal files are stored.
Since an SB3 is already a ZIP file, converting is simply a matter of renaming the file extension: If you need to go the other way (extract
No actual compression or decompression is needed – the internal structure remains identical.
For teachers or asset library managers, converting dozens of ZIPs manually is impractical. Here’s a batch script that maintains extra quality across all files.
The Scratch community is pushing for a formal "Lossless SB3" specification. Proposed features include: The simplest method involves renaming the file extension
Until then, following the ZIP to SB3 extra quality guidelines in this article ensures your projects remain studio-grade, whether you're sharing on the Scratch website, embedding in TurboWarp, or archiving for future generations.
TurboWarp or PenguinMod extensions store extra fields in project.json. Cheap ZIP-to-SB3 tools delete unrecognized keys. Extra quality retains all proprietary metadata.