---
title: "edit_project"
description: "Change a saved project — captions per locale, frame order, layout, styling, device pose."
canonical: "https://shotops.dev/docs/mcp/reference/edit_project"
last_updated: "2026-09-30"
shotops_mcp_version: "0.10.0"
result_contract_version: "2.0.0"
---
# edit_project

Change a saved project — captions per locale, frame order, layout, styling, device pose.

## What it does

- Writes
- Destructive
- Account required

Make a concrete change to a saved project and save it. You state the change — the caption words for a frame in a locale, a new frame order, a layout or preset for every frame, caption style, background, or one device’s pose and finish — and ShotOps applies it with the same engine the web app uses. Frames and devices are numbered from 1, the way read_project lists them. It returns what changed, not pixels: render the project afterwards to see it.

You can ask: “Translate the first Tidebook headline into German and move the forecast panel first.”

## Input

- `project`stringrequiredat least 1 character Project id or exact name.
- `captions`arrayoptionalat most 400 items Caption words per frame and locale. each item object - `frame`integerrequiredmin 1max 60 1-based frame number. - `text`stringrequiredat most 400 characters The caption words. - `locale`stringoptionalat least 2 charactersat most 35 characters App Store locale code, e.g. "de-DE". Default: the base locale. A new one is added. - `layer`integeroptionalmin 1max 8 1 = headline (default), 2 = the line under it.
- `order`arrayoptionalat least 1 item New frame order as current frame numbers, e.g. [3, 1, 2]. each item integer
- `layout`stringoptional Layout template for every frame (see describe_look). one of`standard``bleed``top-bleed``lean-right``lean-left``swipe``corner-bleed`
- `preset`stringoptional Design preset for every frame (see describe_look). one of`noir``daylight``pop``clay``studio`
- `captionStyle`objectoptional Caption styling for every frame: fontId, sizePt, color, align, band….
- `background`objectoptional Strip background: { stops: [{ color, at }], angle, shadow, floorReflection }.
- `frames`arrayoptionalat most 60 items Per-frame overrides: [{ frame, layout?, captionStyle?, background?, clearBackground? }]. each item object
- `devices`arrayoptionalat most 120 items Device pose and finish: [{ frame, device?, roll, orbit, deviceSize, vOffset, colorway… }]. device is 1-based within the frame; omit for all. each item object

## Result

Results arrive as structured JSON with a `contract` envelope; the example below says what comes back. The schema is not declared, to keep what a model reads small.

## Example

That request maps to this call:

```
{
  "name": "edit_project",
  "arguments": {
    "project": "Tidebook 2.4 launch",
    "captions": [
      {
        "frame": 1,
        "locale": "de-DE",
        "text": "Kenne die Tide, bevor du losgehst"
      }
    ],
    "order": [
      2,
      1,
      3
    ]
  }
}
```

The project it saved, its new record version, and a list of what changed.

## Access and cost

- Needs an account. Not available to an anonymous hosted caller.
- Free. An edit renders nothing and spends no cloud credits.

## When it refuses

- **The reply names a field and what it accepts.**
  Nothing was saved. Fix that one value and call again.

- **The save failed because the project changed meanwhile.**
  Somebody saved it in the web app first. Read the project again and reapply the change.

## Where this fits

- [Editing and re-rendering a saved project](https://shotops.dev/docs/mcp/workflows/saved-project)

## What the agent is told

The title and description the server publishes on `tools/list` — this is the copy a model chooses between, reproduced verbatim.

Edit a saved project

Change a saved project: caption words per frame and locale, frame order, layout, preset, caption style, background and device pose. Frames and devices are numbered from 1 as read_project lists them. Saves immediately; render afterwards to see it.
