Requirements
- BRICKS Foundation 2.25 or later
- A Buttress server reachable on the LAN — see Buttress installation
- The server is bound to the same workspace as the device — see Workspace binding
How it works
- When the device’s workspace has at least one bound Buttress server, the launcher starts a discovery manager and obtains a workspace-scoped JWT.
- The manager listens for UDP announcements on port
8089and pools every server whoseserverIdis on the workspace’s bound list. - Each LLM, MLX, Speech-to-Text (GGML), Text-to-Speech (GGML), or Vector Store brick reads its Buttress (Remote Inference) group and either picks a server automatically or uses a manually configured URL. The Speech-to-Text (ONNX) and Text-to-Speech (ONNX) Generators discover a capable server automatically.
- The capability comparison decides whether to run locally, remotely, or either; the strategy you pick on the brick decides how that recommendation is interpreted.
Configure offloading on a brick
In BRICKS Controller > Config Editor, open any LLM, MLX, Speech-to-Text (GGML), Text-to-Speech (GGML), or Vector Store brick. The Buttress (Remote Inference) property group appears under Connection. The Speech-to-Text (ONNX) and Text-to-Speech (ONNX) Generators do not expose this group yet — they discover a capable server on the LAN automatically.Strategies
prefer-buttress is the default because Foundation devices that opt into Buttress almost always do so because the local hardware is not the fastest path.
Fallback
Pick
use-local if you want the brick to keep working when the LAN drops; pick no-op if you would rather see a clear failure than silently consume battery on a model the device can’t handle.
Vector Store
A Vector Store brick offloads the embedding model and the tokenizer, so a device can index and search documents without downloading either GGUF. Only the GGML source is offloaded — with the OpenAI Compatible source the brick calls that API directly and Buttress never enters the picture. The brick asks for aggml-llm generator, the same backend type LLM bricks use, so auto-discovery picks any server that hosts one. The server then loads the brick’s own embedding model in embedding mode, downloading it if it does not have it yet. Give the Vector Store its own embedding model — pointing it at the chat model a nearby LLM brick uses does not work.
Pick the embedding and tokenizer models from the Hugging Face picker rather than pasting a bare model URL. Buttress needs a repo id, and a brick that only has a URL silently stays local.
What runs remotely depends on the tokenizer:
Embeddings written by the remote model carry the same model description as locally produced ones, so an index built on-device stays searchable after you switch the brick to Buttress, and back, as long as the model is the same.
Text-to-Speech (GGML)
A Text-to-Speech (GGML) brick offloads synthesis to the server’sggml-tts generator, which loads the same backbone and codec / vocoder pair the brick would load locally. The server returns a WAV, and the device downloads it into the brick’s own audio cache — so the local cache-hit and cleanup behavior is the same whether the audio was synthesized on-device or remotely.
Point Model URL and Vocoder URL at Hugging Face resolve URLs, or pick them with the Hugging Face picker. The brick recovers the repo id from the URL to tell the server what to load; a model URL that is not a Hugging Face resolve URL keeps the brick on local inference.
Before offloading a non-OuteTTS model, the brick checks that the server advertises that model’s family — OuteTTS, Soprano, NeuTTS, CSM, Qwen3-TTS, MOSS-TTSD, MOSS-TTS-Realtime, Chatterbox, or BlueMagpie. If it doesn’t, the brick stays local rather than returning audio that says the wrong thing. This check runs on every strategy, including prefer-buttress.
When the workspace changes
If the device’s workspace changes — for example, an admin reassigns it from BRICKS Controller — the launcher:- Stops the active Buttress manager and closes any open WebSocket connections.
- Discards the cached access token.
- Starts a new manager with the new workspace’s bound-server list and a freshly issued token.
Audio uploads (STT)
Speech-to-text transcription needs the audio file on the server. The brick uploads toPOST /buttress/upload over HTTPS, and the server stores the file in the temp directory configured by [server] temp_file_dir (default <os-tmpdir>/.buttress). After transcription, the file is auto-cleaned along with the rest of the session’s temp files.
Text-to-speech runs the other direction: the server returns the synthesized audio as a WAV file, and repeated phrases are served instantly from the server’s on-disk output cache.
Troubleshooting
Related
Buttress overview
What Buttress is, when to use it, and how the system fits together.
Workspace binding
How servers and devices end up on the same workspace.