ODS README

The project's README from github.com/Osmantic/ODS. As one markdown file: README.md.

ODS

Osmantic Deployment System

Osmantic

Turn your PC, Mac, or Linux box into a private AI server.

AI server and homelab setup is rapidly becoming a solved problem. It should feel that way for everyone.

License: Apache 2.0 GitHub Stars Release

Watch the demo

ODS installs and wires together everything you need to run AI locally, so you do not have to assemble Ollama, Open WebUI, n8n, ComfyUI, and privacy tools by hand:

No cloud required. No subscriptions required. Your prompts and data stay on your machine unless you choose otherwise. Cloud and hybrid API modes are optional when you want them.

Release validation: Operational changes are checked with a release-grade fleet and distro lab: zero-prereq bootstrap, fresh installs, product flows, full-model capabilities, lifecycle recovery, and the final User Green gate. See Release Validation for what a green run proves.

Repo layout: the repository root holds the public README, installers, security policy, GitHub workflows, and project coordination docs. The ods/ directory is the product runtime: services, installer phases, compose overlays, dashboard, CLI, tests, and operator docs.

Stable consumption: v2.6.0 is the current stable release. main moves quickly; use it for active development and validation candidates. For forks, appliances, labs, or production-like installs, pin a tagged release or audited commit and keep your own validation receipt. Stable patch fixes land on release/2.6.x before being merged forward. See Release Channels, Installer Trust, and Forkability.

Get Started

Choose your system, copy the block, run it in a normal terminal. ODS installs the stack, picks a model for your hardware, starts the services, and gives you the local web UI.

Linux or macOS

curl -fsSL https://install.osmantic.com/ods.sh | bash

Windows PowerShell

$ProgressPreference = "SilentlyContinue"
$odsSrc = Join-Path $env:TEMP ("ods-install-" + [guid]::NewGuid().ToString("N"))
$odsZip = Join-Path $odsSrc "ods-main.zip"
New-Item -ItemType Directory -Path $odsSrc | Out-Null
Invoke-WebRequest "https://github.com/Osmantic/ODS/archive/refs/heads/main.zip" -OutFile $odsZip
Expand-Archive -LiteralPath $odsZip -DestinationPath $odsSrc -Force
cd (Get-ChildItem -LiteralPath $odsSrc -Directory | Select-Object -First 1).FullName
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\install.ps1

Prerequisites: Docker must be installed and running. On Windows, use Docker Desktop with the WSL2 backend enabled and run the block in a normal, non-Administrator PowerShell window.

The hosted Linux/macOS endpoint proxies the current bootstrap from repository main. Reviewed merges reach it automatically after edge-cache refresh. ODS_REF selects a compatible repository checkout. See Installer Trust to inspect the script or install a stable release or audited commit manually.

Windows users should not run the curl ... | bash command from PowerShell. The PowerShell block above downloads the source ZIP and runs the same Windows installer used by the clone-based workflow. For more detail, see the Windows Quickstart.

After install, open http://localhost:3000 and start chatting.

Uninstall later with the matching platform command:

cd ~/ods
./ods-uninstall.sh --force
$installDir = "$env:USERPROFILE\ods"
cd $installDir
.\ods.ps1 uninstall --force

Windows recovery note: if the runtime folder is partial and .\ods.ps1 is missing, run the same command from a source checkout as .\ods\installers\windows\ods.ps1 uninstall --force. It removes Docker resources labelled as the ODS compose project before removing the runtime directory.

API endpoint: Linux Docker installs expose llama-server on http://localhost:11434 by default (OLLAMA_PORT) while containers use llama-server:8080. macOS native Metal and Windows native/Lemonade paths use http://localhost:8080 unless overridden. Open WebUI stays on http://localhost:3000.

No GPU? ODS also runs in cloud mode — same full stack, powered by OpenAI/Anthropic/Together APIs instead of local inference:

./install.sh --cloud

Port conflicts? Every port is configurable via environment variables. See .env.example for the full list, or override at install time:

WEBUI_PORT=9090 ./install.sh

New here? Read the Friendly Guide or listen to the audio version — a complete walkthrough of what ODS is, how it works, and how to make it your own. No technical background needed.


At A Glance

