EVO Player v0.5.0
Pre-releaseIf a previous release did nothing when you ran it, this is the fix. The
release shipped the bare player, which needs hbldr to be given a display
plane — sent straight to elfldr by a payload manager it started headless and
never drew anything. Download EVOPlayer-0.5.0-InstallTile.elf instead: it
registers the Media tile and carries the player inside it.
Also: a text reader, and a font that can finally spell a comma.
Fixed — install
- The release now ships the ELF that works from a payload manager.
EVOPlayer.elfis the bare player and needshbldrfor a display plane;
elfldr alone runs it headless, so nothing appears. The old release notes
documented this in a footnote under a step pointing at that very file.
The tile launcher already carried its own copy of websrv'shbldrand works
from elfldr alone — it just was never built or shipped. Verified on 12.70 on
a console where only elfldr was reachable. - The bare player is renamed
-player-only.elfso it cannot be picked by
mistake, and the release notes now say which file is which. - The tile launcher announced the wrong version — a hardcoded
0.2.0that
had drifted two releases behind the player it embeds. It now takes the
version from the same file CI checks against the release tag. - CI verified only one of the three payloads. It now checks all of them,
and asserts the launcher is larger than the player it embeds — a launcher
that suddenly shrinks means the.incbinpicked up nothing, which would
ship a tile that opens to a black screen and pass every other check.
New
-
A text reader. Opening a
.txt,.log,.md,.nfo,.json,.csv,
.ini/.cfgor a subtitle file from the browser now reads it instead of
doing nothing — those extensions were listed and selectable and CROSS on
them was silently ignored, which read as the browser being broken.D-pad scrolls a line, the shoulders page (with one line of overlap, so a
paragraph keeps a landmark), the triggers jump a tenth of the file, and
TRIANGLE cycles three reading sizes. Changing size re-wraps and keeps the
top of the view on the same words, because losing your place is the one
thing a size control must not do. The scrollbar thumb is sized to how much
of the document is on screen, which is what tells you whether "half way"
means five more pages or five hundred.Text is decoded as UTF-8 and folded to what the font can draw: curly quotes
become straight ones, em dashes hyphens, ellipses three periods, accented
Latin letters their base letter. A file that is not valid UTF-8 still opens.
Reads at most 2 MB and says so rather than appearing to end early; refuses
binaries instead of showing a screen of dots. -
The UI font has punctuation. It had 69 glyphs — letters, digits and
/._:-+— and drew everything else as a 12px gap. Survivable in a filename,
unreadable in prose, and a text reader is nothing but prose. 26 glyphs
(,'"!?();[]{}<>=*#|\
~^`%&@$) are now generated bytools/gen_icons.pyat
all four sizes.The original atlas is a pre-generated asset with no generator in the tree, so
these live in a second atlas that the text routines fall back to. They sit on
the letters' baseline becausetools/measure_font.pyreads the real baseline,
cap height and stroke weight out of the atlas ink rather than guessing, and
their advances are measured from the rasterised glyph rather than declared —
the first pass declared them and$4.50 (approxcame out with the bracket
touching the zero.
Changed
- Glyph lookup is shared between the player and
tools/uiview.c. Both
carried their ownrr_idxscan and their own four-way face switch; with two
atlases to choose between that would have been two more places to drift.
Both now callevo_font.h. - The browser labels a file "DOCUMENT" if the reader will open it. The two
lists had drifted the moment the reader learned new extensions, so a.json
was labelled "FILE" right up until you pressed CROSS on it and it opened.
Documentation
- The README is about the player again. It had grown into a twenty-section
setup manual — Windows prerequisites, Docker, LLVM version rationale, FFmpeg
profiles, a validation checklist — with the player itself covered in the
first forty lines. Someone who wants to use EVO Player needed none of it.
707 lines to 175: what it is, how to install it, what it does, the controls.
Nothing was deleted; the developer guide moved intact to
docs/building.md. - docs/architecture.md is new — the layers inside
the player, whymain.cis carved in the order it is (with the measurement
that argues against the obvious first cut), the draw vtable, the two font
atlases, and what can be verified without a console. - Eight screenshots, all real
uiviewrenders rather than mock-ups. EVO_TEXT_CHARSETis generated, not hand-maintained. It listed 69
characters and would have gone on reporting a comma as unsupported long
after the comma was added;tools/gen_icons.pynow emits the punctuation
alphabet into a header small enough for the UI layer to include.- The font warnings in docs/ui-handoff.md said prose
could not be written and a prompt "cannot ask a question mark's worth of
question". Both were true and are not any more.
Install — start here
Download EVOPlayer-*-InstallTile.elf. That is the one to run.
- Jailbreak the console (12.70) and start
ps5-payload-elfldr. - Copy
EVOPlayer-*-InstallTile.elfto a USB stick. - Start it from your payload manager — the on-console one,
typically athttp://<ps5>:8084. Anything that sends an ELF to
elfldr works. - It says "EVO Player ready in Media". Open EVO Player from the
console's Media row.
That is the whole install. No websrv, no FTP, nothing to extract,
and no second device beyond whatever runs your payload manager — the
tile installer carries the player inside it.
Keep the payload running. It is resident by design — it is what
starts the player when you open the tile. Your payload manager may
show it as still running; that is correct.Re-run it after every reboot, along with the jailbreak.
Which file is which
| File | Use it for |
|---|---|
EVOPlayer-*-InstallTile.elf |
Normal install. Payload manager → tile in Media |
EVOPlayer-*-UninstallTile.elf |
Removes the tile completely |
EVOPlayer-*-homebrew.zip |
The websrv route: extract to a USB stick as /homebrew/EVOPlayer/, launch from http://<ps5>:8080 |
EVOPlayer-*-player-only.elf |
The bare player. Do not send this to a payload manager — with elfldr alone it runs headless with no display plane and nothing appears. It needs hbldr, which the tile installer and websrv provide |
Requirements
- PS5 on firmware 12.70, jailbroken (re-run after every reboot)
- A USB stick for media
Verification
Built reproducibly in CI from the pinned toolchain (clang 18.1.3,
PS5 Payload SDK v0.42, FFmpeg 7.0.1). CI has no console, so these
binaries are not hardware-tested. Checksums in SHA256SUMS.txt.
Licensed GPL-3.0-or-later. Derived from ProsperoPlayer; see NOTICE.