> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mountsea.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Studio Batch Edit

> Run multiple timeline ops in one export

Run crop / remove / duplicate / split / reverse / fade / speed ops **in order**, then export once. Poll [Get Task Status](/api-reference/suno/task) until `success`.

<Info>
  **Usually free** (0 credits; see `conf_task_policy`). Do **not** put `addSection` or `replace` into `ops` — use dedicated endpoints.
</Info>

Part of [Studio Editing](/api-reference/suno/studio). Seconds for each op are relative to the timeline **after previous ops**.

## Parameters

| Field     | Type   | Required | Description                                                                                                                                           |
| --------- | ------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `clip_id` | string | Yes      | Source clip                                                                                                                                           |
| `ops`     | array  | Yes      | 1–20 operations (see below)                                                                                                                           |
| `title`   | string | No       | Final export title                                                                                                                                    |
| `beat`    | object | No       | Optional metronome export (`enabled`, optional `bpm` / `time_signature`). Omit for legacy behavior — see [Studio Editing](/api-reference/suno/studio) |

### Supported `ops[].op`

| op              | Meaning                     | Key fields                                                  |
| --------------- | --------------------------- | ----------------------------------------------------------- |
| `crop`          | Keep only a range           | `start_s`, `end_s`                                          |
| `removeSection` | Delete one or more ranges   | `sections[]`, optional `close_gap` (default `true`)         |
| `duplicate`     | Copy selection              | `start_s`, `end_s`, optional `insert_at_s`                  |
| `split`         | Cut at a point              | `at_s`                                                      |
| `reverse`       | Reverse range or whole song | optional paired `start_s` / `end_s`; omit both = whole song |
| `fadeIn`        | Fade in                     | `start_s`, optional `end_s` or `duration_s` (default \~2s)  |
| `fadeOut`       | Fade out                    | `start_s`, optional `end_s` (default to end)                |
| `setSpeed`      | Absolute rate vs original   | `rate` (0.5–2.0), optional paired `start_s` / `end_s`       |

### Tips for writing `ops`

* Prefer `crop` / `removeSection` before `fade*` / `setSpeed`.
* After a length-changing op, re-estimate seconds — do not reuse original song timestamps blindly.
* `fadeOut.start_s` must not exceed the **current** remaining duration.
* Prefer one batch export over crop→export→fade→export chains (lock contention).

## Example

```bash theme={null}
curl -X POST https://api.mountsea.ai/suno/v2/studio/edit \
  -H "Authorization: Bearer your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "clip_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "title": "精修后的歌",
    "ops": [
      { "op": "crop", "start_s": 10, "end_s": 100 },
      { "op": "removeSection", "sections": [{ "start_s": 40, "end_s": 48 }], "close_gap": true },
      { "op": "setSpeed", "start_s": 50, "end_s": 70, "rate": 1.1 },
      { "op": "fadeOut", "start_s": 85 }
    ]
  }'
```


## OpenAPI

````yaml POST /suno/v2/studio/edit
openapi: 3.0.0
info:
  title: Suno AI
  description: API documentation for Suno AI
  version: 1.0.0
  contact: {}
servers:
  - url: https://api.mountsea.ai
    description: API Gateway
security: []
tags:
  - name: suno
    description: ''
  - name: suno/studio
    description: Studio Song Editor（与 audio/crop|fade|reverse 独立）
paths:
  /suno/v2/studio/edit:
    post:
      tags:
        - suno/studio
      summary: Studio batch edit
      description: >-
        按 ops 顺序执行
        crop/removeSection/duplicate/split/reverse/fadeIn/fadeOut/setSpeed，最后一次导出。秒数相对「当前已执行完前面
        ops 后的时间线」。addSection/replace 请走独立接口。积分 0。
      operationId: ApiStudioController_edit
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StudioEditDto'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskIdDto'
      security:
        - bearerAuth: []
components:
  schemas:
    StudioEditDto:
      type: object
      properties:
        clip_id:
          type: string
          description: 原歌曲 clip_id
        ops:
          minItems: 1
          maxItems: 20
          description: 操作列表，至少 1 项，建议 ≤ 20
          type: array
          items:
            $ref: '#/components/schemas/StudioEditOpDto'
        title:
          type: string
          description: 最终导出标题
        beat:
          description: Optional metronome export; omit for legacy behavior
          allOf:
            - $ref: '#/components/schemas/StudioBeatOptionsDto'
      required:
        - clip_id
        - ops
    TaskIdDto:
      type: object
      properties:
        taskId:
          type: string
          description: task id. Use this id to query task status.
          example: 15c257ff-43f7-4678-bd41-202ad6b8488b
      required:
        - taskId
    StudioEditOpDto:
      type: object
      properties:
        op:
          type: string
          enum:
            - crop
            - removeSection
            - duplicate
            - split
            - reverse
            - fadeIn
            - fadeOut
            - setSpeed
          description: 操作类型
        start_s:
          type: number
          description: 区间/淡入/淡出/变速起点秒
        end_s:
          type: number
          description: 区间/淡入/淡出/变速终点秒
        insert_at_s:
          type: number
          description: duplicate 粘贴点秒
        at_s:
          type: number
          description: split 切开点秒
        sections:
          description: removeSection 删除区间
          type: array
          items:
            $ref: '#/components/schemas/StudioSectionRangeDto'
        close_gap:
          type: boolean
          description: removeSection 是否收拢空白，默认 true
        rate:
          type: number
          minimum: 0.5
          maximum: 2
          description: setSpeed 速度倍率，建议 0.5~2.0
          example: 1.1
        duration_s:
          type: number
          description: fadeIn 时长秒（与 end_s 二选一，默认 2）
      required:
        - op
    StudioBeatOptionsDto:
      type: object
      properties:
        enabled:
          type: boolean
          description: Whether to enable beat grid + audible metronome on export
          example: true
        bpm:
          type: number
          minimum: 30
          maximum: 480
          description: >-
            Target BPM (30~480). Only when enabled=true; omit to keep
            project/source bpm
          example: 132
        time_signature:
          type: string
          pattern: /^\d+\/\d+$/
          description: Time signature like "4/4". Only when enabled=true; default "4/4"
          example: 4/4
          default: 4/4
      required:
        - enabled
    StudioSectionRangeDto:
      type: object
      properties:
        start_s:
          type: number
          minimum: 0
          description: 区间起始秒
        end_s:
          type: number
          minimum: 0
          description: 区间结束秒
      required:
        - start_s
        - end_s
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````