Local AI stack orchestrator — privacy-first, pick-and-choose, upstream-only
Project description
Puente
Your own AI platform. Runs on your hardware.
Puente is a local-first AI orchestrator. It stands up a full stack of AI services — chat, image generation, speech, search, notebooks — on modest hardware, from one config file. Private by default. Yours to keep.
Pay a time tax, not a token tax. Modest hardware, honest bills.
Puente is the deployment layer of LocoPuente, a LocoLabo initiative: local AI for everyone who can't — or won't — send their data to the cloud.
Install
pip install locopuente
The PyPI distribution is
locopuente(thepuentename belongs to another project). The command you run ispuente.
Or from source:
git clone https://github.com/michael-borck/loco-puente.git
cd loco-puente && pip install -e .
Quick start
puente init # detect your hardware, choose services that fit
puente install # pull Docker images, install native pieces (Ollama, models)
puente up # start the stack + a launcher portal
Then puente status to see what's live. That's it.
Expose services (optional)
Enable the built-in Caddy service and give any service a proxy: block to
publish it at a public hostname — automatic TLS, per-service auth. It's
config-as-code: you declare the boundary, Caddy serves it.
services:
caddy:
enabled: true
email: you@example.org # Let's Encrypt contact
users:
ui: { admin: ADMIN_BCRYPT } # basic-auth groups (bcrypt hash from env)
proxy_hosts: # front hosts that aren't puente services, too
- host: plex.example.org
port: 32400
upstream: 192.168.1.10
auth: none
swarmui:
proxy:
host: swarmui.example.org
auth: bearer # none | basic | bearer
token_env: SWARMUI_TOKEN # token read from the environment
Secrets (ADMIN_BCRYPT, SWARMUI_TOKEN, …) come from the environment, never the
committed config. Full walkthrough — including migrating off an existing proxy —
in docs/caddy-migration.md.
What it does
- Detects your hardware and proposes a service set it can actually run, pinning models to the right GPU.
- Orchestrates the containers — you toggle services in
puente.yml, Puente handles Docker, GPUs, models, and (optionally) a reverse proxy. - Config as code. The whole stack is one committable
puente.yml. No web UI, no hidden state. - Coexists with what you already run. A service you've already installed can
stay (
managed: false); Puente uses it instead of spinning up its own.
Services
A pick-and-choose menu, all running locally:
| Service | What it is |
|---|---|
| Ollama | Local LLM inference |
| Open WebUI | Chat over your models |
| SwarmUI / ComfyUI | Image generation |
| Chatterbox / Speaches | Voice-cloning TTS, speech-to-text |
| SearXNG | Private meta-search |
| AnythingLLM | Docs + RAG workspaces |
| Open Notebook, Stirling PDF, Excalidraw, Jupyter, … | Tools |
Plus an optional Caddy reverse-proxy service (automatic TLS) that fronts whichever services you expose — see docs/caddy-migration.md.
Commands
puente init Interactive setup — detect hardware, pick services
puente install Install native services + pull Docker images
puente up Start the stack (or a specific service)
puente down Stop the stack (or a specific service)
puente enable Enable a service in puente.yml
puente disable Disable a service in puente.yml
puente status Status of all enabled services
puente doctor Health-check enabled services
puente gpu Detect and display GPUs
puente connect Connection details for external tools
puente portal Generate the service launcher page
Requirements
- Python 3.10+
- Docker (for containerized services)
- A GPU is recommended but not required — a single consumer GPU is enough to start.
License
MIT © Michael Borck. A LocoLabo initiative, Curtin University.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file locopuente-0.1.1.tar.gz.
File metadata
- Download URL: locopuente-0.1.1.tar.gz
- Upload date:
- Size: 207.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aca353cee6c25252dabb78d977c1215c45591d7ebb13de322fcad01c4c8fc757
|
|
| MD5 |
86d75696d748639305bc8eedb1e0bb92
|
|
| BLAKE2b-256 |
2f5d76fd4686f966299b801653d79549487ff434ae8506ab51ae39235e695e65
|
File details
Details for the file locopuente-0.1.1-py3-none-any.whl.
File metadata
- Download URL: locopuente-0.1.1-py3-none-any.whl
- Upload date:
- Size: 65.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1df4251efac5bf6daf3d33efd178d04f0cce084fc52c3d51aab48bfe29dd293e
|
|
| MD5 |
965354b8d766e5baa5fa808d2861fe24
|
|
| BLAKE2b-256 |
a93de64fd72baef8bb35fb78cc244e565a169a1285b8fdd8e9284b408f0f7331
|