A desktop control panel for what you self-host on your own machine. Local AI comes first: Ollama, Open WebUI, ComfyUI, and agent harnesses on top. Below it sits Self-Hosted Apps & Services: whatever else you run in rootless Podman, found automatically. Start and stop each one, watch live status, manage models, and see the address that actually works from your phone.
The stacked layout at a narrow width, the same place the LAN and Tailscale addresses matter most.
Everything stays local. No accounts, no telemetry, no analytics, nothing phones home. The only outbound actions are the "browse models" links, model updates, and the "check for a newer version" button. Each contacts one host, and only when you click it.
This is built and proven on one specific configuration:
- Distro: Bazzite (Fedora Atomic base, KDE)
- Hardware: AMD Ryzen AI MAX+ 395 "Strix Halo", Radeon 8060S iGPU (gfx1151)
- Services: Ollama · Open WebUI · ComfyUI
Other distros, GPUs, or AI tools aren't supported yet, not a promise they won't be, just an honest label. The app's built-in Setup Check detects whether your machine matches and skips the checks plainly if it doesn't.
→ docs/GETTING_STARTED.md, a from-scratch setup for the same Bazzite + Strix Halo hardware, with two tracks: one for people using an AI assistant, and a full manual walkthrough (every command verified against a working machine).
- Two clear groups: Local AI on top (the tools this app is about), Self-Hosted Apps & Services below. The second group collapses, and starts collapsed past six services, so a big homelab never buries the AI stack.
- Your other self-hosted services, found automatically: the app asks Podman what's actually running rather than checking a list of supported names, so your Jellyfin or Nextcloud shows up the same way. Well-known services get a proper label; anything else is shown honestly by container name and port. Pods collapse to one entry, and containers you ran by hand stay out.
- One toggle per service: start/stop anything in either group (systemd
--user), live status from a real liveness check, not just "the container exists". - Open in browser: one click to each running web UI, always via
127.0.0.1(neverlocalhost). - Reachable at: the address that works from your phone. The app detects what this machine actually has (LAN, Tailscale with its MagicDNS name) and shows each one with a plain-language note about where it works. Nothing is invented; undetected means not shown.
- Ollama model manager: installed models with size, an in-memory vs on-disk badge, and a real
ollama pullUpdate. - ComfyUI model manager: lists what's in your model folders by type; install new models from a Hugging Face / Civitai / direct link (download → verify → filed in the right folder); per-model Update once a source is set.
- Setup Check: one panel that verifies the iGPU flags, the Open WebUI Quadlet, the gfx1151 ROCm build, and the GGUF node, with safe one-click fixes.
- Crash-aware: a service that dies shows "Stopped unexpectedly" with a View log button, not a silent gray.
- Live rescan: auto + manual, so hand-added models appear without a restart.
- Notices installs and uninstalls while it's running: install or remove a tool by any method and the card updates itself; the honest "Not installed" state appears and disappears without a restart. Driven by systemd D-Bus signals and filesystem watches, not by constant rescanning.
- Agent layers: a harness that runs on top of your stack (currently Hermes Agent) gets its own labelled section rather than being mixed in with the base services, so it's obvious what's an engine (Ollama), what's an interface (Open WebUI), and what's an agent on top. The card states its dependency in place, shows the model and context it's configured against, and flags it clearly if that model isn't installed.
- Check for a newer version of the app: in About, and only when you press it. No launch check, no background timer. Flatpak installs are pointed at their app store; the app never updates itself.
- Light & dark: polished, and your choice persists.
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python app.pyAdd it to your app launcher (icon + pinnable, no terminal):
bash scripts/install-desktop.shThis renders the app icon into ~/.local/share/icons and installs a .desktop
entry that runs the app through the venv, double-clicking just works.
- UI: a local web front-end (
web/) in aQWebEngineView(PySide6 + QtWebEngine), wired to Python overQWebChannel. - Backend:
hub/services/controls each service viasystemctl --user+ HTTP probes; Ollama uses its REST API, ComfyUI model provenance/updates live inhub/services/comfy_models.py. Stdlib only. - Layers:
hub/layers/holds harnesses that run on top of a base service. ALayeris aServiceplus the key of what it depends on, so control and status are inherited; adding another harness means a subclass and one line inLAYER_CLASSES. - Change detection:
hub/services/watch.pyreconciles on systemd D-Bus signals and inotify rather than polling for installs. - Discovery:
hub/services/containers.pyenumerates rootless Podman containers, keyed on thePODMAN_SYSTEMD_UNITlabel Quadlet writes; that label is also what start/stop uses, so discovered services go through the sameServiceclass (and the same Flatpak D-Bus path) as everything else. - Addresses:
hub/addresses.pyreads interfaces through an ioctl over the stdlib rather than shelling out toip, so it works with no external binary. - Adapting to another machine: service unit names and ports are in
hub/services/*.py(unit=/health_url=).
(Local) AI Hub is free and open source under the GNU Affero General Public License v3.0 (AGPLv3). You're free to use it commercially, fork it, and modify it, but if you modify it and run it as a hosted or networked service, AGPLv3 requires you to release your modified source too. That deliberately closes the loophole a permissive license leaves open for closed, hosted forks.
Release history is in CHANGELOG.md.
- 📺 YouTube, youtube.com/@kamsiob
- 💻 GitHub, github.com/kamsiob
- 🌐 Website, kamsiob.com
- 💬 Telegram (Kamsiob Lab), t.me/+g5LKm9rUnNcxMjk5
- ✉️ Feedback, hello@kamsiob.com
Same links live inside the app, under About in the header.
(Local) AI Hub is free and always will be. If it's useful to you and you'd like to help keep it going, you can buy me a coffee, entirely optional, always appreciated.
Made by Kamsiob · YouTube · GitHub · Website · Telegram · hello@kamsiob.com

