Before
A glued stack
Most stacks glue a blob store, a warehouse, a vector database, an orchestrator, and custom endpoints.
You pay for the joints
Each extra store or orchestrator is another system to operate.
app.py).
With Pixeltable
One catalog
Images, video, audio, documents, and ordinary columns.
Transforms as columns
Incremental, not a pipeline you re-run.
Indexes that follow the data
Embeddings stay current with the rows.
Endpoints from the same file
Or skip
pxt service update and insert from Python.pxt schema update. Start the endpoints with pxt service update. On Pixeltable Cloud, use the same app.py after you set PIXELTABLE_API_KEY and run pxt db update. That Cloud command creates or updates the hosted database. It does not insert rows and does not start app endpoints.
Quickstart
Write
app.py, run pxt schema update and pxt service update, then POST a row.What you declare
ATableModel 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.
Notebooks and tests can still call pxt.create_table(). An app declares tables in app.py.
Built for
Multimodal backend
RAG and live APIs.
Agents
Tool calls as columns.
Media pipelines
Frames and transcripts as rows.