2026-06-12 19:59:24 +00:00
2026-07-27 00:20:38 +01:00
2026-06-12 19:59:24 +00:00

BFpilot

PS5 payload that runs a browser file manager on port 5905:

http://<PS5_IP>:5905/

Works from the PS5 browser or any PC/phone on the same network.

Version v0.4.3-alpha.3. This is an alpha build; the v0.4.1 baseline was tested on FW 11.60.

Payloads

File What it is
bfpilot.elf File manager + archive extract (port 5905). Inject this for the UI. No AppInst in this ELF.
bfpilot-launcher-installer.elf Home menu Media tile (BFPL00001 → http://127.0.0.1:5905/). Inject once, or put the file under /data/BFpilot/ so the main ELF auto-starts it after the UI is up.
bfpilot-archive-worker.elf Build-only diagnostic. You don't need this for normal use.

Typical use: inject bfpilot.elf, then inject bfpilot-launcher-installer.elf once for the Media shelf tile (or keep a copy at /data/BFpilot/bfpilot-launcher-installer.elf).

Data layout: everything lives under /data/BFpilot only (logs, search index, shortcuts, archive jobs).

Features

Browse & transfer

  • Two transfer flows: copy or move straight to a target, or stage items, navigate, and choose Paste Here
  • Places: /, /data, /data/homebrew, /user, /mnt, USB/ext when plugged in, custom shortcuts
  • Upload files or a whole folder using the picker or drag-and-drop (recursive dropped folders need the browser's WebKit entry API)
  • Download, copy, move, rename, mkdir, recursive delete
  • Load payload: double-click .elf/.bin/.js (or toolbar) to send it to elfldr on port 9021
  • Progress + cancel on big jobs; overwrite/merge/skip when the destination already exists
  • Free space check before copy/move when size is known
  • Same-device, no-symlink recursive traversal with a 64-level depth cap and immediate abort on fatal storage/vnode errors
  • ShadowMountPlus warning before writes to its common scan roots
  • Single-click selects; double-click opens folders; the Open button works with controllers
  • Folder size is calculated when a folder is selected

Selection

  • Checkboxes + select all (works fine with a controller)

Search

  • Index All crawls some useful mounts into RAM (Everything-style queries after that)
  • Priority roots first (/data, /user, USB/ext), then system paths; stays on the same filesystem (st_dev) so it doesn't walk sandbox/nullfs nonsense
  • Bad roots are skipped instead of killing the whole index
  • Cap about 2 million entries; cache at /data/BFpilot/search.idx
  • Case-insensitive multi-word search, match highlighting

Archives (built into bfpilot.elf)

  • ZIP (stored/deflate/ZIP64, ZipCrypto only — no AES zip)
  • RAR4/RAR5 + passwords + multipart
  • 7z + passwords + .7z.001 splits
  • Extract only under /data and USB/ext mounts
  • Password prompt, progress/ETA, cleans up partial output on failure

Viewers

  • Images: png/jpg/gif/bmp/webp/ico/svg — pan, zoom, rotate
  • Create/edit common source, config, markup, script, and CSV text files, max 5 MB; UTF-8 validation, change-conflict detection, atomic save, and preservation of an existing UTF-8 BOM/newline style
  • Logs button: BFpilot logs, archive/search/boot logs, VSH log, error history

Other

  • Shortcuts saved to /data/BFpilot/shortcuts.txt
  • Exit button shuts down cleanly and frees port 5905 (loader on 9021 stays up)
  • New files/dirs get mode 0777

Transfer performance

  • HTTP keep-alive (up to 64 requests per connection)
  • 2 MiB page-aligned upload and download buffers
  • Listen socket asks for 4 MiB RCVBUF / 4 MiB SNDBUF
  • Large copies use a bounded two-slot 8 MiB read/write pipeline; small files use the serial fallback
  • Sustained copy/upload/ZIP output checkpoints writeback every 256 MiB
  • No bulk TCP_NODELAY, no multi-GB posix_fallocate while uploading

More detail: upload tuning and the performance/stability design.

Install

Grab the latest release: https://github.com/ItsBlurf/BFpilot/releases

python3 payload_sender.py <PS5_IP> 9021 bfpilot.elf
# optional tile:
python3 payload_sender.py <PS5_IP> 9021 bfpilot-launcher-installer.elf

Or send the ELFs with ps5-payload-manager / Blurfer.

Then open http://<PS5_IP>:5905/.

Quick checks: /api/status, /api/diag, /api/fs/places

Build

Needs ps5-payload-sdk:

export PS5_PAYLOAD_SDK=/path/to/ps5-payload-sdk
make clean all
make inspect-imports

Windows: build.cmd if your toolchain is already set up.

Outputs: bfpilot.elf, bfpilot-launcher-installer.elf, bfpilot-archive-worker.elf

Slim build without archives: make bfpilot-lite

inspect-imports makes sure the main ELF stays free of AppInstUtil/launcher imports.

Logs on the PS5

/data/BFpilot/log.txt
/data/BFpilot/boot.log
/data/BFpilot/crash.log
/data/BFpilot/search_crawl.log
/data/BFpilot/search.idx
/data/BFpilot/shortcuts.txt
/data/BFpilot/archive-integrated/archive-worker.log
/data/BFpilot/archive-integrated/status.json
/data/BFpilot/launcher-installer.log

Dev tests (optional)

PS5_IP=<PS5_IP> BF_WEB_PORT=5905 make ps5-diag
PS5_IP=<PS5_IP> BF_WEB_PORT=5905 BF_ALLOW_PS5_WRITE=1 make ps5-smoke
python3 scripts/goal_verify_io.py
BF_ALLOW_PS5_WRITE=1 PS5_IP=<PS5_IP> make ps5-transfer-perf

Compatibility

Main ELF is launcher-free on purpose — no AppInstUtil / UserService / SystemService / kernel_sys installer imports that break before main() on some FW + loaders. Tile installer is a separate ELF so a bad install path doesn't take down the file manager.

See docs/COMPATIBILITY_STRATEGY.md. Archives: docs/ARCHIVE_EXTRACTION.md. Changelog: CHANGELOG.md.

Credits

Third-party code under third_party/ keeps its own licenses. The upstream audit and adopt/reject rationale are documented in docs/UPSTREAM_FILE_MANAGER_COMPARISON.md.

License

This project is licensed under the MIT License. See LICENSE for the full text.

Copyright (c) ItsBlurf and contributors.
No warranty — the software is provided "as is", without warranty of any kind; authors are not liable for claims arising from use of the software.

S
Description
Lightweight PS5 file manager | browser based
Readme MIT
7.3 MiB
0 Stars 1 Watchers 0 Forks
2026-08-11 13:08:04 -05:00
Languages
C 53.4%
HTML 17.6%
Python 12%
C++ 10.6%
JavaScript 3.8%
Other 2.6%