Skip to content

EVO Player v0.1.0

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 09 Aug 18:07
· 58 commits to main since this release

A rebuild of the interface, and the tooling to work on it without a console.

New

  • Launch screen. A hero that resumes what you were last watching, a
    Jump back in shelf, and a Library shelf. Two-dimensional cursor: each
    shelf remembers its own column, and empty shelves are skipped rather than
    becoming dead stops.
  • File browser inspector. Selecting a file shows a frame from it plus
    type, container, size, length, resolution and codecs, read from the
    container itself. Probing is debounced, so scrolling never stalls.
  • Side navigation rail. Sections are reachable from each other instead of
    each being a dead end you had to back out of. Back is a stack now, so a
    screen opened from two places returns to the right one.
  • Hold to scroll. Every list moved one item per physical press before.
    Shoulder buttons page; L2/R2 jump to the next initial in the browser.
  • Themed toast, and a danger theme token for failure states. Existing
    .theme files inherit it.
  • Playback OSD follows the theme — panel, seek bar, scrubber, chapter
    marks, captions and the music visualiser.
  • Theme swatches on the settings row, so cycling themes is not blind.
  • L3 captures a screenshot during playback (R3 keeps subtitle delay).

Fixed

  • The eighth settings row was visible but unreachable — navigation wrapped at
    a hardcoded count that had drifted from the real one. That whole class of
    bug is gone; counts now live with the cursor.
  • Audio failures were all blamed on E-AC3, including files with no audio
    track at all. The message was hardcoded and overwrote the accurate one.
    E-AC3, AC-3, DTS, TrueHD, FLAC, Opus and ALAC are all present and linked.
  • Pixelated previews — thumbnails were point-sampled twice, once down and
    once up. Minification now box-filters and the preview is presented 1:1.
  • The 4K converter created and joined worker threads every frame, the
    pattern already documented here as causing a freeze. It uses a persistent
    pool: 4K conversion measured 11.57 ms → 9.15 ms per frame on the host.
  • Commas and parentheses rendered as gaps: the font atlas has neither, and an
    unknown glyph leaves a hole rather than being skipped.
  • Scrims painted as hard black slabs — evo_ui_vgrad replaces rather than
    blends, so a transparent colour was written straight into the framebuffer.
  • The expanded rail was not quite opaque, letting the page title ghost
    through it.

Removed

  • Haptics. Built, tested on hardware, and taken out: every vibration
    entry point in libScePad either reports success and does nothing or
    rejects the call, while scePadSetLightBar succeeds on the same handle.
    Sound and lightbar remain. Evidence is in docs/ui-handoff.md so nobody
    re-derives it.

Tooling

  • tools/uiplay.sh — the UI as a navigable page in a browser, on any
    machine. Real renderer, real font atlas, real icons.
  • tools/uiview.sh — render any screen to a PNG.
  • tools/shot.sh — fetch captures and interrogate them numerically: probe a
    coordinate, scan pixel runs, crop, diff.
  • tools/klog.sh — console log, timestamped, append-only, survives payload
    restarts.
  • tools/launch.sh — refuses to stack app instances, which is what
    kernel-panicked a console during development.
  • tools/bench.sh — host benchmark for the converter, with correctness
    hashing and ASan/TSan modes.

Known gaps

  • The player OSD is themed but still draws its own layout rather than the
    shared chrome.
  • gpu-notes.md previously recommended an SDL2/mesa path for GPU YUV
    conversion. That does not work: the sysroot ships OSMesa (llvmpipe), a
    software rasteriser, with no radeonsi. The document now records the
    measurements.


Install

  1. Jailbreak the console (12.70) and start ps5-payload-elfldr.
  2. Deploy ps5-payload-websrv.
  3. Extract the homebrew zip to a USB stick as /homebrew/EVOPlayer/,
    or copy it to /data/homebrew/EVOPlayer/ over FTP.
  4. Launch it from http://<ps5>:8080/index.html.

EVOPlayer-*.elf is the bare payload. Note that sending it with
elfldr alone runs it headless — it needs the homebrew launcher to
get a display plane. See the README.

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.