This script repackages a folder into an .sb3 file:
import zipfile
from pathlib import Path
src = Path("scratch_project") # folder containing project.json at root
out = Path("project.sb3")
with zipfile.ZipFile(out, "w", compression=zipfile.ZIP_DEFLATED) as z:
for f in src.rglob("*"):
if f.is_file():
z.write(f, f.relative_to(src))
print("Wrote", out)
Notes:
You don’t need expensive software or a fancy converter tool. You just need your operating system.
The Scenario: You have a folder of assets or a modified Scratch project structure, and you've compressed it into my_project.zip. Now you want it to be my_project.sb3.
Before we convert, we need to understand what we are looking at.
Scratch 3.0 files are essentially archives. Think of them like a suitcase. When you save a project, Scratch packs all your assets (costumes, backdrops, sound files) and a master instruction sheet (a JSON file called project.json) into a suitcase.
If you rename that suitcase from .sb3 to .zip, your computer suddenly recognizes it. You can unzip it, see the individual image files, and even read the code (stored as text).
Converting Zip to SB3 is simply the reverse: You are packing a suitcase and slapping a "Scratch" label on it so the Scratch Editor knows it's safe to open.
Rating: ⭐⭐⭐⭐ (Most Reliable)
If you are nervous about renaming files or if the rename method isn't working, use the official Scratch app.
Here are the most common real-world scenarios:
Regardless of the reason, the process is straightforward.
Snap! uses XML, not SB3. This guide applies only to Scratch 3.0-compatible environments.
❌ Zipping the parent folder. This creates a folder inside the SB3, which Scratch cannot read. Scratch expects project.json at the root of the archive.
✅ Correct: The ZIP’s root contains project.json, not a subfolder.
India Toll Free: 1800-890-8040
24/7 Support: +91 93874 14000
info@orell.com
Corp. Office:
Oréll, 1st Floor, BCG Tower
Seaport - Airport Road, Kakkanad, Cochin - 682 037, India
Dubai/UAE
Oréll (FZC), Saif-Zone, Sharjah