Question Answer
What is it? A local AI server stack for your own hardware, with a one-command Linux/macOS installer and a PowerShell installer for Windows.
Who is it for? People who want private AI at home, in a lab, or on a workstation without hand-wiring a dozen services.
What do I get? Local inference, Open WebUI chat, a control dashboard, voice, agents, workflows, RAG, search, image generation, privacy tools, observability, and developer tools.
What does it run on? Linux, Windows with WSL2/Docker Desktop, and macOS Apple Silicon.
Is cloud required? No. Local mode is the default; cloud and hybrid API modes are optional.
If you know... ODS adds...
Ollama / llama.cpp The surrounding server stack: chat, dashboard, voice, RAG, workflows, agents, privacy, and service management.
Open WebUI A full installer and control plane around Open WebUI, plus pre-wired local services.
AnythingLLM Broader local AI appliance behavior beyond RAG: inference, chat, voice, workflows, image generation, and ops.
n8n self-hosted AI starter kits Workflow automation as one part of a larger private AI server.

Current Platform Support

Platform Status
Linux (NVIDIA + AMD + Intel Arc) Supported — install and run today
Windows (NVIDIA + AMD) Supported — install and run today
macOS (Apple Silicon) Supported — install and run today

Tested Linux distros: Ubuntu 24.04/22.04, Debian 12, Linux Mint 21.3, Fedora 41+, Rocky Linux 9, Arch Linux, Manjaro, CachyOS, and openSUSE Tumbleweed. Other distros using apt, dnf, pacman, or zypper should also work — open an issue if yours doesn't.

Release validation: Operational changes run through a release-grade gate that covers zero-prereq bootstrap, clean installs, product behavior, full-model capabilities, lifecycle recovery, and User Green. See Release Validation and the Validation Matrix.

Windows: Requires Docker Desktop with WSL2 backend. NVIDIA GPUs use Docker GPU passthrough; AMD Strix Halo runs through the platform-specific accelerated path documented in the Windows installer and support matrix.

macOS: Requires Apple Silicon (M1+) and Docker Desktop. llama-server runs natively with Metal GPU acceleration; all other services run in Docker.

See the Support Matrix for supported platform claims and the Validation Matrix for the layered test surface used to test those claims.


Why ODS?

A handful of companies control the vast majority of global AI traffic — and with it, your data, your costs, and your uptime. Every query you send to a centralized provider is business intelligence you don’t own, running on infrastructure you don’t control, priced on terms you can’t negotiate.

If AI is becoming critical infrastructure, it shouldn’t be rented. Self-hosting local AI should be a sovereign human right, not a career choice.

Because running your own AI shouldn't require a CS degree and a weekend of debugging CUDA drivers. Right now, setting up local AI means stitching together a dozen projects, writing Docker configs from scratch, and praying everything talks to each other. Most people give up and go back to paying OpenAI.

We built ODS so you don't have to.

Manual install (Linux)
git clone https://github.com/Osmantic/ODS.git
cd ODS/ods
./install.sh
Windows (PowerShell)

Requires Docker Desktop with WSL2 backend enabled. Install Docker Desktop first and make sure it is running before you start.

Open a normal PowerShell session and run:

$ProgressPreference = "SilentlyContinue"
$odsSrc = Join-Path $env:TEMP ("ods-install-" + [guid]::NewGuid().ToString("N"))
$odsZip = Join-Path $odsSrc "ods-main.zip"
New-Item -ItemType Directory -Path $odsSrc | Out-Null
Invoke-WebRequest "https://github.com/Osmantic/ODS/archive/refs/heads/main.zip" -OutFile $odsZip
Expand-Archive -LiteralPath $odsZip -DestinationPath $odsSrc -Force
cd (Get-ChildItem -LiteralPath $odsSrc -Directory | Select-Object -First 1).FullName
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\install.ps1

The Set-ExecutionPolicy command allows the installer script to run in the current session. It does not change your system-wide policy. Running as Administrator is not recommended for the installer because user-level paths such as .opencode, data/, and .env can be created with admin-owned permissions.

The installer detects your GPU, picks the right model, generates credentials, starts all services, and creates a Desktop shortcut to the Dashboard. Manage from the runtime directory with .\ods.ps1 status; uninstall with .\ods.ps1 uninstall --force.

macOS (Apple Silicon)

Requires Apple Silicon (M1+) and Docker Desktop. Install Docker Desktop first and make sure it is running before you start.

git clone https://github.com/Osmantic/ODS.git
cd ODS/ods
./install.sh

The installer detects your chip, picks the right model for your unified memory, launches llama-server natively with Metal acceleration, and starts all other services in Docker. Manage with ./ods-macos.sh status.

See the macOS Quickstart for details.


What's In The Box

Chat & Inference

Voice

Agents & Automation

Creative

Privacy & Ops


Hardware Auto-Detection

