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
edit
Change existing marks without redrawing, or animate them. Select by ids, group and/or region, then any of: pen (restyle), dx/dy (move), scale (about a point, default the mark's center), rotate (degrees clockwise), label, regroup, duplicate (edit copies, keep originals). With at (seconds) the same fields become a KEYFRAME instead: the mark tweens there from its previous key with ease or bezier; opacity and reveal (write-on) are keyable too. wiggle adds smooth random drift, boil re-noises the edge like hand-drawn animation, preset applies a built-in motion (rise, drop, pop, fade, wipe, typewriter, breathe, spin, shake, drift, sketchy, fadeOut, sink) or one you made, stagger cascades a group. align (left, center, right, top, middle, bottom) lines the selection up by its bounds, toPaper: true against the sheet instead; distribute (horizontal, vertical) spaces it evenly between the outermost two. hidden and order manage layers. Playback starts automatically.
Page: /desk/
Input schema
| Property | Type | Required | Description |
|---|---|---|---|
ids |
array | no | mark ids |
group |
string | no | Optional group name shared by related marks, e.g. 'triangle ABC'. |
region |
object | no | — |
pen |
object | no | 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. |
dx |
number | no | — |
dy |
number | no | — |
scale |
number | no | — |
rotate |
number | no | — |
about |
object | no | — |
label |
string | no | Short name for this mark, e.g. 'side AB', 'arc from A'. |
regroup |
string | no | new group name for the selected marks |
duplicate |
boolean | no | — |
hidden |
boolean | no | hide or show the selected marks (they stay in the scene) |
order |
string | no | bring to front or send to back of the drawing order |
align |
string | no | line the selected marks up by their bounds: left, center, right across, top, middle, bottom down |
distribute |
string | no | space the selected marks evenly between the outermost two |
toPaper |
boolean | no | align to the sheet instead of to the selection's own bounds |
at |
number | no | seconds on the timeline; with at, this edit becomes a keyframe |
ease |
string | no | curve into this keyframe, default easeInOut |
bezier |
array | no | cubic-bezier x1 y1 x2 y2, instead of ease |
opacity |
number | no | 0..1 at this keyframe |
reveal |
number | no | 0..1 how much of the mark is drawn at this keyframe (write-on) |
wiggle |
object | no | — |
boil |
number | no | line boil: re-noise textured edges this many times per second, 0 to stop |
preset |
string | no | a motion you made with make, applied starting at 'at' |
clearMotion |
boolean | no | remove all keyframes and motion from the selected marks |
stagger |
number | no | seconds between each selected mark's start, in scene order, for cascades |
Raw JSON schema
{
"type": "object",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "mark ids"
},
"group": {
"type": "string",
"description": "Optional group name shared by related marks, e.g. 'triangle ABC'."
},
"region": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"w": {
"type": "number"
},
"h": {
"type": "number"
}
},
"required": [
"x",
"y",
"w",
"h"
],
"additionalProperties": false
},
"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
},
"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
},
"label": {
"type": "string",
"description": "Short name for this mark, e.g. 'side AB', 'arc from A'."
},
"regroup": {
"type": "string",
"description": "new group name for the selected marks"
},
"duplicate": {
"type": "boolean"
},
"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"
}
},
"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