quipra.github.io
One desk shared by a person and an agent. Paper, pens, ruler, compass, stencils. Nothing else.
First seen 2026-11-05 · Last seen 2026-11-05 · Source: webmcp.com
Answer 1 · Act 14 · Transact 0 · Score: Not yet scored
Tool inspector
construct
The main way to draw: up to 40 instrument steps in one call, in order. Each step names its tool (pick_pen, draw, ruler, compass, stencil, path, edit, erase, undo, timeline, or recipe with name and args) and carries that tool's fields, plus an optional inline pen and group. verify: true appends a look to the result so you can check the figure without another call. Stops at the first invalid step and reports what was done.
Page: /desk/
Input schema
| Property | Type | Required | Description |
|---|---|---|---|
steps |
array | yes | — |
verify |
boolean | no | append a look to the result |
Raw JSON schema
{
"type": "object",
"properties": {
"steps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"tool": {
"type": "string",
"enum": [
"pick_pen",
"draw",
"ruler",
"compass",
"stencil",
"path",
"edit",
"erase",
"undo",
"timeline",
"recipe"
]
},
"label": {
"type": "string",
"description": "Short name for this mark, e.g. 'side AB', 'arc from A'."
},
"group": {
"type": "string",
"description": "Optional group name shared by related marks, e.g. 'triangle ABC'."
},
"pen": {
"type": "object",
"description": "Pen for this mark: kind, or brush (a name you made with make), color by name (ink, accent, blue, green, ochre) or hex, width 1..64, opacity 0.05..1, dash for construction lines, texture grain|chalk, taper for thin ends, fill hatch|crosshatch|stipple and/or fillColor (solid) for closed paths, shapes and circles, hatchAngle. Brush engine: tip (round, soft, flat, bristle, chalk, pencil), spacing, scatter, grain, or engine { ... } for every studio parameter. Effects: shadow, glow, blur 0..80.",
"properties": {
"kind": {
"type": "string",
"enum": [
"pencil",
"fineliner",
"marker",
"brush",
"highlighter"
]
},
"brush": {
"type": "string",
"description": "name of a brush made with make"
},
"color": {
"type": "string"
},
"width": {
"type": "number"
},
"opacity": {
"type": "number"
},
"dash": {
"type": "boolean"
},
"texture": {
"type": "string",
"enum": [
"grain",
"chalk",
"none"
]
},
"taper": {
"type": "boolean"
},
"fill": {
"type": "string",
"enum": [
"hatch",
"crosshatch",
"stipple",
"none"
]
},
"hatchAngle": {
"type": "number"
},
"fillColor": {
"type": "string",
"description": "solid fill for closed paths, shapes and circles: palette name, hex, auto, or none"
},
"tip": {
"type": "string",
"enum": [
"round",
"soft",
"flat",
"bristle",
"chalk",
"pencil"
],
"description": "brush tip stamped along the stroke"
},
"spacing": {
"type": "number",
"description": "stamp spacing as a fraction of size, 0.03..0.5"
},
"scatter": {
"type": "number",
"description": "stamp scatter across the path, 0..1"
},
"grain": {
"type": "number",
"description": "paper grain strength 0..1"
},
"engine": {
"type": "object",
"description": "brush engine, merged field by field over the kind's defaults",
"properties": {
"tip": {
"type": "string",
"enum": [
"round",
"soft",
"flat",
"bristle",
"chalk",
"pencil"
],
"description": "stamp shape laid along the stroke"
},
"spacing": {
"type": "number",
"description": "stamp spacing as a fraction of size, 0.02 dense .. 1 dotted"
},
"sizeBase": {
"type": "number",
"description": "size at pressure 0, times width, 0..4"
},
"sizeGain": {
"type": "number",
"description": "extra size at pressure 1, times width, 0..4"
},
"flowBase": {
"type": "number",
"description": "per-stamp alpha at pressure 0, 0..1"
},
"flowGain": {
"type": "number",
"description": "extra per-stamp alpha at pressure 1, 0..1"
},
"scatter": {
"type": "number",
"description": "random offset across the path, 0..2 of size"
},
"grain": {
"type": "number",
"description": "paper grain eating the deposit, 0..1"
},
"multiply": {
"type": "boolean",
"description": "multiply blending, the way ink darkens on paper"
},
"oriented": {
"type": "boolean",
"description": "tip follows the stroke direction, for chisels"
},
"sizeJitter": {
"type": "number",
"description": "random size variation per stamp, 0..1"
},
"flowJitter": {
"type": "number",
"description": "random alpha variation per stamp, 0..1"
},
"angleJitter": {
"type": "number",
"description": "random tumble per stamp, 0..1 of a full turn, non-oriented tips"
},
"pressureCurve": {
"type": "number",
"description": "exponent on pressure: 0.3 eager, 1 linear, 3 reluctant"
},
"wet": {
"type": "number",
"description": "drying stroke: fade toward the paper along the stroke, 0..1"
},
"dual": {
"type": "boolean",
"description": "stamp a second tip at half size for a textured core"
}
},
"additionalProperties": false
},
"shadow": {
"type": "object",
"description": "drop shadow: dx and dy -200..200, blur 0..80, color; {} removes it",
"properties": {
"dx": {
"type": "number"
},
"dy": {
"type": "number"
},
"blur": {
"type": "number"
},
"color": {
"type": "string"
}
},
"additionalProperties": false
},
"glow": {
"type": "object",
"description": "halo around the mark: blur 0..80, color; {} removes it",
"properties": {
"blur": {
"type": "number"
},
"color": {
"type": "string"
}
},
"additionalProperties": false
},
"blur": {
"type": "number",
"description": "soften the whole mark, 0..80 paper units; 0 removes it"
}
},
"additionalProperties": false
},
"kind": {
"type": "string",
"enum": [
"pencil",
"fineliner",
"marker",
"brush",
"highlighter"
]
},
"color": {
"type": "string"
},
"width": {
"type": "number"
},
"dash": {
"type": "boolean"
},
"points": {
"type": "array",
"items": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"p": {
"type": "number",
"description": "pressure 0..1, default 0.5"
}
},
"required": [
"x",
"y"
],
"additionalProperties": false
},
"description": "one pen-down path"
},
"strokes": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"p": {
"type": "number",
"description": "pressure 0..1, default 0.5"
}
},
"required": [
"x",
"y"
],
"additionalProperties": false
},
"description": "one pen-down path"
}
},
"from": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"required": [
"x",
"y"
],
"additionalProperties": false
},
"to": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"required": [
"x",
"y"
],
"additionalProperties": false
},
"arrow": {
"type": "boolean"
},
"center": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"required": [
"x",
"y"
],
"additionalProperties": false
},
"radius": {
"type": "number"
},
"start": {
"type": "number"
},
"end": {
"type": "number"
},
"shape": {
"type": "string",
"enum": [
"rectangle",
"triangle",
"polygon"
]
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"w": {
"type": "number"
},
"h": {
"type": "number"
},
"rotation": {
"type": "number"
},
"sides": {
"type": "number"
},
"ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "mark ids"
},
"region": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"w": {
"type": "number"
},
"h": {
"type": "number"
}
},
"required": [
"x",
"y",
"w",
"h"
],
"additionalProperties": false
},
"dx": {
"type": "number"
},
"dy": {
"type": "number"
},
"scale": {
"type": "number"
},
"rotate": {
"type": "number"
},
"about": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"required": [
"x",
"y"
],
"additionalProperties": false
},
"regroup": {
"type": "string"
},
"duplicate": {
"type": "boolean"
},
"name": {
"type": "string",
"description": "recipe name"
},
"args": {
"type": "array",
"description": "parameter values: {name, x, y} for a point, {name, value} for a number, {name, text} for text",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"value": {
"type": "number"
},
"text": {
"type": "string"
}
},
"required": [
"name"
],
"additionalProperties": false
}
},
"d": {
"type": "string",
"description": "path: SVG path data"
},
"hidden": {
"type": "boolean",
"description": "hide or show the selected marks (they stay in the scene)"
},
"order": {
"type": "string",
"enum": [
"front",
"back"
],
"description": "bring to front or send to back of the drawing order"
},
"align": {
"type": "string",
"enum": [
"left",
"center",
"right",
"top",
"middle",
"bottom"
],
"description": "line the selected marks up by their bounds: left, center, right across, top, middle, bottom down"
},
"distribute": {
"type": "string",
"enum": [
"horizontal",
"vertical"
],
"description": "space the selected marks evenly between the outermost two"
},
"toPaper": {
"type": "boolean",
"description": "align to the sheet instead of to the selection's own bounds"
},
"at": {
"type": "number",
"description": "seconds on the timeline; with at, this edit becomes a keyframe"
},
"ease": {
"type": "string",
"enum": [
"linear",
"ease",
"easeIn",
"easeOut",
"easeInOut",
"bounce"
],
"description": "curve into this keyframe, default easeInOut"
},
"bezier": {
"type": "array",
"items": {
"type": "number"
},
"description": "cubic-bezier x1 y1 x2 y2, instead of ease"
},
"opacity": {
"type": "number",
"description": "0..1 at this keyframe"
},
"reveal": {
"type": "number",
"description": "0..1 how much of the mark is drawn at this keyframe (write-on)"
},
"wiggle": {
"type": "object",
"properties": {
"amp": {
"type": "number",
"description": "paper units"
},
"freq": {
"type": "number",
"description": "Hz"
}
},
"required": [
"amp",
"freq"
],
"additionalProperties": false
},
"boil": {
"type": "number",
"description": "line boil: re-noise textured edges this many times per second, 0 to stop"
},
"preset": {
"type": "string",
"description": "a motion you made with make, applied starting at 'at'"
},
"clearMotion": {
"type": "boolean",
"description": "remove all keyframes and motion from the selected marks"
},
"stagger": {
"type": "number",
"description": "seconds between each selected mark's start, in scene order, for cascades"
},
"action": {
"type": "string",
"enum": [
"play",
"pause",
"seek",
"set",
"clear"
]
},
"duration": {
"type": "number",
"description": "seconds"
},
"fps": {
"type": "number"
},
"loop": {
"type": "boolean"
},
"onion": {
"type": "boolean",
"description": "tracing paper: previous frame faint while scrubbing"
},
"paper": {
"type": "string",
"enum": [
"blank",
"grid",
"lined"
],
"description": "for clear: the fresh sheet's paper"
}
},
"required": [
"tool"
],
"additionalProperties": false
}
},
"verify": {
"type": "boolean",
"description": "append a look to the result"
}
},
"required": [
"steps"
],
"additionalProperties": false
}
Similar websites
wfsim.app
A Warframe calculator that simulates the fight instead of estimating it — builder, simulator, optimizer. Every formula cites its source, and the golden tests ar…
commonplace-webmcp.vercel.app
Commonplace is an editable social reading space built for people and their browser agents.
pixelforge-studio.appcaster.chatgpt.site
A professional browser pixel-art editor for drawing, frame animation, palettes, sprite sheets, GIF export, and WebMCP automation.
pixelite.taskcraft.site
Pixelite