Analysis and edit lists
Analyze a video scene by scene, find shots and silences, sync cameras, render edit decision lists, and cut podcasts into episodes, clips and trailers.
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. shot_cuts, silence_detect, audio_sync and speaker_map measure recordings. plan_edit and apply_edl plan and render cuts from a transcript, switch_cameras chooses the camera for each cut by who is speaking, and speaker_view lays the speakers out on screen. The podcast tools run a whole job in one call: tighten_episode tightens an episode, make_chapters lists its chapters, make_trailer cuts a trailer, make_clip_pack cuts short clips and speaker_layout frames the recording by speaker. Every tool needs the workflows:execute permission. Every tool except estimate_use_case 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 node.
- Scenes are cut at natural boundaries and last at most 8 seconds, one image or video generation per scene.
visualResolvedis 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 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. |
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. Default false. |
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 tool always runs the Smart analysis, the most accurate tier, and takes no tier or result-strategy parameter. A client that still sends llm_model or selection_mode gets Smart, and those parameters are ignored. The other tiers stay available on the Video Analysis node, also in workflows you run over MCP, and on the REST route.
The price depends on the length bucket, the smallest of 60, 180, 360 or 600 seconds that fits the video. The 60-, 180- and 360-second buckets each have 3 seconds of grace, so a video up to 1:03 is priced in the 60-second bucket:
| Analysis | Up to 60 s | Up to 180 s | Up to 360 s | Up to 600 s |
|---|---|---|---|---|
| Smart | 455 | 554 | 1,394 | 2,284 |
list_models returns the current prices.
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 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 | 237 | 319 | 730 | 1,181 |
Without analysis | 436 | 523 | 1,296 | 2,114 |
shot_cuts
Finds where every shot of a video starts and ends, measured from the file itself. Every decoded frame is scored, and each hard cut starts a new shot. Dissolves and fades are not cuts. It works like the Shot Cuts node.
Permission: workflows:execute. Credits: one flat price per run, with or without frames. The tool is not listed where the Shot Cuts node is not offered.
| Parameter | Type | Notes |
|---|---|---|
video_url or video_asset_id | string | Required, one of the two. The video, up to 30 minutes: a URL, a Nodaro video job id or an uploaded video's id. |
frames | boolean | Also saves the exact first and last frame of each shot as PNG images, for up to 1,000 shots. Default false. |
Returns: a job id. outputData.json is { shotCount, cutsSec, durationSec, shots }. Each shot has index, startSec, endSec and durationSec, in seconds from the first frame. cutsSec is in ascending order and never holds 0. It is [] for a video of one shot. With frames, each shot also has firstFrameUrl and lastFrameUrl, and outputData.firstFrames and outputData.lastFrames list the frame URLs in shot order.
silence_detect
Finds the silent ranges in a recording, from its audio only: no transcript and no pictures. It works like the Silence Detect node.
Permission: workflows:execute. Credits: 11.
| 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, from 1 to 600,000 ms. Default 700. |
pad_ms | integer | Speech kept around each range, from 0 to 60,000 ms. 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 node.
Permission: workflows:execute. Credits: from 11 for 2 sources to 55 for 6, by the number of recordings aligned to the reference.
| 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.
speaker_map
Works out which camera each speaker is on, from the cameras' own microphones. It works like the Speaker Map node.
Permission: workflows:execute. Credits: one flat price per run. The tool is not listed where the Speaker Map node is not offered.
| Parameter | Type | Notes |
|---|---|---|
sources | array | Required. 2 to 6 recordings, each { id, url, kind? }, with a unique id: the cameras, and the master and wide recordings when you name them. Use the EDL's source ids. kind: "audio" marks a sound-only recording. |
transcript | object or string | Required. The word transcript with speaker labels. |
offsets | object or string | The output_data.json of an audio_sync job. Leave it out when the recordings already share one clock. |
master_source_id | string | The id of the master audio. It hears everyone, so it is no one's camera. |
wide_source_id | string | The id of the wide shot. It is no one's camera, and a speaker with no clear camera is shown on it. The wide must be a camera: not a sound-only recording, and not the master. |
margin_db | number | How many dB louder the loudest camera must be than the next one for a speaker to get it, from 0 to 30. Default 3. |
Returns: a job id. output_data.json is { version, speakerMap, confidence, notes, edl? }. edl is the recordings as one edit, also on output_data.edl. Pass the result to switch_cameras as speaker_map_result. A speaker with no clear camera gets "": the speaker is shown on the wide shot, or, with no wide shot, on any camera with picture. A camera that heard nothing is reported in notes and never fails the run.
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 node.
Permission: workflows:execute. Credits: 3–1,664, 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. trailer builds one 20–40 second teaser from the strongest moments. |
transcript | object | Required. The word-level transcript, from transcribe. |
sources | array | Required. 1 to 6 recordings, each with a url, and optionally its id, kind (video or audio), role (master-audio, camera, wide or screen), speakers and offset_ms on the master clock. id is the id you gave the recording in audio_sync, up to 200 characters. It is required with offsets. |
offsets | object or string | The output_data.json of an audio_sync job. The tool writes each measured offset onto the source with the same id, on the master's clock. A source's own offset_ms wins. |
transcript_source_id | string | The id of the source that the transcript was made from, when you know it. The tool then checks that this source is on the master's 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. |
The master is the source with the master-audio role, or else the first source. The tool refuses the call before any charge when the offsets would put the cut out of sync:
- A source has no
offset_ms, andaudio_syncdid not measure it, or matched it weakly, with a confidence below 0.5. Set itsoffset_ms. - The master has an
offset_msother than 0. - Other sources use measured offsets, but
audio_syncdid not measure the master, or matched it weakly. offsetsis not anaudio_syncresult, or a source has noidto match it with.- The transcript was made from a source that is off the master's clock. Transcribe the master, or give that source the
master-audiorole.
Returns: a job id. The plan is in the job's output_data, ready for apply_edl.
switch_cameras
Chooses which camera shows each cut of a multicam edit, by who is speaking. It works like the Camera Switch node. The sound never changes.
Permission: workflows:execute. Credits: one flat price per run, whatever the length of the recording or the number of cameras. Nodaro Cloud only.
| Parameter | Type | Notes |
|---|---|---|
edl | object or string | Required. One edit list from plan_edit. For a clip set, pass one clip's edit list per call. |
transcript | object or string | Required. The word transcript with speaker labels, from transcribe with speaker detection. |
speaker_map | object | Each speaker label mapped to the EDL source id of that speaker's camera. "" means the speaker has no camera of their own. |
speaker_names | object | Each speaker label mapped to a display name. |
speaker_map_result | object | A whole speaker_map result. A label in speaker_map wins, then this result, then speaker 1 on the first camera, and so on. |
min_shot_ms, lead_ms, max_shot_ms, wide_every, layout_hints | The shot settings of the Camera Switch node. |
A speaker left out of speaker_map goes to the source whose speakers list names them, else to the wide source, else to any camera with picture. A speaker set to "" skips the speakers list. A new speaker on the same camera still gets a named segment of their own.
The call is refused before any charge in two cases. The first is a transcript with no speaker labels. The second is an edl that is not one edit on the master clock, such as a clip set, a chapters plan or the edit list of a rendered output.
Returns: a job id. output_data.json is the switched edit list for apply_edl, and output_data.transcript is the transcript with the speaker names.
speaker_view
Renders an edit with its speakers laid out on screen, from the original cameras and with the edit's own sound. It draws a layout, a switch at each speaker change and an emphasis on whoever is talking. It works like the Speaker View node.
Permission: workflows:execute. Credits: per minute of rendered output, as on the Speaker View node. The rate is lower at the proxy quality, and higher with three to six pictures on screen or a zoom. Nodaro Cloud only.
| Parameter | Type | Notes |
|---|---|---|
edl or video_url | object, string | Required, exactly one. edl is one edit, as an object or a JSON string: a plan_edit or switch_cameras result. video_url is a public link to a video up to 500 MB. The whole video is used, and the view switches at each speaker's turn. |
transcript | object or string | The word transcript with speaker labels. Required with video_url, and with an edl that does not name its speakers. |
target_aspect | string | 16:9, 9:16, 1:1 or 4:5. Default: the edit's own shape, else 16:9. With video_url, the default is 9:16. |
layout | string | auto (default), single, side-by-side, stacked, grid or pip. A layout that the shape or the number of speakers rules out is replaced by the closest one. |
switch | object | { type, duration_ms? }, the switch at each speaker change. type is cut, pan, zoom or xfade:<transition>. duration_ms is the length of a pan or zoom, from 0 to 5,000 ms. Without it, the speakers are cut. |
emphasis | object | { style, duration_ms? }, how the speaker who talks is marked. style is none, or scale, border and dim joined with +. duration_ms is from 0 to 5,000 ms. Without it, no emphasis is drawn. |
quality | string | final (default), or proxy for a private 720p preview. |
speaker_regions | array | Up to 500 crops, each { source, speaker, region: { x, y, w, h } }: the part of a camera's frame that shows one speaker, as fractions of the frame. Each side is at least 1%, and the crop stays inside the frame: x + w and y + h are at most 1. Ids are up to 200 characters. |
accent_color | string | The colour of the border emphasis, as #RRGGBB. Default white. |
The tool does not take face tracks. To follow faces with Speaker Frames, build the workflow in the editor. A call is refused before any request when it sends both or neither of edl and video_url, an edl string that is not JSON, a video_url without a transcript with speaker labels, or a crop outside the limits. The route's own refusals come back as tool errors, before anything is charged: an edit it cannot draw, or a video it cannot measure or that is not wider than the shape.
Returns: a job id. The video is in output_data.videoUrl, the edit as drawn in output_data.json, and the transcript, remapped through the edit, in output_data.transcript.
apply_edl
Renders an edit decision list into a finished cut. It works like the Apply EDL node, which also gives the price per minute.
Permission: workflows:execute. Credits: priced per minute of rendered output, at the rate of the quality. A proxy preview, video or audio, has its own lower rate.
| 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 | final (default), or proxy for a fast 720p preview. A preview is always private and labeled Preview. |
clip_key | string | For a clip of a clips plan: "<first inMs>-<last outMs>" of that clip. It comes back on the result as output_data.clipKey, so you can match each render of a clip pack to its clip. |
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, and its output_data.quality says whether it is a preview or the final.
tighten_episode
Tightens a podcast or interview recording in one call. It transcribes the recording with speaker labels, finds the silences, plans the tightened cut and renders it. It can also add captions and a music bed that dips under the voice. It works like the Tighten Episode node.
Permission: workflows:execute. Credits: each step at its own price, plus a fixed fee for each run.
| Parameter | Type | Notes |
|---|---|---|
media_url or media_urls | string, array | Required, one of the two. media_url is the recording, a video or audio URL, up to 3 hours. media_urls is 1 to 6 recordings of one conversation, in order. See Several recordings. |
master_audio_url, cameras | string, object | With several recordings. See Several recordings. |
output | string | video (default) or audio. An audio recording always makes an audio episode. |
framing_aspect | string | Frames a video episode for this shape with Speaker View, which places automatic boxes over the speakers on screen: 16:9, 9:16, 1:1 or 4:5. Leave it out for no framing. |
framing_layout | string | The layout when framing_aspect is set: auto (default), single, side-by-side, stacked, grid or pip. A layout the shape does not draw is replaced by the closest one. |
framing_source | string | How a framed episode follows its speakers. static (default) splits the frame evenly by speaker. tracking follows faces with Speaker Frames, charged per started block of 1,000 sampled frames, and is refused with 403 where Speaker Frames is not available to you. auto follows faces while Speaker Frames is available to you, and splits evenly otherwise. Ignored without a framing. |
captions | boolean | Burns captions into a video episode. Default true. |
caption_style | string | subtitle, word-highlight (default), karaoke, tiktok-words, word-pop or bouncy. |
review_before_render | boolean | Stops at a quick preview for review. Default false. |
plan_tier | string | The editing quality: economy, standard (default) or premium. |
instructions | string | Editing instructions for the plan, up to 4,000 characters. |
style_guide | string | A style guide for the plan, up to 4,000 characters. |
music_url | string | A music bed. It dips under the voice and ends with the episode. |
music_duck_amount | number | How far the music dips under speech, from 0 to 100. Default 75. |
client_request_id | string | A retry token: 8 to 128 characters of letters, digits and _ - . :. Reuse it when you retry after a timeout, so the run is not started or charged twice. |
Returns: a job id. The episode is in output_data.videoUrl or output_data.audioUrl, and the edit is in output_data.json. On a self-hosted install, the tool needs a connection to Nodaro Cloud, and it is refused at once without one.
Several recordings
tighten_episode, make_trailer, make_clip_pack and speaker_layout also take several recordings of one conversation, such as one camera per speaker and a separate microphone. The run lines the recordings up, works out who is on which camera, and cuts to whoever is talking.
| Parameter | Type | Notes |
|---|---|---|
media_urls | array | Instead of media_url: up to 6 recordings of one conversation, in order. These are the cameras, at most 5. The sixth place is for the sound: the master_audio_url, or one sound-only recording. |
master_audio_url | string | The mixer or recorder track. It is the episode's sound and the clock that the recordings are lined up to. It counts toward the 6 recordings. |
cameras.wide_camera | integer | Which recording, counted from 1, is the wide shot. It is shown when a speaker has no camera of their own. |
cameras.already_synced | boolean | The recordings already share one clock, so the run does not line them up. |
cameras.speaker_cameras | object | Who is on which camera: a speaker number, where 1 is the first voice heard, mapped to a recording number. 0 is the wide shot. It overrides the automatic map. |
Several recordings, or a master audio, need Speaker Map. Where Speaker Map is not available to you, the call is refused with 403 node_not_available. A run with several recordings reports who is on which camera in output_data.cameras.
make_chapters
Lists the chapters of a podcast or interview recording in one call. It transcribes the recording, then plans its chapters, each with a title and a start time. Nothing is rendered. It works like the Chapters node.
Permission: workflows:execute. Credits: each step at its own price, plus a fixed fee for each run.
| Parameter | Type | Notes |
|---|---|---|
media_url | string | Required. The recording, a video or audio URL, up to 3 hours. |
plan_tier | string | The planning quality: economy (default), standard or premium. |
instructions | string | Instructions for the chapters, such as "5 to 8 chapters" or "short titles", up to 4,000 characters. |
style_guide | string | A style guide for the chapter titles, up to 4,000 characters. |
client_request_id | string | A retry token, as on tighten_episode. |
Returns: a job id. The show notes are in output_data.text: one 0:00 Title line per chapter. Once a chapter starts at 1:00:00 or later, every line uses H:MM:SS. The list is in output_data.json, as [{ startMs, title }], and the first chapter starts at 0. When two chapters start in the same second, the first one is kept.
A run that finds no chapters fails, and its fee is refunded. That run cannot be continued, because every step completed, so run it again. Any other failed run continues with continue_use_case and mode: "from-failed". On a self-hosted install, the tool needs a connection to Nodaro Cloud.
make_trailer
Cuts a 20 to 40 second trailer from a podcast or interview recording in one call, and delivers it in each social format you choose. It transcribes the recording, plans the trailer from its strongest moments and renders it. The plan chooses the length and joins the moments with short crossfades. Each format is padded, never cropped. It works like the Trailer node.
Permission: workflows:execute. Credits: each step at its own price, plus a fixed fee for each run.
| Parameter | Type | Notes |
|---|---|---|
media_url or media_urls | string, array | Required, one of the two. A video, up to 3 hours. An audio-only recording is refused. For several recordings, with master_audio_url and cameras, see Several recordings. |
formats | array | The formats to deliver, from 1 to 4: 9:16, 1:1, 4:5 and 16:9. Default 9:16, 1:1 and 4:5. |
intro_card_url | string | An optional short video, up to 15 seconds, played first. Give it the recording's size and shape, or one of the two is letterboxed. |
review_before_render | boolean | Stops at a preview of the trailer for review. Default false. |
plan_tier | string | The editing quality: economy, standard (default) or premium. |
instructions, style_guide | string | Instructions for the trailer, such as "open on the funniest moment", and a style guide, up to 4,000 characters each. |
client_request_id | string | A retry token, as on tighten_episode. |
Returns: a job id. The trailers are in output_data.formats, as [{ format, url }] in format order, and the first one is also in output_data.videoUrl. A format that could not be rendered is named in output_data.failedFormats, and the run completes with the others. When no format is rendered, the run fails and its fee is refunded.
With review_before_render: true, the run stops at a preview of the trailer in output_data.videoUrl, and formats stays empty until the final render. Check the plan in output_data.json, then call continue_use_case with mode: "render-final". On a self-hosted install, the tool needs a connection to Nodaro Cloud.
make_clip_pack
Cuts a podcast or interview recording into a pack of short clips in one call. It transcribes the recording, finds the best moments, renders each one as its own clip and captions it. It works like the Clip Pack node.
Permission: workflows:execute. Credits: each step at its own price, plus a fixed fee for each run. A clip that cannot be rendered is not charged.
| Parameter | Type | Notes |
|---|---|---|
media_url or media_urls | string, array | Required, one of the two. The recording, a video or audio URL, up to 3 hours. An audio recording makes audio clips, with no framing or captions. With several recordings, each clip cuts to whoever is talking: see Several recordings. |
count | integer | How many clips to find, from 1 to 50. Default 8. The plan may find fewer. |
target_length_sec | integer | The length of each clip, from 5 to 180 seconds. Default 60. |
framing | object or null | { aspect, layout?, switch_type?, emphasis? }: frames each video clip with Speaker View, on automatic boxes over the episode's speakers. Every clip is framed the same way. Default 9:16, stacked, pan and scale, and a framing without layout is stacked. null keeps the recording's shape. |
framing_source | string | static (default) splits the frame evenly by speaker. tracking follows faces, with one Speaker Frames run over the whole pack, charged per started block of 1,000 sampled frames. It is refused with 403 where Speaker Frames is not available to you. auto follows faces while Speaker Frames is available to you. |
captions | boolean | Captions each video clip. Default true. |
caption_style | string | subtitle, word-highlight, karaoke (default), tiktok-words, word-pop or bouncy. |
review_before_render | boolean | Stops at quick previews for review. Default false. |
plan_tier | string | The editing quality: economy, standard (default) or premium. |
instructions, style_guide | string | Instructions for choosing the clips, such as "the funniest moments", and a style guide, up to 4,000 characters each. |
client_request_id | string | A retry token, as on tighten_episode. |
Returns: a job id. The clips are in output_data.clips, each { url, title?, hook?, clipKey, thumbnailUrl?, captionsFailed? }. The first clip is also in output_data.videoUrl, or output_data.audioUrl for audio clips.
- Every clip is tried. A clip that cannot be rendered, or cut between cameras, is skipped and not charged. It is counted in
output_data.failedClips, and the run completes with the others. When no clip is rendered, the run fails and its fee is refunded. - Captions can fail on their own. A clip whose captions could not be added comes without them, with
captionsFailed. It is counted inoutput_data.failedCaptions, and those captions are not charged. - Review first. With
review_before_render: true, the run stops at quick previews. Checkoutput_data.json, which holds one EDL per clip. Then callcontinue_use_casewithmode: "render-final"and anedited_edlthat keeps or drops clips. Keep at least one clip: dropping every clip is refused withuse_case_nothing_kept. The final render makes only the kept clips, with no fee.
On a self-hosted install, the tool needs a connection to Nodaro Cloud.
speaker_layout
Frames a whole podcast or interview recording by speaker in one call. The result has the same length as the recording: nothing is cut. It transcribes the recording, then frames each speaker with Speaker View. It works like the Speaker Layout node.
Permission: workflows:execute. Credits: each step at its own price, plus a fixed fee for each run. The tool is not listed where the Speaker Layout node is not offered.
| Parameter | Type | Notes |
|---|---|---|
media_url or media_urls | string, array | Required, one of the two. A video, up to 3 hours. An audio-only recording is refused. With several recordings, each speaker is shown on their own camera: see Several recordings. |
target_aspect | string | 16:9, 9:16 (default), 1:1 or 4:5. |
layout | string | auto, single, side-by-side, stacked (default), grid or pip. A layout the shape does not draw is replaced by the closest one. |
switch_type | string | The switch at each speaker change: cut (default), pan, zoom or an xfade: transition such as xfade:dissolve. |
emphasis | string | How the speaker who talks is marked: none, or scale, border and dim joined with +. Default scale. |
framing_source | string | auto (default) follows faces with Speaker Frames while it is available to you, and splits the frame evenly otherwise. static splits the frame evenly by speaker. tracking follows faces, charged per started block of 1,000 sampled frames, and is refused with 403 node_not_available where Speaker Frames is not available to you. A camera shared by several speakers keeps the even split. |
review_before_render | boolean | Stops at a quick preview for review. Default false. |
client_request_id | string | A retry token, as on tighten_episode. |
Returns: a job id. The framed video is in output_data.videoUrl, and the edit that Speaker View drew is in output_data.json. After a preview, call continue_use_case with mode: "render-final" and no edited_edl: the layout has no cut to change, and an edited_edl is refused with use_case_no_plan. On a self-hosted install, the tool needs a connection to Nodaro Cloud.
estimate_use_case
Quotes a run of a podcast tool before it starts. The quote is free: nothing is created or charged.
Permission: workflows:execute. Credits: free.
| Parameter | Type | Notes |
|---|---|---|
node_type | string | Required. The node to quote: tighten-episode, episode-chapters, episode-trailer, clip-pack or speaker-layout. Only the nodes your deployment offers are accepted. |
input | object | Required. The arguments of the node's run tool (tighten_episode, make_chapters, make_trailer, make_clip_pack or speaker_layout), exactly as you would send them. |
The arguments are checked against the run tool's own arguments. An argument that the tool does not take is named and refused, and so is a value it refuses. They are then sent the same way the run tool sends them, so the quote is for exactly that run.
Returns: { totalCredits, stepsCredits, feeCredits, estimate?, durationSec }, also as structuredContent with nodeType. The total is the run's steps at their own prices plus its fee. estimate: true means a step is priced at a metered estimate, so the total is approximate. durationSec is null when the recording's length could not be read. Every figure is 0 on an edition without credits. The refusals come back as tool errors: several recordings where Speaker Map is not available to you (403 node_not_available), or a self-hosted install with no connection to Nodaro Cloud (503 nodaro_connection_required).
continue_use_case
Continues a tighten_episode, make_chapters, make_trailer, make_clip_pack or speaker_layout run as a new job.
Permission: workflows:execute. Credits: depends on the mode, below.
| Parameter | Type | Notes |
|---|---|---|
job_id | string | Required. The job id of the earlier run. |
mode | string | Required. from-failed or render-final. |
edited_edl | object | For render-final only: the edit list as you reviewed it. |
client_request_id | string | A retry token, as on tighten_episode. |
from-failedruns again only the steps of a failed run that did not finish. The finished steps are kept and not charged again. The fee is charged again, because the failed run's fee was refunded, so it applies once overall.render-finalrenders the full-quality result after a preview made withreview_before_render. It uses the preview's settings, andedited_edlwhen you pass it. It charges no fee. It renders Tighten Episode's episode, the trailer with its intro card and every format, Clip Pack's kept clips with their captions, or Speaker Layout's framed video.- Refusals of
render-final. Amake_chaptersrun renders nothing, so it is refused withrender_final_not_preview. A clip packedited_edlthat drops every clip is refused withuse_case_nothing_kept. Aspeaker_layoutrun has no edit to change, so anedited_edlis refused withuse_case_no_plan.
The run is continued on the route of its own node type, read from the job itself. A job that is not a run of a podcast use-case node is refused before anything is sent.
Returns: a new job id. A refusal comes back as a tool error with its continuation code. already_running and continuation_superseded name the job to follow, or the job to continue instead. continuation_settling means: try again in a moment.
Edit a recording from its transcript
Transcribe it
Call 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, chapters or trailer 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.
For a podcast or interview, tighten_episode runs these steps in one call. The podcast-editing recipe guides an assistant through the same steps; see Content 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 which of four length buckets the video falls into.
How do I tighten a podcast recording through MCP?
Call tighten_episode with the recording. It transcribes, finds the silences, plans the cut and renders it in one job. To control each step, run transcribe, silence_detect, plan_edit in tighten mode and apply_edl yourself.
Can an assistant cut a podcast into short clips or a trailer through MCP?
Yes. make_clip_pack cuts a recording into up to 50 captioned short clips, make_trailer cuts a 20 to 40 second trailer in each social format, and make_chapters lists the chapters with titles and start times. estimate_use_case quotes any of these runs first, for free.
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.
Related
Video Analysis
Apply EDL
Tighten Episode
Clip Pack
Audio
Content recipes
Last updated on
Video editing
Trim, join, loop, caption, overlay and assemble video from an AI assistant with Nodaro's editing tools, several of which run without AI and cost no credits.
Audio
Generate speech and dialogue, design and change voices, dub, create sound effects, transcribe, and clean or trim audio with the Nodaro MCP audio tools.