The installer detects your GPU and first assigns a deterministic hardware tier. Linux and macOS then run the versioned catalog selector (ods/scripts/select-model.py), while Windows uses the PowerShell catalog selector in ods/installers/windows/lib/tier-map.ps1; both read ods/config/model-library.json to choose the best installable GGUF for the detected memory envelope. The final choice is written to .env as LLM_MODEL, GGUF_FILE, MAX_CONTEXT, and MODEL_RECOMMENDATION_*.

MODEL_PROFILE=qwen is the default non-Gemma catalog profile, so the effective pick can be Qwen, Phi, or DeepSeek depending on what fits best. MODEL_PROFILE=gemma4 forces Gemma 4 where available, and MODEL_PROFILE=auto uses Gemma 4 on NVIDIA, Apple Silicon, and Intel Arc tiers. Override tier selection with ./install.sh --tier 3; override the model family with MODEL_PROFILE=gemma4 ./install.sh or MODEL_PROFILE=auto ./install.sh.

When Hermes is enabled, which is the default agent path, installers keep the first-run bootstrap model at a 64K context floor and promote the full local model context to 128K where the selected model supports it. That avoids Hermes's hard 64K minimum while preserving the under-2-minute first chat experience. The examples below are current catalog-selector outputs for common hardware envelopes; exact installs can differ with detected VRAM/RAM, host architecture, existing downloads, or explicit profile overrides. Throughput still needs a local benchmark after first launch.

NVIDIA

Tier / envelope Current default catalog pick Context Example hardware
0 / 8 GB CPU fallback Qwen3.5 2B (Q4_K_M) 8K Low-RAM CPU-only
1 / 8 GB discrete VRAM Qwen3.5 9B (Q4_K_M) 32K RTX 4060, RTX 3060 12GB
2 / 12 GB discrete VRAM Phi-4 14B (Q4_K_M) 16K RTX 4070-class cards
3 / 24 GB discrete VRAM Qwen3.5 27B (Q4_K_M) 32K RTX 4090, A6000
4 / 48 GB discrete VRAM DeepSeek R1 Distill Llama 70B (Q4_K_M) 32K A6000 Ada, L40S
NV_ULTRA / 90+ GB amd64 discrete VRAM Qwen3 Coder Next (Q4_K_M) 128K Multi-GPU A100/H100
NV_ULTRA / 90+ GB arm64 unified memory Qwen3.6 35B-A3B (UD-Q4_K_M) 128K DGX Spark / GB10-class hosts

AMD Strix Halo (Unified Memory)

Tier / envelope Current default catalog pick Context Hardware
SH_COMPACT / 64 GB unified RAM Qwen3.6 35B-A3B (UD-Q4_K_M) 128K Ryzen AI MAX+ 395 (64GB)
SH_LARGE / 96 GB unified RAM DeepSeek R1 Distill Llama 70B (Q4_K_M) 32K Ryzen AI MAX+ 395 (96GB)
SH_LARGE / 124 GB unified RAM Qwen3.6 35B-A3B (UD-Q4_K_M) 128K Ryzen AI MAX+ 395 (128GB class)

The selector routes unified-memory hosts away from Qwen3 Coder Next when that model would otherwise be selected, because current repo policy documents correctness issues on those backends.

Apple Silicon (Unified Memory, Metal)

Tier / envelope Current default catalog pick Context Example hardware
0 / 8 GB unified RAM Phi-4 Mini (Q4_K_M) 128K M1/M2 base (8GB)
1 / 16 GB unified RAM Qwen3.5 9B (Q4_K_M) 32K M4 Mac Mini (16GB)
2 / 32 GB unified RAM Phi-4 14B (Q4_K_M) 16K M4 Pro Mac Mini, M3 Max MacBook Pro
3 / 48 GB unified RAM Qwen3.5 27B (Q4_K_M) 32K M4 Pro (48GB), M2 Max (48GB)
4 / 64+ GB unified RAM Qwen3.6 35B-A3B (UD-Q4_K_M) 128K M2 Ultra Mac Studio, M4 Max (64GB+)

Intel Arc (Linux, SYCL)

Tier / envelope Current default catalog pick Context Example hardware
ARC_LITE / 6 GB discrete VRAM Phi-4 Mini (Q4_K_M) 128K Arc A380
ARC_LITE / 8 GB discrete VRAM Qwen3.5 9B (Q4_K_M) 32K Arc A750
ARC / 16 GB discrete VRAM Phi-4 14B (Q4_K_M) 16K Arc A770 16GB, newer Arc GPUs

Gemma 4 profile tiers remain in the installer tier maps: E2B on entry hardware, E4B on midrange hardware, 26B-A4B on pro hardware, and 31B on large/ultra hardware.


