Frequently asked questions about installing, running, and troubleshooting ODS.
Also see:
docs/FAQ.mdfor hardware sizing and how ODS compares with other local AI tools.
ODS installs a local AI stack on your own hardware:
- a local model server (llama.cpp's
llama-server: in a container on Linux, natively with Metal on macOS, and asllama-server.exefor AMD GPUs on Windows) running a model the installer picks from its catalog for your hardware; - the ODS Dashboard (http://localhost:3001), with the Portal chat agent on qualified Linux hosts and the Models page for downloading and switching models;
- Open WebUI (http://localhost:3000) as the chat UI on hosts without Portal.
The default Core Only install is deliberately small. Full Stack (or
ods enable <service> later) adds voice (Whisper speech-to-text through
Speaches, Kokoro text-to-speech), n8n workflows, RAG (Qdrant and embeddings),
Privacy Shield, LiteLLM, Hermes, ComfyUI and more.
The installer checks free disk space (a blocker) and recommends RAM (a warning) for your hardware tier, and it needs room for the chosen model plus 15 GB:
| Hardware (GPU 8000 memory) | Free disk | Recommended RAM |
|---|---|---|
| NVIDIA GPU under 4 GB (tier 0) | 15 GB | 4 GB |
| CPU only, or GPU 4-11 GB (tier 1) | 30 GB | 16 GB |
| 12-19 GB (tier 2) | 50 GB | 32 GB |
| 20-39 GB (tier 3) | 80 GB | 48 GB |
| 40-89 GB (tier 4) | 150 GB | 64 GB |
| AMD Strix Halo, under 90 GB / 90 GB or more | 80 / 120 GB | 64 / 96 GB |
Linux (Ubuntu, Debian, Fedora/RHEL, Arch and openSUSE families), Apple Silicon
Macs with Docker Desktop, and Windows with WSL2 and Docker Desktop are
supported; on most Linux distributions the installer installs Docker for you. See the
Support Matrix for what is validated on each
platform. The Portal agent needs Ubuntu 24.04/26.04 or Debian 12 with systemd;
on other Linux hosts, choose Full Stack (or pass --all or --hermes) to get the
Hermes agent, which Core Only leaves off.
Initial setup: Yes, to download models and container images.
After setup: Inference, chat and your files work offline. A few optional features (web search, update checks, cloud providers) use the network; see the next answer.
Inference, chat history, voice processing and your documents stay on your hardware, and ODS does not collect telemetry. Bundled services run with their own usage telemetry and update checks turned off. By default ODS reaches the internet only to:
- download models and container images, at install time and when you add models;
- check GitHub for new ODS releases (set
DISABLE_UPDATE_CHECK=truein.envto stop it); - run web searches the Portal agent makes for you, through its search provider.
Fresh Pixel installs use OpenClaw's keyless Parallel search; set
PIXEL_WEB_SEARCH_PROVIDER=searxngin.envbefore installing (or re-run the installer) to use the bundled local SearXNG instead.
Optional features such as cloud mode, remote model providers, the OpenCode web UI's search, and n8n templates contact their own services when you turn them on. The optional Privacy Shield redacts PII from requests you route through it.
ODS is free and open source. Original ODS code is Apache-2.0; some bundled components have their own licenses (see Licensing). You pay only for your hardware and its electricity.
Linux: the installer installs Docker itself on supported distributions. If
it could not, install Docker Engine for your distribution
(https://docs.docker.com/engine/install/), add yourself to the docker group
(sudo usermod -aG docker $USER), log out and back in, and re-run the installer.
Windows and macOS: install Docker Desktop, start it once, then re-run the installer. On Windows, Docker Desktop must use the WSL2 backend.
Run it with Bash from the ods folder: bash install.sh. Do not run the
installer as root or with sudo; it asks for sudo itself when it needs it.
Large models take a while. Downloads resume if interrupted, and the full model
downloads in the background after the bootstrap model is running (see the next
question), so you can use ODS meanwhile. Progress is in
~/ods/logs/model-upgrade.log.
ODS starts with a small Qwen3.5 2B model (about 1.3 GB) so you can chat right
away. It downloads your full model in the background and switches to it
automatically once the download is verified; the Dashboard shows the progress.
Chat pauses briefly while the model server restarts on the new model. If the
download failed or stalled, ods restart retries it.
./install.sh --no-bootstrapThe installer downloads the full model first, so you wait longer before first
use. On Windows, use -NoBootstrap.
Use Dashboard → Models: download a catalog model (or import a GGUF from Hugging Face), choose a context size, and load it. If the new model fails its health check, ODS restores the previous one automatically.
On Linux and WSL, ods model current shows the active model, and
ods model swap <tier> switches to that tier's default model if it is already
downloaded. See Model Management.
Yes. Copy the single .gguf file into ~/ods/data/models/, then load it from
Dashboard → Models. Editing GGUF_FILE and LLM_MODEL in .env by hand
bypasses the health check and the automatic rollback; if you do it anyway,
apply it with ods restart llama-server.
The installer measures your GPU memory (or system RAM) and picks a model and context size from its catalog; the hardware table in the README shows the current picks. Dashboard → Models lists every catalog model with a memory estimate, so you can choose a different one.
Check the driver:
nvidia-smiODS needs NVIDIA driver 570 or newer (575 or newer for GPU-accelerated
Whisper; older drivers run Whisper on the CPU). On Ubuntu the installer offers
to install driver 570 and asks you to reboot. Blackwell GPUs need the open
kernel modules (sudo apt install nvidia-open). The installer also sets up the
NVIDIA Container Toolkit for Docker.
On WSL2: update the driver in Windows only. Never install NVIDIA drivers inside Ubuntu.
The model and its context don't fit in GPU memory. In Dashboard → Models,
choose a shorter context or a smaller model; each option shows a memory
estimate. Advanced: set LLAMA_ARG_CACHE_TYPE_K=q8_0 and
LLAMA_ARG_CACHE_TYPE_V=q8_0 in .env, then run ods restart llama-server.
To run on the CPU only (slow), reinstall with GPU_BACKEND=cpu ./install.sh.
Run .\install.ps1 from a normal (not elevated) PowerShell window; it guides
WSL2, Ubuntu and Docker Desktop setup. To enable WSL2 by hand:
wsl --install -d Ubuntu-24.04Restart Windows if asked, then run the installer again. See the Windows Quickstart.
ods status
ods logs dashboard
ods logs dashboard-apiGive the services a minute after starting. The Dashboard is
http://localhost:3001 (its API listens on 3002); Open WebUI, if installed, is
http://localhost:3000. Restart with ods restart.
Linux/macOS:
cd ~/ods
./ods-uninstall.sh --forceWindows:
$installDir = "$env:USERPROFILE\ods"
cd $installDir
.\ods.ps1 uninstall --forceThese use ODS's saved compose stack when available, remove the matching containers and volumes, and then remove the install directory. Use --keep-data or --keep-models if you want to preserve local state.
--keep-data keeps only the data folder inside the install directory. It still deletes .env (your settings and generated secrets) and config/, and on Linux and macOS the backups in ~/.ods. If you plan to reinstall over the kept data, copy those somewhere safe first and put .env back before running the installer; without it, the installer generates new secrets.
On Windows, if the runtime folder is partial and .\ods.ps1 is missing, run the cleanup from a source checkout:
cd ODS
.\ods\installers\windows\ods.ps1 uninstall --forceOn Linux and macOS, use ods stop to pause services. It keeps the stopped containers so the uninstaller can verify which Docker volumes belong to this installation. If you need to run Docker Compose manually on those platforms, ODS does not use a top-level docker-compose.yml; use the saved flags:
cd ~/ods
docker compose $(cat .compose-flags) stopFor a full removal, use ./ods-uninstall.sh --force. If an older ods stop already removed the containers, the uninstaller may refuse to purge volumes it cannot prove belong to this installation. --keep-data preserves them; a full purge then needs individual ownership review.
Open http://localhost:3001 for the ODS Dashboard (Portal, Models, services and settings). Open WebUI, if installed, is at http://localhost:3000. The installer prints the exact addresses when it finishes.
There is no default password, and the installer prints only addresses. On the ODS computer, http://localhost:3001 opens without signing in. From another device you sign in with a dashboard password you choose.
To set or change it, open Your profile → Change dashboard password, or run
ods dashboard-login on the ODS computer for a one-time link. Generated
service secrets (for example n8n's N8N_USER and N8N_PASS) are in
~/ods/.env, which only your user can read.
Yes. Reinstall with ./install.sh --lan, or set BIND_ADDRESS=0.0.0.0 in
Dashboard → Settings → Advanced and run ods restart. The Dashboard is then at
http://<your-ip>:3011 and always asks for sign-in; Open WebUI, if installed,
is at http://<your-ip>:3000 with its sign-in turned on. For
http://<device>.local addresses, enable the ODS proxy
(ods enable ods-proxy). Read
Quick LAN Access first: it explains which
passwords to set before you expose anything.
Workflows run in n8n, which is optional: choose Full Stack or --workflows
when installing, or run ods enable n8n and then ods start n8n. Open
http://localhost:5678 and sign in with N8N_USER and N8N_PASS from
.env. If someone created n8n's owner on its first-run screen before ODS
managed it, that account keeps working instead. Then create a workflow, add
a trigger and actions, save it, and switch it to Active.
n8n is the optional workflow engine bundled with ODS. It provides a visual editor, hundreds of integrations, webhook triggers, scheduled jobs and AI agent nodes that can use your local model.
Yes, optionally. Add OPENAI_API_KEY or ANTHROPIC_API_KEY to .env, run
ods mode cloud (or ods mode hybrid), then ods restart; LiteLLM then routes
requests to your provider.
To strip personal data from requests first, enable Privacy Shield
(ods enable privacy-shield, then ods start privacy-shield) and send
OpenAI-style requests to http://localhost:8085/chat/completions with
Authorization: Bearer <SHIELD_API_KEY from .env>. Only requests sent to port
8085 are scrubbed.
Voice is optional: choose Full Stack or --voice when installing, or run
ods enable whisper and ods enable tts. Talk to ODS at
http://localhost:3001/talk (ODS Talk), or use Open WebUI's voice mode if it is
installed.
deepdml/faster-whisper-large-v3-turbo-ct2 on NVIDIA GPUs with driver 575 or
newer, and Systran/faster-whisper-base elsewhere. Change it with
AUDIO_STT_MODEL in .env, then run ods restart and ods stt download.
ods stt status shows what is installed.
Kokoro's af_heart voice by default. Set AUDIO_TTS_VOICE in .env (for
example af_bella, am_adam or am_michael) and run ods restart to change it.
ods logs <service> # e.g. ods logs llm, ods logs dashboard-api
ods logs <service> 500 # more linesods list shows the service names. ODS has no top-level docker-compose.yml,
so plain docker compose logs fails in ~/ods; for raw Compose access use
docker compose $(cat .compose-flags) logs -f. On macOS, use
~/ods/ods-macos.sh logs <service>.
ods restartOr restart one service:
ods restart llama-server- Check the services:
ods status - Read the API log:
ods logs dashboard-api - Check that nothing else uses port 3002:
sudo lsof -i :3002 - Restart it:
ods restart dashboard-api
Check disk space:
df -hCheck the model files:
ls -la ~/ods/data/models/If a download is missing or incomplete, download the model again from
Dashboard → Models, or run ods restart to resume a stalled bootstrap upgrade.
Speech-to-text: check the microphone level, reduce background noise, or
choose a larger AUDIO_STT_MODEL.
Text-to-speech: check the speakers or headphones, or try another
AUDIO_TTS_VOICE.
Check GPU use:
nvidia-smi
ods gpu statusIf the GPU is fully busy, use a smaller model or a shorter context in
Dashboard → Models. If no llama-server process appears in nvidia-smi, the
model is running on the CPU; see "NVIDIA GPU not detected" above.
Check that the webhook URL is reachable from the service that calls it, read
ods logs n8n, and make sure the workflow is switched to Active in the editor.
ODS gives Open WebUI its settings each time it starts, from .env, your
hardware and mode, and the Dashboard Settings page, so changes made in Open
WebUI's Admin Panel > Settings last until Open WebUI restarts. Make lasting
changes in ODS. Accounts, chats, workspace models, knowledge and prompts are
kept as usual. See Settings come from ODS.
Read ods logs open-webui. The first start of a new Open WebUI version migrates
its database before it answers, which can take many minutes on a large
install; let it finish. If ODS refused to start it, the log says why, for
example two accounts whose email addresses differ only in case. ODS copies the
database to data/open-webui/ods-backups/ before each new version; to go
back, follow Upgrades and backups.
Use the ODS uninstaller with --keep-data if you want to remove the
application while keeping its volumes (back up .env first; see the uninstall
answer above). For a full ODS removal, run
./ods-uninstall.sh --force; it checks volume ownership before deleting
data. If it cannot prove ownership, it leaves the volumes for individual
review. Avoid Docker-wide volume cleanup commands on a host with other apps.
See How do I switch to a different model? and Can I use my own GGUF model? above.
ODS has no built-in HTTPS; the optional ODS proxy and Tailscale add-on are HTTP only. For TLS, put your own reverse proxy (Caddy, nginx, Traefik) in front of ODS, or reach it over a private VPN such as Tailscale. See Exposing to Internet. The Dashboard asks for sign-in when it is reached through a proxy.
Yes. The installer detects multiple GPUs and assigns them automatically. Use
ods gpu status and ods gpu assignment to inspect the assignment and
ods gpu reassign (--auto or --manual) to change it. Don't edit the compose
files.
ods backup # chats, workflows, vectors and agent state
ods backup -t full -c # also downloaded models, compressed
ods restore # restore a backupBackups go to ~/ods/.backups (the newest five are kept). On Portal (Pixel)
installs, ordinary backups refuse to run because they can't capture Portal's
state; ods backup -t config still works.
ods update refreshes the container images and recreates the containers; it
does not change ODS code. To get new ODS code, including security fixes:
ods backup
git clone --depth 1 https://github.com/Osmantic/ODS.git ~/ods-update
cd ~/ods-update/ods && ./install.shThis updates ~/ods in place and keeps .env and data/. Don't use --force
or uninstall and reinstall to update. ~/ods is not a git checkout, so
git pull there does nothing. See
Updating an existing installation.
In folders under ~/ods/data/ rather than Docker volumes: for example n8n's
workflows and credentials in ~/ods/data/n8n/ and Open WebUI's in
~/ods/data/open-webui/, which also keeps copies of its database from before
the last two Open WebUI upgrades in ods-backups/. Stop a service before
copying its files, or use ods backup.
Yes. See Can I send requests to cloud APIs? above.
Dashboard → GPU Monitor shows per-GPU use, memory and temperature, and
Dashboard → Usage shows token and cost history. ods gpu status shows the GPU
view in a terminal.
All ports bind to 127.0.0.1 unless you enable LAN access.
| Port | Service |
|---|---|
| 3001 | ODS Dashboard |
| 3011 | Dashboard from other devices (sign-in required; LAN mode only) |
| 3002 | Dashboard API |
| 3000 | Open WebUI (when installed) |
| 11434 | Model server API (llama-server; 8080 for native llama-server on macOS) |
| 4000 | LiteLLM (when enabled) |
| 8085 | Privacy Shield (when enabled) |
| 5678 | n8n (when enabled) |
| 9000 | Whisper speech-to-text (when enabled) |
| 8880 | Kokoro text-to-speech (when enabled) |
| 6333 | Qdrant vector database (when enabled) |
| 8090 | Embeddings (when enabled) |
| 80 | ODS proxy (when enabled) |
Set the service's *_PORT variable in ~/ods/.env (for example
WEBUI_PORT=3100) and run ods restart.
- Main README:
README.md - Product overview:
ods/README.md - Security:
SECURITY.md - Installer architecture:
docs/INSTALLER-ARCHITECTURE.md
- Questions: GitHub Discussions
- Bugs: GitHub Issues
- Security problems: report them privately through Security → Report a vulnerability or security@osmantic.com, never in a public issue.
Create a redacted support bundle and attach it to your issue after reviewing it:
cd ~/ods
scripts/ods-support-bundle.shSee Support Bundle for what it contains.