Pixeltable and Daft
Daft, from Eventual, is an open-source multimodal dataframe: native image, video, audio, and embedding types, laptop to cluster. Pixeltable is a live application schema: insert a row and computed columns, indexes, and HTTP follow. Batch vs the app. Often and, not or.
pip install 'pixeltable[serve]'Dataframe vs the application schema
| Side | Pixeltable | Daft |
|---|---|---|
| At a glance |
|
|
Scan a lake vs insert a row
Daft wins distributed batch over images and video. Pixeltable wins incremental pipelines and serving. Last reviewed: Oct 2026. Sources: docs.daft.ai (images: download, decode_image, resize), docs.pixeltable.com.
| Feature | Pixeltable | Daft |
|---|---|---|
| What it is | Application schema: store, transform, index, serve | Multimodal dataframe for batch AI workloads |
| Execution model | Insert or edit a row; dependents of that row recompute | Load, transform, write a dataframe; scale the job |
| Cluster-scale media scans | Not a distributed dataframe over a lake | The product: laptop to cluster without changing the API |
| Durable catalog | Tables, history, and indexes you query later | A job that reads and writes; persistence is the sink you choose |
| Vector index | EmbeddingIndex declared on the column | Compute embeddings, then write to a vector DB or lake |
| HTTP serving | FastAPIRouter declared next to the tables | Not a web framework; put FastAPI or a notebook in front |
Images: insert vs scan
Pixeltable: an Image column and a CLIP index; insert embeds that row. Daft: from_pydict, download, decode_image, resize — then collect. Last reviewed: Oct 2026. Daft docs: https://docs.daft.ai/en/stable/modalities/images/
Pixeltable
import pixeltable as pxtfrom pixeltable.functions.huggingface import clipTableModel = pxt.model_base()clip_embed = clip.using(model_id='openai/clip-vit-base-patch32')class Frames(TableModel, name='frames'):image: pxt.Imagecaption: pxt.String | None__indexes__ = [pxt.EmbeddingIndex(image, embedding=clip_embed)]if __name__ == '__main__':# After: pxt schema update app.py visionframes = pxt.get_table('vision.frames')frames.insert([{'image': 'https://example.com/frame.jpg', 'caption': None}])sim = frames.image.similarity(string='whiteboard diagram')frames.order_by(sim, asc=False).limit(5).select(frames.image, frames.caption)
Daft
import daftfrom daft import coldf = daft.from_pydict({'urls': ['https://example.com/frame.jpg'],})df = df.with_column('image',col('urls').download(on_error='null').decode_image().resize(224, 224),)df.collect()# Write to a lake or vector store you add. HTTP is still yours.
When each belongs
Use Pixeltable when
- The pipeline is the schema
Insert a row; transforms, indexes, and HTTP follow. A coding agent writes one file. Cloud is Limited Beta.
- You still want Daft for backfills
Scan a lake with Daft, then insert into Pixeltable when the live app should own the rows.
Use Daft when
- The job is a cluster scan
Petabytes of images or video, GPU UDFs, write to Iceberg or a vector DB. Pixeltable is extra.
- You already think in dataframes
Pandas- or Spark-shaped API, no application catalog required. Docs: https://docs.daft.ai/en/stable/
Making the right choice
And, not or
- Daft is not a Pixeltable competitor for serving HTTP. It is a batch engine. Ray Data is the same aisle.
- Do not pick Pixeltable as a Daft replacement for distributed scans.
- Last reviewed: Oct 2026. Daft: docs.daft.ai. Roundup: /learn/best-multimodal-data-platforms
Frequently asked questions
More comparisons
- Three-way compare: Pixeltable vs Supabase vs Convex
- 11 free cloud database & compute tiers compared
- Pixeltable vs Neon
- Pixeltable vs Supabase
- Pixeltable vs Prisma Postgres
- Pixeltable vs Turso
- Pixeltable vs Convex
- Pixeltable vs Modal
- Pixeltable vs Cloudflare
- Pixeltable vs Railway
- Pixeltable vs Render
- Pixeltable vs Fly.io
- Pixeltable vs Cohesivity
- Pixeltable vs LangChain
- Pixeltable vs LanceDB
- Pinecone alternative: Pixeltable vs Pinecone
- Pixeltable vs Weaviate
- Pixeltable vs Twelve Labs
- Pixeltable vs Airflow
- Pixeltable vs Label Studio
- Pixeltable vs Voxel51
Batch in Daft. Live app in Pixeltable.
Declare tables in app.py. Apply with pxt schema update. Run Daft when the job is a cluster scan over a lake.