Bootstrap Mode

No waiting for large downloads. ODS uses bootstrap mode by default:

  1. Downloads a tiny 1.5B model in under a minute
  2. You start chatting immediately
  3. The full model downloads in the background
  4. Hot-swap to the full model when it's ready — zero downtime

The bootstrap model starts with a 64K context window so Hermes can work during the first session. After the background download finishes, ODS swaps to the full model and restores the Hermes/full-model context target.

Skip bootstrap: ./install.sh --no-bootstrap


Switching Models

The installer picks a model for your hardware, but you can switch anytime:

ods model current              # What's running now?
ods model list                 # Show all available tiers
ods model swap T3              # Switch to a different tier

If the new model isn't downloaded yet, pre-fetch it first:

./scripts/pre-download.sh --tier 3    # Download before switching
ods model swap T3                    # Then swap (restarts llama-server)

Already have a GGUF you want to use? Drop the single .gguf file in data/models/, then open Dashboard -> Models and load the local entry. For older installs or headless maintenance, update GGUF_FILE and LLM_MODEL in .env, then restart with the CLI:

ods restart llm

Or restart the container directly from the installed ods directory:

docker 

ODS (Osmantic/ODS)

Searching Database…

7.6K ·GitHub
这是什么?ODS(Osmantic Deployment System)可以把你的电脑(Windows PC、Mac 或 Linux 机器)变成一台私人 AI 服务器,一次性安装并串联本地大模型推理、聊天界面、智能体、语音、RAG、图像生成和隐私工具。
这是一个应用,还是一组服务?它是一个安装器和控制平面,用来部署一整套预先配置好的服务,大多基于 Docker 容器,包括聊天界面、推理引擎、工作流自动化、图像生成、向量数据库和仪表盘。它不是单一应用。
我该怎么让它运行起来?选择你的操作系统,复制对应的一行安装命令并运行:Linux/macOS 上是通过 curl 交给 bash 执行的命令,Windows 上是 PowerShell 脚本。安装程序会检测你的 GPU、选择模型、启动所有服务,并打开本地网页界面。
开始之前,我需要装 Docker 和 GPU 吗?必须先安装并运行 Docker(Windows 上为启用 WSL2 的 Docker Desktop,macOS 上为 Docker Desktop)。GPU 不是必需的:没有 GPU 的话,你可以改用云端模式,接入 OpenAI、Anthropic 或 Together 的 API,而不使用本地推理。
它能在 Intel Mac 或较旧的硬件上运行吗?不能。macOS 仅支持 Apple Silicon(M1 及更新机型),Intel Mac 不受支持。Windows 需要启用 WSL2 的 Docker Desktop,并且已针对 NVIDIA 和 AMD 显卡完成验证。
这是为谁准备的?适合想在家里、实验室或工作站上搭建私人 AI 环境,又不想自己手动串联 Ollama、Open WebUI、n8n、ComfyUI 等类似工具的人。
我的数据会离开我的电脑吗?默认不会。所有内容都在本地运行,你的提示词只留在自己的硬件上,除非你主动切换到可选的云端或混合 API 模式。
开箱即用会预装哪些服务?Open WebUI 用于聊天,llama-server 用于推理,LiteLLM 作为 API 网关,Whisper 和 Kokoro 负责语音,n8n 和 Hermes Agent 负责自动化与智能体,Qdrant 和 SearXNG 负责 RAG 与搜索,ComfyUI 负责图像生成;另外还有仪表盘、Privacy Shield,以及用于运维的 Token Spy。
Hermes Agent 和 OpenClaw 是什么?Hermes Agent 是默认的本地优先自主/浏览器智能体,带有记忆和技能功能,需通过 magic-link 代理才能访问。OpenClaw 是它所取代的旧版自主智能体,现已弃用,但在迁移期间仍需手动选择启用。
V3 可以在生产环境中稳定使用吗?本仓库是 V3 预发布版,用于在正式发布前进行公开测试。main 分支更新很快,包含待验证的候选版本。因此,如果用于生产或实验室环境,建议固定使用稳定版 v2.6.0 或经过审计的 commit。
为什么不直接手动搭建 Ollama 和 Open WebUI?手动拼接推理、聊天界面、工作流自动化、RAG 和隐私工具,意味着要从头编写 Docker 配置,还要自己排查 GPU 驱动问题。而 ODS 会自动检测硬件,并用一条命令把所有这些串联起来。
Creator
Osmantic
Size
130.8 MB
Stars
7.6K
Age
8mo
Commits · 90 Days