Build a printed surface
compose_surfaceMake a flat surface that looks PRINTED ON a real material: a quote on a stretched canvas, a poster, a shop sign, a label, a plaque, a book cover. Start from a base: a texture set from the library (setId from list_assets; tiled at tileSize meters, or mode "stretch" for a whole-sheet scan), explicit maps {baseColor, normal, ormh} urls, or a flat color; tint re-colours the base and keeps its detail. Then layers, painted in order: text {text (use \n or | for line breaks), font typewriter|sans|horror, weight, size (letter height in meters), color, align, x/y (the block centre, 0..1 from left/top), maxWidth (share of the width; the size shrinks to fit), tooth (0..1, how much ink skips the low spots of the weave), dry (patchy ribbon), jitter (typewriter wobble)}; image {src (an /assets url), x, y, width (share of the surface width), opacity, blend normal|multiply}; stains {amount, color, scale, seed}; spatter {x, y, size, drips, color (blood by default), seed}; grime {edge}; fill {color, opacity}. Ink and spatter sink into the base relief, emboss its normal and read glossier than the base, so light rakes across it like the real thing. output "panel" (default) saves a thin box MODEL of width x height x depth meters, its face looking down +X like the library picture frames, with a phone-sized copy made automatically, and a model waits for its room so a many-room site stays light on phones; place it with the place op the result gives. output "material" saves a baseColor/normal/ormh set and returns materialMaps for apply_ops (it stretches once across a face, repeat 1). To fill a picture frame, measure the frame first (measure gives its opening) and make the panel about 0.2 m larger than the opening both ways, placed just behind the frame's front. Returns a small preview image of the surface.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"width": "<width>",
"height": "<height>"
},
"name": "compose_surface"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | The material the surface is made of. | |
| depth | No | Panel thickness in meters (default 0.03). | |
| label | No | ||
| width | Yes | Surface width in meters. | |
| height | Yes | Surface height in meters. | |
| layers | No | Painted on in order (max 24). | |
| output | No | ||
| keywords | No | ||
| resolution | No | Pixels on the long side, 256 to 2048 (default 2048). | |
| normalStrength | No | Relief strength, 0 to 4 (default 1). |