11 actions: 11 on the command line, 11 as MCP tools, 11 as HTTP endpoints and 9 in the page.
asset.add
Add asset. Adds a file, a data URL or a fetched URL as an asset with its role, alt, license fields and optional two-tone treatment; returns the asset with twins and metrics.
| Field | Type | Required | Description |
|---|---|---|---|
id | string | no | The asset id; a slug of the file name when omitted |
file | string | no | A path on the machine, or a data: URL from the studio’s drop or paste |
url | string | no | An http(s) URL to fetch, 25 MB at most |
role | one of 10 values | yes | |
alt | string | yes | |
source | object | object | object | object | object | no | The provenance record; built from title, artist, license and sourceUrl when omitted |
title | string | no | The picture’s name as the source states it |
artist | string | no | |
license | string | no | CC0, CC BY, CC BY-SA 4.0, public domain, or the text |
shareAlike | boolean | no | The license is share-alike: the credit must appear on the plate |
sourceUrl | string | no | Where the picture came from |
credit | string | no | The plate credit; composed from artist and license when omitted |
twoTone | boolean | no | Run the two-tone pipeline; the source is kept as assets/<id>.source.<ext> |
treatment | object | no | |
plate | "lower-left" | "lower-right" | "upper-left" | no | The plate rectangle the metrics are screened against |
upload | string | no | Hosted: the key of a presigned client upload under uploads/<principalId>/ on the private store, for files over 3 MB |
replaceSource | string | no | Attach the file as the continuous source of this existing asset instead of adding one, so a block dither can re-tone its committed twins (SPEC-3 10.1) |
baseRevision | integer | yes | The revision the caller read; a stale value is rejected with 409 |
- Command line:
turboslide asset add <file> --role <role> --alt <alt> --two-tone --black <black> --plate <plate> --replace-source <replaceSource> - MCP tool:
deck_asset_add - HTTP:
POST /api/actions/asset.add - Runs on: command line, MCP, HTTP, page.
- Changes the presentation: yes; send the
baseRevisionyou read.
asset.dither
Dither asset. Re-runs the two-tone pipeline on an asset with new parameters and reports plate clearance; with fromRecorded it reads the committed twins back and verifies them cell for cell.
| Field | Type | Required | Description |
|---|---|---|---|
assetId | string | no | Required unless allTwoTone |
treatment | object | object | no | The full treatment to run; the recorded one with the params merged when omitted |
params | object | no | Parameters merged over the recorded treatment (--gamma, --black on the CLI) |
plate | "lower-left" | "lower-right" | "upper-left" | no | The plate rectangle the metrics are screened against |
source | string | no | The continuous source when the asset records none |
allTwoTone | boolean | no | Every asset with a two-tone treatment |
fromRecorded | boolean | no | Read the committed twins back instead of regenerating; metrics are recomputed |
verifyCells | boolean | no | Regenerate from the source where one exists and count the cells that differ |
pattern | "bayer8" | "bayer4" | "blue64" | "random" | no | The threshold texture to regenerate the twins with; bayer8 unless set (SPEC-3 10.5) |
cell | 1 | 2 | 3 | 4 | no | Sheet pixels per cell; 2 unless set |
tone | "two" | "three" | "original" | no | two, three or original; two unless set |
baseRevision | integer | yes | The revision the caller read; a stale value is rejected with 409 |
- Command line:
turboslide asset dither <assetId> --gamma <gamma> --plate <plate> --pattern <pattern> --cell <cell> --tone <tone> --all-two-tone --from-recorded --verify-cells - MCP tool:
deck_asset_dither - HTTP:
POST /api/actions/asset.dither - Runs on: command line, MCP, HTTP, page.
- Changes the presentation: yes; send the
baseRevisionyou read.
asset.capture
Capture page. Captures a page at 1440 by 900 in one or both themes through a per-site recipe, optionally cropped to a region, with identical-region 2x detail crops as further assets.
| Field | Type | Required | Description |
|---|---|---|---|
url | string | yes | |
id | string | no | The asset id; a slug of the URL when omitted |
alt | string | no | |
role | "capture" | "detail" | no | |
viewport | [integer, integer] | no | |
scale | 1 | 2 | no | |
theme | "light" | "dark" | "both" | yes | |
region | [number, number, number, number] | no | A CSS-pixel box x, y, w, h inside the page; both twins take the identical region |
details | [number, number, number, number][] | no | Identical-region detail crops, one asset each as <id>-detail-<n> |
recipe | string | no | The per-site recipe; gt-site by default |
settleMs | integer | no | |
format | "jpg" | "png" | no | The twin file format; jpg at quality 92 by default |
allowHosts | string[] | no | Hosts beyond the built-in allowlist (SPEC 11 captureHosts) |
baseRevision | integer | yes | The revision the caller read; a stale value is rejected with 409 |
- Command line:
turboslide asset capture <url> --theme <theme> --scale <scale> --recipe <recipe> --region <region> - MCP tool:
deck_asset_capture - HTTP:
POST /api/actions/asset.capture - Runs on: command line, MCP, HTTP.
- Changes the presentation: yes; send the
baseRevisionyou read.
material.capture
Capture material. Renders a shader material at 3200 by 1800 and captures frozen frames at the given anchors as assets with recipe keys, through the two-tone screen when asked; one anchor returns the asset, several the list.
| Field | Type | Required | Description |
|---|---|---|---|
materialId | string | yes | |
preset | string | no | A palette preset of the material, under the uniforms |
uniforms | record | no | |
size | [integer, integer] | no | |
anchors | number[] | yes | Frame times in ms |
id | string | no | The asset id; <id>-<anchor> per anchor when several |
role | "opener" | "mood" | "frame" | no | |
alt | string | no | |
twoTone | boolean | no | |
treatment | object | no | |
plate | "lower-left" | "lower-right" | "upper-left" | no | The plate rectangle the metrics are screened against |
backend | "angle-metal" | "swiftshader" | no | |
frameKey | string | no | The frame key of 5.5 the record carries as source.frameKey |
baseRevision | integer | yes | The revision the caller read; a stale value is rejected with 409 |
- Command line:
turboslide material capture <materialId> --preset <preset> --uniforms <uniforms> --anchor <anchors> --two-tone --plate <plate> - MCP tool:
deck_material_capture - HTTP:
POST /api/actions/material.capture - Runs on: command line, MCP, HTTP, page.
- Changes the presentation: yes; send the
baseRevisionyou read.
material.list
List materials. The material catalog: every paper:* entry with its uniform schema and palette presets, and the proto:* engines with their availability.
| Field | Type | Required | Description |
|---|---|---|---|
materialId | string | no |
- Command line:
turboslide material list - MCP tool:
deck_material_list - HTTP:
POST /api/actions/material.list - Runs on: command line, MCP, HTTP, page.
- Changes the presentation: no.
logo.search
Find a logo. Searches the cached index of thesvg.org’s brand marks by title, slug, alias and category, ranked prefix, then word start, then substring, brands before community; answers each mark’s variants, its licence as recorded with the seller’s sentence, its brand site and guidelines and whether its default reads on paper and on ink, with the index’s date and its last upstream failure.
| Field | Type | Required | Description |
|---|---|---|---|
query | string | yes | A company name, a slug, an alias or a category |
limit | integer | no | Defaults to 20 |
kind | "symbol" | "wordmark" | no | wordmark lists the marks that have a wordmark of some kind |
collection | "brands" | "all" | no | brands (the default) is the brand and community marks; all adds the cloud service icons and the auth badges |
since | string | no | A refresh’s builtAt: the answer comes from an index at least as new when the store holds one |
- Command line:
turboslide logo search <query> --limit <limit> --kind <kind> --collection <collection> --since <builtAt> - MCP tool:
deck_logo_search - HTTP:
POST /api/actions/logo.search - Runs on: command line, MCP, HTTP, page.
- Changes the presentation: no.
logo.insert
Insert a logo. Stores a thesvg.org mark on the deck as an asset with the role logo, PNG twins at 3x of the logo size, the sanitized SVG as its source file and a source record naming the mark, its licence and its guidelines, never the source’s address; with slideId it places the picture at the logo size in the free area of the body slot, with blockId it swaps that picture’s asset and keeps the box, with everySlide or kit it writes the brand kit’s logo slots in the same write.
| Field | Type | Required | Description |
|---|---|---|---|
slug | string | yes | The mark’s slug on thesvg.org |
variant | string | no | default, mono, light, dark, wordmark, wordmarkLight or wordmarkDark; the appearance rule chooses when absent |
slideId | string | no | The slide the picture lands on; none stores the asset alone |
box | object | no | The box in sheet px; the logo size in the free area of the body slot when absent |
everySlide | boolean | no | Use as this presentation’s logo on every slide: the kit’s mark and footer slots take the asset |
kit | boolean | no | The brand kit’s logo slots alone, for the Brand kit panel |
blockId | string | no | Replace image: the picture whose asset is swapped |
baseRevision | integer | yes | The revision the caller read; a stale value is rejected with 409 |
- Command line:
turboslide logo insert <slug> --variant <variant> --slide <slideId> --every-slide --kit --block <blockId> - MCP tool:
deck_logo_insert - HTTP:
POST /api/actions/logo.insert - Runs on: command line, MCP, HTTP, page.
- Changes the presentation: yes; send the
baseRevisionyou read.
logo.refresh
Refresh the logo index. Rebuilds the cached logo index from thesvg.org’s manifest inside its time budget, marks the variants that answer 404 unavailable, drops the marks the source removed with their cached files and answers the counts; with dryRun it answers the counts, the index’s date, its last failure and its progress without an upstream fetch.
| Field | Type | Required | Description |
|---|---|---|---|
dryRun | boolean | no | The counts alone, no fetch and no write |
- Command line:
turboslide logo refresh --dry-run - MCP tool:
deck_logo_refresh - HTTP:
POST /api/actions/logo.refresh - Runs on: command line, MCP, HTTP.
- Changes the presentation: no.
shader.list
List shaders. The shader library in the gallery’s order: every entry with its category, its featured preset, its stills (the file names under packages/materials/previews), its uniform schema and its palette presets computed from this deck’s brand kit, plus the eleven common controls with their ranges and sentences and the five category chips; material.list is the alias without the gallery fields.
| Field | Type | Required | Description |
|---|---|---|---|
materialId | string | no |
- Command line:
turboslide shader list - MCP tool:
deck_shader_list - HTTP:
POST /api/actions/shader.list - Runs on: command line, MCP, HTTP, page.
- Changes the presentation: no.
shader.frame
Store a shader frame. The client capture’s write (the editor’s own WebGL): stores the PNG under assets/frame-<16 hex of frameKey>@2x.png, writes the block’s /asset and removes the block’s superseded frame in one revision; the key is checked against the block as the document reads now, so a recipe that moved on answers 409; the same bytes under the same id store nothing. The orphan prune runs behind the response.
| Field | Type | Required | Description |
|---|---|---|---|
slideId | string | yes | |
blockId | string | yes | |
frameKey | string | yes | |
bytes | string | no | The PNG, or the WebP the editor sends for a PNG over the function's cap, as base64 |
upload | string | no | A presigned upload’s key instead of bytes (a frame over the body cap) |
renderer | string | no | The WebGL renderer string of the client |
baseRevision | integer | yes | The revision the caller read; a stale value is rejected with 409 |
- Command line:
turboslide shader frame <slideId> <blockId> --frame-key <frameKey> < frame.png - MCP tool:
deck_shader_frame - HTTP:
POST /api/actions/shader.frame - Runs on: command line, MCP, HTTP, page.
- Changes the presentation: yes; send the
baseRevisionyou read.
shader.capture
Capture a shader’s frame. The hosted job for one shader block, the fallback when the editor has no WebGL and the agent’s route: the recipe rendered at the block’s box aspect with the long side 3200 in the capture browser, then the same write as shader.frame; bounded at 30 s hosted, answering one sentence.
| Field | Type | Required | Description |
|---|---|---|---|
slideId | string | yes | |
blockId | string | yes | |
backend | "angle-metal" | "swiftshader" | no | |
baseRevision | integer | yes | The revision the caller read; a stale value is rejected with 409 |
- Command line:
turboslide shader capture <slideId> <blockId> - MCP tool:
deck_shader_capture - HTTP:
POST /api/actions/shader.capture - Runs on: command line, MCP, HTTP, page.
- Changes the presentation: yes; send the
baseRevisionyou read.