# Analysis and edit lists

> Analyze a video scene by scene, audit the analysis, detect silence, sync several recordings, and plan and render edit decision lists with MCP tools.

Source: https://nodaro.ai/docs/mcp/tools/analysis-and-edl

The **analysis and edit list tools** read existing recordings and turn them into structured data or finished cuts. `video_analysis` and `video_audit` break a video down scene by scene so it can be re-created, `silence_detect` and `audio_sync` measure recordings, and `plan_edit` and `apply_edl` plan and render cuts from a transcript. Every tool needs the `workflows:execute` permission and returns a job id.

## `video_analysis`

Analyzes a video into a scene-by-scene breakdown built for AI re-creation. It works like the [Video Analysis](https://nodaro.ai/docs/nodes/video/video-analysis) node.

- **Scenes** are cut at natural boundaries and last at most 8 seconds, one image or video generation per scene.
- **`visualResolved`** is a self-contained, prompt-ready description of each scene. It is the field that later steps read.
- **Each scene** also has a shot type, a camera movement, and a list of audio layers. Speech is quoted word for word, music and sound effects are described so they can be generated, and an empty list means silence.
- **Slots** are the people, objects and places that recur, so you can re-cast them with your own characters.

**Permission:** `workflows:execute`. **Credits:** by tier and video length, in the table below.

| Parameter | Type | Notes |
| --- | --- | --- |
| `video_asset_id`, `video_url` or `youtube_url` | string | **Required, exactly one.** A Nodaro video job or upload id, a direct video URL, or a YouTube link. Up to 10 minutes; no live streams. Zero or two sources return an error. |
| `llm_model` | string | The tier: `pro` (default), `fast` (cheaper), `smart` (the most accurate), `mixed` or `mixed-fast`. |
| `selection_mode` | string | `choose` (default) or `combine`, an enhanced, verified result with the most detail. `combine` is a little slower and recommended. |
| `variations` | boolean | Also detects each person's or thing's different looks, such as a change of clothes, a dream or a disguise, and binds each look to its scenes. Default `false`. |
| `music_video` | boolean | Treats the clip as a music video: every sung lyric is transcribed as speech. Default `false`, where song vocals nobody on screen performs are part of the music layer. |
| `translate_speech_to_english` | boolean | Returns spoken and sung words in English. Default `false`: the original language. |
| `translate_on_screen_text_to_english` | boolean | Returns signs, captions and titles in English. That text is part of the visual prompt, so a re-generated scene shows the English wording. Names keep their original form. |
| `analysis_focus` | string | A steer, up to 2,000 characters, for example "focus on the product shots and on-screen text". |

**Returns:** a job id. The analysis, `meta`, `slots` and `scenes`, is in the job's `output_data`.

The price depends on the tier and on the length bucket, the smallest of 60, 180, 360 or 600 seconds that fits the video:

| Tier | Up to 60 s | Up to 180 s | Up to 360 s | Up to 600 s |
| --- | --- | --- | --- | --- |
| `fast` | 181 | 186 | 516 | 849 |
| `pro` | 217 | 233 | 642 | 1,059 |
| `mixed`, `mixed-fast` | 270 | 292 | 731 | 1,181 |
| `smart` | 414 | 504 | 1,270 | 2,081 |

The tool's own description always carries the current prices. If this table and the tool disagree, the tool is right.

## `video_audit`

Watches a video again against its analysis and fixes what is wrong. Every correction is applied under checks and reported, and what could not be fixed is flagged, not changed. It works like the [AI Audit](https://nodaro.ai/docs/nodes/video/ai-audit) node.

**Permission:** `workflows:execute`. **Credits:** by length, and cheaper when you pass an analysis.

| Parameter | Type | Notes |
| --- | --- | --- |
| `video_url` | string | **Required.** The video to audit. |
| `analysis` | object | The analysis from an earlier `video_analysis` or `video_audit` call, passed as it is. Without it, the tool first runs a fast analysis, which costs more. |

**Returns:** a job id. The job's `output_data` holds the report: what was checked, what changed and what was left open.

| Run | Up to 60 s | Up to 180 s | Up to 360 s | Up to 600 s |
| --- | --- | --- | --- | --- |
| With `analysis` | 215 | 291 | 664 | 1,075 |
| Without `analysis` | 396 | 477 | 1,180 | 1,924 |

## `silence_detect`

Finds the silent ranges in a recording, from its audio only: no transcript and no pictures. It works like the [Silence Detect](https://nodaro.ai/docs/nodes/audio/silence-detect) node.

**Permission:** `workflows:execute`. **Credits:** 10.

| Parameter | Type | Notes |
| --- | --- | --- |
| `audio_url` | string | **Required.** An audio or video URL. The audio track is read either way. |
| `threshold_db` | number | The silence level in dBFS, from -90 to 0. Default `-35`, a good floor for speech. |
| `min_silence_ms` | integer | The shortest silence to report. Default `700`. |
| `pad_ms` | integer | Speech kept around each range. Default `120`. |

**Returns:** a job id. The result is `output_data.json`, `{ ranges, durationMs }`. Pass that object, not the whole `output_data`, as the `silence` of `plan_edit`, or use `ranges` to write an edit list by hand.

## `audio_sync`

Measures how far apart the clocks of 2 to 6 recordings of one conversation are, such as camera files and a main microphone, by comparing their audio. It works like the [Audio Sync](https://nodaro.ai/docs/nodes/audio/audio-sync) node.

**Permission:** `workflows:execute`. **Credits:** 10 for each recording aligned to the reference, so 10 times the number of sources minus one.

| Parameter | Type | Notes |
| --- | --- | --- |
| `sources` | array | **Required.** 2 to 6 recordings, each `{ id, url }`, with a unique id. Audio or video URLs. |
| `reference` | string | The id of the recording every offset is measured against. Default: the first one. |

**Returns:** a job id. The result is `output_data.json`: `{ reference, offsets, notes }`, where each offset has `sourceId`, `offsetMs`, `confidence` and `driftMsPerHour`. A time on the reference clock is the time in the source plus `offsetMs`. Low confidence and clock drift are reported in `notes`, never corrected.

## `plan_edit`

Turns a timed transcript into an edit decision list for a recording. It reads the transcript, never the pictures. It works like the [Edit Plan](https://nodaro.ai/docs/nodes/video/edit-plan) node.

**Permission:** `workflows:execute`. **Credits:** from 30 to 1,480, by the recording's length, the mode and the tier. **Nodaro Cloud only.**

| Parameter | Type | Notes |
| --- | --- | --- |
| `mode` | string | **Required.** `tighten` removes silences, filler words and false starts in one cut. `clips` finds short clips to share, one edit list each. `chapters` marks chapters with titles. |
| `transcript` | object | **Required.** The word-level transcript, from [`transcribe`](https://nodaro.ai/docs/mcp/tools/audio#transcribe). |
| `sources` | array | **Required.** 1 to 6 recordings, each with a `url`, and optionally its `kind` (`video` or `audio`), `role` (`master-audio`, `camera`, `wide` or `screen`), `speakers` and `offset_ms` on the master clock. |
| `silence` | object | The result of `silence_detect`. |
| `plan_tier` | string | `economy`, `standard` (default) or `premium`. |
| `count` | integer | For `clips`: how many clips, from 1 to 50. |
| `target_duration_sec` | integer | For `clips`: the length of each clip, from 5 to 180 seconds. |
| `target_aspect` | string | `16:9`, `9:16`, `1:1` or `4:5`. |
| `platform`, `instructions`, `style_guide` | string | Where the clips will be posted, and free-text guidance. |

**Returns:** a job id. The plan is in the job's `output_data`, ready for `apply_edl`.

## `apply_edl`

Renders an edit decision list into a finished cut. It works like the [Apply EDL](https://nodaro.ai/docs/nodes/video/apply-edl) node, which also gives the price per minute.

**Permission:** `workflows:execute`. **Credits:** priced per minute of rendered output.

| Parameter | Type | Notes |
| --- | --- | --- |
| `edl` | object or string | **Required.** The plan from `plan_edit`, or a list you wrote. Its `segments` are in whole milliseconds on a `master` clock, and each names one of the EDL's `sources` by id. A video render needs a video source on every segment. |
| `sources` | array | URLs that replace the EDL's source URLs, in the same order. |
| `output` | string | `video` (default) or `audio`. |
| `quality` | string | `proxy` for a fast preview, or `final` (default). |
| `crossfade_ms` | number | A crossfade on boundaries without their own transition, up to 5,000 ms. Default `0`, hard cuts. |
| `transcript` | object | A transcript to remap through the cut, so it matches the result. |

A render can produce at most 180 minutes. A malformed list, or one that is too long, is refused before anything runs, with the segment and the rule it breaks.

**Returns:** a job id. The rendered file is the job's result.

## Edit a recording from its transcript

### Transcribe it

Call [`transcribe`](https://nodaro.ai/docs/mcp/tools/audio#transcribe) on the recording. The word timings are in the job's `output_data.json.words`.

### Find the silences

Call `silence_detect`. This step is optional, but it helps `tighten`.

### Plan the cut

Call `plan_edit` with the transcript, the silences and the recording, in `tighten`, `clips` or `chapters` mode. Check the plan and change it if you need to.

### Render it

Call `apply_edl` with the plan. Use `quality: "proxy"` for a quick preview first.

The `podcast-editing` recipe guides an assistant through the same steps; see [Content recipes](https://nodaro.ai/docs/mcp/recipes). For several cameras and a separate microphone, run `audio_sync` first and pass each source's `offset_ms` to `plan_edit`.

## Frequently asked questions

### What does video_analysis return?

A scene-by-scene breakdown of the video, each scene at most 8 seconds, with a prompt-ready visual description, the shot type, the camera movement, the audio layers and the recurring people, objects and places as castable slots.

### How long can a video be for video_analysis?

Up to 10 minutes, from a Nodaro id, a direct URL or a YouTube link. YouTube live streams are rejected. The price depends on the tier and on which of four length buckets the video falls into.

### How do I tighten a podcast recording through MCP?

Transcribe it, optionally detect its silences, then call plan_edit with mode tighten. Render the plan with apply_edl. The podcast-editing recipe walks an assistant through these steps.

### What is an EDL?

An edit decision list. It is a list of segments in play order, each naming a time window of a source recording. apply_edl renders it into a finished cut.
