docs: OKF v0.1 compliance pass + fact-check + 3 research briefs

- Migrate all 127 non-reserved docs to OKF v0.1 frontmatter (type/description/tags/timestamp); fix 13 YAML issues, 2 duplicate-FM blocks, strip reserved-page FM
- Restructure log.md to OKF (## YYYY-MM-DD, newest-first)
- Fact-check against scripts/AGENTS.md ground truth: fix 6 false 'Active' banners on retired runbooks, 96->114 GiB GTT, deployment.md vs deploy-plan.py/deploy-remote.sh, Deployment Flow frank-medium=Quadlet, Calibre 9.9.0->9.15.0 + CVE-2025-7404 conflation, Copyparty v1.20.24, RomM 5.3.0 breaking change
- Move *arr docs to new FrankBook-Pro/ section (git mv, link-safe)
- Write active runbook bodies from ground truth (frank-large, frank-small)
- Add 3 research briefs + HTML report: Local TTS and Voice Cloning, AI Job Search and Resume Tools, Most Popular Self-Hosted AI Apps (Jun-Sep 2026)
- Add upstream-version rows to ComfyUI/OpenWebUI/Hermes app docs
- All 336 tests pass; 136 pages, 0 unresolved wikilinks
This commit is contained in:
Frank
2026-09-22 02:09:41 -07:00
parent 24f7a7772d
commit 93d1181fee
103 changed files with 2047 additions and 4329 deletions
@@ -0,0 +1,214 @@
---
type: research
description: "Self-hosted AI job-search and resume-formatting applications: the 2026 landscape, local-LLM fit, and a recommended homelab stack."
tags:
- research
- job-search
- resume
- self-hosted
timestamp: 2026-09-22
---
# AI Job Search and Resume Tools
Research brief for self-hostable (Docker/Podman) open-source applications in two
categories: (a) **job search** — finding jobs, matching, tracking applications —
and (b) **resume/CV formatting** — building, tailoring, and optimizing. Target
environment: this homelab (2 Ubuntu GPU servers + 1 macOS mini, Podman/Quadlet,
Caddy, local LLMs via Ollama/llama.cpp).
## The Two Shapes
The space split into two distinct shapes in 2026:
1. **Web-app trackers** — Dockerized dashboards for tracking applications,
resumes, and AI-assisted matching/tailoring (JobSync, offerPilot, JobNavigator
on the job-search side; Reactive Resume, Resume Matcher, OpenResume, ResumeLM
on the resume side). The natural homelab fit: one `docker compose up` (or
Quadlet unit), data in a local volume, AI pointed at a local Ollama/llama.cpp
endpoint.
2. **CLI agent frameworks** — "bring your own AI coding CLI" tools that run the
whole job search as local files + prompts (career-ops, MadsLorentzen/ai-job-search).
Viral in 2026 (72k and 44k stars) and the strongest at *finding* jobs (portal
scanning) and *tailoring* CVs, but not self-hosted web services — they run on
your machine against a paid AI CLI (Claude Code, Codex, etc.).
**Strongest self-hostable picks for this fleet:** JobSync (MIT, Ollama-as-default
AI + MCP server), Resume Matcher (Apache-2.0, best dedicated tailoring tool),
Reactive Resume (MIT, best pure resume builder, 43k stars). There is **no
dominant self-hosted app for pure job *discovery*** at scale — that niche is
JobNavigator (Docker, 126 stars) plus the CLI frameworks.
## Job-Search Applications
### career-ops — https://github.com/career-ops-hq/career-ops
MIT, ~72,400 stars (verified 2026-09-22). Open-source AI job-search "command
center" that runs inside any AI coding CLI (Claude Code, Codex, Copilot, Gemini
CLI). Evaluates listings against your CV with a published five-dimension rubric,
generates ATS-optimized per-role PDF resumes, drafts Greenhouse/Ashby/Lever
application answers, scans 150+ career portals with zero API tokens, and tracks
the pipeline in a Go terminal dashboard. Never auto-submits. Uses whichever AI
CLI you already pay for; data is local Markdown/YAML you own. Not a server:
`npx @santifer/career-ops init`.
### ai-job-search (MadsLorentzen) — https://github.com/MadsLorentzen/ai-job-search
MIT, ~43,600 stars. Claude Code framework: `/setup`, `/scrape`, `/rank`,
`/apply <url>` (fit evaluation + tailored LaTeX CV + cover letter + a reviewer
agent), `/interview`, plus an ATS parseability check on generated PDFs. Portal
skills ship for the Danish market but are swappable. Prereqs: Claude Code,
Python 3.10+, Bun, a LaTeX distribution. **Caveat (README):** a GitHub fork is
always *public* and `/setup` writes personal data into tracked files — use a
private repo with this repo as `upstream`.
### JobSync — https://github.com/Gsync/jobsync
MIT, ~1,300 stars. The most complete self-hosted tracker: application tracker +
monitoring dashboard, resume management (PDF/DOCX import with AI extraction),
contacts, company pages, interview question bank, tasks/time tracking, and
**automated job discovery** (scheduled automations track companies via job-board
APIs and AI-match each listing). In-app AI assistant (resume review, job-match
scoring, tailored cover letters) and a built-in **MCP server** (Claude Desktop
can add jobs from chat). **Ollama is the default provider — fully local, no API
key**; known-good `qwen3.5:9b`. Models must support tool calling + structured
output. `git clone` + `docker compose up` → :3737. Env: `AUTH_SECRET`,
`ENCRYPTION_KEY` (encrypts stored API keys — set before adding keys, never
change after), `NEXTAUTH_URL`, `MCP_ENABLED`. Treats pasted postings as untrusted
text (prompt-injection defense).
### offerPilot — https://github.com/offercontext/offerPilot
AGPL-3.0, ~730 stars. Local-first AI job-application tracker (Chinese-first,
English README). Pipeline by company/role/stage, resume versioning, JD-linked
material generation, **mock interviews** (offline Whisper transcription in
browser, audio never persisted), interview review, **offer comparison and
salary-negotiation prep**, a "Pilot" AI assistant. Provider-agnostic (connect
your own model service). Docker: `docker build -t offerpilot . && docker run
--rm -p 127.0.0.1:8080:8080 -v offerpilot-data:/data offerpilot`. Will not
auto-submit.
### JobNavigator — https://github.com/vesaias/JobNavigator
MIT, ~126 stars. The most aggressive *discovery* tool: scrapes career pages
(Playwright + 11 ATS handlers) and job boards (JobSpy: LinkedIn, Indeed,
ZipRecruiter, Google), dedupes, AI-scores jobs against your résumés, tailors
résumés/cover letters (8+8 templates), auto-fills ATS forms, tracks applications
with funnel/Sankey stats, auto-detects Gmail replies, sends Telegram alerts.
Chrome extension for passive LinkedIn capture. AI: Claude/Codex/Antigravity
CLIs, OpenAI, OpenRouter, **Ollama**. `git clone` + `docker compose up -d`
(prebuilt GHCR images, pinnable via `JN_IMAGE_TAG`).
## Resume / CV Applications
### Reactive Resume — https://github.com/reactive-resume/reactive-resume
MIT, ~43,300 stars. The most popular open-source resume builder: 15 templates,
live preview, PDF/JSON/DOCX export, drag-and-drop, share links, JSON Resume
import, passkeys/2FA, and an **ATS checker with optional AI review**.
Provider-agnostic AI — OpenAI, Claude, Gemini, OpenRouter, **Ollama**, and any
OpenAI-compatible endpoint (base URL + model); credentials encrypted
server-side. `docker compose up -d` (PostgreSQL + optional SeaweedFS). Since
v5.1.0 PDF generation is fully client-side (`@react-pdf/renderer`) — no
Browserless/Chromium. No tracking/analytics by default; full export; one-click
delete.
### Resume Matcher — https://github.com/srbhr/Resume-Matcher
Apache-2.0, ~28,500 stars. The dedicated *tailoring* tool: upload a master
resume, paste a JD, get AI-tailored content with a review step, per-job
templates, cover-letter + interview-prep generation, **resume scoring + keyword
highlighting** against the JD, PDF export (4 templates). **Ollama (local)** plus
OpenAI, Claude, Gemini, OpenRouter, DeepSeek (built on LiteLLM). Official
Docker images: `docker run -p 3000:3000 -v resume-data:/app/backend/data
ghcr.io/srbhr/resume-matcher:latest` (API at `/api`, health at `/api/v1/health`).
**Ollama-in-Docker gotcha (README):** use `http://host.docker.internal:11434`,
not `localhost`.
### OpenResume — https://github.com/xitanggg/open-resume
AGPL-3.0, ~8,900 stars. Resume builder **and** parser. The builder produces an
ATS-friendly design (Greenhouse/Lever compatible) with real-time PDF preview;
the parser deterministically tests an existing resume's ATS readability.
**No AI** — deliberately algorithmic (PDF.js + layout heuristics). Purely
client-side (works offline, data never leaves the browser).
### ResumeLM — https://github.com/olyaiy/resume-lm
AGPL-3.0, ~326 stars. AI resume builder for tech jobs: base + tailored resumes,
ATS scoring, AI bullet editing, cover-letter generator, job/application
tracking. Cloud API providers only in practice (OpenAI, Claude, Gemini,
DeepSeek, Groq) — no Ollama/local documented. Next.js 15 + Supabase + Redis.
### rendercv (non-AI) — https://github.com/rendercv/rendercv
MIT, ~17,600 stars. LaTeX-based YAML→PDF resume builder. No AI, but the
strongest "ATS-safe by construction" formatter (single column, standard fonts);
pairs well with any AI tailoring step.
## Best Practices for a Homelab AI Resume/Job Pipeline
**Local LLM vs API.**
1. **Local-first for PII.** CVs carry name, contact, employment history, often
salary. The apps that matter all support fully-local inference: JobSync
(Ollama default), Resume Matcher (Ollama via LiteLLM), Reactive Resume
(Ollama + any OpenAI-compatible endpoint), JobNavigator (Ollama). Point them
at Ollama on the GPU server, or a llama.cpp `llama-server` OpenAI-compatible
endpoint (Reactive Resume and Resume Matcher consume it via base-URL
override).
2. **Pick a model with tool calling + structured output** for JobSync — its
assistant works by calling tools; a model without tool support "will reply
with text instead of doing anything." JobSync's tested local model is
`qwen3.5:9b`; anything 8B–32B with tool support is a reasonable bet.
3. **Raise Ollama's context to ~16k** for resume/JD matching (the 4k default
truncates long resume+JD prompts; don't go much higher).
4. **Networking:** expose Ollama on the LAN (`OLLAMA_HOST`); inside Docker on
the same host use `http://host.docker.internal:11434`.
5. **Budget reality:** the CLI frameworks are the strongest at discovery +
tailoring quality but require a paid AI CLI. For zero per-token cost and full
privacy, the Docker apps + local Ollama is the way; expect somewhat weaker
tailoring than frontier-API models.
**Privacy & data handling.**
1. **Treat job postings as untrusted input.** The best projects defend against
prompt injection in JDs (JobSync scopes the assistant to the visible job;
ai-job-search documents postings as untrusted). Keep a human review step
before anything is sent.
2. **Never auto-submit.** All the serious tools keep submission human by
design. Mass auto-application burns standing with recruiters and ATS systems.
3. **Don't fork the CLI frameworks publicly** for personal use (ai-job-search:
forks are public, `/setup` writes personal data into tracked files).
4. **Protect stored secrets.** JobSync: set `ENCRYPTION_KEY` (`openssl rand
-base64 32`) *before* adding API keys. Reactive Resume: AI credentials are
encrypted server-side.
5. **Keep the service off the public internet.** These apps store sensitive PII.
Bind to LAN / put behind the existing Caddy reverse proxy with auth (the
fleet already runs Anubis+Authentik+Caddy — route through the same guard
chain). offerPilot's own default is `127.0.0.1:8080`.
6. **Back up the data volume.** JobSync has built-in zip backup/restore (excludes
API keys by design). offerPilot and Resume Matcher keep everything in one
volume — snapshot those.
7. **Podman/Quadlet specifics:** all Docker-compose stacks map directly to
Quadlet `.container`/`.network` units for boot persistence (fleet convention).
Remember the published-port cutover gate (3737 JobSync, 3000 Resume Matcher,
8080 offerPilot) and that Ollama must be reachable from the container network
(published port or `host.containers.internal`).
## Suggested Stack for This Fleet
| Role | App | Why |
|---|---|---|
| Tracking + matching + discovery | **JobSync** (MIT) | Only self-hosted tracker with Ollama-as-default AI, job-board API discovery, MCP server, backup/restore |
| Per-JD tailoring | **Resume Matcher** (Apache-2.0) | Master-resume workflow, scoring + keyword highlighting, single container, Ollama |
| Resume building / ATS-safe PDFs | **Reactive Resume** (MIT) | 15 templates, ATS checker + AI review, JSON Resume import, client-side PDF |
| (optional) deep discovery | **JobNavigator** (MIT) | Playwright scraping of career pages + boards, Telegram alerts |
| (optional) CLI power mode | **career-ops** (MIT) | Best-in-class scoring rubric + portal scanning, if a paid AI CLI is acceptable |
All five run comfortably on the existing GPU servers alongside Ollama; none
requires more than a few hundred MB RAM.
# Citations
- career-ops: https://github.com/career-ops-hq/career-ops (MIT, ~72,386 stars) — site: https://career-ops.org
- ai-job-search: https://github.com/MadsLorentzen/ai-job-search (MIT, ~43,609 stars)
- JobSync: https://github.com/Gsync/jobsync (MIT, ~1,299 stars)
- offerPilot: https://github.com/offercontext/offerPilot (AGPL-3.0, ~730 stars)
- JobNavigator: https://github.com/vesaias/JobNavigator (MIT, ~126 stars)
- Reactive Resume: https://github.com/reactive-resume/reactive-resume (MIT, ~43,301 stars) — AI guide: https://docs.rxresu.me/guides/using-ai ; self-hosting: https://docs.rxresu.me/self-hosting/docker
- Resume Matcher: https://github.com/srbhr/Resume-Matcher (Apache-2.0, ~28,499 stars)
- OpenResume: https://github.com/xitanggg/open-resume (AGPL-3.0, ~8,908 stars)
- ResumeLM: https://github.com/olyaiy/resume-lm (AGPL-3.0, ~326 stars)
- rendercv (non-AI): https://github.com/rendercv/rendercv (MIT, ~17,620 stars)
- JobSync Ollama default + 16k context + ENCRYPTION_KEY: https://github.com/Gsync/jobsync/blob/main/README.md
- Resume Matcher Ollama-in-Docker URL: https://github.com/srbhr/Resume-Matcher/blob/main/README.md
- Reactive Resume client-side PDF since v5.1.0: https://github.com/reactive-resume/reactive-resume/blob/main/README.md
@@ -1,3 +1,11 @@
---
type: reference
description: "Off-site backup plan for the bind-mounted data on both hosts."
tags:
- research
timestamp: 2026-08-28
---
# Backblaze Integration
Off-site backup plan for the bind-mounted data on both hosts. **Deferred**: research only, not implemented yet.
@@ -1,3 +1,13 @@
---
type: reference
description: "Research into whether ComfyUI can use GPU acceleration — not just CPU — on the AMD Strix Halo APU (gfx1151) in Dankclaw."
tags:
- research
- rocm
- comfyui
timestamp: 2026-08-28
---
# ComfyUI on ROCm and Vulkan
Research into whether ComfyUI can use GPU acceleration — not just CPU — on the AMD Strix Halo APU (gfx1151) in Dankclaw. Verified on live hardware 2026-08-14. This page corrects the persistent "ROCm unavailable on Strix Halo" claim.
@@ -1,3 +1,11 @@
---
type: reference
description: "Why Lemonade Server can do image generation on Strix Halo when ComfyUI cannot."
tags:
- research
timestamp: 2026-08-28
---
# Lemonade and sd.cpp
Why Lemonade Server can do image generation on Strix Halo when ComfyUI cannot. Research from the Lemonade source repo (`lemonade-sdk/lemonade`, cloned 2026-08-14) and live verification.
@@ -0,0 +1,240 @@
---
type: research
title: Local TTS and Voice Cloning
description: How to create a new local TTS voice from sample files in oh-my-pi, the 2026 open-weight voice-cloning landscape, the full local AI audio stack, and a recommended homelab deployment.
tags:
- research
- tts
- voice-cloning
- audio
- stt
- vllm-omni
- kokoro
timestamp: 2026-09-22T00:00:00Z
---
# Local TTS and Voice Cloning
Research brief (2026-09-22) on creating a new local TTS voice from sample
files, the open-weight voice-cloning landscape, the full local AI audio
stack, and a recommended deployment for the fleet. Every claim is cited in
[Citations](#citations). The fleet has no audio input today (that capability
left with the retired NPU endpoint), so this is greenfield.
## Summary
- **Kokoro-82M (OMP's built-in local TTS) cannot zero-shot clone a voice.**
Voices are a fixed pack. A community fine-tune recipe exists
(`semidark/kikiri-tts`): a ~51 h multi-speaker base stage + a few hundred
single-speaker samples, then voice-pack extraction. Feasible on one GPU, but
the output is Kokoro-styled, and OMP's local backend only accepts its
built-in voice list (a custom pack needs a patch).
- **The 2026 open-weight cloning landscape is strong.** Permissive-licensed
leaders for a single-GPU homelab: **Chatterbox (MIT)**, **Qwen3-TTS
(Apache-2.0)**, **CosyVoice 3 (Apache-2.0)**, **GLM-TTS (MIT)**, **VoxCPM2
(Apache-2.0)**, **F5-TTS (MIT)**, **GPT-SoVITS (MIT)**.
- **OMP integration — definitive:** OMP's `tts` tool supports exactly three
backends (`providers.tts` = `auto|local|xai|deepinfra`, verified in the
installed binary): local Kokoro ONNX, xAI Grok Voice cloud, DeepInfra cloud.
**There is no generic OpenAI-compatible TTS endpoint in OMP today.** Two real
paths for a cloned voice: (a) xAI console custom voice (free, cloud, US-only)
— works today; (b) patch OMP (open source) with a ~50-line OpenAI-TTS backend
pointing at a local `vLLM-Omni` server.
- **Recommended stack:** `vllm/vllm-omni` serving **Qwen3-TTS-1.7B-Base** on the
3090 (OpenAI-compatible `POST /v1/audio/speech` + `POST /v1/audio/voices`
voice upload), **Parakeet TDT 1.1B** for English STT, **Silero VAD** embedded,
**Chatterbox** as the ultra-light English-only alternative. All fit in <8 GB
VRAM and co-locate with the existing LLM services.
## Can Kokoro learn a new voice?
Kokoro ([hexgrad/Kokoro](https://github.com/hexgrad/Kokoro), Apache-2.0, 82 M
params, non-autoregressive) ships **fixed voice packs** — there is no
reference-audio path, so zero-shot cloning is not an option. OMP's local
backend runs `onnx-community/Kokoro-82M-v1.0-ONNX` offline, choosing a voice
from a built-in list (`tts.localVoice`).
The best-documented fine-tune path is
[`semidark/kikiri-tts`](https://github.com/semidark/kikiri-tts) (Apache-2.0):
| Stage | Data | Purpose |
|---|---|---|
| Multi-speaker base | ~51 h audio, 51 speakers | language adaptation / base fine-tune |
| Single-speaker | 455–627 samples (~1–2 h of one voice) | voice specialization |
| Extraction | — | voice-pack (.pt) extraction for inference |
**Verdict:** fine-tuning Kokoro to a personal voice is possible on a 3090, but
you must collect ~1–2 h of clean single-speaker audio, run the two-stage recipe,
and patch OMP to load the custom pack. The effort/quality trade is worse than
running a modern zero-shot cloner on the same GPU.
## 2026 voice-cloning landscape (permissive-licensed, single-GPU)
Ranked for a 3090 homelab, English-primary, personal voice:
1. **Chatterbox (MIT)** — best license/quality/compute ratio; ~10 s reference;
110–500 M; ~1–2 GB VRAM; CPU-capable (Nano). *Top pick for a personal
English voice.* No official server (library + Gradio; wrap in FastAPI).
2. **Qwen3-TTS-1.7B-Base (Apache-2.0)** — 3 s cloning, 10 languages, streaming,
vLLM-Omni serving with `POST /v1/audio/voices` upload (closest to "named
voice" semantics), official fine-tuning code. *Top pick for a server-grade,
OpenAI-compatible deployment.*
3. **CosyVoice 3 (Apache-2.0)** — 0.5 B, 9 languages + 18 zh dialects, 150 ms
bi-streaming, FastAPI/WebSocket server.
4. **GLM-TTS (MIT)** — best published CER (0.89), RL emotion control, zh/en.
5. **VoxCPM2 (Apache-2.0)** — 30 languages, 48 kHz, LoRA fine-tune from 5–10 min
of audio, ~8 GB VRAM. *Best "fine-tune my voice" option.*
6. **F5-TTS (MIT)** — 0.3–0.5 B, en/zh; Docker + Triton.
7. **GPT-SoVITS (MIT)** — best few-shot fine-tune UX (1 min of data), WebUI,
Docker images.
Notable non-commercial / restricted: Higgs Audio v3, Breeze-TTS-2, Spark-TTS
(non-commercial); IndexTTS (bilibili custom license), Fish Speech S2 (research
license), XTTS v2 (CPML, non-commercial, vendor defunct); MegaTTS3 (WaveVAE
encoder not released); Voxtral TTS (no official cloning — codec encoder not
released). Excluded from cloning: Parler-TTS (style-text only), VibeVoice-TTS
(code withdrawn 2025-09).
## OMP integration (definitive)
OMP's `tts` tool (hidden by default; enable with `/tts`) supports exactly three
backends, selected by `providers.tts`:
| Backend | Endpoint (hardcoded in binary) | Voices |
|---|---|---|
| `local` | on-device ONNX, `onnx-community/Kokoro-82M-v1.0-ONNX` | built-in list (`tts.localVoice`) |
| `xai` | `POST https://api.x.ai/v1/tts` | `ara`/`eve`/`leo`/`rex`/`sal` + any custom voice ID |
| `deepinfra` | `POST https://api.deepinfra.com/v1/openai/audio/speech` | `voice_id` when set |
There is **no generic OpenAI-compatible TTS endpoint** — `deepinfra` is a
hardcoded URL, not a configurable base URL, and OMP's `models.yml` custom
providers (LLM chat only) do not wire into the `tts` tool.
Paths for a Frank-cloned voice:
1. **xAI console custom voice — works today, zero code.** Record 2–3 min clean
speech (≤120 s, 24 kHz 16-bit mono WAV) → console → `voice_id` → `tts` tool.
Free (≤30 voices), cloud, US-only.
2. **Local, full stack — small OMP patch.** OMP is open source; the DeepInfra
backend is a plain HTTP POST to an OpenAI-compatible speech endpoint. A
~50-line `openai` backend (configurable `base_url` + `voice`) lets OMP call
any local server (vLLM-Omni, Kokoro-FastAPI, Chatterbox wrapper).
3. **No-patch workaround.** OMP's `bash` tool can `curl` the local TTS server
ad hoc.
4. **Kokoro fine-tune → OMP local backend.** Highest effort, Kokoro-styled.
## Full local AI audio stack
**STT / ASR:** whisper.cpp (MIT, tiny→large-v3 2.9 GiB, all backends, built-in
VAD); faster-whisper (MIT, CTranslate2 int8, ~4× faster); whisperX (BSD-2, word
timestamps + diarization); **NVIDIA Parakeet TDT 1.1B** (CC-BY-4.0,
LibriSpeech-clean WER 1.39% — best English open ASR); Parakeet 0.6B v3 /
Canary 1B v2 (multilingual); Moonshine (MIT, on-device); VibeVoice-ASR-7B (MIT,
60-min, 50+ langs).
**VAD:** Silero VAD (MIT, ~2 MB, <1 ms per 30 ms chunk; embedded in
faster-whisper/whisperX).
**TTS serving:** **vLLM-Omni** ([vllm-project/vllm-omni](https://github.com/vllm-project/vllm-omni),
official Docker `vllm/vllm-omni` CUDA and `vllm/vllm-omni-rocm` ROCm, e.g.
`:v0.28.0`) is the one server exposing the standard OpenAI speech API
(`POST /v1/audio/speech` + `POST /v1/audio/voices` upload for Qwen3-TTS) across
the 2026 lineup. CUDA needs compute ≥7.0 (3090 = 8.6 ✓); ROCm validated on
gfx942 (the fleet already runs vLLM on the R9700 gfx1201 ✓). Others:
Kokoro-FastAPI (Docker, :8880, OpenAI-shaped), CosyVoice FastAPI/WS, F5-TTS
Gradio/Triton, GPT-SoVITS WebUI/api_v2, Fish S2 `tools/api_server.py` (own
format, not OpenAI-shaped).
**Post-processing:** SoX/ffmpeg (resample/normalize; 24 kHz mono 16-bit is the
reference-clip standard); Demucs (`htdemucs`) for vocal separation before
cloning; the Perth watermark is built into Chatterbox.
## Recommended deployment (Dankclaw)
TTS models are 0.1–2 B (<8 GB VRAM); STT (Parakeet 1.1 B) is CPU-fast. Keep it
all on Dankclaw (3090 = primary GPU, CUDA = best vLLM-Omni support); the
Dankserver R9700s stay dedicated to frank-medium.
| Service | Image / install | Port | GPU | Notes |
|---|---|---|---|---|
| TTS (primary, cloning) | `vllm/vllm-omni:v0.28.0` · `vllm serve Qwen/Qwen3-TTS-12Hz-1.7B-Base --omni --port 8881 --gpu-memory-utilization 0.35` | 8881 | 3090 (~6 GB) | OpenAI `/v1/audio/speech`; upload Frank's voice once via `/v1/audio/voices`; 3 s cloning; 10 langs; Apache-2.0 |
| TTS (light, English) | Chatterbox (MIT) in a small FastAPI container | 8880 | 3090 (~1 GB) / CPU | 10 s ref clip; wrap `chatterbox.generate` in ~30 lines |
| STT (English) | Parakeet TDT 1.1B behind a FastAPI wrapper, or whisper.cpp server | 8882 | CPU | CC-BY-4.0; WER 1.39% |
| STT (multilingual, opt.) | faster-whisper `large-v3` int8 | 8883 | CPU / iGPU | MIT |
| VAD | Silero (embedded) | — | CPU | MIT |
Ports 8880–8883 avoid the fleet's LLM ports (7770/7771).
## Voice-creation workflow (the "from sample files" answer)
1. Record 2–3 min clean speech (24 kHz 16-bit mono WAV; ffmpeg-normalize).
2. **Zero-shot:** keep the clip as `ref_audio` — Chatterbox/Qwen3-TTS/CosyVoice/
GLM-TTS clone from it per request (no training).
3. **Dedicated voice:** upload once to Qwen3-TTS via `/v1/audio/voices`
(vLLM-Omni) and reference by ID; or LoRA-fine-tune VoxCPM2 (5–10 min audio);
or the GPT-SoVITS 1-min fine-tune for the classic WebUI workflow.
4. **Kokoro fine-tune** only if the voice must live inside OMP's offline local
backend — highest effort, Kokoro-styled output.
## Best practices
- **Prefer zero-shot cloning over fine-tuning** for a personal voice: a modern
cloner (Chatterbox/Qwen3-TTS) on a 10 s–3 min reference beats a Kokoro
fine-tune on quality and effort.
- **Normalize reference clips to 24 kHz 16-bit mono WAV** before use; extract
clean voice with Demucs if the source is music/mixed.
- **Serve through vLLM-Omni** when you want a single OpenAI-compatible endpoint
for many TTS models — it is the only server with the standard
`/v1/audio/speech` + `/v1/audio/voices` shape across the 2026 lineup.
- **Check the license before serving publicly:** several strong cloners are
non-commercial (Higgs v3, Breeze-TTS-2, Spark-TTS, Voxtral) or carry custom
licenses (IndexTTS, Fish S2, XTTS v2). For a personal homelab voice, MIT /
Apache-2.0 (Chatterbox, Qwen3-TTS, GLM-TTS, VoxCPM2) is the safe set.
- **Co-locate on the 3090** with a low `--gpu-memory-utilization` (~0.35) so the
TTS engine shares the card with frank-small; move to the R9700s only if TTS
throughput demand grows.
- **Guard the endpoint like any other service:** if vhosted, it goes behind the
Anubis → Authentik chain; non-browser clients (OMP's `curl`) must target the
internal address, never the public hostname.
## Citations
- OMP TTS tool: https://omp.sh/docs/tools/tts · installed binary
`@oh-my-pi/pi-coding-agent/dist/cli.js` (endpoints, voices, model IDs)
- Kokoro: https://github.com/hexgrad/Kokoro ·
https://huggingface.co/spaces/hexgrad/Kokoro-TTS
- Kokoro fine-tune: https://github.com/semidark/kikiri-tts
- Chatterbox: https://github.com/resemble-ai/chatterbox
- Qwen3-TTS: https://github.com/QwenLM/Qwen3-TTS ·
https://huggingface.co/Qwen/Qwen3-TTS-12Hz-1.7B-Base
- CosyVoice: https://github.com/FunAudioLLM/CosyVoice
- GLM-TTS: https://github.com/zai-org/GLM-TTS ·
https://huggingface.co/zai-org/GLM-TTS
- VoxCPM2: https://github.com/OpenBMB/VoxCPM ·
https://huggingface.co/openbmb/VoxCPM2
- F5-TTS: https://github.com/SWivid/F5-TTS
- GPT-SoVITS: https://github.com/RVC-Boss/GPT-SoVITS
- Dots.TTS: https://huggingface.co/dots-studio/dots.tts-base
- IndexTTS: https://github.com/index-tts/index-tts
- Fish Speech: https://github.com/fishaudio/fish-speech
- MOSS-TTS-Nano: https://huggingface.co/OpenMOSS-Team/MOSS-TTS-Nano
- XTTS: https://github.com/coqui-ai/TTS
- MegaTTS3: https://github.com/bytedance/MegaTTS3
- Higgs Audio: https://github.com/boson-ai/higgs-audio
- Breeze-TTS-2: https://huggingface.co/BreezeBlue/Breeze-TTS-2
- Spark-TTS: https://github.com/SparkAudio/Spark-TTS
- Voxtral TTS: https://huggingface.co/MistralAI/Voxtral-4B-TTS-2603
- Parler-TTS: https://github.com/huggingface/parler-tts
- VibeVoice: https://github.com/microsoft/VibeVoice
- vLLM-Omni: https://github.com/vllm-project/vllm-omni ·
https://docs.vllm.ai/projects/vllm-omni/en/latest/
- Kokoro-FastAPI: https://github.com/remsky/Kokoro-FastAPI
- whisper.cpp: https://github.com/ggml-org/whisper.cpp ·
faster-whisper: https://github.com/SYSTRAN/faster-whisper ·
whisperX: https://github.com/m-bain/whisperX
- Parakeet: https://huggingface.co/nvidia/parakeet-tdt-1.1b ·
Canary: https://huggingface.co/nvidia/canary-1b-v2
- Moonshine: https://github.com/moonshine-ai/moonshine
- Silero VAD: https://github.com/snakers4/silero-vad
- xAI custom voices:
https://docs.x.ai/developers/model-capabilities/audio/custom-voices
@@ -0,0 +1,218 @@
---
type: research
description: "The 15 most popular self-hosted AI applications of June–September 2026, ranked by GitHub stars, with homelab fit and adoption best practices."
tags:
- research
- self-hosted
- ai-apps
- landscape
timestamp: 2026-09-22
---
# Most Popular Self-Hosted AI Apps (June–September 2026)
Research brief on the most popular and trending self-hostable (Docker/Podman/
Quadlet) open-source AI applications over the last 3 months. Star counts and
licenses pulled directly from the GitHub API and each repo's LICENSE file on
**2026-09-22** (exact values). "Trending" is evidenced by **release activity
dated June–September 2026** (GitHub releases API) plus press/community
coverage — GitHub does not expose star-growth rate, so cumulative stars are the
popularity proxy and release cadence is the trend signal. The full rendered
report lives at `popular-self-hosted-ai-apps.html` beside this page.
## Summary
The self-hosted AI stack in mid-2026 consolidated into a few very large, very
active projects, and the center of gravity shifted hard toward **agents** over
the last quarter:
1. **Agents are the category of 2026.** OpenClaw (390,235 stars, MIT) is the
single most-starred self-hosted AI project and the fastest-growing repo on
GitHub; it shipped a major **2.0 rewrite on 1 September 2026** (933
contributors, 16,000+ PRs). Nous Research's **Hermes Agent** (247,907 stars,
MIT) is a close second and releases weekly. Both are model-agnostic
orchestration layers that run on your own hardware and can point at local
llama.cpp/vLLM/Ollama endpoints.
2. **The inference + UI layer is mature and huge.** Ollama (181,444), llama.cpp
(129,149), and vLLM (92,405) are the runtimes; **Open WebUI** (152,784) is
the dominant chat UI; **ComfyUI** (134,407, GPL-3.0) is the dominant
image/video-gen GUI. All release frequently in the window.
3. **RAG/agent-platforms and the audio stack round out the field.** Dify
(156,835), RAGFlow (91,138), AnythingLLM (66,318) for RAG/workflows;
whisper.cpp (53,852) + faster-whisper (25,512) for STT; Chatterbox (26,515),
Piper (11,287), Kokoro-82M (8,933) for TTS; Unsloth (76,560) for
fine-tuning.
**Strongest fits for this fleet:** Open WebUI (chat UI over the existing
llama.cpp/vLLM endpoints), ComfyUI (image gen, already integrated with Open
WebUI), Ollama (OpenAI-compatible runtime), Dify and RAGFlow (RAG/agent
platforms), and whisper.cpp / Piper / Kokoro for a local voice stack. OpenClaw
and Hermes are the highest-buzz new arrivals, well-suited to a homelab server,
with the caveat that they are tool/shell-access agents and need the strongest
isolation.
## Ranked List (Top 15, all with June–Sept 2026 release activity)
| # | App | Category | Stars (2026-09-22) | License | Latest release in window |
|---|-----|----------|--------------------|---------|--------------------------|
| 1 | [OpenClaw](https://github.com/openclaw/openclaw) | Agents | 390,235 | MIT | v2026.9.5 (09-19); 2.0 (09-01) |
| 2 | [Hermes Agent](https://github.com/NousResearch/hermes-agent) | Agents | 247,907 | MIT | v2026.9.21 (09-21) |
| 3 | [Ollama](https://github.com/ollama/ollama) | LLM runtime | 181,444 | MIT | active (pushed 09-21) |
| 4 | [Dify](https://github.com/langgenius/dify) | Agent platform / RAG | 156,835 | Modified Apache-2.0 | 1.17.1 (09-10) |
| 5 | [Open WebUI](https://github.com/open-webui/open-webui) | Chat UI | 152,784 | Open WebUI License (BSD-3-based) | v0.11.4 (09-21) |
| 6 | [ComfyUI](https://github.com/Comfy-Org/ComfyUI) | Image / video gen | 134,407 | GPL-3.0 | v0.37.0 (09-21) |
| 7 | [llama.cpp](https://github.com/ggml-org/llama.cpp) | LLM runtime (inference) | 129,149 | MIT | active (pushed 09-22) |
| 8 | [vLLM](https://github.com/vllm-project/vllm) | LLM inference engine | 92,405 | Apache-2.0 | active (pushed 09-22) |
| 9 | [RAGFlow](https://github.com/infiniflow/ragflow) | RAG engine | 91,138 | Apache-2.0 | v0.27.2 (09-10) |
| 10 | [LobeChat](https://github.com/lobehub/lobehub) | Chat UI / agent ops | 82,748 | LobeHub Community License | active (pushed 09-22) |
| 11 | [Unsloth](https://github.com/unslothai/unsloth) | Fine-tuning | 76,560 | Apache-2.0 | active (pushed 09-22) |
| 12 | [AnythingLLM](https://github.com/Mintplex-Labs/anything-llm) | RAG / local agent | 66,318 | MIT | active (pushed 09-21) |
| 13 | [whisper.cpp](https://github.com/ggml-org/whisper.cpp) | Speech-to-text | 53,852 | MIT | active (pushed 09-22) |
| 14 | [LibreChat](https://github.com/danny-avila/LibreChat) | Chat UI | 44,608 | MIT | active (pushed 09-22) |
| 15 | [Tabby](https://github.com/TabbyML/tabby) | AI coding assistant | 33,889 | Apache-2.0 (ee/ separate) | last push 2026-06-30 |
**Audio honorable mentions:** [Chatterbox](https://github.com/resemble-ai/chatterbox)
(26,515, MIT, TTS), [faster-whisper](https://github.com/SYSTRAN/faster-whisper)
(25,512, MIT, STT), [Piper TTS](https://github.com/rhasspy/piper) (11,287, MIT,
TTS), [Kokoro-82M](https://github.com/hexgrad/kokoro) (8,933, Apache-2.0, TTS),
[MisoTTS](https://github.com/MisoLabsAI/MisoTTS) (3,239, Modified MIT, TTS).
## Per-App Notes
- **OpenClaw** — self-hosted personal AI agent / orchestration layer (not a
model). Connects to cloud APIs, subscriptions, API providers, and **local
models**; drives files, browser, terminal/shell, and messaging channels. 2.0
rebuilt the browser app as the primary interface, added shared cloud sessions,
simplified onboarding. Node 24 (22.14+) + Docker; minimal footprint for
API-based LLMs (2 vCPU / 2–4 GB RAM). **Caveat:** community reaction to 2.0
was mixed — migration problems, broken gateways, lost automations, model-auth
issues (InfoQ). Tool/shell-access agent → strongest isolation.
- **Hermes Agent** — Nous Research's personal agent, centered on persistent
memory and cross-platform messaging. Model-agnostic; Docker/Podman; config in
`~/.hermes/config.yaml`. Releases weekly. Tool-access agent → isolate.
- **Ollama** — the de-facto standard local LLM runtime; OpenAI-compatible API
(default `:11434`) that nearly every app in this list consumes. The default
provider for JobSync, Resume Matcher, AnythingLLM, and more.
- **Dify** — full LLMOps/agent platform: prompt IDE, RAG pipeline,
agent/workflow builder, model management. `docker compose` full stack.
Modified Apache-2.0: commercial use allowed, but **multi-tenant operation
requires a commercial license** (one tenant = one workspace) — fine for a
single-workspace homelab.
- **Open WebUI** — the dominant ChatGPT-style chat UI: multi-user auth, model
switching, tools, pipelines, RAG, image gen (ComfyUI as engine), agents.
Single container; connect to Ollama / llama.cpp / vLLM via base-URL. Already
this fleet's chat frontend.
- **ComfyUI** — node-based image *and* video generation (SD/SDXL/Flux/LLaDA/
Qwen-Image). The most popular local image-gen frontend in 2026. Repo moved to
the `Comfy-Org` org. Already running on this fleet (Qwen-Image 2.1 GGUF) and
wired as the Open WebUI image engine.
- **llama.cpp** — the reference GGUF inference engine; `llama-server` exposes an
OpenAI-compatible endpoint. Backbone of this fleet's frank-small/frank-large.
- **vLLM** — high-throughput PagedAttention serving with an OpenAI-compatible
API; the multi-GPU option (frank-medium runs vLLM tensor-parallel across two
R9700s).
- **RAGFlow** — RAG engine with deep document understanding (PDFs, spreadsheets,
scans) and source citations. `docker compose` full stack; runs fully against
local models (Ollama).
- **LobeChat** — polished chat UI grown into an agent-operations layer (plugins,
agents, scheduled tasks). LobeHub Community License: commercial use allowed,
but **distributing a derivative requires a commercial license**.
- **Unsloth** — the leading open-source fine-tuning library (LoRA/QLoRA/SFT) +
GGUF quantization + a local run/train UI. GPU required; a batch job, not a
long-running service.
- **AnythingLLM** — local-first RAG + agent workspace: document ingestion, chat
over your data, agent mode, multi-user. Ollama first-class.
- **whisper.cpp** — OpenAI Whisper in C/C++; lightweight fully-local STT on CPU /
Metal / CUDA; `whisper-server` for an HTTP API.
- **LibreChat** — multi-provider, multi-user chat UI with agents, MCP, actions.
`docker compose` (app + MongoDB + Redis).
- **Tabby** — self-hosted AI coding assistant (Copilot-style) against your own
models. Apache-2.0 core; `ee/` directory under a separate enterprise license.
Last push 2026-06-30 (quieter since).
## Homelab Fit (Podman/Quadlet + Caddy + local LLM endpoints)
| App | Fit | Notes for this fleet |
|-----|-----|----------------------|
| **Open WebUI** | **Excellent** | Single container; point at existing llama.cpp/vLLM/Ollama via base-URL. Already the fleet's chat frontend. |
| **ComfyUI** | **Excellent** | GPU container (already running for Qwen-Image 2.1 GGUF). Serves the Open WebUI image-gen path. |
| **Ollama** | **Excellent** | Easiest OpenAI-compatible runtime for the other apps; expose on LAN / `host.containers.internal`. |
| **Dify** | **Good** | compose → Quadlet. Multi-tenant restriction moot for single-workspace. Heavier stack (DB + Redis + vector store). |
| **RAGFlow** | **Good** | compose → Quadlet. Runs fully against local models. Budget disk for the document index. |
| **AnythingLLM** | **Good** | Single container, Ollama-first, low footprint. Good local RAG entry point. |
| **LibreChat** | **Good** | compose (app + Mongo + Redis) → Quadlet. Multi-user, MCP/agents. |
| **LobeChat** | **Good** | Single Postgres-backed container. Watch the Community License if redistributing a derivative. |
| **whisper.cpp / faster-whisper** | **Good** | Lightweight STT; `whisper-server` behind Caddy for a LAN transcription API. CPU-fine. |
| **Piper / Kokoro / Chatterbox** | **Good** | Local TTS; pair with whisper.cpp for a fully-local voice loop. Chatterbox wants a GPU; Piper/Kokoro run on CPU. |
| **Tabby** | **Good** | compose → Quadlet; self-hosted coding assistant against local models. |
| **Unsloth** | **OK (one-off)** | Fine-tuning is a batch job, not a service. Run transiently on a GPU server, then serve the GGUF via llama.cpp. |
| **OpenClaw / Hermes** | **Good, strong isolation** | Node.js / container agent pointing at local LLMs. Highest buzz, but tool/shell access — non-root, restricted network, vetted skills, behind the guard chain. |
**GPU co-tenancy note:** ComfyUI, vLLM, Unsloth, and Chatterbox all want VRAM.
Size new containers against the existing LLM endpoints' held VRAM to avoid
OOMing a production endpoint. The macOS mini is a natural home for the
low-footprint, CPU-friendly apps (Open WebUI, AnythingLLM, whisper.cpp,
Piper/Kokoro, LibreChat, LobeChat) via Metal-backed llama.cpp/Ollama.
## Best Practices: Adopting a New App Into a Guard-Chained Homelab
1. **Route everything through the existing guard chain.** Put the app behind
Caddy under the same Anubis+Authentik chain the fleet runs. Do not expose a
new port directly; use the published-port cutover gate (confirm the port is
free before starting, or pasta's bind fails and the failure hides behind
`Restart=on-failure`).
2. **Enable app-native auth and add SSO on top.** Turn on the app's built-in
multi-user auth *and* gate it with Authentik SSO at the proxy.
3. **Prefer local endpoints for the AI; keep PII on-prem.** Point RAG/chat/agent
apps at local llama.cpp/vLLM/Ollama (base-URL override) so prompts and
documents never leave the LAN. Reach the host runtime via
`host.containers.internal`, not `localhost`.
4. **Use Quadlet for boot persistence.** Convert every compose/`docker run` to
Quadlet units. Remember the anonymous-volume trap — use named volumes for
all app data.
5. **Pin image tags and track release notes.** The window's clearest lesson:
**OpenClaw 2.0 (2026-09-01) caused migration problems, broken gateways, and
lost automations for some users.** Pin tags, read release notes, stage
upgrades (test on the mini / a spare server first).
6. **Isolate agents aggressively.** OpenClaw and Hermes have tool/shell/browser
access. Non-root, restricted network, vetted skills/plugins only, full
logging of tool execution.
7. **Treat ingested content as untrusted (prompt injection).** Keep a human
review step before any action; scope agent tool access to the minimum.
8. **Protect the secrets the app stores.** API keys in env vars (or a vault),
never committed. Set the encryption key *before* adding keys, never change
it after.
9. **Budget VRAM and co-tenancy.** Measure a new GPU container's VRAM against
the endpoints already resident on the card.
10. **Back up the data volumes.** Snapshot the app's data volume; agents store
memory/state that is expensive to rebuild.
11. **Mind the license.** ComfyUI is GPL-3.0; Dify and LobeChat are
modified-Apache with multi-tenant / derivative restrictions; Tabby has an
`ee/` directory. Fine for a single-workspace, non-redistributed homelab, but
note them before derivative work.
# Citations
- OpenClaw: https://github.com/openclaw/openclaw (MIT, 390,235 stars)
- Hermes Agent: https://github.com/NousResearch/hermes-agent (MIT, 247,907 stars)
- Ollama: https://github.com/ollama/ollama (MIT, 181,444 stars)
- Dify: https://github.com/langgenius/dify (Modified Apache-2.0, 156,835 stars)
- Open WebUI: https://github.com/open-webui/open-webui (Open WebUI License, 152,784 stars)
- ComfyUI: https://github.com/Comfy-Org/ComfyUI (GPL-3.0, 134,407 stars)
- llama.cpp: https://github.com/ggml-org/llama.cpp (MIT, 129,149 stars)
- vLLM: https://github.com/vllm-project/vllm (Apache-2.0, 92,405 stars)
- RAGFlow: https://github.com/infiniflow/ragflow (Apache-2.0, 91,138 stars)
- LobeChat: https://github.com/lobehub/lobehub (LobeHub Community License, 82,748 stars)
- Unsloth: https://github.com/unslothai/unsloth (Apache-2.0, 76,560 stars)
- AnythingLLM: https://github.com/Mintplex-Labs/anything-llm (MIT, 66,318 stars)
- whisper.cpp: https://github.com/ggml-org/whisper.cpp (MIT, 53,852 stars)
- LibreChat: https://github.com/danny-avila/LibreChat (MIT, 44,608 stars)
- Tabby: https://github.com/TabbyML/tabby (Apache-2.0 + ee/, 33,889 stars)
- Chatterbox: https://github.com/resemble-ai/chatterbox (MIT, 26,515 stars)
- faster-whisper: https://github.com/SYSTRAN/faster-whisper (MIT, 25,512 stars)
- Piper TTS: https://github.com/rhasspy/piper (MIT, 11,287 stars)
- Kokoro-82M: https://github.com/hexgrad/kokoro (Apache-2.0, 8,933 stars)
- MisoTTS: https://github.com/MisoLabsAI/MisoTTS (Modified MIT, 3,239 stars)
- OpenClaw 2.0 release coverage: https://www.infoq.com/news/2026/09/openclaw-2-release/
- OpenClaw self-hosted architecture + security: https://hostkey.com/blog/208-what-is-openclaw-complete-self-hosted-ai-agent-guide/
- Release cadence: GitHub releases API, 2026-09-22
@@ -1,3 +1,11 @@
---
type: reference
description: "Consolidated research from the `frank-small` research subagents (2026-08-14) plus the pi agent knowledge base."
tags:
- research
timestamp: 2026-09-03
---
# Service Research Brief
Consolidated research from the `frank-small` research subagents (2026-08-14) plus the pi agent knowledge base. This is the source material behind the per-service docs pages.
+12
View File
@@ -15,6 +15,18 @@ findings doc; the project root index ([serverAppConfigs-docs/index.md](../index.
- [[Lemonade and sd.cpp]] — the ggml-family image-generation alternative
- [[Jellyfin]] — media server research brief
## Audio / TTS
- [[Local TTS and Voice Cloning]] — creating a local voice from samples, the 2026 cloning landscape, the full audio stack, and a recommended homelab deployment
## Career / Job Search
- [[AI Job Search and Resume Tools]] — self-hosted AI job-search + resume-formatting apps, local-LLM fit, recommended stack
## Self-Hosted Landscape
- [[Most Popular Self-Hosted AI Apps]] — the 15 most popular self-hosted AI apps of Jun–Sep 2026, homelab fit, adoption best practices (HTML report: `popular-self-hosted-ai-apps.html`)
## Backups
- [[Backblaze Integration]] — off-site backup plan (future)
@@ -0,0 +1,353 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Most Popular Self-Hosted AI Apps — June–September 2026</title>
<style>
:root {
--bg: #0d1117;
--bg-alt: #161b22;
--panel: #1c2128;
--border: #30363d;
--text: #e6edf3;
--text-dim: #8b949e;
--accent: #58a6ff;
--accent2: #3fb950;
--warn: #d29922;
--hot: #f85149;
--code-bg: #0d1117;
}
* { box-sizing: border-box; }
body {
margin: 0;
background: var(--bg);
color: var(--text);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
line-height: 1.6;
font-size: 15px;
}
.wrap { max-width: 1080px; margin: 0 auto; padding: 32px 24px 80px; }
header {
border-bottom: 1px solid var(--border);
padding-bottom: 24px;
margin-bottom: 32px;
}
h1 { font-size: 30px; margin: 0 0 8px; font-weight: 700; letter-spacing: -0.02em; }
.subtitle { color: var(--text-dim); font-size: 15px; margin: 0 0 16px; }
.meta { display: flex; flex-wrap: wrap; gap: 8px; }
.chip {
background: var(--panel); border: 1px solid var(--border);
border-radius: 20px; padding: 3px 12px; font-size: 12px; color: var(--text-dim);
}
.chip b { color: var(--text); font-weight: 600; }
h2 {
font-size: 21px; margin: 44px 0 16px; padding-bottom: 8px;
border-bottom: 1px solid var(--border); font-weight: 650; letter-spacing: -0.01em;
}
h3 { font-size: 16px; margin: 24px 0 8px; font-weight: 650; }
p { margin: 10px 0; }
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }
code {
background: var(--code-bg); border: 1px solid var(--border);
border-radius: 4px; padding: 1px 6px; font-size: 13px;
font-family: "SF Mono", Monaco, Consolas, monospace;
}
.lede { font-size: 16px; color: var(--text); }
.lede b { color: var(--accent); }
/* Summary cards */
.cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 14px; margin: 20px 0; }
.card {
background: var(--panel); border: 1px solid var(--border);
border-radius: 10px; padding: 16px 18px;
}
.card .num { font-size: 26px; font-weight: 700; color: var(--accent); letter-spacing: -0.02em; }
.card .lbl { font-size: 13px; color: var(--text-dim); margin-top: 4px; }
/* Table */
table { width: 100%; border-collapse: collapse; margin: 16px 0; font-size: 14px; }
th, td { text-align: left; padding: 10px 12px; border-bottom: 1px solid var(--border); vertical-align: top; }
th { color: var(--text-dim); font-weight: 600; font-size: 12px; text-transform: uppercase; letter-spacing: 0.04em; }
tr:hover td { background: var(--bg-alt); }
.rank { color: var(--text-dim); font-weight: 700; width: 32px; }
.stars { font-variant-numeric: tabular-nums; font-weight: 600; text-align: right; white-space: nowrap; }
.cat { color: var(--text-dim); font-size: 13px; }
.lic { font-size: 12px; color: var(--text-dim); }
.rel { font-size: 12px; color: var(--text-dim); white-space: nowrap; }
/* Bar chart */
.chart { margin: 20px 0 8px; }
.bar-row { display: grid; grid-template-columns: 160px 1fr 70px; align-items: center; gap: 12px; margin: 5px 0; }
.bar-label { font-size: 13px; color: var(--text); text-align: right; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bar-track { background: var(--bg-alt); border-radius: 4px; height: 20px; overflow: hidden; }
.bar-fill { height: 100%; border-radius: 4px; background: linear-gradient(90deg, #1f6feb, #58a6ff); }
.bar-val { font-size: 12px; color: var(--text-dim); font-variant-numeric: tabular-nums; }
/* App detail cards */
.app {
background: var(--panel); border: 1px solid var(--border);
border-radius: 10px; padding: 16px 20px; margin: 14px 0;
}
.app-head { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 8px; }
.app-head h3 { margin: 0; font-size: 17px; }
.app-head .tag { font-size: 12px; color: var(--text-dim); }
.app-head .tag .st { color: var(--accent); font-weight: 600; }
.app p { margin: 8px 0 0; font-size: 14px; color: var(--text); }
.fit { display: inline-block; font-size: 11px; font-weight: 700; padding: 2px 10px; border-radius: 12px; margin-left: 8px; vertical-align: middle; }
.fit.exc { background: rgba(63,185,80,0.15); color: var(--accent2); border: 1px solid rgba(63,185,80,0.4); }
.fit.good { background: rgba(88,166,255,0.15); color: var(--accent); border: 1px solid rgba(88,166,255,0.4); }
.fit.ok { background: rgba(210,153,34,0.15); color: var(--warn); border: 1px solid rgba(210,153,34,0.4); }
.fit.iso { background: rgba(248,81,73,0.12); color: var(--hot); border: 1px solid rgba(248,81,73,0.4); }
/* Best practices */
ol.bp { counter-reset: bp; list-style: none; padding: 0; margin: 16px 0; }
ol.bp li {
counter-increment: bp; position: relative; padding: 12px 16px 12px 52px;
background: var(--panel); border: 1px solid var(--border);
border-radius: 8px; margin: 10px 0; font-size: 14px;
}
ol.bp li::before {
content: counter(bp); position: absolute; left: 14px; top: 12px;
width: 26px; height: 26px; border-radius: 50%;
background: var(--accent); color: #0d1117; font-weight: 700;
display: flex; align-items: center; justify-content: center; font-size: 14px;
}
ol.bp li b { color: var(--accent); }
.note {
background: rgba(88,166,255,0.08); border-left: 3px solid var(--accent);
padding: 12px 16px; border-radius: 0 6px 6px 0; margin: 16px 0; font-size: 14px;
}
.note.warn { background: rgba(210,153,34,0.08); border-left-color: var(--warn); }
footer {
margin-top: 48px; padding-top: 24px; border-top: 1px solid var(--border);
color: var(--text-dim); font-size: 13px;
}
footer a { color: var(--accent); }
.cite-list { columns: 2; column-gap: 32px; font-size: 13px; }
.cite-list li { margin: 4px 0; break-inside: avoid; }
@media (max-width: 640px) { .cite-list { columns: 1; } .bar-row { grid-template-columns: 110px 1fr 60px; } }
</style>
</head>
<body>
<div class="wrap">
<header>
<h1>Most Popular Self-Hosted AI Apps</h1>
<p class="subtitle">Ranked landscape for the June–September 2026 window, with homelab fit and adoption best practices for a guard-chained Podman/Quadlet fleet.</p>
<div class="meta">
<span class="chip">Date <b>2026-09-22</b></span>
<span class="chip">Stars + licenses <b>GitHub API, 2026-09-22</b></span>
<span class="chip">Trend signal <b>release cadence, Jun–Sep 2026</b></span>
<span class="chip">Fleet <b>2× GPU servers + macOS mini</b></span>
</div>
</header>
<p class="lede">The self-hosted AI stack in mid-2026 consolidated into a few very large, very active projects, and the center of gravity shifted hard toward <b>agents</b> over the last quarter. Star counts are exact (GitHub API, 2026-09-22); "trending" is evidenced by release activity dated June–September 2026, since GitHub does not expose star-growth rate.</p>
<div class="cards">
<div class="card"><div class="num">390,235</div><div class="lbl">OpenClaw — most-starred, fastest-growing repo; 2.0 shipped 2026-09-01</div></div>
<div class="card"><div class="num">15</div><div class="lbl">apps ranked, all with Jun–Sep 2026 release activity</div></div>
<div class="card"><div class="num">5</div><div class="lbl">audio honorable mentions (TTS/STT)</div></div>
<div class="card"><div class="num">11</div><div class="lbl">adoption best practices for a guard-chained homelab</div></div>
</div>
<h2>Summary</h2>
<p><b>1. Agents are the category of 2026.</b> OpenClaw (390,235★, MIT) is the single most-starred self-hosted AI project and the fastest-growing repo on GitHub; it shipped a major <b>2.0 rewrite on 1 September 2026</b> (933 contributors, 16,000+ PRs). Nous Research's <b>Hermes Agent</b> (247,907★, MIT) is a close second and releases weekly. Both are model-agnostic orchestration layers that run on your own hardware and can point at local llama.cpp/vLLM/Ollama endpoints.</p>
<p><b>2. The inference + UI layer is mature and huge.</b> Ollama (181,444★), llama.cpp (129,149★), and vLLM (92,405★) are the runtimes; <b>Open WebUI</b> (152,784★) is the dominant chat UI; <b>ComfyUI</b> (134,407★, GPL-3.0) is the dominant image/video-gen GUI. All release frequently in the window.</p>
<p><b>3. RAG/agent-platforms and the audio stack round out the field.</b> Dify (156,835★), RAGFlow (91,138★), AnythingLLM (66,318★) for RAG/workflows; whisper.cpp (53,852★) + faster-whisper (25,512★) for STT; Chatterbox (26,515★), Piper (11,287★), Kokoro-82M (8,933★) for TTS; Unsloth (76,560★) for fine-tuning.</p>
<div class="note"><b>Strongest fits for this fleet:</b> Open WebUI (chat UI over the existing llama.cpp/vLLM endpoints), ComfyUI (image gen, already integrated with Open WebUI), Ollama (OpenAI-compatible runtime), Dify and RAGFlow (RAG/agent platforms), and whisper.cpp / Piper / Kokoro for a local voice stack. OpenClaw and Hermes are the highest-buzz new arrivals, well-suited to a homelab server, with the caveat that they are tool/shell-access agents and need the strongest isolation.</div>
<h2>Ranked List — Top 15 by Popularity</h2>
<div class="chart">
<div class="bar-row"><div class="bar-label">OpenClaw</div><div class="bar-track"><div class="bar-fill" style="width:100%"></div></div><div class="bar-val">390.2k</div></div>
<div class="bar-row"><div class="bar-label">Hermes Agent</div><div class="bar-track"><div class="bar-fill" style="width:63.5%"></div></div><div class="bar-val">247.9k</div></div>
<div class="bar-row"><div class="bar-label">Ollama</div><div class="bar-track"><div class="bar-fill" style="width:46.5%"></div></div><div class="bar-val">181.4k</div></div>
<div class="bar-row"><div class="bar-label">Dify</div><div class="bar-track"><div class="bar-fill" style="width:40.2%"></div></div><div class="bar-val">156.8k</div></div>
<div class="bar-row"><div class="bar-label">Open WebUI</div><div class="bar-track"><div class="bar-fill" style="width:39.2%"></div></div><div class="bar-val">152.8k</div></div>
<div class="bar-row"><div class="bar-label">ComfyUI</div><div class="bar-track"><div class="bar-fill" style="width:34.4%"></div></div><div class="bar-val">134.4k</div></div>
<div class="bar-row"><div class="bar-label">llama.cpp</div><div class="bar-track"><div class="bar-fill" style="width:33.1%"></div></div><div class="bar-val">129.1k</div></div>
<div class="bar-row"><div class="bar-label">vLLM</div><div class="bar-track"><div class="bar-fill" style="width:23.7%"></div></div><div class="bar-val">92.4k</div></div>
<div class="bar-row"><div class="bar-label">RAGFlow</div><div class="bar-track"><div class="bar-fill" style="width:23.4%"></div></div><div class="bar-val">91.1k</div></div>
<div class="bar-row"><div class="bar-label">LobeChat</div><div class="bar-track"><div class="bar-fill" style="width:21.2%"></div></div><div class="bar-val">82.7k</div></div>
<div class="bar-row"><div class="bar-label">Unsloth</div><div class="bar-track"><div class="bar-fill" style="width:19.6%"></div></div><div class="bar-val">76.6k</div></div>
<div class="bar-row"><div class="bar-label">AnythingLLM</div><div class="bar-track"><div class="bar-fill" style="width:17.0%"></div></div><div class="bar-val">66.3k</div></div>
<div class="bar-row"><div class="bar-label">whisper.cpp</div><div class="bar-track"><div class="bar-fill" style="width:13.8%"></div></div><div class="bar-val">53.9k</div></div>
<div class="bar-row"><div class="bar-label">LibreChat</div><div class="bar-track"><div class="bar-fill" style="width:11.4%"></div></div><div class="bar-val">44.6k</div></div>
<div class="bar-row"><div class="bar-label">Tabby</div><div class="bar-track"><div class="bar-fill" style="width:8.7%"></div></div><div class="bar-val">33.9k</div></div>
</div>
<table>
<thead><tr><th>#</th><th>App</th><th>Category</th><th style="text-align:right">Stars</th><th>License</th><th>Latest in window</th></tr></thead>
<tbody>
<tr><td class="rank">1</td><td><a href="https://github.com/openclaw/openclaw">OpenClaw</a></td><td class="cat">Agents</td><td class="stars">390,235</td><td class="lic">MIT</td><td class="rel">v2026.9.5 (09-19); 2.0 (09-01)</td></tr>
<tr><td class="rank">2</td><td><a href="https://github.com/NousResearch/hermes-agent">Hermes Agent</a></td><td class="cat">Agents</td><td class="stars">247,907</td><td class="lic">MIT</td><td class="rel">v2026.9.21 (09-21)</td></tr>
<tr><td class="rank">3</td><td><a href="https://github.com/ollama/ollama">Ollama</a></td><td class="cat">LLM runtime</td><td class="stars">181,444</td><td class="lic">MIT</td><td class="rel">active (pushed 09-21)</td></tr>
<tr><td class="rank">4</td><td><a href="https://github.com/langgenius/dify">Dify</a></td><td class="cat">Agent platform / RAG</td><td class="stars">156,835</td><td class="lic">Modified Apache-2.0</td><td class="rel">1.17.1 (09-10)</td></tr>
<tr><td class="rank">5</td><td><a href="https://github.com/open-webui/open-webui">Open WebUI</a></td><td class="cat">Chat UI</td><td class="stars">152,784</td><td class="lic">Open WebUI License (BSD-3)</td><td class="rel">v0.11.4 (09-21)</td></tr>
<tr><td class="rank">6</td><td><a href="https://github.com/Comfy-Org/ComfyUI">ComfyUI</a></td><td class="cat">Image / video gen</td><td class="stars">134,407</td><td class="lic">GPL-3.0</td><td class="rel">v0.37.0 (09-21)</td></tr>
<tr><td class="rank">7</td><td><a href="https://github.com/ggml-org/llama.cpp">llama.cpp</a></td><td class="cat">LLM runtime</td><td class="stars">129,149</td><td class="lic">MIT</td><td class="rel">active (pushed 09-22)</td></tr>
<tr><td class="rank">8</td><td><a href="https://github.com/vllm-project/vllm">vLLM</a></td><td class="cat">LLM inference engine</td><td class="stars">92,405</td><td class="lic">Apache-2.0</td><td class="rel">active (pushed 09-22)</td></tr>
<tr><td class="rank">9</td><td><a href="https://github.com/infiniflow/ragflow">RAGFlow</a></td><td class="cat">RAG engine</td><td class="stars">91,138</td><td class="lic">Apache-2.0</td><td class="rel">v0.27.2 (09-10)</td></tr>
<tr><td class="rank">10</td><td><a href="https://github.com/lobehub/lobehub">LobeChat</a></td><td class="cat">Chat UI / agent ops</td><td class="stars">82,748</td><td class="lic">LobeHub Community License</td><td class="rel">active (pushed 09-22)</td></tr>
<tr><td class="rank">11</td><td><a href="https://github.com/unslothai/unsloth">Unsloth</a></td><td class="cat">Fine-tuning</td><td class="stars">76,560</td><td class="lic">Apache-2.0</td><td class="rel">active (pushed 09-22)</td></tr>
<tr><td class="rank">12</td><td><a href="https://github.com/Mintplex-Labs/anything-llm">AnythingLLM</a></td><td class="cat">RAG / local agent</td><td class="stars">66,318</td><td class="lic">MIT</td><td class="rel">active (pushed 09-21)</td></tr>
<tr><td class="rank">13</td><td><a href="https://github.com/ggml-org/whisper.cpp">whisper.cpp</a></td><td class="cat">Speech-to-text</td><td class="stars">53,852</td><td class="lic">MIT</td><td class="rel">active (pushed 09-22)</td></tr>
<tr><td class="rank">14</td><td><a href="https://github.com/danny-avila/LibreChat">LibreChat</a></td><td class="cat">Chat UI</td><td class="stars">44,608</td><td class="lic">MIT</td><td class="rel">active (pushed 09-22)</td></tr>
<tr><td class="rank">15</td><td><a href="https://github.com/TabbyML/tabby">Tabby</a></td><td class="cat">AI coding assistant</td><td class="stars">33,889</td><td class="lic">Apache-2.0 (ee/ separate)</td><td class="rel">last push 2026-06-30</td></tr>
</tbody>
</table>
<h2>Per-App Breakdown</h2>
<div class="app">
<div class="app-head"><h3>OpenClaw <span class="fit iso">ISOLATE</span></h3><span class="tag"><span class="st">390,235★</span> · MIT · Agents</span></div>
<p>Self-hosted personal AI agent / orchestration layer (not a model). Connects to cloud APIs, subscriptions, API providers, and <b>local models</b>; drives files, browser, terminal/shell, and messaging channels. 2.0 rebuilt the browser app as the primary interface, added shared cloud sessions, simplified onboarding. Node 24 (22.14+) + Docker; minimal footprint for API-based LLMs (2 vCPU / 2–4 GB RAM). <b>Caveat:</b> community reaction to 2.0 was mixed — migration problems, broken gateways, lost automations, model-auth issues (InfoQ). Tool/shell-access agent → strongest isolation.</p>
</div>
<div class="app">
<div class="app-head"><h3>Hermes Agent <span class="fit iso">ISOLATE</span></h3><span class="tag"><span class="st">247,907★</span> · MIT · Agents</span></div>
<p>Nous Research's personal agent, centered on persistent memory and cross-platform messaging (Mac, iOS, web, voice, email, Telegram, Slack). Model-agnostic; Docker/Podman; config in <code>~/.hermes/config.yaml</code>. Releases weekly. Tool-access agent → isolate. Already on this fleet (see [[Hermes]] in the vault).</p>
</div>
<div class="app">
<div class="app-head"><h3>Ollama <span class="fit exc">EXCELLENT</span></h3><span class="tag"><span class="st">181,444★</span> · MIT · LLM runtime</span></div>
<p>The de-facto standard local LLM runtime; OpenAI-compatible API (default <code>:11434</code>) that nearly every app in this list consumes. The default provider for JobSync, Resume Matcher, AnythingLLM, and more. The easiest way to expose local models to other containers.</p>
</div>
<div class="app">
<div class="app-head"><h3>Dify <span class="fit good">GOOD</span></h3><span class="tag"><span class="st">156,835★</span> · Modified Apache-2.0 · Agent platform / RAG</span></div>
<p>Full LLMOps/agent platform: prompt IDE, RAG pipeline, agent/workflow builder, model management. <code>docker compose</code> full stack. Modified Apache-2.0: commercial use allowed, but <b>multi-tenant operation requires a commercial license</b> (one tenant = one workspace) — fine for a single-workspace homelab.</p>
</div>
<div class="app">
<div class="app-head"><h3>Open WebUI <span class="fit exc">EXCELLENT</span></h3><span class="tag"><span class="st">152,784★</span> · Open WebUI License (BSD-3) · Chat UI</span></div>
<p>The dominant ChatGPT-style chat UI: multi-user auth, model switching, tools, pipelines, RAG, image gen (ComfyUI as engine), agents. Single container; connect to Ollama / llama.cpp / vLLM via base-URL. Already this fleet's chat frontend, wired to ComfyUI for image gen.</p>
</div>
<div class="app">
<div class="app-head"><h3>ComfyUI <span class="fit exc">EXCELLENT</span></h3><span class="tag"><span class="st">134,407★</span> · GPL-3.0 · Image / video gen</span></div>
<p>Node-based image <i>and</i> video generation (SD/SDXL/Flux/LLaDA/Qwen-Image). The most popular local image-gen frontend in 2026. Repo moved to the <code>Comfy-Org</code> org. Already running on this fleet (Qwen-Image 2.1 GGUF) and wired as the Open WebUI image engine.</p>
</div>
<div class="app">
<div class="app-head"><h3>llama.cpp <span class="fit exc">EXCELLENT</span></h3><span class="tag"><span class="st">129,149★</span> · MIT · LLM runtime</span></div>
<p>The reference GGUF inference engine; <code>llama-server</code> exposes an OpenAI-compatible endpoint. Backbone of this fleet's frank-small/frank-large endpoints. Runs on CPU, CUDA, ROCm, Vulkan, Metal.</p>
</div>
<div class="app">
<div class="app-head"><h3>vLLM <span class="fit exc">EXCELLENT</span></h3><span class="tag"><span class="st">92,405★</span> · Apache-2.0 · LLM inference engine</span></div>
<p>High-throughput PagedAttention serving with an OpenAI-compatible API; the multi-GPU option (frank-medium runs vLLM tensor-parallel across two R9700s).</p>
</div>
<div class="app">
<div class="app-head"><h3>RAGFlow <span class="fit good">GOOD</span></h3><span class="tag"><span class="st">91,138★</span> · Apache-2.0 · RAG engine</span></div>
<p>RAG engine with deep document understanding (PDFs, spreadsheets, scans) and source citations. <code>docker compose</code> full stack; runs fully against local models (Ollama). Budget disk for the document index.</p>
</div>
<div class="app">
<div class="app-head"><h3>LobeChat <span class="fit good">GOOD</span></h3><span class="tag"><span class="st">82,748★</span> · LobeHub Community License · Chat UI / agent ops</span></div>
<p>Polished chat UI grown into an agent-operations layer (plugins, agents, scheduled tasks). LobeHub Community License: commercial use allowed, but <b>distributing a derivative requires a commercial license</b>.</p>
</div>
<div class="app">
<div class="app-head"><h3>Unsloth <span class="fit ok">ONE-OFF</span></h3><span class="tag"><span class="st">76,560★</span> · Apache-2.0 · Fine-tuning</span></div>
<p>The leading open-source fine-tuning library (LoRA/QLoRA/SFT) + GGUF quantization + a local run/train UI. GPU required; a batch job, not a long-running service. Run transiently on a GPU server, then serve the resulting GGUF via llama.cpp.</p>
</div>
<div class="app">
<div class="app-head"><h3>AnythingLLM <span class="fit good">GOOD</span></h3><span class="tag"><span class="st">66,318★</span> · MIT · RAG / local agent</span></div>
<p>Local-first RAG + agent workspace: document ingestion, chat over your data, agent mode, multi-user. Ollama first-class. Single container, low footprint — a good local RAG entry point.</p>
</div>
<div class="app">
<div class="app-head"><h3>whisper.cpp <span class="fit good">GOOD</span></h3><span class="tag"><span class="st">53,852★</span> · MIT · Speech-to-text</span></div>
<p>OpenAI Whisper in C/C++; lightweight fully-local STT on CPU / Metal / CUDA; <code>whisper-server</code> for an HTTP API. No cloud, no telemetry. Put it behind Caddy for a LAN transcription API.</p>
</div>
<div class="app">
<div class="app-head"><h3>LibreChat <span class="fit good">GOOD</span></h3><span class="tag"><span class="st">44,608★</span> · MIT · Chat UI</span></div>
<p>Multi-provider, multi-user chat UI with agents, MCP, and actions. <code>docker compose</code> (app + MongoDB + Redis).</p>
</div>
<div class="app">
<div class="app-head"><h3>Tabby <span class="fit good">GOOD</span></h3><span class="tag"><span class="st">33,889★</span> · Apache-2.0 (ee/ separate) · AI coding assistant</span></div>
<p>Self-hosted AI coding assistant (Copilot-style) against your own models. Apache-2.0 core; <code>ee/</code> directory under a separate enterprise license. Last push 2026-06-30 (quieter since).</p>
</div>
<h3>Audio honorable mentions (TTS/STT)</h3>
<table>
<thead><tr><th>App</th><th>Category</th><th style="text-align:right">Stars</th><th>License</th></tr></thead>
<tbody>
<tr><td><a href="https://github.com/resemble-ai/chatterbox">Chatterbox</a></td><td class="cat">TTS</td><td class="stars">26,515</td><td class="lic">MIT</td></tr>
<tr><td><a href="https://github.com/SYSTRAN/faster-whisper">faster-whisper</a></td><td class="cat">STT</td><td class="stars">25,512</td><td class="lic">MIT</td></tr>
<tr><td><a href="https://github.com/rhasspy/piper">Piper TTS</a></td><td class="cat">TTS</td><td class="stars">11,287</td><td class="lic">MIT</td></tr>
<tr><td><a href="https://github.com/hexgrad/kokoro">Kokoro-82M</a></td><td class="cat">TTS</td><td class="stars">8,933</td><td class="lic">Apache-2.0</td></tr>
<tr><td><a href="https://github.com/MisoLabsAI/MisoTTS">MisoTTS</a></td><td class="cat">TTS</td><td class="stars">3,239</td><td class="lic">Modified MIT</td></tr>
</tbody>
</table>
<h2>Homelab Fit (Podman/Quadlet + Caddy + local LLM endpoints)</h2>
<table>
<thead><tr><th>App</th><th>Fit</th><th>Notes for this fleet</th></tr></thead>
<tbody>
<tr><td><b>Open WebUI</b></td><td><span class="fit exc">EXCELLENT</span></td><td class="cat">Single container; point at existing llama.cpp/vLLM/Ollama via base-URL. Already the fleet's chat frontend.</td></tr>
<tr><td><b>ComfyUI</b></td><td><span class="fit exc">EXCELLENT</span></td><td class="cat">GPU container (already running for Qwen-Image 2.1 GGUF). Serves the Open WebUI image-gen path.</td></tr>
<tr><td><b>Ollama</b></td><td><span class="fit exc">EXCELLENT</span></td><td class="cat">Easiest OpenAI-compatible runtime for the other apps; expose on LAN / <code>host.containers.internal</code>.</td></tr>
<tr><td><b>Dify</b></td><td><span class="fit good">GOOD</span></td><td class="cat">compose → Quadlet. Multi-tenant restriction moot for single-workspace. Heavier stack (DB + Redis + vector store).</td></tr>
<tr><td><b>RAGFlow</b></td><td><span class="fit good">GOOD</span></td><td class="cat">compose → Quadlet. Runs fully against local models. Budget disk for the document index.</td></tr>
<tr><td><b>AnythingLLM</b></td><td><span class="fit good">GOOD</span></td><td class="cat">Single container, Ollama-first, low footprint. Good local RAG entry point.</td></tr>
<tr><td><b>LibreChat</b></td><td><span class="fit good">GOOD</span></td><td class="cat">compose (app + Mongo + Redis) → Quadlet. Multi-user, MCP/agents.</td></tr>
<tr><td><b>LobeChat</b></td><td><span class="fit good">GOOD</span></td><td class="cat">Single Postgres-backed container. Watch the Community License if redistributing a derivative.</td></tr>
<tr><td><b>whisper.cpp / faster-whisper</b></td><td><span class="fit good">GOOD</span></td><td class="cat">Lightweight STT; <code>whisper-server</code> behind Caddy for a LAN transcription API. CPU-fine.</td></tr>
<tr><td><b>Piper / Kokoro / Chatterbox</b></td><td><span class="fit good">GOOD</span></td><td class="cat">Local TTS; pair with whisper.cpp for a fully-local voice loop. Chatterbox wants a GPU; Piper/Kokoro run on CPU.</td></tr>
<tr><td><b>Tabby</b></td><td><span class="fit good">GOOD</span></td><td class="cat">compose → Quadlet; self-hosted coding assistant against local models.</td></tr>
<tr><td><b>Unsloth</b></td><td><span class="fit ok">ONE-OFF</span></td><td class="cat">Fine-tuning is a batch job, not a service. Run transiently, then serve the GGUF via llama.cpp.</td></tr>
<tr><td><b>OpenClaw / Hermes</b></td><td><span class="fit iso">ISOLATE</span></td><td class="cat">Node.js / container agent pointing at local LLMs. Highest buzz, but tool/shell access — non-root, restricted network, vetted skills, behind the guard chain.</td></tr>
</tbody>
</table>
<div class="note warn"><b>GPU co-tenancy note:</b> ComfyUI, vLLM, Unsloth, and Chatterbox all want VRAM. Size new containers against the existing LLM endpoints' held VRAM to avoid OOMing a production endpoint. The macOS mini is a natural home for the low-footprint, CPU-friendly apps (Open WebUI, AnythingLLM, whisper.cpp, Piper/Kokoro, LibreChat, LobeChat) via Metal-backed llama.cpp/Ollama.</div>
<h2>Best Practices — Adopting a New App Into a Guard-Chained Homelab</h2>
<ol class="bp">
<li><b>Route everything through the existing guard chain.</b> Put the app behind Caddy under the same Anubis+Authentik chain the fleet runs. Do not expose a new port directly; use the published-port cutover gate (confirm the port is free before starting, or pasta's bind fails and the failure hides behind <code>Restart=on-failure</code>).</li>
<li><b>Enable app-native auth and add SSO on top.</b> Turn on the app's built-in multi-user auth <i>and</i> gate it with Authentik SSO at the proxy. Defense in depth: the app's session + the outpost's claim-based auth.</li>
<li><b>Prefer local endpoints for the AI; keep PII on-prem.</b> Point RAG/chat/agent apps at local llama.cpp/vLLM/Ollama (base-URL override) so prompts and documents never leave the LAN. Reach the host runtime via <code>host.containers.internal</code>, not <code>localhost</code>.</li>
<li><b>Use Quadlet for boot persistence.</b> Convert every compose/<code>docker run</code> to Quadlet units. Remember the anonymous-volume trap — use named volumes for all app data.</li>
<li><b>Pin image tags and track release notes.</b> The window's clearest lesson: <b>OpenClaw 2.0 (2026-09-01) caused migration problems, broken gateways, and lost automations for some users.</b> Pin tags, read release notes, stage upgrades (test on the mini / a spare server first).</li>
<li><b>Isolate agents aggressively.</b> OpenClaw and Hermes have tool/shell/browser access. Non-root, restricted network, vetted skills/plugins only (supply-chain risk), full logging of tool execution.</li>
<li><b>Treat ingested content as untrusted (prompt injection).</b> RAG and agent apps ingest documents/web pages. Keep a human review step before any action; scope agent tool access to the minimum.</li>
<li><b>Protect the secrets the app stores.</b> API keys in env vars (or a vault), never committed. For apps that encrypt stored keys, set the encryption key <i>before</i> adding keys, never change it after.</li>
<li><b>Budget VRAM and co-tenancy.</b> Measure a new GPU container's VRAM against the endpoints already resident on the card.</li>
<li><b>Back up the data volumes.</b> Snapshot the app's data volume; agents store memory/state that is expensive to rebuild.</li>
<li><b>Mind the license.</b> ComfyUI is GPL-3.0; Dify and LobeChat are modified-Apache with multi-tenant / derivative restrictions; Tabby has an <code>ee/</code> directory. Fine for a single-workspace, non-redistributed homelab, but note them before derivative work.</li>
</ol>
<footer>
<p><b>Methodology &amp; caveat on numbers:</b> Star counts and licenses were pulled directly from the GitHub API and each repo's LICENSE file on <b>2026-09-22</b> (exact values, not rounded). "Trending in the last 3 months" is evidenced by <b>release activity dated June–September 2026</b> (GitHub releases API) and press/community coverage, <i>not</i> by 3-month star deltas — GitHub does not expose star-growth rate, so cumulative star count is the popularity proxy and release cadence is the trend signal. Every numeric claim cites its source.</p>
<h3 style="color:var(--text-dim);font-size:13px;text-transform:uppercase;letter-spacing:0.04em;margin-top:24px">Sources</h3>
<ul class="cite-list">
<li><a href="https://github.com/openclaw/openclaw">OpenClaw</a> (MIT, 390,235★)</li>
<li><a href="https://github.com/NousResearch/hermes-agent">Hermes Agent</a> (MIT, 247,907★)</li>
<li><a href="https://github.com/ollama/ollama">Ollama</a> (MIT, 181,444★)</li>
<li><a href="https://github.com/langgenius/dify">Dify</a> (Modified Apache-2.0, 156,835★)</li>
<li><a href="https://github.com/open-webui/open-webui">Open WebUI</a> (152,784★)</li>
<li><a href="https://github.com/Comfy-Org/ComfyUI">ComfyUI</a> (GPL-3.0, 134,407★)</li>
<li><a href="https://github.com/ggml-org/llama.cpp">llama.cpp</a> (MIT, 129,149★)</li>
<li><a href="https://github.com/vllm-project/vllm">vLLM</a> (Apache-2.0, 92,405★)</li>
<li><a href="https://github.com/infiniflow/ragflow">RAGFlow</a> (Apache-2.0, 91,138★)</li>
<li><a href="https://github.com/lobehub/lobehub">LobeChat</a> (82,748★)</li>
<li><a href="https://github.com/unslothai/unsloth">Unsloth</a> (Apache-2.0, 76,560★)</li>
<li><a href="https://github.com/Mintplex-Labs/anything-llm">AnythingLLM</a> (MIT, 66,318★)</li>
<li><a href="https://github.com/ggml-org/whisper.cpp">whisper.cpp</a> (MIT, 53,852★)</li>
<li><a href="https://github.com/danny-avila/LibreChat">LibreChat</a> (MIT, 44,608★)</li>
<li><a href="https://github.com/TabbyML/tabby">Tabby</a> (Apache-2.0 + ee/, 33,889★)</li>
<li><a href="https://github.com/resemble-ai/chatterbox">Chatterbox</a> (MIT, 26,515★)</li>
<li><a href="https://github.com/SYSTRAN/faster-whisper">faster-whisper</a> (MIT, 25,512★)</li>
<li><a href="https://github.com/rhasspy/piper">Piper TTS</a> (MIT, 11,287★)</li>
<li><a href="https://github.com/hexgrad/kokoro">Kokoro-82M</a> (Apache-2.0, 8,933★)</li>
<li><a href="https://github.com/MisoLabsAI/MisoTTS">MisoTTS</a> (Modified MIT, 3,239★)</li>
<li>OpenClaw 2.0 release: <a href="https://www.infoq.com/news/2026/09/openclaw-2-release/">InfoQ</a></li>
<li>OpenClaw self-hosted architecture: <a href="https://hostkey.com/blog/208-what-is-openclaw-complete-self-hosted-ai-agent-guide/">hostkey.com</a></li>
<li>Release cadence: GitHub releases API, 2026-09-22</li>
</ul>
<p style="margin-top:20px">Companion markdown: <a href="Most%20Popular%20Self-Hosted%20AI%20Apps.md">Most Popular Self-Hosted AI Apps.md</a> · Part of the <a href="index.md">Research</a> section.</p>
</footer>
</div>
</body>
</html>