pathlog-payload is a set of utilities for:
- recording a file access log on PS5
- analyzing the resulting log and validating game files
The folder contains:
pathlog_all.elf
continuous monitoring of all eventspathlog_apps.elf
monitoring only whileCUSA*andPPSA*games are runningpathlog_stop.elf
clean shutdown of the active monitor processanalyze_pathlog.py
a script for analyzing the log and renaming files to the correct case
This project is useful when you need to:
- understand which files a game actually reads
- build a list of files that are really used
- find case mistakes in file and directory names
- compare a launch log against a local game folder or an FTP copy
- automatically rename files and folders to the case the game expects
Before using these tools, you need a special kstuff-lite build with logging support loaded.
To build the ELF files, you need the SDK installed at:
/opt/ps5-payload-sdkmake -C pathlog-payload clean allRun:
pathlog_all.elf
What happens:
- the monitor enables logging immediately
- new events are printed to the console
- the log is written to:
/data/pathlog/all.log
Run:
pathlog_apps.elf
What happens:
- the monitor waits for an application to start
- when a game with a
CUSA*orPPSA*title ID starts, logging is enabled automatically - a separate log is created for each game:
/data/pathlog/<TITLE_ID>.log
Example:
/data/pathlog/PPSA12345.log
This mode is useful when you want a clean log for a single game without background system noise.
Always use:
pathlog_stop.elf
The utility finds the active monitor process by name and terminates it cleanly.
If no monitor is running, it simply reports that.
All logs are stored in:
/data/pathlog/
Main variants:
all.logfor full monitoring<TITLE_ID>.logfor game-only monitoring
Log line format:
timestamp<TAB>kind<TAB>path
Example:
2026-03-18T01:23:45.678 open /app0/eboot.bin
2026-03-18T01:23:45.700 stat /app0/sce_sys/param.sfo
analyze_pathlog.py works in two modes:
- build a Markdown report
- rename files and folders
The script:
- reads the pathlog file and analyzes
openentries - collects the game file list and compares paths case-insensitively
- works with both a local folder and FTP
Example for a local folder:
python3 pathlog-payload/analyze_pathlog.py \
--report \
pathlog-payload/PPSA12345.log \
/games/PPSA12345Example for FTP:
python3 pathlog-payload/analyze_pathlog.py \
--report \
pathlog-payload/PPSA12345.log \
ftp://user:pass@192.168.0.10:1337/user/app/PPSA12345If no output path is specified, the report is created next to the log:
<log>.report.md
The report includes:
- files whose file name case differs
- directories whose name case differs
- full file path case conflicts found inside the log
- directory case conflicts found inside the log
- files that exist in the game folder but never appeared in the log
- matching files
You can also specify a custom report path:
python3 pathlog-payload/analyze_pathlog.py \
--report \
-o result.md \
pathlog-payload/PPSA12345.log \
/games/PPSA12345This mode is used when you want to rename real files and folders to the case the game expects.
A dry run is recommended first:
python3 pathlog-payload/analyze_pathlog.py \
--rename-case \
--dry-run \
pathlog-payload/PPSA12345.log \
/games/PPSA12345The script shows the planned renames without modifying anything.
After verifying the plan, you can run the real rename:
python3 pathlog-payload/analyze_pathlog.py \
--rename-case \
pathlog-payload/PPSA12345.log \
/games/PPSA12345The same also works over FTP:
python3 pathlog-payload/analyze_pathlog.py \
--rename-case \
--dry-run \
pathlog-payload/PPSA12345.log \
ftp://user:pass@192.168.0.10:1337/user/app/PPSA12345You can also set the case for files and folders that never appeared in the log.
Example:
python3 pathlog-payload/analyze_pathlog.py \
--rename-case \
--dry-run \
--unlogged-files-case lower \
--unlogged-dirs-case lower \
pathlog-payload/PPSA12345.log \
/games/PPSA12345Available values:
lowerupper
This is useful if you want not only to fix the case according to the log, but also normalize unused files and folders to a consistent style.
Limitation:
- paths inside
sce_moduleandsce_sysare intentionally ignored by--unlogged-files-caseand--unlogged-dirs-case
If the log is analyzed over FTP, you can pass connection parameters directly in the URL:
ftp://user:pass@host:port/path/to/game
Or override them with separate arguments:
--ftp-user--ftp-pass--ftp-port
Example:
python3 pathlog-payload/analyze_pathlog.py \
--report \
--ftp-user user \
--ftp-pass pass \
--ftp-port 1337 \
pathlog-payload/PPSA12345.log \
ftp://192.168.0.10/user/app/PPSA12345