# Vidova MCP patterns

Preview-and-iterate, silence removal, zooms, vidovaSettings cursor, components, hosted image and speech polling, and recipe search.

## Preview-and-iterate

After a visible timeline or component change, call `preview` `captureFrame` before you report success. For motion, use `preview` `timeline` for timestamped contact sheets. A render error means the composition did not draw. Fix the cause. Do not trust an earlier frame.

## Silence removal

1. `asset` `transcribe` with the recording `assetId`.
2. `sleep` between polls.
3. `generate_asset` `kind` `status` with the `jobId`.
4. `asset` `captions` when the job completes.
5. `timeline_edit` `removeSilences` with **only** `assetId`.

Do not invent silence timestamps. `removeSilences` reads the transcript itself. Spec: [timeline_edit](/docs/mcp/tools/timeline_edit).

## Zooms

Screen-recording zooms live on a zoom layer. Use `clip_enhance` `addZoom`, or `manageZooms` with `zoomAction` `list` / `add` / `update` / `delete`. Factor `1` is no zoom. `zoomEffectType` `tracking` follows the cursor. `manual` uses a fixed anchor from -1 to 1.

Do not use camera clips for cursor zooms.

## Cursor, camera, layout

Patch `vidovaSettings` on `timeline_edit` `updateClip`. Example: `cursorStyle: "banana"`. Schema: [vidovaSettings](/docs/mcp/schemas/vidova-settings). Do not call `vidova_set_cursor`.

## Components

Prefer `component` `createFromTemplate` with `templateId` and `inputOverrides`. Then `timeline_edit` `addClip` with `type` `component` and the returned `assetId`. Never `type=text`.

If create or edit reports `FAILED TO RENDER`, fix the component before placing it.

Asset inputs: pass the asset ID in `componentInputs`. The clip stores IDs; the class receives a playback URL (or `VidovaClipData`). Use `@initial('')` on image/video signals. Do not add a parallel image clip for an asset the component already takes as an input. [Inputs](/docs/custom-elements/inputs).

Shaders are SkSL on a cached node, not GLSL. Include `@vidova/core/shaders/common.sksl` or use `withCommonShader()`. [Shaders](/docs/custom-elements/shaders).

Authoring a class from scratch: [Custom elements](/docs/custom-elements).

## Hosted image and speech

`generate_asset` `kind` `image` or `speech` returns a `jobId`. Poll `kind` `status`. Use `sleep` between polls. `kind` `music` and `kind` `video` are advertised and not reachable. See [Not in MCP](/docs/mcp/not-in-mcp).

## Recipes

In Agent Mode, search recipes before a substantive task. If search fails because embeddings are warming up, continue the user task. Do not retry until search is ready. Skip search for tiny chat or when the user says not to.
