Cisco skill scanner timed out after 60000 ms
Pixeltable
Declarative multimodal AI data engine for tables, computed columns, embedding search, agents, and FastAPI services.
pixeltable/pixeltable · v2.11.3 · Development & Workflow
Trust Score
92
Security
100
Surfaces
1
What is Pixeltable?
Pixeltable is a published development & workflow plugin for AI coding agents in the codex ecosystem, developed by Pixeltable and distributed through the HOL AI plugin registry. Declarative multimodal AI data engine for tables, computed columns, embedding search, agents, and FastAPI services.
- Canonical slug
- pixeltable/pixeltable
- Version
- v2.11.3 · updated Sep 24, 2026
- Open data
- entity.json (JSON-LD)
Trust & Reputation
Factor Analysis
Per-metric points (0–100 each) combined via a weighted average into the overall score.
Registry Snapshot
- Homepage
- https://docs.pixeltable.com/
- Canonical profile
- https://hol.org/registry/plugins/pixeltable%2Fpixeltable
- Publisher verification
- No
- Marketplace source
- Unknown
- Scanner
- Broker fallback
- Safety label
- safe
- Digest verified
- Yes
Trust & reputation
Trust & Reputation
Factor Analysis
Per-metric points (0–100 each) combined via a weighted average into the overall score.
Provenance
- Plugin root
- .
- Source repo
- https://github.com/pixeltable/pixeltable-skill
- Source commit
- 5500c88cc625…
- Publisher verified
- No
- Owner verified
- Not owner verified
Continuous scanner CI detected
No action is required. This plugin receives the full trust score.
Verified badge not detected
Add the HOL verified badge to the repository README to score +2% trust. Plugin owners can open that pull request from Guard Plugins.
Security Posture
- Provider
- registry-broker-fallback
- Grade
- A · safe
- Version
- Unknown
Findings
Pixeltable — Frequently asked questions
- What is Pixeltable?
- Pixeltable is an AI plugin in the HOL registry. Declarative multimodal AI data engine for tables, computed columns, embedding search, agents, and FastAPI services.
- How do I install Pixeltable?
- Install Pixeltable in your harness: Codex — codex plugin marketplace add pixeltable/pixeltable-skill; Claude Code — /plugin marketplace add pixeltable/pixeltable-skill; Cursor — npx skills add pixeltable/pixeltable-skill. Full step-by-step guidance is on the HOL plugin page.
- How do I install Pixeltable in Codex?
- To install Pixeltable in Codex, start with codex plugin marketplace add pixeltable/pixeltable-skill. The complete step-by-step install guide for Codex is on the HOL plugin page.
- How do I install Pixeltable in Claude Code?
- To install Pixeltable in Claude Code, start with /plugin marketplace add pixeltable/pixeltable-skill. The complete step-by-step install guide for Claude Code is on the HOL plugin page.
- How do I install Pixeltable in Cursor?
- To install Pixeltable in Cursor, start with npx skills add pixeltable/pixeltable-skill. The complete step-by-step install guide for Cursor is on the HOL plugin page.
- Is Pixeltable free?
- Pricing for Pixeltable is published on its HOL plugin page when the maker schedules a launch.
- Who publishes Pixeltable?
- Pixeltable is published by Pixeltable and listed on HOL.
- Is Pixeltable available now?
- Pixeltable availability is listed on its HOL plugin page.
Install Guidance
Install in Claude Code
Install through the Claude Code plugin marketplace.
- 1
Add the marketplace
Run this inside a Claude Code session.
claude code - 2
Install the plugin
Use the plugin name and the marketplace name shown by the previous command.
claude code - 3
Scripted alternative
Non-interactive equivalent for scripts and CI pipelines. Add --scope project to pin the install to one repository.
shell
Plugin Manifest
{
"name": "pixeltable",
"version": "2.11.3",
"description": "Build multimodal AI applications with Pixeltable.",
"author": {
"name": "Pixeltable",
"url": "https://github.com/pixeltable"
},
"homepage": "https://docs.pixeltable.com/",
"repository": "https://github.com/pixeltable/pixeltable-skill",
"license": "Apache-2.0",
"keywords": [
"pixeltable",
"multimodal",
"rag",
"embeddings",
"agents",
"computed-columns"
],
"skills": "./",
"interface": {
"displayName": "Pixeltable",
"developerName": "Pixeltable",
"composerIcon": "./assets/icon.png",
"logo": "./assets/icon.png",
"screenshots": [
"./assets/icon.png"
],
"shortDescription": "Build Pixeltable apps with declarative tables, pxt CLI, RAG, agents, and serving",
"longDescription": "Use Pixeltable to build multimodal AI applications with declarative tables, computed columns, embeddings, retrieval, provider integrations, the pxt CLI (schema, service, inspect), and production workflow patterns.",
"category": "Developer Tools",
"capabilities": [
"Read",
"Write"
],
"websiteURL": "https://docs.pixeltable.com/",
"privacyPolicyURL": "https://github.com/pixeltable/pixeltable-skill/blob/main/SECURITY.md",
"termsOfServiceURL": "https://github.com/pixeltable/pixeltable-skill/blob/main/LICENSE",
"brandColor": "#2563EB",
"defaultPrompt": [
"Start a Pixeltable project with pxt service example",
"Build a RAG pipeline with the pixeltable skill",
"Debug this Pixeltable workflow with pxt errors"
]
},
"registryIndexVersion": 5
}Marketplace Source
- Repo URL
- https://github.com/pixeltable/pixeltable-skill
- Marketplace path
- Unknown
- Source path
- plugins/pixeltable/pixeltable-skill
- Install policy
- AVAILABLE
Skills
Copy or download the SKILL.md files this plugin ships, then install them with the Skills CLI.
pixeltable
skills/pixeltable-skill/SKILL.md
>
---
name: pixeltable
description: >
Build multimodal AI apps with Pixeltable. One application file (app.py)
declares TableModel tables and FastAPIRouter routes. Create tables with
pxt schema update. Start HTTP with pxt service update. Insert a row or
POST to try the app. Use computed columns instead of LangChain,
pandas-as-store, or a separate vector DB. Use when building RAG,
processing images/video/audio/documents, or serving an API. Do NOT use for
general Python or direct PostgreSQL administration.
license: Apache-2.0
allowed-tools: []
metadata:
author: Pixeltable
version: 2.11.3
type: documentation
executes-code: false
category: data-infrastructure
tags: [multimodal, ai, data, tables, embeddings, rag, udf, video, audio, images, documents, agents, tools, fastapi, declarative, computed-columns, vector-search]
documentation: https://docs.pixeltable.com/
support: https://github.com/pixeltable/pixeltable/discussions
priority: 6
pathPatterns: ["**/*.py"]
importPatterns: ["pixeltable", "import pixeltable as pxt", "from pixeltable"]
bashPatterns: ['^\s*pxt(?:\s|$)']
promptSignals:
phrases: ["pixeltable", "computed column", "embedding index", "add_embedding_index", "TableModel", "create_view", "document_splitter", "invoke_tools", "pxt schema", "pxt service", "pxt shell", "pxt errors", "pxt dashboard"]
minScore: 6
---
## STOP
If you find yourself importing any of these, you are off-path:
1. **Do not use LangChain / LlamaIndex / Haystack / LangGraph.** Chunking is `document_splitter`. Search is `.similarity()`. Tools are `pxt.tools()` + `invoke_tools()`.
2. **Do not use pandas as a working store.** Tables are the store. `.collect().to_pandas()` is export only.
3. **Do not write `for row in ...:` loops calling models.** Wrap the call in a computed column.
4. **Do not install a separate vector database.** In an app, `__indexes__ = [pxt.EmbeddingIndex(...)]` on the model. In a notebook, `t.add_embedding_index(col, embedding=fn)`. Search with `.similarity(string=query)`.
5. **Do not write `while not done:` agent loops.** Insert a row. The computed-column chain runs.
See [anti-patterns.md](references/anti-patterns.md) (6 macros).
## What is Pixeltable?
One application file (`app.py`) is the backend.
- `pxt schema update`: creates tables from `TableModel` classes. Does not start HTTP.
- Insert a sample, `.select()`, `pxt dashboard`, or `pxt schema diff`. Compute runs on insert. After `pxt service update`, curl POST.
- `pxt service update`: starts HTTP (local or `pxt://`). `pxt service list` prints the URL. This is the serving command; do not reach for `pxt service run`.
`pxt db update` uploads the project files and sets the hosted image and workers. It does not set secrets (`pxt secret` does), insert rows, or start app HTTP.
First run: [Quickstart](https://docs.pixeltable.com/overview/quick-start). Why: [Why Pixeltable](https://docs.pixeltable.com/overview/pixeltable).
## Starting a new project
```bash
pip install 'pixeltable[serve]' # Python 3.11+
pxt init
pxt service example --out app.py
pxt schema check app.py # validates the file; warns if 'app' is shadowed
pxt schema update app.py my_app
pxt service update app.py my_app
pxt service list # assigned port; do not hard-code :8000
```
`pxt service example` writes models plus a `FastAPIRouter`. Schema only (no HTTP): `pxt schema example --brief --out app.py`. Then edit `app.py` and run `pxt schema update` again. After a schema change, run `pxt service update` again if routes exist. Do not `python app.py`. Full flags: [cli.md](references/cli.md).
The last argument (`my_app`, or `pxt://org:db` on Cloud) is a catalog directory, not a folder on disk. `pxt init` marks the project root. Schema does not start HTTP. Service does not create tables. Non-interactive: `pxt service update ... -f`. Local handle: `pxt.get_table('my_app.docs')`, or bind the models: `import app; app.TableModel.bind_all('my_app')`, then `app.Docs.insert(...)` / `app.Docs.select(...).collect()`.
Same file on Cloud: set `PIXELTABLE_API_KEY`, add `[[pixeltable.database]]` with `name = 'pxt://org:db'`, then `pxt db update pxt://org:db -f`, then `pxt schema update app.py pxt://org:db -f`, then `pxt service update app.py pxt://org:db -f`. Cloud handle: `pxt.get_table('pxt://org:db/docs')`. Cloud databases store media in their managed home bucket by default; set a column `destination=` only to override it. On Cloud, try the app with dashboard insert plus `pxt schema diff`, and inspect failures with `pxt service logs` / `pxt db logs`. [Cloud](https://docs.pixeltable.com/howto/deployment/cloud).
## The application file
`pxt service example --out app.py` writes this shape. Edit it. Then `pxt schema update app.py my_app`.
```python
import pixeltable as pxt
import pixeltable.functions as pxtf
from pixeltable.serving import FastAPIRouter
TableModel = pxt.model_base()
@pxt.udf
def excerpt(text: str, n: int = 12) -> str:
return text if len(text) <= n else f'{text[:n]}...'
class Docs(TableModel, name='docs'):
id = pxt.Column(value=pxtf.uuid.uuid7(), primary_key=True)
title: pxt.String
body: pxt.String | None
title_upper = pxtf.string.upper(title)
summary = excerpt(title)
ingest = FastAPIRouter(name='ingest')
ingest.add_insert_route(
Docs, path='/docs', inputs=[Docs.title, Docs.body],
outputs=[Docs.id, Docs.title_upper, Docs.summary],
)
ingest.add_update_route(
Docs, path='/docs/update', inputs=[Docs.title],
outputs=[Docs.id, Docs.title_upper],
)
ingest.add_compute_route(Docs, path='/titles', inputs=[Docs.title], outputs=[Docs.title_upper])
```
Annotation is a stored column. Assignment is a computed column. Optional is `T | None`. Primary key is `pxt.Column(..., primary_key=True)`; `add_update_route` matches rows by it, so the request body carries `id` even though `inputs` does not list it. Indexes on the model: `__indexes__ = [pxt.EmbeddingIndex(...)]`. `from pixeltable.serving import FastAPIRouter`.
Already have FastAPI: after schema update, `ingest.bind('my_app')` then `app.include_router(ingest)`. Or define the `fastapi.FastAPI` object in `app.py` and `include_router()` each router there; `pxt service update` then serves that one application. Call `pxt.get_table()` inside custom handlers. [workflows.md](references/workflows.md).
RAG, views, and search: [workflows.md](references/workflows.md). Do not add Hugging Face or spaCy unless the user asked.
## Apps vs notebooks
- **Apps:** `app.py` + `pxt schema update` + `pxt service update`. Indexes on the model.
- **Notebooks / REPL:** `pxt.create_table()`, `add_computed_column()`, `add_embedding_index()`. The appendix below uses that form.
## Where to look
| Need | Open |
|------|------|
| `pxt schema`, `pxt service`, inspect | [cli.md](references/cli.md) |
| Types, views, UDFs, UDAs | [core-api.md](references/core-api.md) |
| Provider import and output shape | [providers.md](references/providers.md) |
| Serving, FastAPIRouter, routes | [workflows.md](references/workflows.md) |
| Wrong stack | [anti-patterns.md](references/anti-patterns.md) |
Add video, audio, agents, or a UI by editing `app.py`. A view is either a filter (`base=Docs.where(...)`) or an iterator (`frame_iterator`, `audio_splitter`, `document_splitter`, `video_splitter`, `string_splitter`, `list_iterator`, `tile_iterator`). Check `pixeltable.functions` before writing a UDF. Start from `pxt service example` or `pxt schema example`. Do not invent a second `pxt schema update` path.
## API traps
| Wrong | Correct |
|-------|---------|
| `openai.vision(...)` | Deprecated (the only deprecated function in `pixeltable.functions`). Use `chat_completions` with `image_url`, or `responses` |
| `from pixeltable.iterators import ...` | The whole `pixeltable.iterators` package is a deprecated shim (`FrameIterator`, `VideoSplitter`, `DocumentSplitter`, `StringSplitter`, `AudioSplitter`, `TileIterator`). Import the function from `pixeltable.functions.*` -- e.g. `from pixeltable.functions.video import frame_iterator` |
| `similarity(query)` | `similarity(string=query)`. Also `image=` / `audio=` / `video=` / `document=` / `vector=`; `idx=` picks among several indexes on one column |
| Re-run with `if_exists='ignore'` to fix logic | Notebook: `add_computed_column(..., if_exists='replace')`. App: **rename** the column, then `pxt schema update --allow-destructive` |
| Edit a computed column's expression in place, then `--allow-destructive` | Editing an existing column's expression is `UNSUPPORTED`; the flag does not help and the whole update applies nothing. Rename the column |
| `t.summary_errortype` | `t.summary.errortype` / `t.summary.errormsg`, on stored computed or media columns. `t.<col>.fileurl` / `.localpath` for media |
| `pxt.Required[pxt.String]` | Non-nullable by default. Optional: `T \| None` |
| `@pxt.udf def f(x: str)` fed a nullable column | A non-nullable parameter that receives `None` **skips the call**: the cell is `None` and `errormsg` is empty. Annotate `x: str \| None` and handle `None` in the body |
| `whisper.load_model(...)` inside a UDF body | Weights reload on every row. Use the shipped wrapper (`pxtf.whisper.transcribe`, `clip.using(...)`), or a module-scope cached loader |
| `recompute_columns(columns=['summary'])` | `t.recompute_columns('summary', errors_only=True)` |
| TOML routes or a retired serve CLI | `FastAPIRouter` + `pxt schema update` + `pxt service update` |
| `add_embedding_index()` in `app.py` | `__indexes__` on the TableModel. Note the DSL names an index `name=`, the SDK `idx_name=` |
| `make_video(order_by=...)` / `stitch_tiles(order_by=...)` | Both are `requires_order_by` UDAs: the ordering expression is the **first positional** argument -- `make_video(t.pos, t.frame, fps=25)`. `order_by=` raises |
| `pxt.create_table()` / `get_table()` at import in `app.py` | `TableModel` + `pxt schema update`. Import must not mutate the catalog |
| `EmbeddingIndex(frame, image_embed=clip)` | `embedding=clip` (covers text and image). Or both `string_embed=` and `image_embed=`. `image_embed=` alone cannot answer `similarity(string=...)` |
| `uuid.astype(pxt.String)` | `uuid.to_string()` (`from pixeltable.functions.uuid import to_string`). `astype` does not cast UUID to String |
Extract the field (`.text`, `.choices[0].message.content`). Cast Json with `.astype(pxt.String)` only before embedding or concatenating.
## Notebook / REPL appendix
```python
import pixeltable as pxt
pxt.create_dir('my_project', if_exists='ignore')
t = pxt.create_table('my_project.documents', {
'title': pxt.String,
'content': pxt.String,
'image': pxt.Image,
'video': pxt.Video,
'audio': pxt.Audio,
'doc': pxt.Document,
}, if_exists='ignore')
```
Types are non-nullable by default. Optional is `T | None`. Do not use `pxt.Required`.
```python
from pixeltable.functions.uuid import uuid7
t = pxt.create_table('my_project.items', {
'content': pxt.String,
'uuid': uuid7(),
}, primary_key=['uuid'], if_exists='ignore')
```
Insert: `t.insert([{...}])`. Computed column:
```python
from pixeltable.functions.openai import chat_completions
t.add_computed_column(
summary=chat_completions(
messages=[{'role': 'user', 'content': t.content}],
model='gpt-4o-mini',
).choices[0].message.content,
if_exists='ignore',
)
```
Views: `document_splitter`, `frame_iterator` (from `pixeltable.functions.video`), `string_splitter`, `audio_splitter`. Notebook indexes: `t.add_embedding_index('content', embedding=embed_fn, if_exists='ignore')`.
Query: `t.where(...).select(...).collect()`. Similarity: `t.content.similarity(string=query)`. In `@pxt.query`, alias as `score=sim`.
UDFs are recorded as a module path relative to the project root (`app.excerpt`).
Always `if_exists='ignore'` on notebook `create_*` / `add_*`. Failed cells: `t.recompute_columns('summary', errors_only=True)`. `string_splitter` / `document_splitter(..., separators='sentence')` need spaCy. Embedding indexes need `.using(...)`.
## pxt CLI
```bash
pxt init
pxt service example --out app.py
pxt schema check app.py
pxt schema update app.py my_app
pxt service update app.py my_app
pxt service list
pxt ls -l
pxt errors my_app/docs
pxt recompute my_app/docs summary --errors-only -f
pxt dashboard
```
[cli.md](references/cli.md).
## Resources
- [Quickstart](https://docs.pixeltable.com/overview/quick-start)
- [CLI](https://docs.pixeltable.com/platform/cli)
- [MCP Server](https://github.com/pixeltable/mcp-server-pixeltable-developer)
- [Docs](https://docs.pixeltable.com/llms-full.txt)
File Inventory
.codex-plugin/plugin.json
plugin-manifest
1,406 bytes
469df7aca216bdc5…
README.md
file
2,843 bytes
9a1f669e355919a5…
.claude-plugin/plugin.json
file
660 bytes
9e845adbc614bf75…
.cursor-plugin/plugin.json
file
678 bytes
489123d765749ad3…
package-lock.json
file
228 bytes
6bbf802a471cbe25…
package.json
file
632 bytes
190d6f902ae95fb8…
AGENTS.md
file
2,404 bytes
c29c27353c01d67e…
SECURITY.md
file
749 bytes
c25b94cef39aaa77…
plugin.json
file
1,901 bytes
a83b5933049b5ae1…
hooks/session_orientation.py
file
2,747 bytes
3077447c9a915b48…
commands/add-provider.md
file
1,740 bytes
2af163b81640c8f2…
agents/pixeltable-pipeline-architect.md
file
2,123 bytes
a2c07ab584ba8198…
agents/pixeltable-debugger.md
file
1,787 bytes
cc0eec7781369a36…
commands/scaffold.md
file
978 bytes
b3218ed2bf2c9614…
hooks/hooks.json
file
1,074 bytes
97da5bf87851824d…
skills/pixeltable-skill/agents/openai.yaml
skill
203 bytes
882f58a89e23a818…
skills/pixeltable-skill/SKILL.md
skill
12,647 bytes
da3cf6930d73c3fd…
hooks/validate_antipatterns.py
file
9,298 bytes
ce05ef86bb199608…
skills/pixeltable-skill/references/cli.md
skill
16,371 bytes
2c7acde669b82ca8…
skills/pixeltable-skill/references/anti-patterns.md
skill
3,149 bytes
4ab77cd4e8c549ac…
skills/pixeltable-skill/references/core-api.md
skill
16,593 bytes
407758a48604b3a7…
skills/pixeltable-skill/references/providers.md
skill
4,951 bytes
4a3911018976d118…
skills/pixeltable-skill/references/workflows.md
skill
4,133 bytes
abeda5b94a76ec2e…
assets/icon.png
asset
40,100 bytes
bee1ead7219c0e94…