Scratch Coder
Create Scratch 3.0 projects with Python and ScratchGen.
Setup
pip install "ScratchGen~=1.1"
Quick start
from ScratchGen import *
project = Project()
sprite = project.createSprite('Cat')
sprite.createScript(
WhenFlagClicked(),
Show(),
Say('Hello!')
)
project.save('hello.sb3')
Common pitfalls
- Sprites are hidden by default. Call
Show()inWhenFlagClicked(). - Sprites have no default costume. Add costumes via
addCostume()or inject them after saving. Broadcast()/WhenBroadcastReceived()use null IDs in ScratchGen. UseChangeVariableon global stage variables for cross-sprite state instead.GetAttributerequires ScratchGen constants, not strings:GetAttribute(Y_POSITION, ball).Stop(ALL)clears speech bubbles before rendering. Use agame_overstate variable plus a dedicated message sprite.- Stage fence clamps sprites at
y = -180to180. Keep detection thresholds inside the bounds.
Stage coordinates
- x: -240 to 240
- y: -180 to 180
Physics tips
- Keep
MoveSteps(N)<= half the target sprite's width to avoid tunneling. - For axis-aligned games, store direction as
dx/dystage variables and move withChangeX(Multiply(dx, speed)).
Save pipeline
project.save() -> add_costumes() -> add_monitors()
Testing
python -c "import zipfile; print(zipfile.ZipFile('project.sb3').namelist())"
Open the file in TurboWarp to verify.
Reference
references/block-reference.md— complete block reference