String Hopper
Local models

Set up a server

String Hopper can use a model server running on your own Mac instead of Apple's on-device model. This page covers starting a server. Any server with an OpenAI-compatible /v1 API works.

When to use one

  • Your Mac can't run Apple Intelligence, or you keep it turned off.
  • You want the model to see your photos. A vision model reads colour and fabric directly from the photo. Apple's model works from a scan of the photo.
  • Your closet is big. Apple's on-device model can read only a limited amount at once, and a large closet can exceed it. A local model with a larger context window can read more.
  • You already run one and want to choose the model yourself.

If none of these apply, Apple's on-device model needs no setup and you can skip this section.

Connect it to the app

Once a server is running with a model loaded, follow Connect a local model to enter its address in Settings and test it.

Server-by-server

Use whichever you already have. If you have none, LM Studio has a graphical setup and Ollama is set up from a terminal.

LM Studio

  1. Download a model from the app's search.
  2. Open the Developer tab and start the server. Or from a terminal:
lms server start

Address: http://localhost:1234/v1. LM Studio enforces the answer format String Hopper asks for, which makes lenses more dependable on small models.

Ollama

Pull a model. The server is already running if the Ollama app is open.

ollama pull gemma4:e4b

Address: http://localhost:11434/v1.

Context window

Ollama loads models with a small context window by default. If lenses start missing pieces on a larger closet, raise it — 8,000 tokens or more — in Ollama's settings, or start the server with OLLAMA_CONTEXT_LENGTH=8192 ollama serve.

llama.cpp

Run llama-server with a GGUF model. --jinja turns on the model's own chat template, which chat's tools need.

llama-server -hf <user>/<model>-GGUF --port 8080 --jinja -c 8192

Address: http://localhost:8080/v1. Replace <user>/<model>-GGUF with a repository from Hugging Face.

MLX server

On Apple silicon you can serve MLX builds of a model.

pip install mlx-lm
mlx_lm.server --model mlx-community/<model> --port 8000

Address: http://localhost:8000/v1. mlx-lm serves text only, so photos are read by Vision on your Mac unless you're running a server that accepts images.

Anything else

Any server with /v1/models and /v1/chat/completions will do, including one on another machine on your network — use that machine's IP address instead of localhost.

Photos: can your model see?

String Hopper checks this for you. It asks the server whether the model takes images, and Settings shows the answer under the model list. The answer determines what happens when you add a piece from a photo or attach one in chat.

Settings saysWhat happensWhen
This model can look at photosThe photo is shrunk to at most 1024 pixels and sent to your model, which fills in the name, category, colours, fabric and tags.The server says the model takes images.
This model can't look at photosVision on your Mac reads the photo, and the model only sees the labels and colours it found.The server says it doesn't, or the model refused a photo.
Photos go to this modelThe photo is sent. If the server refuses it, the same request is made again from Vision's reading, and the model is treated as text-only until you quit the app.The server doesn't say either way.
If photo results are wrong

A few servers neither say what a model can do nor refuse a photo it can't read. They discard the photo, and the model guesses. If that happens, switch to a vision model.

What each feature needs from a model

FeatureThe model mustIf it can't
LensesAnswer in a fixed JSON shape and stick to the pieces on the list.You'll see reply wasn't in the expected format, or looks with pieces missing.
Create a lensSame — a small JSON answer.The app uses a keyword check instead, so you can still create the lens.
Add from a photoSee images.Nothing to do; Vision reads the photo instead.
ChatSupport tool calling (also called function calling), on a server that passes tools through.Chat replies in text, shows no cards, and adds nothing.

Thinking models work. If your model reasons before it answers, String Hopper shows the reasoning live while you wait, then uses only the answer. Expect each run to take longer.

Timeouts. A lens waits up to four minutes for an answer and a chat turn up to five. If a model can't finish in that time on your Mac, it is too large; use a smaller one.

The app sends these requests only to the address you entered. See what leaves your Mac.