Skip to content
cobanovPublic

About

llama.cpp on a jailbroken PS5: run any GGUF model natively on the console, starting with Qwen 3.8

Topics

Resources

Stars

804 stars

Watchers

7 watching

Forks

Repository files navigation

PS5LM

PS5LM

Your PS5 runs the language model. Every device on your network uses it.
llama.cpp on the console's GPU, with OpenAI and Anthropic APIs and a screen made for the TV.

Get the app · Website · Get started · Issues

New: decision models, powered by Ollaya. PS5LM now runs Jev-like decision models (d1, Clef, OpenJev and more) on the GPU and answers the same /v1/systemone API as Ollaya: typed decisions with calibrated probabilities, in a fraction of a second.

PS5LM is for anyone with a jailbroken PS5 who wants a private model server at home. It loads a GGUF model onto the console's GPU and serves it to your laptop, your phone and your coding tools. It needs no PC while it runs, no cloud and no account.

Qwen 3.5 9B generating on a PS5, with the requests streaming across the TV
Qwen 3.5 9B answering requests from a laptop on a PS5 Slim. Click for the video.

Home: the model, its speed and the live requests Models: the ones suggested for the PS5 Home with a decision model Console: temperature, power and load over time API: the endpoints and an example Settings: a list of choices under the row
Home, Models, Console, API and Settings on the TV.

A model server under your TV

  • It runs on the GPU. llama.cpp's Vulkan backend on the console's RDNA 2 GPU, with 11.4 GB of the shared memory for the model and its context. Every architecture and quantization llama.cpp knows comes along.
  • It answers your network. OpenAI's /v1/chat/completions and /v1/responses (Codex works against it), Anthropic's /v1/messages (Claude Code too) and a chat page in any browser. Point a client at http://<console>:8081 and use any model name: the loaded one answers.
  • It decides, too. Load a decision model and the console answers TypeSafe's /v1/systemone: choice, score and yes-or-no questions about text and images, the API Ollaya serves on a PC.
  • It shows its work. Every request streams across the TV as a chat: which device asked, what it asked, and the reply as it is written. Square sends a demo and Triangle opens a keyboard, so the console can be tried from the couch.
  • It watches the console. A Console page charts temperature, power, GPU and CPU load over the last two minutes or the last hour, beside a table of every reading.
  • It picks what fits. The planner reads each GGUF and gives it the longest context and best cache that fit the memory free. A Suggested list holds models measured on the console, and the app downloads from Hugging Face by itself, to internal storage, the M.2 drive or a USB drive.
  • It reads images. Models with an image projector (Gemma 4, MiniCPM-V, d1) take pictures in chat and in decisions.
Model Size On a PS5 Slim
Qwen 3.5 0.8B, Q4_K_M 0.5 GB 207 tokens a second
Qwen 3.5 9B, Q4_K_M 5.3 GB 55 tokens a second
Qwen 3.8 27B, UD-Q2_K_XL 9.2 GB about 20 tokens a second, 64k context
d1 Omni 600M, a decision model 1.1 GB 3 questions in 0.3 s; a 720p image and 7 questions in 2.9 s

Ternary Bonsai 2

PrismML's Bonsai 2 27B is Qwen 3.8 27B in ternary weights, 7.1 GB as Q2_0, which leaves a 64k context plenty of room. Its Q2_0 file is in Models > Suggested, and the app's llama.cpp applies the model's Hadamard rotation itself. PrismML's main repository ships PQ2_0 instead, a type only their fork reads; convert it on a PC, losslessly (the result is byte for byte PrismML's own Q2_0):

python3 scripts/bonsai-pq2-to-q2.py Ternary-Bonsai-2-27B-PQ2_0.gguf   # writes Ternary-Bonsai-2-27B-Q2_0.gguf

Decision models, powered by Ollaya

Ollaya runs open decision models on a PC the way Ollama runs language models. PS5LM brings the same idea to the console: a decision model reads a state and answers typed questions in one forward pass, with no text generated.

curl http://<console>:8081/v1/systemone -H 'Content-Type: application/json' -d '{
  "state": "I was charged twice this month. Refund me or I cancel.",
  "questions": {
    "intent": {"type": "choice", "instructions": "What does the customer want?",
               "criteria": {"refund": null, "information": null, "cancel": null}},
    "angry":  {"type": "noul", "instructions": "Is the customer angry?"}
  }
}'

The Suggested list has d1 Omni 600M, d1 3B and Clef Flash. Any GGUF that carries llama.cpp's decision metadata loads the same way, and the app labels it a decision model.

Try it

You need a PS5 on firmware 7.00 to 13.60, jailbroken, with these payloads loaded:

