Install
Four lines, then every client.
Published images, nothing to clone or build. The engine, its three web UIs and the API come up together; the MCP server, the CLI and the SDK install on the machines that talk to it.
- Docker Compose
- amd64 or arm64
- A folder for your library
- Reachable on your LAN
Docker Compose
mkdir content && cd content
curl -fsSLO https://raw.githubusercontent.com/LatentNoise/content/main/deploy/docker-compose.yml
curl -fsSL -o .env https://raw.githubusercontent.com/LatentNoise/content/main/.env.example
docker compose up -d -
Content Studio localhost:8502
General requests: URL, file, upload, inline text
-
HomeTube localhost:8501
Focused YouTube video and playlist workflow
-
Content Console localhost:8503
Health, configuration, storage, jobs, logs
-
Content API localhost:8010/docs
REST API, OpenAPI and the embedded worker
The three settings worth knowing
# Where finished files go. Its sub-folders become the destination
# choices offered in every client (Plex, Jellyfin or Emby can watch it).
CONTENT_DELIVERY_DIR_HOST=/mnt/media/library
# Summaries, translations and derived chapters need a language model:
# a local Ollama, or an opt-in cloud key (never used unless set).
CONTENT_OLLAMA_URL=http://ollama:11434
# CONTENT_ANTHROPIC_API_KEY=
# CONTENT_OPENAI_API_KEY=
# Multi-user mode: sign-in by email link, per-account isolation and quotas.
# The default is single-user, with no authentication — see the note below.
# CONTENT_AUTH_MODE=token Everything else has a sensible default and is listed, with its effective value, in Content Console. The full reference is in the deployment guide
Updating
docker compose pull && docker compose up -d From source
git clone https://github.com/LatentNoise/content.git
cd content
cp .env.example .env
docker compose up -d --build # adds the optional speech-to-text runner The clients that live elsewhere
Point them at your engine
One variable, CONTENT_API_URL, is all any of them needs.
MCP server
# Nothing to install: the client fetches it on first use
uvx content-mcp --version
# Claude Code
claude mcp add content \
--env CONTENT_API_URL=http://localhost:8010 \
-- uvx content-mcp CLI
uv tool install content-cli # or: pipx install content-cli
export CONTENT_API_URL=http://nas.local:8010
content health Python SDK
pip install content-sdk # Python 3.11+, httpx and pydantic only
The Chromium extension installs from the release zip: unzip, then Load unpacked in
chrome://extensions.
Extension README
Kubernetes
The repository ships a Helm chart: the engine, the three web UIs, persistent volumes for data and output, an ingress per surface and a ServiceMonitor for Prometheus. It is the chart the hosted instance runs on. deploy/charts/content
FAQ
Common questions
Is the API protected?
Not by default. The engine starts in single-user mode with no authentication, so keep it on a trusted network or behind a reverse proxy that authenticates. A multi-user mode exists since 0.8: sign-in by email link, an account id on every row and every path, named API keys, and quotas checked before anything runs.
Where do my files go?
Everything stays in the installation folder: ./data holds the database, jobs and artifacts; finished files are delivered to ./playground/output, or to CONTENT_DELIVERY_DIR_HOST if you point it at your NAS or media library.
Do I need a GPU or a language model?
No. Media, subtitles, transcripts from subtitle tracks, chapters, thumbnails, Markdown and PDF work without one. Summaries, translations and derived chapters need a local Ollama model or an opt-in cloud key; if neither is configured, those outputs are reported as unavailable up front.
What about transcription from audio?
It needs the optional speech-to-text runner (faster-whisper), included when you build from source with docker compose up -d --build. The published image does not carry it, to stay small.
Can I run it on Kubernetes?
Yes. The repository ships a Helm chart under deploy/charts/content: the engine, the three web UIs, persistent volumes for data and output, an ingress per surface and a ServiceMonitor. The hosted instance runs on it.
How do I update?
docker compose pull && docker compose up -d. Every client pins the engine version it was released with, so update the clients you use at the same time.
Rather not run a server? early access
The same engine, hosted by its author
Sign in with an email link and try Content without installing anything. It is the self-hosted instance with accounts turned on — same engine, same clients, same output — with a free allowance of media per month and files kept fifteen days. Everything you build there keeps working the day you move it to your own machine.