
Design Tool
Tool Reference
Complete reference for all 64 MCP tools available in the Efecto Design Tool. Each tool can be called via MCP or the REST API.
Quick start
npx skills add pablostanley/efecto-pluginData Model
Efecto documents are built from artboards and nodes. The document is serialized as JSX-like markup where each element has a data-id attribute.
Node Types
| Type | Description |
|---|---|
frame | Container element (div) |
text | Text element (p, h1-h6, span) |
image | Image element |
button | Button with variant support |
link | Anchor link |
icon | Icon element |
input | Form input |
video | Video element |
component | Reusable component instance |
shader | WebGL shader (generative backgrounds) |
Styling
All styling uses Tailwind CSS via the className property. You can also use style for inline CSS when needed (especially for dynamic colors).
Tailwind v4 runtime note
bg-[#f9f9f9] may not work at runtime because Tailwind 4 generates CSS at build time. For dynamic hex colors, use the style property or the set_fill tool.Text Styling
Text nodes support full typography controls via Tailwind classes in className:
| Property | Classes |
|---|---|
| Italic | italic / not-italic |
| Underline | underline / no-underline |
| Strikethrough | line-through / no-underline |
| Text transform | uppercase / lowercase / capitalize / normal-case |
| Line height | leading-none, leading-tight, leading-snug, leading-normal, leading-relaxed, leading-loose, leading-[0.85] |
Text Shadow
Text shadow is applied via inline style (not Tailwind classes). Use update_node with a style object. Frame/container nodes use Tailwind shadow-* classes for box-shadow instead.
// Add text shadow to a heading
update_node({
nodeId: "node-abc123",
style: { textShadow: "0px 1px 2px rgba(0,0,0,0.2)" }
})
// Presets (matching Tailwind 4 theme tokens):
// 2xs: "0px 1px 0px rgb(0 0 0 / 0.15)"
// xs: "0px 1px 1px rgb(0 0 0 / 0.2)"
// sm: multi-layer shadow
// md: multi-layer shadow
// lg: multi-layer shadow
// Remove text shadow
update_node({
nodeId: "node-abc123",
style: { textShadow: "none" }
})Artboard Sizes
| Device | Width | Height |
|---|---|---|
| Desktop | 1440 | 900 |
| Tablet | 768 | 1024 |
| Mobile | 375 | 812 |
Session Tools (4)
Manage the lifecycle of a design session. The MCP process tracks the active session so you don't need to pass the session ID to every tool.
create_sessionCreate a new session. Returns a URL the user opens in their browser. Once connected, all design tools execute in real-time. Only one session is active at a time.
| Parameter | Type | Required | Description |
|---|---|---|---|
label | string | no | Human-readable label (e.g. "Landing page design") |
// Create a session
create_session({ label: "Landing page design" })
// → Returns { designUrl: "https://efecto.app/design?session=abc123" }wait_for_connectionBlocks until the browser opens the design URL and pairs with the session. Call after create_session to ensure the browser is ready before executing tools.
| Parameter | Type | Required | Description |
|---|---|---|---|
timeout | number | no | Max wait time in ms (default: 120000) |
session_statusCheck if the browser is connected, pending calls, etc.
| Parameter | Type | Required | Description |
|---|---|---|---|
sessionId | string | no | Defaults to active session |
close_sessionClose the active session. Disconnects the browser and cleans up.
| Parameter | Type | Required | Description |
|---|---|---|---|
sessionId | string | no | Defaults to active session |
Reading Tools (5)
Inspect the current document state. Always read the document before making edits.
get_documentReturns the full document as JSX-like markup. Each element has a data-id for referencing in other tools. Always call this before modifying an existing design.
get_selectionReturns the currently selected nodes with serialized JSX subtrees. Use to understand user context before making edits.
list_artboardsLists all artboards with IDs, names, dimensions, and positions.
find_nodesSearch for nodes by name, text content, type, tag, className, exact class, or inline style.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | no | Search term (matches name and text, case-insensitive) |
type | string | no | frame | text | image | button | link | icon | input | video | component |
tag | string | no | Filter by HTML tag (e.g. "nav", "section", "h1") |
classNameContains | string | no | Substring match in className (case-insensitive) |
hasClass | string | no | Exact Tailwind class match (e.g. "flex", "bg-white") |
styleContains | string | no | Substring match in inline style (e.g. "gradient") |
get_node_treeReturns JSX for a specific node or artboard subtree (faster than get_document for one section).
| Parameter | Type | Required | Description |
|---|---|---|---|
nodeId | string | yes | ID of the node or artboard to serialize |
Creating Tools (4)
Add new content to the document. Use add_section for complex layouts and add_node for single elements.
create_artboardCreates a new artboard. Set className to "flex flex-col" for vertical layout.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | Name of the artboard |
width | number | yes | Width in CSS pixels (default: 1440) |
height | number | yes | Height in CSS pixels (default: 900) |
x | number | no | Horizontal position on canvas |
y | number | no | Vertical position on canvas |
backgroundColor | string | no | Background color as hex (default: "#ffffff") |
className | string | no | Tailwind CSS classes |
create_artboard({
name: "Desktop",
width: 1440,
height: 900,
className: "flex flex-col",
backgroundColor: "#ffffff"
})add_sectionAdds a complete section from JSX-like markup. Most efficient for complex layouts.
| Parameter | Type | Required | Description |
|---|---|---|---|
parentId | string | yes | ID of the parent artboard or node |
jsx | string | yes | JSX-like markup with HTML tags and Tailwind className |
index | number | no | Insert position (appends if omitted) |
x | number | no | X position on canvas (for floating elements) |
y | number | no | Y position on canvas (for floating elements) |
width | number | no | Width in pixels (for floating elements) |
height | number | no | Height in pixels (for floating elements) |
add_section({
parentId: "artboard-1",
jsx: `<section className="flex flex-col items-center justify-center py-24 px-8 bg-black text-white">
<h1 className="text-6xl font-bold tracking-tight mb-4">Build faster</h1>
<p className="text-xl text-gray-400 max-w-2xl text-center">Ship beautiful products with AI-powered design.</p>
<div className="flex items-center gap-2 mt-8 px-8 py-3 bg-white text-black rounded-full font-medium">
<span>Get Started</span>
<svg icon="arrow-right" className="w-4 h-4" />
</div>
</section>`
})
// Icons: use <svg icon="name" className="w-5 h-5" />
// Common: arrow-right, heart, check, star, envelope, user, gear
// Libraries: phosphor (default), lucide, heroicons, radix
// Weights: <svg icon="star" iconWeight="fill" />add_nodeAdds a single node to the document tree.
| Parameter | Type | Required | Description |
|---|---|---|---|
parentId | string | yes | ID of the parent artboard or node |
type | string | yes | frame | text | image | button | link | icon | input | video | component |
tag | string | no | HTML tag to render |
className | string | no | Tailwind CSS classes |
textContent | string | no | Text content |
src | string | no | Image/video source URL |
alt | string | no | Alt text for images |
href | string | no | Link URL |
placeholder | string | no | Placeholder text (for input nodes) |
variant | string | no | primary | secondary | outline | ghost | destructive |
disabled | boolean | no | Disabled state for buttons/inputs |
name | string | no | Layer name (shown in layers panel) |
index | number | no | Insert position (appends if omitted) |
style | object | no | Inline CSS styles |
link | object | no | Link config: { type: "url"|"page"|"section"|"email"|"phone", url?, pageId?, sectionId?, email?, phone?, target? } |
elementId | string | no | Element ID for anchor linking (e.g. "pricing") |
iconName | string | no | Icon name for type "icon" (e.g. "arrow-right", "ArrowRight") |
iconLibrary | string | no | phosphor | lucide | heroicons | radix (default: phosphor) |
iconWeight | string | no | Phosphor: thin|light|regular|bold|fill|duotone. Heroicons: outline|solid|mini |
iconSize | number | no | Icon size in pixels (default: 24) |
shaderType | string | no | meshGradient | dotGrid | voronoi | liquidMetal | chrome | pulsar | blackHole | glass | spiral | particles | fireworks |
shaderSettings | object | no | Shader-specific settings (speed, scale, colors, etc.) |
replace_sectionReplaces an existing node with new JSX content in-place. Preserves position in parent.
| Parameter | Type | Required | Description |
|---|---|---|---|
nodeId | string | yes | ID of the node to replace |
jsx | string | yes | JSX-like markup for the replacement |
Modifying Tools (5)
Update existing nodes without replacing them entirely.
update_nodeUpdates properties of an existing node. Only specified properties are changed.
| Parameter | Type | Required | Description |
|---|---|---|---|
nodeId | string | yes | ID of the node to update (from data-id) |
className | string | no | New Tailwind classes |
textContent | string | no | New text content |
tag | string | no | Change HTML tag |
name | string | no | Layer name (shown in layers panel) |
style | object | no | Inline CSS styles |
src | string | no | Image/video source |
alt | string | no | Alt text for images |
href | string | no | Link URL |
placeholder | string | no | Placeholder text (for input nodes) |
variant | string | no | primary | secondary | outline | ghost | destructive |
disabled | boolean | no | Disabled state for buttons/inputs |
link | object | no | Link config: { type: "url"|"page"|"section"|"email"|"phone", url?, pageId?, sectionId?, email?, phone?, target? }. Set to null to remove. |
elementId | string | no | Element ID for anchor linking (e.g. "pricing"). Empty string to remove. |
iconName | string | no | Icon name (for icon nodes) |
iconLibrary | string | no | phosphor | lucide | heroicons | radix |
iconWeight | string | no | Phosphor: thin|light|regular|bold|fill|duotone. Heroicons: outline|solid|mini |
iconSize | number | no | Icon size in pixels |
update_node({
nodeId: "node-abc123",
textContent: "New heading text",
className: "text-4xl font-bold text-white"
})update_classUpdates only the className of a node. Replaces existing className entirely.
| Parameter | Type | Required | Description |
|---|---|---|---|
nodeId | string | yes | Node ID |
className | string | yes | New Tailwind classes (replaces all) |
batch_updateUpdates multiple nodes in a single call. Efficient for bulk changes.
| Parameter | Type | Required | Description |
|---|---|---|---|
updates | array | yes | Array of { nodeId, className?, textContent?, style?, link?, elementId? } |
batch_update({
updates: [
{ nodeId: "node-1", textContent: "Updated" },
{ nodeId: "node-2", className: "text-red-500" },
{ nodeId: "node-3", link: { type: "url", url: "https://example.com" } },
]
})update_artboardUpdates artboard properties (resize, rename, change background).
| Parameter | Type | Required | Description |
|---|---|---|---|
artboardId | string | yes | ID of the artboard to update |
name | string | no | New name |
width | number | no | New width |
height | number | no | New height |
backgroundColor | string | no | New background color |
className | string | no | Tailwind classes |
set_fillSets the fill (background) of a node or artboard. Supports solid colors, gradients, and images. Handles dual-write automatically.
| Parameter | Type | Required | Description |
|---|---|---|---|
targetId | string | yes | ID of the node or artboard |
fill | object | no | Fill config: { type: "solid"|"gradient"|"image", color?, gradient?, url? }. Omit to clear. |
Organizing Tools (8)
Restructure the document tree — move, duplicate, group, and delete nodes.
move_nodeMoves a node to a new parent or reorders within current parent.
| Parameter | Type | Required | Description |
|---|---|---|---|
nodeId | string | yes | Node to move |
newParentId | string | yes | New parent node/artboard |
index | number | no | Position in parent |
duplicate_nodeDuplicates a node and all its children. Inserted after the original.
| Parameter | Type | Required | Description |
|---|---|---|---|
nodeId | string | yes | Node to duplicate |
duplicate_artboardDuplicates an entire artboard with all content. Creates a deep copy with fresh IDs. Optionally resize the duplicate.
| Parameter | Type | Required | Description |
|---|---|---|---|
artboardId | string | yes | Artboard to duplicate |
newName | string | no | Name for the copy |
offsetX | number | no | Horizontal offset from original |
width | number | no | Override width of the duplicate (CSS pixels) |
height | number | no | Override height of the duplicate (CSS pixels) |
// Duplicate Desktop artboard as Mobile version
duplicate_artboard({
artboardId: "artboard-1",
newName: "Mobile",
width: 375,
height: 812
})group_nodesGroups selected nodes into a new frame container.
| Parameter | Type | Required | Description |
|---|---|---|---|
nodeIds | string[] | yes | Node IDs to group |
ungroup_nodeUngroups a frame container, moving its children up to the parent.
| Parameter | Type | Required | Description |
|---|---|---|---|
groupId | string | yes | ID of the group/frame to ungroup |
reorder_nodeChanges z-order: "front" = bring to top, "back" = send to bottom.
| Parameter | Type | Required | Description |
|---|---|---|---|
nodeId | string | yes | Node to reorder |
position | string | yes | "front" or "back" |
delete_nodesDeletes one or more nodes and all their children.
| Parameter | Type | Required | Description |
|---|---|---|---|
nodeIds | string[] | yes | Array of node IDs to delete |
delete_artboardDeletes an artboard and all its contents.
| Parameter | Type | Required | Description |
|---|---|---|---|
artboardId | string | yes | ID of the artboard to delete |
Canvas & Viewport (6)
Manage the document and viewport.
new_documentCreates a new blank document, replacing the current one. Discards unsaved changes.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | no | Name for the new document |
rename_documentRenames the document.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | New name |
undoUndoes the last action (Cmd+Z).
redoRedoes the last undone action (Cmd+Shift+Z).
zoom_to_fitZooms the viewport to fit all artboards. Useful after creating multiple artboards.
zoom_to_artboardZooms the viewport to fit a specific artboard.
| Parameter | Type | Required | Description |
|---|---|---|---|
artboardId | string | yes | ID of the artboard to zoom to |
Selection & Visibility (3)
select_nodesSelects nodes on the canvas to highlight for the user. Empty array deselects all.
| Parameter | Type | Required | Description |
|---|---|---|---|
nodeIds | string[] | yes | Node IDs to select |
deselect_allDeselects all currently selected nodes.
set_visibilityShows or hides a node. Hidden nodes remain in the tree but are not rendered.
| Parameter | Type | Required | Description |
|---|---|---|---|
nodeId | string | yes | Node ID |
visible | boolean | yes | true to show, false to hide |
Layout Tools (4)
Align, distribute, and position elements on the canvas.
align_nodesAligns multiple nodes along a shared axis.
| Parameter | Type | Required | Description |
|---|---|---|---|
nodeIds | string[] | yes | Node IDs to align (min 2) |
alignment | string | yes | left | center | right | top | middle | bottom |
distribute_nodesDistributes nodes evenly with equal spacing.
| Parameter | Type | Required | Description |
|---|---|---|---|
nodeIds | string[] | yes | Node IDs to distribute (min 3) |
direction | string | yes | "horizontal" or "vertical" |
move_artboardRepositions an artboard on the canvas. Use to lay out multi-screen flows (e.g. Desktop at 0,0, Tablet at 1540,0).
| Parameter | Type | Required | Description |
|---|---|---|---|
artboardId | string | yes | Artboard to move |
x | number | yes | New X position |
y | number | yes | New Y position |
set_viewportSets the viewport zoom level and/or pan position. Zoom 1.0 = 100%.
| Parameter | Type | Required | Description |
|---|---|---|---|
zoom | number | no | Zoom level (0.1 to 5.0) |
panX | number | no | Horizontal pan offset |
panY | number | no | Vertical pan offset |
Export (1)
Export designs as images. You can also Open in v0 from the Efecto UI to export any design as React + Tailwind and continue editing in v0.app.
export_imageExports an artboard or node as an image (PNG, JPEG, WebP, SVG). Returns base64 data URL. Use thumbnail: true for a small preview suitable for AI agents.
| Parameter | Type | Required | Description |
|---|---|---|---|
artboardId | string | yes | Artboard to export |
nodeId | string | no | Specific node to export |
format | string | no | png | jpeg | webp | svg (default: png) |
scale | number | no | Scale multiplier 0.25-4 (default: 1). Ignored when thumbnail is true. |
quality | number | no | Quality 0-1 for JPEG/WebP (default: 0.92) |
thumbnail | boolean | no | If true, returns a small preview (~200px, JPEG, low quality). Ideal for AI agents. |
Design Validation
Audit your design for quality issues. Checks typography scale, color contrast, spacing consistency, and detects common AI-generated design patterns ("slop").
audit_designAudits the current design against professional quality rules: typography (scale, weight contrast, sizing), color (neutral consistency, pure black, known low-contrast combos), spacing (4pt grid, touch targets), and AI slop detection (monotonous layouts). Returns issues with severity (warning/info) and actionable suggestions.
| Parameter | Type | Required | Description |
|---|---|---|---|
artboardId | string | no | Audit a specific artboard (audits all if omitted) |
checks | object | no | Which checks to run (all enabled by default): { typography?: boolean, color?: boolean, spacing?: boolean, slop?: boolean } |
// Audit everything
audit_design()
// Audit one artboard, only typography and spacing
audit_design({
artboardId: "artboard-1",
checks: { typography: true, spacing: true, color: false, slop: false }
})repair_designApplies safe, deterministic fixes to common design issues: adds missing w-full on top-level sections, converts arbitrary Tailwind values to inline styles, replaces pure black with zinc-950, bumps small touch targets to 44px, adds placeholder images to empty image nodes, and fills empty text content. Run after audit_design to auto-fix warnings.
| Parameter | Type | Required | Description |
|---|---|---|---|
artboardId | string | no | Repair a specific artboard (repairs all if omitted) |
dryRun | boolean | no | Preview fixes without applying them (default: false) |
// Auto-repair all artboards
repair_design()
// Preview fixes without applying
repair_design({ dryRun: true })
// Repair one artboard
repair_design({ artboardId: "artboard-1" })Theme (4)
Manage the document's design system. Themes use CSS custom properties (color variables) that power semantic Tailwind classes like bg-primary, text-foreground, and bg-muted.
get_themeReturns the current document theme including all modes and their tokens. Use this to understand the active design system before creating content.
get_theme()
// → { id, name, modes: { light: {...}, dark: {...} }, activeMode: "light", activeTokens: {...} }set_themeSets the document theme. Three options: (1) presetId — apply a built-in preset, (2) css — import raw CSS with :root {} and .dark {} blocks containing --background, --primary, etc. variables, (3) modes — provide token objects directly per mode.
| Parameter | Type | Required | Description |
|---|---|---|---|
presetId | string | no | default | zinc | slate | rose | blue | green | violet | orange |
css | string | no | Raw CSS with :root {} and .dark {} blocks containing theme variables |
modes | object | no | Token objects per mode, e.g. { light: { background: "#fff", ... }, dark: { ... } } |
// Apply a preset
set_theme({ presetId: "blue" })
// Import CSS from any source
set_theme({ css: ":root { --background: #ffffff; --primary: #2563eb; }\n.dark { --background: #0a0a0a; --primary: #60a5fa; }" })set_theme_modeSwitches the active theme mode. All artboards update to show the new mode colors. Standard modes are "light" and "dark" but custom modes are supported too.
| Parameter | Type | Required | Description |
|---|---|---|---|
mode | string | yes | Mode name (e.g. "light", "dark", or a custom mode name) |
set_theme_mode({ mode: "dark" })reset_themeRemoves the document theme entirely, returning to raw Tailwind colors with no semantic tokens.
Brand Kit (17)
Manage brand systems — AI-powered design systems with identity, colors, typography, components, and compliance. A brand system IS the theme: applying a brand sets the document's semantic tokens. See the Brand Kit guide for details.
get_brand_kitReturns the active brand system for the current document, including brand identity (company name, tagline, values, voice), color palette (semantic tokens for light/dark modes), typography (heading/body/mono fonts + type scale), icon preferences, and AI directives. Returns null if no brand system is active. Always call this at the start of any design task.
get_brand_kit()
// → { identity: { companyName, tagline, ... }, colors: { light: {...}, dark: {...} }, typography: {...}, icons: {...}, aiGuidelines: "..." }set_brand_kitApply an existing brand system to the current document by ID. Sets the document theme to the brand's colors and stores the brand reference.
| Parameter | Type | Required | Description |
|---|---|---|---|
brandKitId | string | yes | The ID of the brand system to apply. |
list_brand_kitsLists all brand systems available to the user. Returns summaries with id, name, primary color, and company name.
create_brand_kitCreate a new brand system from scratch and apply it to the current document. Provide a company name and optionally identity fields.
| Parameter | Type | Required | Description |
|---|---|---|---|
companyName | string | yes | Company/brand name. |
create_brand_kit({ companyName: "Acme Corp" })detach_brand_kitDetaches the active brand system from the document. Current theme colors are preserved as a standalone theme, but the brand reference is removed.
duplicate_brand_kitDuplicate an existing brand system. Creates a copy with " (Copy)" appended to the name.
| Parameter | Type | Required | Description |
|---|---|---|---|
brandKitId | string | yes | ID of the brand system to duplicate. |
update_brand_identityUpdate the active brand system's identity fields: company name, tagline, description, industry, target audience, brand values, voice & tone, AI directives.
| Parameter | Type | Required | Description |
|---|---|---|---|
companyName | string | no | Company/brand name |
tagline | string | no | Brand tagline |
description | string | no | Brand description |
industry | string | no | Industry/sector |
brandValues | string[] | no | Core brand values |
update_brand_colorsUpdate colors in the active brand system (which IS the document theme). Provide a mode ("light" or "dark") and the token values to change.
| Parameter | Type | Required | Description |
|---|---|---|---|
mode | string | yes | "light" or "dark" |
tokens | object | yes | Token values to update, e.g. { primary: "#2563eb", background: "#ffffff" } |
update_brand_colors({
mode: "light",
tokens: { primary: "#2563eb", accent: "#f59e0b" }
})update_brand_ai_guidelinesUpdate the AI guidelines markdown document for the active brand system — the "brand bible" that tells AI how to design for this brand.
| Parameter | Type | Required | Description |
|---|---|---|---|
guidelines | string | yes | Markdown guidelines content |
export_brand_systemExport the active brand system in a given format: "css" (CSS variables), "tailwind" (Tailwind v4 config), "style-dictionary" (Style Dictionary tokens), "figma" (Figma Variables), or "package" (complete JSON).
| Parameter | Type | Required | Description |
|---|---|---|---|
format | string | yes | css | tailwind | style-dictionary | figma | package |
export_brand_system({ format: "tailwind" })save_brand_componentSave selected node(s) as a reusable brand component in the active brand system. Can be inserted later via insert_brand_component.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | Component name |
nodeIds | string[] | yes | Node IDs to save |
category | string | no | Category (e.g. "buttons", "cards", "headers") |
list_brand_componentsList all saved brand components and templates in the active brand system.
insert_brand_componentInsert a saved brand component or template into the design. Creates a fresh copy with new IDs.
| Parameter | Type | Required | Description |
|---|---|---|---|
componentId | string | yes | ID of the brand component or template to insert. |
parentId | string | yes | Parent node/artboard to insert into. |
delete_brand_componentDelete a saved brand component or template from the active brand system.
| Parameter | Type | Required | Description |
|---|---|---|---|
componentId | string | yes | ID of the component or template to delete. |
save_brand_templateSave selected node(s) as a reusable brand template (section/page layout). Templates use semantic tokens so they re-theme automatically.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | Template name |
nodeIds | string[] | yes | Node IDs to save |
category | string | no | Category (e.g. "hero", "pricing", "footer") |
get_brand_imagesGet curated brand images and Lummi seed IDs from the active brand system. Returns image URLs that define the brand's visual style.
audit_brand_complianceAudit the design for brand system compliance violations. Checks: hardcoded colors, wrong fonts, wrong icon library/weight, non-semantic tokens.
| Parameter | Type | Required | Description |
|---|---|---|---|
artboardId | string | no | Audit a specific artboard (audits all if omitted) |
audit_brand_compliance()
// → { violations: [{ type: "hardcoded-color", nodeId: "...", message: "..." }] }Shaders
Shader nodes render generative WebGL backgrounds. Add them with add_node using type: "shader" and a shaderType. All shaders animate automatically.
| Shader Type | Description |
|---|---|
meshGradient | Smooth animated mesh gradient with customizable color points |
dotGrid | Animated dot pattern grid with wave motion |
voronoi | Voronoi cell pattern with organic movement |
liquidMetal | Reflective liquid metal surface |
chrome | Chrome/metallic reflection effect |
pulsar | Pulsing radial energy burst |
blackHole | Gravitational distortion vortex |
glass | Frosted glass refraction effect |
spiral | Rotating spiral pattern |
particles | Floating particle field |
fireworks | Firework burst animation |
// Add a mesh gradient background
add_node({
parentId: "artboard-1",
type: "shader",
shaderType: "meshGradient",
name: "Background Gradient",
className: "w-full h-full absolute inset-0"
})
// Add a shader with custom settings
add_node({
parentId: "artboard-1",
type: "shader",
shaderType: "voronoi",
shaderSettings: {
speed: 0.5,
scale: 2.0,
colors: ["#2563eb", "#7c3aed", "#ec4899"],
backgroundColor: "#0a0a0a"
}
})Shader settings vary by type. Common properties include speed, scale, colors (array of hex strings), and backgroundColor. Omit shaderSettings to use defaults for the chosen type.
Image Search (1)
Search for free, high-quality stock images. No session required — call this anytime.
search_imagesSearch for free, high-quality stock images (powered by Lummi). Returns image URLs that can be used with add_node (type: 'image') or set_fill (type: 'image'). No session required.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | no | Search query (e.g. "mountain landscape"). Omit for featured images. |
orientation | string | no | square | horizontal | vertical |
type | string | no | photo | illustration | 3d |
luminance | string | no | dark | neutral | bright |
limit | number | no | Number of results (default: 6, max: 20) |
search_images({ query: "team working", orientation: "horizontal" })
// → [{ url: "https://...", width: 1920, height: 1080, alt: "..." }, ...]