Skip to main content

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

terminal
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

.env
# 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

terminal
docker compose pull && docker compose up -d

From source

terminal
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

terminal
# 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

terminal
uv tool install content-cli     # or: pipx install content-cli
export CONTENT_API_URL=http://nas.local:8010
content health

Python SDK

terminal
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.