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/systemoneAPI 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 answering requests from a laptop on a PS5 Slim. Click for the video.
Home, Models, Console, API and Settings on the 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/completionsand/v1/responses(Codex works against it), Anthropic's/v1/messages(Claude Code too) and a chat page in any browser. Point a client athttp://<console>:8081and 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 |
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.ggufOllaya 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.
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 |
- Download
ps5lm-app-vX.Y.Z.zipfrom the latest release and unzip it. - Copy the
PPSA99575folder to/data/homebrewover FTP. ShadowMountPlus adds PS5LM to the home screen. - Open PS5LM, go to Models > Suggested and get a model. Or copy a
.ggufto/data/PS5LM/models, or toPS5LM/modelson a USB drive. - Load it. Once Home says Ready, open
http://<console>:8081in 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
PPSA99575toexact_title_idsin 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/modelsand give/data/PS5LMand 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 |
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 12Introspection records the request fields, the tensor names, and the cost of each option.
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
- 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.
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.
- abhi245y, who built the native GPU app this one grew from (PS5LM Plus).
- llama.cpp and ggml, which do the actual work.
- Mihawk-99 for PS5_Vulkan and RADV on the PS5, and
PS5CEMU-HAR for the driver patches in
patches/mesa. - BlackBearReloaded for ps5-homebrew-ui, ps5-opengl and ps5-homebrew-dev-protocol, and John Törnblom for the SDK.
- Marice for ps5-exporter, which the app carries.
- Manrope (OFL) for the type, and PocketVibe for the interface sounds.
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.