Payload For
kstuff-lite the kernel patches homebrew runs on required
etaHEN homebrew support required
ShadowMountPlus puts PS5LM on the home screen from /data/homebrew required
elfldr (port 9021) temperature, power and real free space, through ps5-exporter; full-speed downloads, through the app's own ftpsrv recommended
ftpsrv (port 2121) installing the app, copying models from a PC; downloads write through it when it runs recommended
  1. Download ps5lm-app-vX.Y.Z.zip from the latest release and unzip it.
  2. Copy the PPSA99575 folder to /data/homebrew over FTP. ShadowMountPlus adds PS5LM to the home screen.
  3. Open PS5LM, go to Models > Suggested and get a model. Or copy a .gguf to /data/PS5LM/models, or to PS5LM/models on a USB drive.
  4. Load it. Once Home says Ready, open http://<console>:8081 in a browser, or point your OpenAI or Anthropic client at it.

To update, copy the new folder over the old one. Settings, models and downloads stay in /data/PS5LM.

If PS5LM cannot write to /data/PS5LM ("Cannot write to /data/PS5LM/models"), the HEN has not opened the console's storage to it:

  • OnionHEN: add PPSA99575 to exact_title_ids in the [app_jailbreak] section of /data/OnionHEN/config.ini, then start PS5LM again. Reported working with OnionHEN 0.9.0 and ShadowMountPlus 1.7beta10; older versions of either failed the same way (#23).
  • etaHEN: over FTP, create /data/PS5LM/models and give /data/PS5LM and everything in it mode 777 (in FileZilla: File permissions, applied to subdirectories). Reported on etaHEN 2.6b, firmware 10.00.

If the HEN has not opened the console's storage (/data) to PS5LM, the app says so on its first start and offers its own storage instead: up to 16 GB in /download0/PS5LM, for its settings, logs and models (a download that does not fit is refused before it starts). Models saved in the app's storage stay in the library. Settings > Sound and storage shows which one is in use.

When something goes wrong, Settings > Debug report writes /data/PS5LM/debug-report.txt (and a copy to a USB drive, when one is in): the app's version, the system software, storage, models, settings, the end of both logs and which payload ports answer, with API keys and tokens taken out. Attach it to your issue. The kernel log goes in only if you switch it on there.

Using it from coding tools (opencode, Codex, Claude Code) is in docs/CLI.md.

Where Button Does
Everywhere L1 / R1 Home, Models, API, Console, Settings
Home Cross change the model
Home Square / Triangle send a demo request / type a message
Models D-pad, Cross choose a section and a model; load, unload or download it
Models, Search L2 / R2, Square change the search; check whether a file fits
Models, Downloads Cross, Square pause or resume; cancel (press twice) or clear
Console L2 / R2 the last two minutes / the last hour
Settings D-pad, Cross choose a category and a row; flip it, or pick from its list
Settings, Diagnostics Square, Triangle app or server log; errors only
Settings, Debug report Cross write one file to attach to an issue

Looking inside the model

This fork adds an opt-in endpoint that returns the numbers the model computed. POST /v1/introspect answers with the whole logit row at the positions you name, the probabilities and the entropy, with one row of a named graph tensor for a named layer, and it can also change one channel in place before the rest of the model reads it.

The endpoint is off by default. Turn it on in Settings > Developer > Logits and activations API.

python3 scripts/ps5lm-introspect.py --host <console> --prompt "Once upon a time" \
    --positions last --top-k 10 --tensors l_out --layers 12

Introspection records the request fields, the tensor names, and the cost of each option.

Want to tinker?

C++ on ps5-homebrew-ui, llama.cpp with ggml-vulkan on PS5_Vulkan's RADV, built on Linux.

Building · Console notes · Porting · Research · Models that fit · Roadmap · Changelog · The original payload

Built around it

  • ps5lm_ha by phoinixgrr: a Home Assistant integration that wakes the console from rest mode, starts PS5LM, waits for the model and puts the console back to sleep when done, with the model and console readings as sensors.

Experimental multi-console fleet

Fleet splits one dense llama/qwen2 GGUF across several consoles over llama.cpp's RPC, controlled by one PC: one model across their memory, not a copy on each, so a model too large for one PS5 can run on two or more. The PC can add its CPU or GPU as another worker. The worker is part of the app and starts only when /data/PS5LM/fleet-worker.txt asks for it (v0.10.0 had it in a separate ps5lm-app-fleet zip). Two-worker CPU inference is tested in CI, and a PS5 worker has served a model together with a PC's CPU, a Mac's GPU and an RTX 3090 (CUDA and Vulkan), but it is experimental: Qwen 3.8's qwen35 layout is not admitted by this first planner yet, and RPC has no authentication, so it belongs on an isolated network you trust. See validation and limits.

Thanks


GPL-3.0-or-later, see LICENSE. llama.cpp keeps its MIT licence, Manrope its OFL. No Sony SDK files, keys, firmware or model weights are in this repository.

PS5LM is not affiliated with Sony Interactive Entertainment. "PlayStation" and "PS5" are trademarks of Sony Interactive Entertainment.

About

llama.cpp on a jailbroken PS5: run any GGUF model natively on the console, starting with Qwen 3.8

Topics

Resources

Stars

804 stars

Watchers

7 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages