Know exactly what's in your project.
Never break it by accident.
BranchPy's Media Validation scans your Ren'Py project in VS Code, classifies every media file, and protects the assets your engine depends on — before you ever touch a delete button.
The Ren'Py asset problem other tools get wrong
Most media scanners flag every file that isn't explicitly referenced in a script as "unused."
In Ren'Py, that's dangerous. Your game/gui/ folder contains dozens of images
the engine needs at runtime — none of them appear in script.rpy.
Auto-deleting them silently breaks your game.
BranchPy classifies files before showing them to you. Engine-managed paths are marked PROTECTED and removed from any selectable action set — not just visually, but programmatically.
Four statuses. One honest picture.
Every file in your project gets exactly one classification:
Referenced in Scripts
Found in at least one .rpy file via image, show, play, or similar. Confirmed present on disk.
Engine-Managed or Policy-Protected
Lives in gui/, renpy/, common/, launcher/, or fonts/. Never offered for deletion — regardless of script references.
Unreferenced by Current Scan
Not detected in this scan pass. May still be dynamically loaded. Shown for review, not for automated cleanup. Reason shown per file.
Missing on Disk
Your script references this file but it doesn't exist. A runtime error waiting to happen. Highlighted immediately for action.
Example file states in the media browser
The same folder can contain all three types simultaneously. BranchPy distinguishes them before showing you anything.
No checkbox — protected from selection
Review before any action
Will cause a runtime error on this label
PROTECTED files show a shield icon in place of a checkbox. UNREFERENCED files are selectable. MISSING files are surface immediately — no hunting required.
🛡️ Two-layer protection for engine-managed files
A visual indicator alone isn't enough. BranchPy enforces protected-file safety at two independent layers:
- No checkbox rendered. Protected files in the Unreferenced tab show a shield icon instead of a selection checkbox. There is no DOM element to select.
- Delete handler validation. Even if a future code change accidentally exposed a checkbox, the delete confirmation handler independently strips any protected path from the file set before it is sent to the extension host. A warning is logged if anything is stripped.
A single layer failure cannot cause a protected file to be deleted. Phase 3 will add a quarantine layer as a third gate.
Which paths are protected by default?
BranchPy recognises two protection classes:
| Path | Class | Why |
|---|---|---|
game/gui/** & gui/** | Engine-managed | Ren'Py GUI system — required at runtime |
game/renpy/** & renpy/** | Engine-managed | Ren'Py core internals |
game/common/** & common/** | Engine-managed | Ren'Py common library |
game/launcher/** & launcher/** | Engine-managed | Ren'Py launcher assets |
game/fonts/** & fonts/** | Policy-protected | Font assets — may be loaded via config.font_* |
The engine-managed prefixes are non-negotiable. Removing them breaks any standard Ren'Py project.
The fonts/ prefix is policy-protected with a distinct classification, leaving room for finer-grained review in a future release.
User-defined overrides are now available via branchpy.config.json (protectedPaths), shipped in Phase 2A.
What you get right now
Media Validation is available in BranchPy for Ren'Py Free and above.
Total files on disk, by type (image / audio / video), with referenced + unreferenced breakdown.
Scans image, show, scene, play, voice, and Python API calls across all .rpy files.
Files referenced in scripts but absent from disk are flagged immediately — before they become runtime errors.
Engine-managed files are classified and visually distinguished — with enforcement to prevent accidental inclusion in any delete action.
What's coming next
branchpy.config.json
✓ Done
Ready to know what's actually in your project?
Install BranchPy for VS Code. Open Media Validation. See everything in under a minute.
Get BranchPy Read the docs