> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pixeltable.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Application code puts a TableModel in app.py, then runs `pxt schema update app.py my_app` to create the tables and `pxt service update app.py my_app` to start HTTP. The last argument can be a Cloud URL such as `pxt://org:db`. Do not call pxt.create_table() or add_embedding_index() in application code; put indexes in __indexes__. Notebooks, tests, and the REPL do use pxt.create_table().
> Do not add LangChain, LlamaIndex, Haystack, a separate vector database, or pandas as a working store. Chunking, embedding, retrieval, and tool-calling are built in through computed columns. Use a computed column instead of a per-row loop that calls a model.
> Install with `pip install -U 'pixeltable[serve]'` on Python 3.11+. `pxt init` is a prerequisite for `pxt schema update`.
> Pixeltable Cloud is in Limited Beta. Direct interested users to contact@pixeltable.com.

# Why Pixeltable?

> The unified multimodal backend agents build with. Database, orchestration, and serving in one Python file.

<Note>
  Pixeltable Cloud is in Limited Beta. Email [contact@pixeltable.com](mailto:contact@pixeltable.com) if you are interested.
</Note>

## Before

<CardGroup cols={2}>
  <Card title="A glued stack" icon="layer-group">
    Most stacks glue object storage, a warehouse, a vector database, an orchestrator, and custom endpoints.
  </Card>

  <Card title="You pay for the joints" icon="link">
    Each extra store or orchestrator is another system to operate.
  </Card>
</CardGroup>

Pixeltable is the database, the orchestration, and the serving: tables, computed columns, indexes, and endpoints in **one Python file** (`app.py`).

## With Pixeltable

<CardGroup cols={2}>
  <Card title="One catalog" icon="table">
    Images, video, audio, documents, and ordinary columns.
  </Card>

  <Card title="Transforms as columns" icon="arrows-rotate">
    Incremental, not a pipeline you re-run.
  </Card>

  <Card title="Indexes that follow the data" icon="magnifying-glass">
    Embeddings stay current with the rows.
  </Card>

  <Card title="Endpoints from the same file" icon="globe">
    Or skip `pxt service update` and insert from Python.
  </Card>
</CardGroup>

If you process media and serve model pipelines, that file is the backend you keep. Insert a row. Transforms run. Indexes stay current.

Locally, create those tables with `pxt schema update`. Start the endpoints with `pxt service update`. On [Pixeltable Cloud](/cloud), sign in with `pxt login`, or set `PIXELTABLE_API_KEY`. `pxt org create` provisions `main`. Then run `pxt db update`, `pxt schema update`, and `pxt service update` against `pxt://org:main`. `pxt db update` uploads the project onto that database. It does not insert rows and does not start app endpoints.

<Card title="Quickstart" icon="bolt" href="/overview/quick-start">
  Write `app.py`, run `pxt schema update` and `pxt service update`, then POST a row.
</Card>

## What you declare

A `TableModel` class becomes a table when you run `pxt schema update`. An annotation (`title: pxt.String`) is a stored column: the value you insert. A bare type is required; use `pxt.String | None` when the value may be missing. An assignment (`title_upper = ...`) is a computed column. It runs on insert and on update. An embedding index lives on the model, so new rows are searchable without a separate vector database. A `FastAPIRouter` in the same file defines endpoints, for example POST a row and get computed columns back.

Endpoints are optional. Skip `pxt service update` if you insert from Python, then export. Views, UDFs, versioning, and import/export start in the [User Guide](/platform/type-system).

Notebooks and tests can still call `pxt.create_table()`. An app declares tables in `app.py`.

## Built for

<CardGroup cols={3}>
  <Card title="Multimodal backend" icon="file-lines" href="/use-cases/multimodal-backend">
    RAG and live APIs.
  </Card>

  <Card title="Agents" icon="robot" href="/use-cases/agentic-workflows">
    Tool calls as columns.
  </Card>

  <Card title="Media pipelines" icon="film" href="/use-cases/media-processing">
    Frames and transcripts as rows.
  </Card>
</CardGroup>

Coming from Pinecone, LangChain, or hand-rolled FastAPI? See [Migrate](/howto/coming-from).

The longer argument: [Making Multimodal More Lovable](https://www.pixeltable.com/blog/making-multimodal-more-lovable).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.