MCP server
Kestroll MCP tools
Let your AI agent create viral social content in minutes. 27 tools, 139 actions.
Get Asset Data
get_asset_dataLook up what Kestroll knows about one asset by its absolute path: metadata, summary, people, timeline segments with transcript excerpts, document pages, face appearances, tracked people, audio levels, and cached visual Q&A. Use it once you know the asset; use search to find assets. Request only the fields you need — a full timeline on an asset over ~5 minutes overflows, so window it with start_time/end_time. frame_at and view_image return actual frames or images inline. Every timestamp is source-asset time, not composition time. For who is speaking or on screen, use inspect_speakers rather than question. Read-only.
Parameters14
- absolute_pathstringrequired
- The absolute file path of the asset (e.g., '/Folder/Subfolder/image.jpg')
- fieldsstring[]
- Fields to return: 'summary'; 'file_metadata' (size, dimensions, duration, fps, probed codecs/timecode/container tags,
local_system_absolute_path, andmotion_graphic: {source_code, props, images, fonts}for a motion graphic); 'processing_status'; 'people' (who is in it, with slugs); 'tracked_people' (face tracks — pass aperson_slugtocomposition track_person); 'face_appearances' (when each named person is on screen, as merged runs); 'timeline' (segments, seetimeline_fields); 'question_answers' (cached Q&A); 'pages' (document pages, seepage_fields); 'asset_relationships' (groupings such astimeline_sync— seedocsediting/cross_recording_timestamps.md); 'audio_levels' (RMS/peak dBFS of the mixed source audio per bucket); 'songs' (recognised music with title and artist); 'custom_metadata' (the organization's own fields). face_appearances, audio_levels and songs honorstart_time/end_time. For audio_levels and songs,available: falsemeans not measured — not silence or no music.summaryfile_metadataprocessing_statuspeopletracked_peopleface_appearancestimelinequestion_answerspagesasset_relationshipsaudio_levelssongscustom_metadata - timeline_fieldsstring[]
- Sub-fields per timeline segment (default: summary only): 'summary', 'detailed_description', 'tags', 'transcript_excerpt', 'scene_layouts' (per-scene layout with who is on screen and where: 'single' = clean cut-in, 'split_lr'/'split_tb' = two-shot, avoid cutting mid-exchange, 'group', 'broll' = no person, covers transitions; speaker turns are included only when requested without
transcript_excerpt). scene_layouts and detailed_description are heavy — window long assets.summarydetailed_descriptiontagstranscript_excerptscene_layouts - page_fieldsstring[]
- Sub-fields to include for each document page. Options: 'summary' (short page summary), 'detailed_description' (detailed description), 'text' (extracted text content). Default: text only.
summarydetailed_descriptiontext - start_timestring
- For videos: start timecode in HH:MM:SS.mmm format (e.g., '00:05:47.000'). Must be used with end_time. Required with
question+cached_only: falsefor videos. - end_timestring
- For videos: end timecode in HH:MM:SS.mmm format (e.g., '00:06:51.000'). Must be used with start_time. Required with
question+cached_only: falsefor videos. - pageinteger
- For documents: if 'pages' is in fields, return only this page number instead of all pages. Required with
question+cached_only: falsefor documents. - questionstring
- A question to ask about the asset's visual content. By default (
cached_only: true), only returns an answer if a matching prior Q&A is cached; otherwise indicates a cache miss and hints to re-call withcached_only: false. - cached_onlyboolean
- When true (default), a
questionis answered only from prior cached Q&A on this asset. When false, requests a fresh visual answer and persists it for future calls. Ignored whenquestionis not set. - frame_atstring[]
- For videos: up to 6 HH:MM:SS.mmm timecodes (e.g. ['00:01:23.500']) whose frames come back inline as images, alongside any fields or answer requested. Use it to look at on-screen detail, framing, or who's in shot.
- view_imageboolean
- For an image, or a document with
page: attach the image or rendered page inline so you can see it, alongside any fields or answer. Not for videos — useframe_at. - include_unnamedboolean
- With
face_appearances: also include unnamed detections ('Unknown #4', background extras). Default false; set true only for exhaustive coverage, such as counting a crowd. - transcript_granularitystring
- Density of
transcript_excerpt: 'sentence' (a timestamp per sentence, to verify an out-point), 'turn' (one line per speaker turn, ~6-8x smaller, enough to plan cuts) or 'word' ([start-end]per word whose bounds are safe cut points; ~3x 'sentence', so only in a narrow window). Defaults to 'turn' for composition build subagents and 'sentence' otherwise.sentenceturnword - audio_level_interval_secondsnumber
- With
audio_levels: bucket width in seconds, 0.1–60.0; default 1.0. Widen it on long windows to stay under the response cap.
Search Library
searchFind assets and moments in the library. Use query for visual content, transcript text, or filenames, and the filters (people, collections, folder, asset_type) to narrow it; or leave query empty and pass glob_pattern or size/duration filters to browse by path. Use it to discover assets; use get_asset_data to read one you already have. Returns the top 20 moments or assets (limit up to 50) with paths and timestamps; filename_matches are counted apart from moments_total, so moments_total: 0 beside filename matches means those files are the answer. When a named file can't be found the result says why, including deleted files — relay that rather than searching again. Read-only.
Parameters15
- querystring
- What to find: visual content or transcript text (e.g. 'person walking on beach'), or filenames — matched word by word ignoring spacing and separators, returned in
filename_matches; several names at once work. Put person names inpeople, not here. Leave empty to filter or browse only; an empty query needs at least one filter. - search_targetstring
- What to search in. 'transcript' searches video/audio transcripts, 'content' searches visual content descriptions, 'tags' searches metadata tags, and 'question_answer' searches cached visual question-answer analysis. Defaults to 'all'.
alltranscriptcontenttagsquestion_answer - folderstring
- Absolute path of a folder to search within, including everything nested under it (e.g. '/Projects/2024'). Pass the raw path, unquoted, even with spaces.
- glob_patternstring
- Browse mode (empty
query): a glob over asset paths, e.g. '**/*.jpg', '/Projects/**/*' (recursive) or '/Projects/*' (direct children). Combines withfolder. Pass the raw pattern, unquoted. - min_size_bytesinteger
- Browse mode: only include assets at least this many bytes (e.g. 5368709120 for 5GB).
- max_size_bytesinteger
- Browse mode: only include assets at most this many bytes.
- min_duration_secondsnumber
- Browse mode: only include assets at least this long (e.g. 7200 for 2 hours). Assets without a duration (e.g. images) are excluded.
- max_duration_secondsnumber
- Browse mode: only include assets at most this long. Assets without a duration (e.g. images) are excluded.
- asset_typestring
- Only 'image' or 'video'. Audio and documents can't be filtered for: audio still appears in unfiltered transcript search, and documents are best read with
get_asset_data.imagevideo - collectionsstring[]
- Filter by collection names. Return assets that belong to ANY specified collection.
- peoplestring[]
- Filter by person names (e.g. 'Tom Brady'). Names are matched fuzzily and case-insensitively. Return assets where ANY specified person appears in transcript speakers or visible faces. If a name is ambiguous the result lists candidates — ask the user which person they mean.
- result_typestring
- What level of result to return. 'timestamps' (default) returns specific moments with start_time, end_time, and a per-moment summary. 'assets' returns one entry per asset.
assetstimestamps - limitinteger
- Maximum number of results to return. Defaults to 20; capped at 50. Leave unset for normal searches and only raise it when you genuinely need a broad sweep.
- rerankstring
- Relevance ranking of content results: 'filter' (default) reorders and drops clearly irrelevant matches; 'reorder' keeps everything, for an exhaustive sweep; 'off' is raw match order. A
rerankednote in the result says when something was dropped.filterreorderoff - scopestring
- Result scope. Defaults to 'project' — only items in the chat's current project, when it has one. Pass 'global' to search across the whole organization instead.
projectglobal
People
peopleLook up or delete the people Kestroll has identified in the organization from face recognition and transcripts. find fuzzy-matches a name, list returns people (filter by asset_paths, folder or unnamed), show returns one person's headshot inline, and delete permanently removes people. Use it to get a person_slug or confirm who someone is; to find footage of a person use search with the people filter, and to see when they appear in one video use get_asset_data face_appearances.
Actions
listfindshowdelete'list' (default) returns people in the org, newest first, with how many assets each appears in; 'find' fuzzy-matches a name to return the closest people; 'show' returns one person's headshot image inline (requires person_slug); 'delete' permanently removes people (requires person_slugs).
Parameters7
- namestring
- For action 'find': a person's name to fuzzy-match (case-insensitive). Returns the closest matches, best first.
- person_slugstring
- For action 'show': the slug of a single person (from a prior people listing or find). Returns that person's headshot image inline.
- person_slugsstring[]
- For action 'delete' (required): slugs of the people to delete. Deletion is permanent.
- asset_pathsstring[]
- For action 'list': only people who appear in these assets (absolute paths).
- folderstring
- For action 'list': only people who appear in assets under this folder, including subfolders (absolute path).
- unnamedboolean
- For action 'list': only unnamed people that face recognition created (named 'Unknown #N').
- max_num_resultsinteger
- Maximum number of people to return for 'list' or 'find'. Defaults to 20.
Collections
collectionsList the organization's Collections — named, shareable groupings of assets and moments — with each one's slug and name. To find assets inside a collection, use search with the collections filter; to view or edit a collection's clips, pass its slug to composition. Read-only.
Actions
list'list' (default) returns the org's collections.
Parameters1
- max_num_resultsinteger
- Maximum number of collections to return. Defaults to 20.
Composition
compositionCreate, view and edit compositions (video edits) and collections (clip sets). create takes a full JSON document: read docs editing/composition_schema.md first. apply_patch is the default edit; other actions are specialized (captions, framing, splits, markers, concatenation), documented at editing/composition_commands.md#<action>. Edits save a new version at once; revert undoes. For dialogue cuts quote the transcript with the *_by_transcript actions.
Actions
createclip_by_transcriptviewview_framehistoryreviewapply_patchremove_by_transcriptreplace_by_transcriptremove_silenceslistduplicatedeleteconcatenateadd_synced_assetadd_broll_imagefollow_video_audioreanchor_videogenerate_captionsrechunk_captionsupdate_elementssnapclose_gapstrim_overhangletterbox_windowsplit_at_scenessplit_at_speaker_changestrack_persontrack_person_across_elementsframe_around_pointset_track_optionset_composition_viewadd_markerupdate_markerremove_markerrevertThe operation to perform; each is documented at editing/composition_commands.md#<command>.
Parameters70
- slugstring
- Artifact slug. Required except create, list, concatenate (uses
slugs). - artifact_slugstring
- add_broll_image: target composition slug.
- namestring
- For create, clip_by_transcript, duplicate, or concatenate name.
- is_sectionboolean
- For create, clip_by_transcript, duplicate, concatenate: the new composition is an intermediate for a later concatenate. Default false; not for collections.
- aspect_ratiostring
- Composition duplicate only: target aspect ratio.
- asset_path_overridesobject
- Composition duplicate only: element ID to replacement asset path.
- drop_element_idsstring[]
- Composition duplicate only: element IDs to omit.
- documentobject
- The complete artifact as a JSON object. Required for 'create'.
- patchobject[]
- apply_patch: non-empty atomic RFC 6902 list (max 1000). Address elements by id (
/elements/id:cap_qnms9p/text); numeric indexes are absolute. - includestring[]
- Optional 'view' extras (compositions). Dense caption lanes elide unless named in
tracksorinclude_captions.element_metadatatimelinetranscript - include_captionsboolean
- 'view': expand
caplanes that would otherwise elide. Default false. Required for absolute-index patch paths. - idstring
- Target marker id (from add_marker or view). For the update/remove marker commands.
- atstring
- Marker time, HH:MM:SS.mmm or plain seconds. Required for 'add_marker'; moves it on 'update_marker'.
- timesany
- split_at_speaker_changes: required; 'transcript' or an array of composition-time HH:MM:SS.mmm cuts inside element_id. view_frame: up to 6 composition times.
- labelstring
- Short marker note. Required for 'add_marker'; optional for 'update_marker'.
- fromstring
- Composition-time window start for update_elements or one-shot track_person.
- composition_startstring
- Caption commands only: composition-time scope start (inclusive). Omit for the composition start.
- composition_endstring
- Caption commands only: composition-time scope end (exclusive). Omit for the composition end.
- element_typestring
- For 'update_elements': select only this type; other filters must also match.
videoaudioimagetext - idsstring[]
- For 'update_elements': select exactly these element ids (other filters ignored).
- setobject
- update_elements merge-patch: text styles, static position, or single-element text. In an element style, null explicitly switches off an inherited field; active_word_style:null disables highlight. Whole caption lanes use
defaults. - unsetstring[]
- For 'update_elements': authored keys to REMOVE, e.g. ["text_styles.background_color"] or ["active_word_style"]. Removing a key restores inheritance from lane defaults.
- only_audio_sourcesstring[]
- Caption commands only: audio element ids whose speech to process. Omit for all audio sources.
- chunk_sizeinteger
- Captions: optional words-per-card ceiling; uses the lane policy or 12.
- max_linesinteger
- Captions: optional line limit; uses the lane policy or canvas default.
- styleobject
- generate_captions lane defaults: position, text_styles, active_word_style. Required on a lane with no style yet. Pass a user's caption-style block verbatim.
- overwriteboolean
- generate_captions only, default false. True rebuilds and CLOBBERS generated captions in the required
lane/range, including manual edits. - modestring
- 'view' format, default 'document' —
{slug, name, document}with elements atdocument.elements; use it for programmatic code_sandbox transforms. The other modes return derived data, not the artifact.documenttranscriptasset_pathssame_scene_runs - elementsstring
- Optional 'view' selector (compositions): comma-separated element ids, e.g. 'intro,guest-a,guest-audio'.
- composition_windowstring
- Optional composition-time window for 'view', e.g. '00:12:00-00:15:00'. Renumbers elements from 0 — patch by
id:, not position. - transcript_granularitystring
- Density of
view mode: "transcript", default 'sentence' (a timestamp per sentence). 'word' brackets every word as[start-end]in composition time, where the end is already a safe cut point — use it to nail an edit point mid-sentence. 'word' is ~3-4x the size, so passcomposition_windowwith it.sentenceword - tracksstring
- Optional 'view' lane filter — 'v1', 'v1,a1', 'cap1'. Naming an
caplane expands it if elided. Renumbers elements from 0 — patch byid:, not position. - slugsstring[]
- Ordered composition slugs to 'concatenate' (minimum 2). Output plays them back-to-back in this order.
- source_asset_pathstring
- Required for 'add_synced_asset'. Absolute path of the synced audio or video asset to add.
- image_absolute_pathstring
- add_broll_image: image asset path.
- sourcestring
- Source asset path for clip_by_transcript (required) or replace_by_transcript.
- start_phrasestring
- Verbatim transcript anchor: the source's for clip_by_transcript, else the composition's.
- end_phrasestring
- Verbatim end anchor, same transcript as start_phrase.
- replacement_start_phrasestring
- replace_by_transcript: source start anchor.
- replacement_end_phrasestring
- replace_by_transcript: source end anchor.
- silence_threshold_secondsnumber
- remove_silences: minimum seconds, default 0.5.
- animationstring
- add_broll_image: default zoom.
nonezoom - target_element_idsstring[]
- Required for 'add_synced_asset'. Explicit ids of the elements whose timing the source should follow.
- target_asset_pathstring
- Required for 'reanchor_video'. Absolute path of the timeline-synced camera angle to repoint the element's PICTURE onto.
- stepinteger
- Number of edits to undo on 'revert' (default 1). Ignored when
tois given. - tostring
- Composition-time window end for update_elements/track_person; for revert,
user_viewedrestores the viewed version. - element_idstring
- The target element
id. For add_marker, omit it for a timeline marker or pass it to attach the marker. For update_marker, omit it to keep ownership unchanged, pass an id to attach, or pass null to detach. Optional for 'split_at_scenes' — omit it to split every video element. - element_idsstring[]
- Across-elements tracking: 2+ video ids in one source scene/slot.
- boundarystring
- For 'snap' only. Which edge to snap.
startend - window_startstring
- For 'letterbox_window' only. Window start as a composition timecode — the start of the scene being letterboxed. Omit both window fields to letterbox the whole element.
- window_endstring
- For 'letterbox_window' only. Window end as a composition timecode; must be after
window_start. Required wheneverwindow_startis given. - personstring
- Person slug from tracked_people; used by person-tracking actions.
- xnumber
- frame_around_point: x (0..1).
- ynumber
- frame_around_point: y (0..1).
- focal_sizenumber
- frame_around_point: focal height in (0,1]; default 0.1.
- anchor_ystring
- frame_around_point: focal Y anchor; default upper-third.
upper-thirdcenterlower-third - subject_sizestring
- Person/point framing: close, medium, wide, or (0,1].
- face_ystring
- Person tracking: upper-third, center, lower-third, or (0,1).
- targetstring
- Required for 'trim_overhang'. 'scene' = clean picture, clips the final word's audio tail; 'audio' = full word, keeps the brief flicker.
sceneaudio - lanestring
- Matching
v{n}/a{n}/cap{n}lane. Required by add_synced_asset, set_track_option unless clear_all, and ambiguous captions; filters update_elements; follow_video_audio defaults to a1. - disableboolean
- set_track_option: video/caption lane visibility; invalid for audio.
- muteboolean
- set_track_option: audio lane mute; invalid for video/caption.
- defaultsobject
- For 'set_track_option' on an
caplane: deep-merge patch to the lane style defaults (position/text_styles/active_word_style) every caption inherits. A null value removes the key. - clear_allboolean
- For 'set_track_option': clear EVERY lane disable and mute in one call (style defaults kept). Ignores
lane/disable/mute. - viewstring
- Required for 'set_composition_view': the named timeline layout to apply.
multicam - collapseboolean
- For 'history' only, default true (group consecutive edits by the same author). False for raw per-version rows.
- max_num_resultsinteger
- Cap for 'list' (default 10), 'history' (default 20, newest first) and 'review' findings (default 20).
- detailstring
- For 'review': default coalesced.
summarycoalescedfull - current_session_onlyboolean
- For 'list': true = only this chat's artifacts (the project's, in a project chat).
- scopestring
- For 'list': 'global' = whole org, not the chat's project.
projectglobal
Export
exportSave a finished deliverable into the user's library — only when the user asks to export, render, download or save. mode: composition renders compositions (by slug) to MP4 assets in the background: start it, tell the user it's rendering, and move on; the finished MP4 lands in the library and action: status checks progress. The other modes synchronously save one still image: a composition frame, a raw video frame, or a document page. Exports the composition's current version and creates new library assets. Never use it to inspect — composition view_frame and get_asset_data frame_at show frames without creating anything. Details in docs editing/export.md.
Actions
startwaitstatuscomposition mode only; default start, which starts a render per slug (a slug already rendering errors on its own). status snapshots each slug's latest export; wait returns at once and reports when each render finishes — use it only when the user asks to be told.
Parameters8
- modestringrequired
compositionrendersslugsto MP4 assets in the background. The still modes synchronously save one image namedfile_nameand return its path:composition_frame(compositionslug+ compositiontime),asset_frame(videoslug+ sourcetime),document_page(documentslug+page).compositioncomposition_frameasset_framedocument_page- slugsstring[]
compositionmode only. Composition artifact slugs to operate on. Pass one slug for a single export, or many to batch. Duplicates are deduplicated.- resolutioninteger
startonly: the short side in px (2160 = 4K); the long side follows the aspect ratio. Defaults to 1080 — set it only when the user asks for a resolution. Applies to every slug.720108014402160- ignore_not_shown_to_userboolean
startonly, default false. True skips the check that the composition was shown to the user before export. Set it when the user explicitly asked to export and you show the composition in the same reply; for a proactive offer, show it first and wait for confirmation.- slugstring
- The single target of the still modes: a composition artifact slug (
composition_frame), a video asset slug (asset_frame) or a document asset slug (document_page). - timestring
composition_frame/asset_frame. Timecode in HH:MM:SS.mmm (e.g. '00:00:12.500') — composition time forcomposition_frame, the video's own source time forasset_frame.- pageinteger
document_pageonly. 1-based page number.- file_namestring
- Still modes only. Name for the new image, e.g. 'hero'. The extension is set from the format actually produced and the name is suffixed if taken — read
asset_pathfrom the result.
Inspect Speakers
inspect_speakersFind out who is talking and who is on screen across a span — to pick the person and window for composition track_person, or to check that a shot frames the right speaker. Use it instead of get_asset_data question for any who-is-speaking or who-is-on-screen question. Pass asset_path with source-time from/to (pooling every synced angle), or artifact_slug with composition-time from/to (one window per shot). Returns time-resolved measurements per visual window from independent sources — diarized audio turns, transcript, lip-motion readings and on-screen faces — each with its own status, never one verdict: a window can hold several speakers in turn, so you decide the framing. Read-only.
Parameters8
- asset_pathstring
- Absolute path of the source asset to ask about (e.g. '/Folder/interview.mp4'). Mutually exclusive with
artifact_slug.from/toare this file's own source time. - artifact_slugstring
- Slug of the composition artifact to ask about — NOT a
person_slug. Mutually exclusive withasset_path.from/toare composition time, and the answer is one visual window per shot in that range. - fromstringrequired
- Start of the span, HH:MM:SS.mmm.
- tostringrequired
- End of the span, HH:MM:SS.mmm. Must be after
from. - methodsstring[]
- Which evidence sources to run. Omit to run all of them (they are all cheap DB reads). visual_speaking = lip motion readings over time; audio_speaker = diarized turns over time; transcript = the words, as segments; on_screen = who is framed at the sampled instants.
visual_speakingaudio_speakertranscripton_screen - include_synced_assetsboolean
- Asset mode only. Default true: query every synced angle of this asset's session at its offset-corrected time and report each separately. Set false to ask only about this one file.
- timesstring[]
- Instants to sample for on-screen presence and frames, HH:MM:SS.mmm, in the same time as
from/to. Each window always samples its own midpoint as well. - include_imagesboolean
- Render annotated frames (boxed, labeled faces plus the visible crop) at the sampled instants. Default false. Use when sources disagree and you need to see whose lips are moving.
Edit Asset Data
edit_asset_dataChange data stored on a source asset — only when the user explicitly asks. edit_transcript replaces a verbatim phrase in the asset's transcript (copy it from get_asset_data); the new wording flows into search and into the captions of every composition drawing on that asset. link_local_file records the path of the asset's original file on the user's computer; nothing is uploaded. To fix one composition's captions use composition; to cut a composition by transcript use its *_by_transcript actions.
Actions
edit_transcriptlink_local_fileOperation to perform: edit_transcript or link_local_file.
Parameters4
- pathstringrequired
- Asset absolute path (e.g. /Footage/interview.mp4).
- original_textstring
- Verbatim phrase to find in the asset's transcript. Must be unique — widen with surrounding words if ambiguous. Required for edit_transcript.
- replacement_textstring
- Replacement text. Pass an empty string to delete the matched span. Required for edit_transcript.
- local_system_absolute_pathstring
- Absolute path to the source file on the user's local system. Required for link_local_file (e.g. /Volumes/Media/interview.mp4).
Filesystem
filesystemBrowse and reorganize the library's files and folders: list_folders lists folders (optionally narrowed by glob_pattern) with their absolute paths and asset counts, move_assets moves assets into a folder, create_folder creates folders, and delete_assets permanently deletes assets and/or whole folders with everything inside — there is no undo, so only on a clear request from the user. Takes absolute paths from search or list_folders. NAS-synced assets can't be moved and come back in skipped; unresolved paths come back in not_found; title collisions are renamed automatically. Project bins are managed with project, not here.
Actions
list_foldersmove_assetsdelete_assetscreate_folder'list_folders' lists folders (read-only); 'move_assets' moves assets into a folder; 'delete_assets' permanently deletes assets and/or folders; 'create_folder' creates folders.
Parameters7
- glob_patternstring
- For list_folders: a glob pattern to match folder paths (e.g. '/Projects/**/*' for Projects and everything under it recursively, '/Projects/*' for direct children only). Omit to list all folders.
- max_num_resultsinteger
- For list_folders: maximum number of folders to return. Defaults to 20.
- asset_pathsstring[]
- For move_assets (required) and delete_assets: absolute paths of the assets (e.g. ['/Footage/clip1.mp4', '/Footage/clip2.mp4']).
- target_folder_pathstring
- For move_assets (required): absolute path of the destination folder (e.g. /Projects/Approved).
- create_target_folderboolean
- For move_assets: create the target folder and any missing parents. Default false, which returns folder_not_found for a missing folder; set true when the user names a new folder.
- folder_pathsstring[]
- Absolute folder paths (e.g. ['/Old Footage']). For delete_assets: folders to delete, including every subfolder and asset inside them. For create_folder (required): folders to create.
- scopestring
- Result scope. Defaults to 'project' — only items in the chat's current project, when it has one. Pass 'global' to search across the whole organization instead.
projectglobal
Project
projectManage Projects, Projects-page folders, and their Media Library. Read product/projects.md with docs before using this tool for operations, parameters, and deletion behavior.
Actions
listlist_folderscreate_folderrename_foldermove_folderdelete_foldermove_projectsshowcreaterenameaddmoveremovewatchdelete_projectWhich operation to perform.
Parameters20
- projectstring
- Project slug to act on, or "current" (the default: the chat's current project). For set_current: the project to move this chat to.
- namestring
- For create (optional — auto-named if omitted), create_folder (optional — defaults to New Folder), and rename/rename_folder (required): the new name.
- project_folderstring
- Projects-page folder slug from list_folders/create_folder. Required source for rename_folder/move_folder/delete_folder (root forbidden). Destination for move_projects, parent for create_folder, or folder for a new project with create (without bin_path); for those actions omit or pass / for top level. Separate from in-project bins and filesystem folders.
- target_project_folderstring
- For move_folder: destination Projects-page folder slug. Omit or pass / to move the source project_folder to the top level. Cannot be the source or its descendant.
- project_slugsstring[]
- For move_projects (required): project slugs from list to file into project_folder. Every project must be visible to you; the move is atomic.
- bin_pathstring
- Absolute bin path (e.g. /Selects/Scene 1). The destination for add/move/watch (default: project root, created if missing), the bin to create for create, the bin to rename for rename.
- bin_pathsstring[]
- For move/remove: absolute paths of existing bins to move or delete.
- item_idsstring[]
- For move/remove: Media Library item ids (the
idfrom action "show"). Targeting a master also affects its moments. - item_idstring
- For rename: a single Media Library item id.
- compositionsstring[]
- Composition slugs. For add: projectless compositions to file; for move: compositions in this project to re-file; for remove: compositions to detach.
- folder_pathsstring[]
- For add: absolute filesystem folder paths to import (subfolders become sub-bins, one-time snapshot). Runs synchronously, so a very large tree can take a while.
- asset_slugsstring[]
- For add: asset slugs to file as masters.
- momentsobject[]
- For add: sub-clips of assets to save as moments (each also ensures the asset's master).
- collectionstring
- For add: slug of a collection artifact whose clips to add.
- clip_idsstring[]
- For add with collection: specific clip ids/labels to add. Omit to add every clip.
- folder_pathstring
- For watch: absolute path of the filesystem (NAS) folder to watch. Omit to stop watching bin_path.
- include_subfoldersboolean
- For watch: also mirror the folder's subfolders as sub-bins and pull their assets. Default false.
- target_projectstring
- For move: slug of another project to move/copy item_ids into (bin_path is then in that project).
- modestring
- For move with target_project: 'move' (default) removes the items from the source project; 'copy' leaves them in place.
movecopy - max_num_resultsinteger
- For list/show: maximum projects, or library items / compositions, to return. Defaults to 20.
Kestroll Docs
docsRead Kestroll's reference docs before non-trivial work with the other tools: composition schema and commands, captions, framing, sync, export, asset processing, socials, and product surfaces. list returns every doc's path, title and description — start there when you don't know the path. search ranks docs by keyword, read returns one doc (or one section with path#anchor, the form review findings carry), and outline lists a doc's anchors. Examples in the docs are authoritative. Read-only.
Actions
listsearchreadoutline'list' every doc with its title and description; 'search' by keyword; 'read' one doc, or one section with path#anchor; 'outline' a doc's section anchors.
Parameters3
- pathstring
- Doc path with its category prefix,
.mdoptional, e.g.editing/split_screen.md. Required for 'read' and 'outline'. Append#<anchor>to read one section; review findings'doc:values work verbatim. - querystring
- For 'search': keywords, case-insensitive. A doc matches if any word appears; ranked by how many match, then reranked.
- rerankstring
- 'search' ranking: 'filter' (default) reorders and drops docs that only incidentally match; 'reorder' keeps everything, for a broad sweep; 'off' is raw match order.
filterreorderoff
Templates
templatesFind curated example edits — Kestroll's and the organization's own — to use as a reference when the user wants a style or format you haven't built before. search by description, then view one by its key: summary, file metadata, timeline segments with transcript excerpts, audio levels, songs, frames and visual questions. view works like get_asset_data, except nothing is added to the library, so the template has no path for other tools. Request only the fields you need and window long timelines with start_time/end_time. Every timestamp is the template's own time. Read-only.
Actions
searchview'search' finds templates; 'view' looks at one by its key.
Parameters10
- querystring
- For 'search': what kind of edit you want an example of. Any word may match; leave empty to list every template.
- template_keystring
- For 'view': the template's
keyfromsearch. - fieldsstring[]
- For 'view': fields to return: 'summary'; 'file_metadata' (size, dimensions, duration, fps); 'timeline' (segments, see
timeline_fields); 'audio_levels' (RMS/peak dBFS of the mixed audio per bucket); 'songs' (recognised music with title and artist). audio_levels and songs honorstart_time/end_time; for those two,available: falsemeans not measured, not silence or no music.summaryfile_metadatatimelineaudio_levelssongs - start_timestring
- Start timecode in HH:MM:SS.mmm format. Must be used with end_time. Required with
question. - end_timestring
- End timecode in HH:MM:SS.mmm format. Must be used with start_time. Required with
question. - questionstring
- A question about the visual content of the
start_time/end_timewindow, answered fresh by a vision model on every call. - timeline_fieldsstring[]
- Sub-fields per timeline segment (default: summary only): 'summary', 'detailed_description', 'tags', 'transcript_excerpt', 'scene_layouts' (per-scene layout with who is on screen and where: 'single' = clean cut-in, 'split_lr'/'split_tb' = two-shot, avoid cutting mid-exchange, 'group', 'broll' = no person, covers transitions; speaker turns are included only when requested without
transcript_excerpt). scene_layouts and detailed_description are heavy — window long assets.summarydetailed_descriptiontagstranscript_excerptscene_layouts - frame_atstring[]
- For videos: up to 6 HH:MM:SS.mmm timecodes (e.g. ['00:01:23.500']) whose frames come back inline as images, alongside any fields or answer requested. Use it to look at on-screen detail, framing, or who's in shot.
- transcript_granularitystring
- Density of
transcript_excerpt: 'sentence' (a timestamp per sentence, to verify an out-point), 'turn' (one line per speaker turn, ~6-8x smaller, enough to plan cuts) or 'word' ([start-end]per word whose bounds are safe cut points; ~3x 'sentence', so only in a narrow window). Defaults to 'turn' for composition build subagents and 'sentence' otherwise.sentenceturnword - audio_level_interval_secondsnumber
- With
audio_levels: bucket width in seconds, 0.1–60.0; default 1.0. Widen it on long windows to stay under the response cap.
Organization Memory
contextOrganization-wide memory shared by every member and conversation, for durable facts such as brand guidelines, preferences and standing instructions. list shows every memory's name and description, save adds a memory, read loads its full body, edit revises or renames it, and delete removes it; those four address a memory by its kebab-case name. Writes are visible to the whole organization and to every future conversation.
Actions
listsavereadeditdelete"list" to see every memory's name and description, "save" to add a new memory, "read" to load one's full body, "edit" to revise one, "delete" to remove one.
Parameters4
- namestring
- Memory name — a short kebab-case slug, e.g. "brand-palette". Required for every action but "list". For "save": the slug for the new memory. For "read"/"edit"/"delete": identifies the memory, copied exactly from your Memory index or "list".
- new_namestring
- "edit" only — rename the memory to this slug.
- descriptionstring
- One line (max 200 chars) shown in the Memory index — must let a future agent decide from it alone whether to read the full body. Required for "save".
- contentstring
- Full memory body — self-contained and generalizable, written for a future conversation with zero context from this one. Required for "save".
Send Feedback to Kestroll
complainReport friction to the Kestroll team: a missing/awkward tool, confusing or wrong data, a feature you wish you had, your own frustration, or a problem the user is causing. Logged for the team — does not affect or block the current task.
Parameters3
- summarystringrequired
- One-line gist of the complaint. Be specific, e.g. "search returns no results for partial filenames".
- detailsstring
- Optional fuller explanation: what happened, what got in your way, and what would have helped.
- categorystring
- Optional kind of complaint. "missing_tool"/"awkward_tool" for tooling gaps, "confusing_data" for bad/unclear data, "feature_request" for something you wish existed, "frustration" for general friction, "user_issue" for something the user is doing wrong, "bug" for broken behavior, else "other".
frustrationmissing_toolawkward_toolconfusing_datafeature_requestuser_issuebugother
Settings
settingsOrganization and user settings, custom fonts, and plan usage. Read product/settings.md before editing settings and product/custom_fonts.md before adding a font.
Actions
view_settingsedit_settingsshow_custom_fontsadd_custom_fontshow_usageParameters2
- settingsobject
- For 'edit_settings': only the keys to change, as returned by 'view_settings'.
- asset_pathstring
- For 'add_custom_font': absolute library path of a .ttf or .otf file.
Workflow
workflowRead and manage the organization's workflows: named procedures invoked as /slash_commands. When the user types a /slash_command, or a request matches a workflow's description, read it (omit workflow_command to list them all) and follow its instructions. create_new, edit (a full rewrite), patch (change part of one field) and delete change workflows for the whole organization — only when the user asks, and always read before writing. Kestroll-team workflows are read-only. YAML fields and patch rules are in docs agent_capabilities/workflows.md.
Actions
readeditpatchdeletecreate_newOperation to perform.
Parameters8
- workflow_commandstring
- The workflow's /slash_command. Required for edit, patch, and delete; optional for read (omit to list all); ignored for create_new.
- yaml_contentstring
- YAML body describing the workflow. Required for create_new and edit.
- confirm_removalsboolean
- For edit: set true only to re-send an edit that was rejected for dropping content, after checking every removed line listed in the error is one you meant to remove.
- fieldstring
- When patching: which field to edit. Defaults to
instructions.instructionsdescriptionslash_command - findstring
- When patching: literal text to find, copied exactly from the field's current value — including newlines and indentation. If what you are copying from is dumped YAML rather than the raw field, its block scalar indents the body by two spaces: drop those two spaces from EVERY line of both find and replacement, not just the first. Include enough surrounding lines to be unique. To delete a step, find the whole step (its heading and every bullet under it) and replace with an empty string.
- replacementstring
- When patching: text the matched region is replaced with. Empty string deletes the match.
- is_regexboolean
- When patching: treat
findas a Ruby regex (and allow \1 backreferences in the replacement). Defaults to false — prefer literal text. - replace_allboolean
- When patching: replace every match instead of requiring a single unique match. Defaults to false.
Scheduled Work
scheduled_workManage the organization's Scheduled Work: saved prompts that start a new Kestroll chat on a cron schedule. list and view read schedules and their recent runs. create, update and run (start a chat right now) act as the current user — only when the user asks. update replaces the whole prompt, so view first and send it back complete.
Actions
listviewcreateupdaterun'list' shows schedules, 'view' shows one, 'create' adds one, 'update' changes one, 'run' starts one now.
Parameters8
- idstring
- For 'view', 'update' and 'run': the schedule's
idfromlist. - querystring
- For 'list': only schedules whose name or prompt contains this text.
- mineboolean
- For 'list': true for only the schedules that run as you.
- namestring
- For 'create' (required) and 'update': the schedule's name.
- promptstring
- For 'create' (required) and 'update': the prompt sent to each run. On update it replaces the whole prompt —
viewfirst and send it back complete. - cronstring
- For 'create' (required) and 'update': five-field cron (minute hour day month weekday), e.g. '0 9 * * 1-5' for weekdays at 9am.
- timezonestring
- For 'create' and 'update': IANA time zone the cron is read in, e.g. 'America/New_York'. Use the user's own zone; defaults to America/Los_Angeles.
- enabledboolean
- For 'list': filter to schedules that are on (true) or paused (false). For 'create' and 'update': false pauses the schedule, true runs it.
Chats
chatsList, summarize, rename, and delete the user's chats.
Actions
listsummarizerenamedelete'list' lists the user's chats, 'summarize' summarizes one, 'rename' renames one, 'delete' deletes one.
Parameters9
- idstring
- For 'summarize', 'rename' and 'delete': the chat's
idfromlist. - namestring
- For 'rename': the new name.
- min_messagesinteger
- For 'list': only chats with at least this many messages (yours and the user's).
- max_messagesinteger
- For 'list': only chats with at most this many messages.
- created_afterstring
- For 'list': ISO 8601 date or time; only chats created at or after it.
- created_beforestring
- For 'list': ISO 8601 date or time; only chats created before it.
- last_message_afterstring
- For 'list': ISO 8601 date or time; only chats whose last message was sent at or after it.
- last_message_beforestring
- For 'list': ISO 8601 date or time; only chats whose last message was sent before it.
- limitinteger
- For 'list': how many chats to return (default 25, max 100).
Timeline Sync
timeline_syncPut recordings of one shoot on a shared timeline. inspect (free, read-only, always first): each asset's capabilities and timeline membership, and which alignment methods can run on each pair. probe: measure how far apart recordings started — every method you name runs on every pair and reports its own verdict; never average offsets that disagree, decide which to trust. validate: check a plan is possible (never that it is right) and get a validation_id. apply_plan: write a validated or inline plan. edit: write an offset a person supplied, with a reason. delete: take assets off their timeline. Writes return the final placements, normalized so the earliest member starts at 0 — report those, not what you submitted. See docs editing/timeline_sync.md.
Actions
inspectprobevalidateapply_planeditdeleteinspect → probe → validate → apply_plan is the flow; edit writes an offset a person supplied, delete takes assets off their timeline.
Parameters8
- asset_pathsstring[]
- inspect: assets you are considering syncing (1 or more). probe: recordings to measure against each other (2 or more). delete: assets to remove from their current timeline. Absolute paths.
- methodsstring[]
- probe: alignment checks to run on every pair: metadata (~25ms, embedded timecode), audio (~400ms, needs shared sound), transcript_matching (~700ms, works with no shared audio), llm_turn_taking (~60s, for recordings sharing neither audio nor words). Start with metadata + audio + transcript_matching.
metadataaudiotranscript_matchingllm_turn_taking - refineboolean
- probe: sharpen the best-supported offset to ~1ms with audio phase correlation. Default false. 2.6s warm, up to 210s cold. Use when the offsets will drive lip-synced audio.
- validation_idstring
- apply_plan: validation_id from validate.
- relationship_idstring
- validate / apply_plan inline: existing timeline to change; omit to create one. Required if any named asset is already synced. Members you do not list keep their current placements. edit: required — the existing timeline to correct.
- membersobject[]
- validate / apply_plan inline: the files to place, and where each one starts on the shared timeline. edit: the hand corrections to write.
- removestring[]
- validate / apply_plan inline: absolute paths to remove from the timeline named by relationship_id. Must already be members of it — use delete to take an asset off a different timeline.
- reasonstring
- edit only, required: where the offset came from — who supplied it and how they knew. Stored with the correction.
Asset Processing
asset_processingDiagnose and rebuild an asset's analysis (transcript, speakers, faces, object tracks, scene layouts, segments, moments) when get_asset_data shows it missing or wrong. Always inspect first: it reports each step's last success, failure and in-flight state, plus prerequisites and skip reasons. run rebuilds a preset, overwriting existing analysis over several minutes — only with the user's confirmation; kill stops in-flight work; await (or run with await) watches for the data you need instead of you polling. Read docs asset_processing/pipeline.md before the first run.
Actions
inspectrunkillawait'inspect' (read-only; call it first): each step's last success, failure and in-flight state, plus prerequisites, skip reasons and stale data. 'run' rebuilds the analysis for a preset, repairing missing inputs itself. 'kill' stops everything in flight for the asset. 'await' returns at once and tells you when the data you need is ready — never sleep-poll.
Parameters6
- absolute_pathstring
- Absolute file path of the asset (e.g. '/Folder/file.mp4'). Looked up scoped to the current organization.
- asset_pathsstring[]
- For await only, when waiting on several assets at once (max 25). Combinable with absolute_path.
- presetstring
- For run, default 'all': the whole analysis, and the only preset for images and documents. 'transcript': the transcript and what reads it, for a wrong, truncated or missing transcript; faces and tracks are kept. 'person_tracking': speaker identity, faces, tracks, scene layouts and active speaker, for wrong people or framing; the transcript is kept.
alltranscriptperson_tracking - forceboolean
- For run, default false. True also rebuilds the analysis INPUTS (metadata, proxies, scene cuts) from scratch, and with preset 'all' first wipes every analysis byproduct; the preset's steps recompute either way. Only when the inputs themselves are suspect — re-encoding a large original is slow.
- awaitstring
- For run. Omit to just start the rebuild. Otherwise also get notified when it reaches this point, in one call — same meanings as wait_for.
initial_datafull_data - wait_forstring
- For await, default 'initial_data': ready once the transcript settles and the asset can be placed in a composition — faces, tracks and speaker identity may still be missing, which is expected. 'full_data': the whole pipeline finished; use it before syncing, exporting, or reading people, tracks or scene layouts.
initial_datafull_data
Web Search
web_searchSearch the web. Returns results, not content. action: images finds images to bring into the library — pass a candidate's image_url to web_fetch with a file_name to save it. action: videos finds YouTube, TikTok, or Instagram videos to bring into the library — pass a candidate's url to web_fetch with a file_name to save it.
Actions
imagesvideosThe action to run (defaults to web).
Parameters4
- querystringrequired
- What to search for, e.g. 'Tom Brady' (images) 'Tom Brady highlights' (videos).
- limitinteger
- How many results to return. Images: default 6, max 20. Videos: default 6; YouTube max 25, social max 10.
- video_sourcestring
- For videos: 'youtube' (default, metadata-rich), 'tiktok', or 'instagram' (public social post URLs from web search).
youtubetiktokinstagram - min_dimensioninteger
- For images: minimum pixels on the image's LONGEST edge (default 1920, a 1080p canvas in either orientation). Smaller results are dropped. Pass 3840 for a 4K export, less only for a small inset, 0 to disable.
Web Fetch
web_fetchFetch a URL. A web page or PDF comes back as markdown text. A public YouTube, TikTok or Instagram post, or a direct image/video/audio file URL, is instead imported into the library as a new asset (several at once with imports): it returns right away with the new asset_path while the download and analysis run in the background. Find media URLs with web_search; call asset_processing await if the next step needs the import ready. Private, removed or bot-blocked posts fail during the background download.
Parameters7
- urlstring
- The http(s) URL to fetch. A web page or PDF is read; a public YouTube, TikTok, or Instagram post link or a direct image/video/audio file URL is imported. Use
importsinstead to import several files in one call. - max_charsinteger
- For a page read: cap on returned page text (default 20000, max 80000). Content past the cap is cut and the result says so — raise it only when you actually need the rest of a long document.
- file_namestring
- For an import: name for the new asset, extension optional (e.g. 'Vikings Stadium'); suffixed if taken. Defaults to the video title or the URL's file name. Passing it forces an import — use it for an image URL with no extension, never for a page read.
- importsobject[]
- Several files to import in one call (up to 20), instead of url + file_name. Each entry is imported independently — a bad URL fails only its own entry. All entries share the project_bin below.
- project_binstring
- For an import: optional bin path in the current project's Media Library to file the import into (e.g. /Selects). Defaults to the project root bin when working in a project; has no effect otherwise.
- audio_onlyboolean
- For an import: save YouTube links as mp3 audio only instead of mp4 video (default false). YouTube only — any other URL in the call fails. Applies to every entry in
imports. - audio_subtypestring
- For an audio_only import: "music" for a song or score, "sound_effect" for a sound effect; omit for anything else (podcast, speech). Applies to every entry in
imports.musicsound_effect
Asset Editor
asset_editorMake an edited copy of an existing library asset. edit_image_with_ai applies a prompt to an image; edit_video_with_ai applies a prompt to 3-15 seconds of a video (e.g. removing an object), keeping its audio; remove_image_background cuts an image's subject out into a transparent PNG (use it, not an edit prompt, for transparency); remove_video_background cuts the people out of up to 5 minutes of video into a transparent video that keeps the audio. Always creates a new asset and never modifies the original. Returns the new asset_path at once; the AI edits and the video cutout finish in the background. To generate an image from scratch, use create_asset. See docs agent_capabilities/image_generation.md.
Actions
edit_image_with_aiedit_video_with_airemove_image_backgroundremove_video_backgroundRequired: 'edit_image_with_ai' (a prompt edit of an image), 'edit_video_with_ai' (a prompt edit of 3-15 seconds of video), 'remove_image_background' (a transparent PNG) or 'remove_video_background' (the people cut out into a transparent video).
Parameters7
- asset_pathstringrequired
- Absolute library path of the existing asset to work on — an image, or a video for edit_video_with_ai and remove_video_background. The result is always saved as a new asset; this one is left unchanged.
- promptstring
- edit_image_with_ai and edit_video_with_ai (required). The edit instruction, e.g. 'make it nighttime'. An edit prompt cannot produce transparency — use action: 'remove_image_background' for that.
- file_namestring
- Name for the new asset; the extension follows the output and a taken name is suffixed. Required for edit_image_with_ai and edit_video_with_ai; the background removals default to '<source name> (No Background)'.
- aspect_ratiostring
- Optional, edit_image_with_ai only. Aspect ratio of the result (e.g. 16:9 for widescreen, 9:16 for vertical, 1:1 for square).
1:12:33:23:44:34:55:416:99:1621:9 - subject_descriptionstring
- Optional, remove_image_background only. The person or object to keep from a photo, such as 'LeBron James holding a basketball'. If omitted, the primary foreground subject is kept.
- start_secondsnumber
- Optional, edit_video_with_ai and remove_video_background. Where in the source video to start, in seconds. Defaults to 0.
- end_secondsnumber
- Optional, edit_video_with_ai and remove_video_background. Where in the source video to stop, in seconds. Defaults to the end of the video.
Create Asset
create_assetCreate a brand-new library asset. ai_generate_image generates an image from a prompt; ai_generate_video generates a short video clip with audio from a prompt; create_motion_graphic renders self-contained Remotion/React code (lower-thirds, title cards, charts, callouts) into a transparent video; generate_speech speaks text as an mp3, optionally in the voice from a sample clip. Returns the new asset_path at once and finishes in the background; place the result in a composition as an ordinary image, video, or audio element. Assets never change — to revise one, create it again. To edit an existing image, use asset_editor. Read docs editing/motion_graphics.md before writing motion-graphic code.
Actions
ai_generate_imageai_generate_videocreate_motion_graphicgenerate_speechRequired. Asset creation action.
Parameters20
- promptstring
- For ai_generate_image and ai_generate_video: what to generate.
- file_namestring
- For ai_generate_image, ai_generate_video, and generate_speech: name for the new asset; the name is suffixed if already taken.
- aspect_ratiostring
- For ai_generate_image and ai_generate_video: optional aspect ratio. Video accepts only 16:9 (default) or 9:16.
1:12:33:23:44:34:55:416:99:1621:9 - duration_secondsinteger
- For ai_generate_video: clip length in whole seconds, 3-15 (default 10).
- reference_imagesstring[]
- For ai_generate_video: optional library image asset paths (at most 6) the video should keep consistent, such as a character, product, or style.
- namestring
- For create_motion_graphic: short descriptive asset name; .mov is added automatically.
- codestring
- For create_motion_graphic: self-contained TSX with a default-exported React component. It may import only
reactandremotion, with no network access or external resources. - propsobject
- For create_motion_graphic: optional JSON props passed to the component.
- imagesobject
- For create_motion_graphic: optional map of names to library image asset paths (SVG, PNG, WebP, GIF, JPEG, AVIF); the component receives them as images.<name>. Not URLs: import web images with web_fetch first.
- fontsobject[]
- For create_motion_graphic: optional font faces the code uses, from the font catalog or the organization's uploaded fonts (at most 8), one entry per face. The code names them with the family quoted inside the string, since CSS drops names like 42dot Sans otherwise: fontFamily: "'42dot Sans'", with the matching fontWeight (400, 600 or 700) and fontStyle.
- widthinteger
- For create_motion_graphic: output width in pixels (16-4096).
- heightinteger
- For create_motion_graphic: output height in pixels (16-4096).
- textstring
- For generate_speech: the words to speak (up to 10000 characters).
- voicestring
- For generate_speech: optional stock voice name, listed in
docsagent_capabilities/speech_generation.md(default Darian). - voice_sample_pathstring
- For generate_speech: optional audio or video asset whose speaker's voice to use instead of a stock voice.
- voice_sample_startnumber
- For generate_speech: optional start of the voice sample, in seconds.
- voice_sample_endnumber
- For generate_speech: optional end of the voice sample, in seconds.
- fpsnumber
- For create_motion_graphic: frames per second (greater than 0, at most 120).
- duration_framesinteger
- For create_motion_graphic: output duration in frames (1-9000; width × height × duration_frames ≤ 5e9).
- preview_framesinteger[]
- For create_motion_graphic: optional 1-8 frame numbers to preview instead of rendering. Returns those frames as images in about a minute and makes no asset; call again without it to render the graphic.
Sound Effects
sound_effectsKestroll's built-in sound-effects library, for adding sound effects to an edit. action: search finds sounds by description (whooshes, impacts, pops, clicks, dings, risers, room tone, ambience…); import the picks with action: import. action: import copies sounds (sound_ids from search) into the library and returns their asset_paths. Place imported sounds as audio elements with composition; see docs editing/sound_effects.md.
Actions
searchimportsearch (default) finds catalog sounds; import copies chosen ones into the library.
Parameters6
- querystring
- For search: what the sound should be, in plain words — e.g. 'fast whoosh', 'deep cinematic impact', 'bubble pop', 'office room tone'. Every word must match, so keep it to the sound itself rather than the scene.
- categorystring
- For search: restrict to one category.
transitionsimpactsuitechambience - min_durationnumber
- For search: shortest acceptable length in seconds.
- max_durationnumber
- For search: longest acceptable length in seconds.
- limitinteger
- For search: how many candidates (default 10, max 30).
- sound_idsstring[]
- For import: catalog ids from a search result (up to 20).
File Transfers
file_transfersMove files in and out of the organization's Kestroll library, and check on what's coming in. list returns recent transfers of every kind — uploads, cloud storage imports, NAS syncs, and web and video imports — newest first. inspect (with a file_transfer_id from list) adds per-file rows and errors. To send files from where you're running, upload returns per file either put_url + headers (curl -T <file> -H ...) or parts: PUT each part_size_bytes piece (split -b) to its part_number's url. Then complete the upload_file_ids; anything missing comes back with fresh URLs. download gives one asset's url, or a zip download_id for folders or several paths — call again with it until it has a url. For connected cloud storage, connections says what's connected; an organization owner connects an account in Agent → Connectors. browse lists a folder. search finds files and folders by name. import brings files or whole folders into the library, where they download and process in the background. Importing a file twice makes a second copy.
Actions
listinspectuploadcompletedownloadconnectionsbrowsesearchimportWhich action to run; the tool description says what each does.
Parameters15
- file_transfer_idstring
- For 'inspect' (required): the id returned by 'list', 'upload' or 'import'.
- statusstring
- Optional filter for 'list'.
pendingin_progresscompletedfailedcancelled - original_sourcestring
- Optional filter for 'list' — where it came from (e.g. 'file_upload', 'dropbox', 'nas', 'youtube', 'url').
- max_num_resultsinteger
- Maximum results for 'list', 'browse' or 'search' (default 20, max 100). A 'browse'
cursorkeeps its first page's size. - destination_pathstring
- For 'upload': library folder, e.g. '/Footage'; created if missing. Default '/'.
- filesobject[]
- For 'upload' (required).
filenamemay include subfolders ('day1/a.mp4'). - upload_file_idsstring[]
- For 'complete' (required): from 'upload'.
- pathsstring[]
- For 'download': absolute asset/folder paths. A folder or several paths are zipped (max 200 files).
- download_idstring
- For 'download': a zip's id, for its status and
url. - providerstring
- For 'browse', 'search' and 'import' (required): which connected cloud storage.
dropbox - folderstring
- For 'browse': the folder's
idfrom an earlier result; omit for the root. For 'search': optional folder to search within. - cursorstring
- For 'browse': the
cursorfrom a previous page, to read the next page of the same folder. - querystring
- For 'search' (required): words to match against file and folder names.
- file_typestring
- For 'search': only return this kind of item.
videoaudioimagedocumentfolder - itemsstring[]
- For 'import' (required):
ids of files and/or folders from 'browse' or 'search'. A folder imports every supported file under it, up to 200 files per call.
Socials
socialsWork with the organization's connected social accounts (TikTok, YouTube, Instagram, Facebook Pages, X).
list_channelsreturns each account with its status and engagement totals;list_postsreturns posts with engagement stats as of the account's last sync;refresh_channelsre-syncs every account, or onechannel, from its platform now.make_postpublishes a library video or a text post to one account now, schedules it, or saves a draft.list_publicationsreturns the posts made through Kestroll, including drafts and scheduled ones;update_post,unschedule_post, anddelete_postchange one until it starts publishing. Posting is public — only post what the user asked for, and readdocsagent_capabilities/socials.mdfirst for each platform'soptions.Actions
list_channelsrefresh_channelslist_postsmake_postlist_publicationsupdate_postunschedule_postdelete_post'list_channels' returns the connected social accounts; 'refresh_channels' re-syncs them now; 'list_posts' returns their posts; 'make_post' posts to one account; 'list_publications' returns posts made through Kestroll, including drafts and scheduled ones; 'update_post', 'unschedule_post', and 'delete_post' change one until it starts publishing.
Parameters15
tiktokyoutubeinstagramfacebookxdraftscheduledpublishingsentpublishedfaileddateviewslikescommentssharesnowscheduledraft