Plixlab is a computational medium for interactive storytelling: presentations whose charts, pictures and 3D models are computed by live code. You build them by talking to your own AI assistant through the Plixlab connector, or by hand in the app.
https://mcp.plixlab.com. See Connect your AI assistant.Plixlab is an MCP server. Your assistant signs in to your Plixlab account once (OAuth) and can then create slides, write and run code cells, lay out elements and read your presentations. It runs on your own assistant subscription. Plixlab has no built-in chat and charges no AI credits.
The same settings are in the app under Account → MCP Connector, which opens by itself on your first sign-in.
Customize → Connectors → Add custom connector, name it Plixlab, pastehttps://mcp.plixlab.com and connect.
claude mcp add --transport http plixlab https://mcp.plixlab.comTurn on Developer mode, then Settings → Connectors → Create and paste the URL. Developer mode is available on ChatGPT's paid plans.
Use the Add button in Account → MCP Connector, or add an HTTP MCP server named plixlab with the URL above.
Any other MCP client that supports remote HTTP servers with OAuth works the same way.
A presentation is one unit that travels together: its slides, its compute pipeline, and the rows (datasets, pictures, movies, models) its cells read and write. Duplicating, sharing or importing a presentation copies all of it, so a copy never depends on the original.
Each presentation has two views, switched at the top: Slide view for the deck, and Pipeline view for the code graph behind it.
Slides are 16:9. Elements come in two kinds.
Double-click a value tile to edit the number in it. Then press Run to recompute everything downstream.
A presentation has one pipeline: the graph of its Python code cells. Every port of a cell is bound to a row of the presentation (an uploaded asset or a computed output); the left rail's Sources lists the rows no cell computes.
Nothing executes until you press Run (or your assistant calls run). A Run executes the whole presentation as one graph in dependency order. Cells whose code, inputs and environment have not changed replay from cache, so re-running after a plot tweak costs only the plot cell. Each cell's log is in the Pipeline view, and Stopcancels a run.
Keep computing and plotting in separate cells: a compute cell emits numbers, and a plot cell turns them into a figure. Then styling changes never re-run the expensive step.
Every port has a kind: an input takes its row's, an output's is picked when it is added (Add output on the cell, or kind on the port over MCP). It is shown as the Python type in the cell's def header. The cell returns that object on an output and receives it on an input; a value of another type is refused at the port.
| Kind | Python type | Stored as |
|---|---|---|
yaml | values: a number, a string, a list, a dict of them (a list of numbers arrives as a NumPy array) | YAML text |
csv | a table: a dict of columns of one length (float64 arrays, or lists of strings) | CSV text |
h5 | arrays: a NumPy array, or a dict of them, of any rank and dtype; a nested dict is a group | HDF5 |
image | PIL.Image.Image, any mode | PNG |
plotly | plotly.graph_objects.Figure | JSON |
fem | trimesh.Trimesh; vertex attributes are point fields, face attributes cell fields | HDF5 |
gltf | trimesh.Scene | GLB |
glyphs | (trimesh.Trimesh, positions (n, 3), scales (n, 3)) | HDF5 |
ifc | ifcopenshell.file | STEP .ifc |
video | (frames, fps): uint16 frames (t, h, w) 0..4095 and the frame rate | VP9 12-bit lossless mp4 |
svg | str: the SVG markup | SVG |
molecule | dict: {format, data}, the structure file's format and text | YAML text |
A DataFrame or a matplotlib figure is converted in the cell:{c: df[c].to_numpy() for c in df} on a csv output, orfig.savefig(buf, format="png") and Image.open(buf) on an image one.
Every row is one file, stored exactly as it was written, and its kind is the format of that file. Nothing converts it: what you upload is what a cell reads, and what a cell writes is what you download.
Data has three kinds. Pick by what the value is:
yaml: values. A number, a string, a list, a dict of them: a parameter, a configuration, a small result. An integer stays an integer and a float a float.csv: a table. Columns of one length under a header row. Every number column is read as float64; a cell that needs integers casts the column.h5: arrays. NumPy arrays of any rank and dtype in a dict (an HDF5 file). Use it for anything large or N-dimensional.You edit a yaml, csv or h5 row in its card; the file is rewritten as it is (an array keeps its dtype). A yaml or a csv row is text, so an assistant reads and writes it directly; any other row is a file your assistant downloads, changes and uploads back in place of the old one. A row a cell writes is rewritten by its next run.
An asset can hold several samples, for example several measurements or parameter sets (its ⋮ menu: Add a sample) — a sweep. Every Run then executes the cells reading it once per sample (once per pair when two assets sweep), and each output keeps one row per combination, named output/sample (output/a/b with two sweeps).
Each cell runs on a runner, chosen through its environment (see below). There are three:
An environment's card (left rail → Compute) shows its runner and the packages that come with it.
An environment belongs to your account: the same list in every presentation. It names a runner, extra packages and environment variables. Each cell picks an environment in its menu (⋮ → Environment) in the left rail. Every account has three built-in environments, Cloud-CPU, Cloud-GPU andBrowser. Create your own when a cell needs a package its runner lacks:
Add rows from the Pipeline view or the left rail, or ask your assistant to upload them. Each file becomes a row of its kind, stored as it is:
.yaml), CSV (.csv) and HDF5 (.h5). Save NumPy arrays in an HDF5 file (h5py) before uploading them.Use the Share icon at the top of the left rail: turn sharing on and copy the link. Whoever opens it signs in (or signs up) and the presentation joins their list, read-only. Turning sharing off, or generating a new link, removes everyone's access. A viewer can import a shared presentation into their own account as an independent copy.
See Pricing for plan limits. Cloud compute hours (Pro) are spent only by cells that run on Cloud-CPU or Cloud-GPU: 1 hour = 1 CPU core for 1 hour, and 1 hour of the GPU = 15.4 hours. The time counted is the time the machine is on for your run: starting up, running, and the time it stays ready after the last run (1 minute). A cloud cell can run for 10 minutes. Browser runs are free, and so is driving Plixlab from your assistant.
To delete your account and all of its data, open Account → Manage account → Security → Delete account. Read the Privacy Policy and Terms, or browse the FAQ.
Questions or problems: contact@plixlab.com.