add_media
ChatGPTBring a video, image or audio file into the project, where the URL points: a page's URL makes a new thread on that page for it, a thread's URL adds it to that thread, and a timeline's URL also puts it in the timeline's media bin. Pass one source: media_url (a public link to the file, or a sequence's or font's URL from this project, which goes into a timeline's bin and nowhere else), file (a file the person attached to the chat; it arrives on its own), upload_id (from start_upload, once the bytes are put) or stock (an id from search_library). Answers with the file's sequence URL; on a timeline also its media bin entry, with the asset id edit_timeline takes. Nothing is placed on the timeline yet. A TTF or OTF font makes no sequence: it is kept in the project's files and answers with its URL there; on a timeline it also goes into the media bin, and its id in created is the font add_text and set_text_style take.
add_to_export_page
ChatGPTPut sequences and timelines on an export page, the page people are sent to watch, comment on and download what was made. Without page, a new private page is made, titled and laid out as asked; with page, they are added to that page. Something still rendering is held back. Answers the page, with its URL and object ids.
capture
ChatGPTRender up to 12 frames of the timeline as it looks now, with every layer, effect and text, at the given seconds. Use it to check an edit by eye.
card_embed
ChatGPTFrames a generation's card. For the card, not the model.
check_timeline
ChatGPTCheck the timeline for structural problems, like a clip that points at something deleted or a clip that ends before it starts. Each finding says what is wrong and how to fix it. It does not judge the edit itself.
create_agent
ChatGPTStart Agent Two on the user's brief in a video project, and open its live view. Returns an agent_id — the handle for send_follow_up_message, list_generations and get_conversation_history. Pass the project_id from create_project or list_projects. Relay any question Agent Two asks back to your user. If this fails, do not call it again — check list_agents first.
create_project
ChatGPTCreate a new video project on invideo. This is the first step whenever the user wants a video: create the project, then start Agent Two on the user's brief with create_agent (using the project_id this returns). Create one project per distinct piece of work.
current_user
ChatGPTWho is signed in: the person's name and email. Use their first name when you introduce yourself.
edit
ChatGPTChange part of a context entry or a brief: old_text, quoted exactly from its markdown as read shows it, becomes new_text. old_text must be there once, or set replace_all; if it isn't there, read again, since someone may have changed it. A brief's notes are its ## <note-slug> sections, so an edit can add, rename or delete one too. Links are URLs from read.
edit-video
ChatGPTReturns the invideo app link for editing a video. Use this when the user wants to edit, modify, or customize their video. The user should open the returned link to access the invideo editor.
edit_export_page
ChatGPTChange the export page the URL names: remove objects, reorder them, or retitle the page. Objects are named by the ids read gives for the page. Nothing the page shows is changed at its source.
edit_timeline
ChatGPTChange one timeline in a single edit: trim, split, move, duplicate or delete clips; add media, text, captions, shapes and markers; apply transitions, effects, color grades and keyframes; adjust audio levels, fades and routing; change tracks and timeline settings. Each change in operations names its type in op and gives that type's settings, which timeline_catalog documents. The changes land together or not at all. Pass expected_state_token from your latest read. After a timeout, retry with the same token and changes; if the token is then refused as stale, the first call landed, so read again.
export
ChatGPTExport the timeline the URL names, as it is now on the branch the URL names: video renders it; premiere, final_cut and davinci make a project that app opens, with its media; invideo makes an invideo project. Free, and needs the person's export permission. Answers the export's thread URL and its card's URL once it appears; read the card, with wait_s, for its status, and once it is completed its downloads or its export page. Pass an idempotency_key so a retried call finds the first export.
export-video
ChatGPTReturns the invideo app link for exporting/downloading a video. Use this when the user wants to export, download, render, or save their video. The user should open the returned link to export from the invideo app.
find_models
ChatGPTFind the models that generate video, images and audio in this project. With a query, the best matches come back with a summary; without one, every model by name. Each has an id: pass it to get_model as model for the model's inputs.
generate
ChatGPTGenerate video, images or audio with a model from find_models, charged to the person's credits, where the URL points: a page's URL starts a new thread there; a thread's, a sequence's or a timeline's adds to that thread. Pass the model id, its inputs as one object keyed by the input names get_model lists, and max_credits: the most the estimate may be. Call with dry_run first to see the price and check the inputs without spending anything. Answers the thread's URL, and the sequences' URLs once they appear; read them to follow the generation. Pass an idempotency_key so a retried call after a timeout finds the first generation instead of paying twice.
generate-video
ChatGPTCreate a video from a text prompt or brief. Use this when the user wants to make a video with specific requirements for platforms and audiences.
generate-video-from-brief
ChatGPTCreate a video from a text prompt or brief. Use this when the user wants to make a video with specific requirements for platforms and audiences.
get_auth_token
ChatGPTInternal tool to retrieve authentication token for a copilot session.
get_conversation_history
ChatGPTCatch up on an agent's conversation in one call — what the user asked, Agent Two's replies, the videos and images produced, and any question waiting on the user. Pass the agent_id from create_agent or a list_agents row. Relay any pending question to your user. Also use this after a failed call to see what actually happened before retrying anything.
get_help
ChatGPTinvideo's guide to working with these tools: projects and URLs, the notebook, timelines, media, exports. Read it before your first edit, and when a result surprises you. Give a topic for one section.
get_model
ChatGPTA model's description, capabilities and inputs, as a JSON Schema. Media inputs take the URLs of sequences in this project, from read; add_media brings a file in first.
get_timeline
ChatGPTRead the timeline the URL names: its timelines, tracks, clips and media, with their ids, its revision and the state_token edit_timeline needs. Ranges include their start and exclude their end.
get_widget_token
ChatGPTInternal plumbing for invideo's embedded live view — it runs automatically. NEVER call this tool yourself: it does not create an agent, does not start any work, and returns nothing useful to you. To start work, use create_agent; to check on work, use get_conversation_history.
inbox
ChatGPTThe messages other agents in this project sent to the name you pass as as, oldest first: the unread ones, which this hands over, or with before, the ones before that message id, read or not. Every answer says when you have unread messages. Each says who sent it as from: their name, their handle (their @ in this project) and their url. Answer one with message and its from.url.
inspect_objects
ChatGPTRead objects by id, with every property edit_timeline can change. Ids come from get_timeline.
leave_timeline
ChatGPTTake your cursor off this timeline, when the person asks or your work on it is done. Any later call on its URL brings you back.
list_agents
ChatGPTList the agents already working in a video project, so you can pick one to continue with. Pass the project_id from create_project / list_projects. Each row's agent_id is the handle for send_follow_up_message, list_generations and get_conversation_history.
list_generations
ChatGPTList the videos and images Agent Two has produced for an agent, including ones still generating. Pass the agent_id from create_agent or a list_agents row. Share each item's open_url with the user — it opens the video on invideo for full-quality playback, editing and export.
list_projects
ChatGPTList the projects in the workspace chosen at sign-in, newest first, each with its URL. To use another workspace, the person reconnects and chooses it.
list_workspaces
ChatGPTThe workspaces the person belongs to, and which one this connection works in. To use another, the person reconnects and chooses it.
mark_sequence
ChatGPTApprove or reject the sequence the URL names, as the person's approve and reject buttons in invideo do; read shows the mark as judgement. To take back an approval, reject it and vice versa. Mark only when the person asks you to or after they agree.
media_filmstrip
ChatGPTGet up to 12 frames of a media file, at times in the file itself, to scan it for shots. The file is a sequence (pass its URL), a media bin asset (the timeline's URL and asset_id) or a stock result (the project's URL and stock). You choose the times.
media_grab
ChatGPTGet one frame of a media file, at a time in the file itself. The file is a sequence (pass its URL), a media bin asset (the timeline's URL and asset_id) or a stock result (the project's URL and stock). This shows the file alone; capture shows the timeline.
media_probe
ChatGPTRead a media file's technical details: duration, size, frame rate, audio channels. The file is a sequence (pass its URL), a media bin asset (the timeline's URL and asset_id) or a stock result (the project's URL and stock). It does not transcribe or describe content.
media_waveform
ChatGPTRead a media file's loudness over time: peak levels, 16 points per second, for each audio channel. Use it to find silences, beats and loud moments. The file is a sequence (pass its URL), a media bin asset (the timeline's URL and asset_id) or a stock result (the project's URL and stock).
message
ChatGPTSend a message to another agent in this project: an invideo agent or another remote agent, by its URL from read of the project's …/agents. An invideo agent reads it and answers with a message of its own; a remote agent gets it from its inbox. It is sent from the name you pass as as, and answers come to that name. Messaging an invideo agent runs it on the person's credits: do it only when the person asks, or to answer a message in your inbox. Messaging a remote agent costs nothing. Its answer comes to your inbox.
new_brief
ChatGPTMake a brief in the project and return its URL: the plan for one thing to make, which the project's agents work from. Name and describe it here; write or edit with its URL adds its notes.
new_page
ChatGPTAdd a page to the end of the project's notebook, titled, and return its URL. Pages group threads; new_timeline, add_media and generate take a page URL to put things on it.
new_project
ChatGPTStart a new project in the workspace chosen at sign-in and return its URL. Give the URL to the person: it opens the project.
new_timeline
ChatGPTMake a new, empty timeline in a thread of its own on the page the URL names (a project's URL means its first page), and return the timeline's URL. Give the URL to the person: it opens the timeline. get_timeline with it reads it.
open_project_panel
ChatGPTOpen the project in a panel beside the chat: its generations, pages and context, and its editor, where the person watches your edits land live, plays them back and edits by hand. A URL from another tool's result opens what it names: a timeline's URL opens its editor, a page's URL that page. Each call opens a new panel, so call it only when none is open, after new_project or when the person wants to see a project; with one open, show_in_project_panel moves it instead. While it is open, what the person is looking at and has selected arrive as context: "this" means that selection.
panel_projects
ChatGPTLists the person's projects on the project panel. For the panel, not the model.
panel_token
ChatGPTSigns the project panel in. For the panel, not the model.
point_at
ChatGPTShow the person something on the timeline: point your cursor at clips or at one time, with a few words beside it, like "This is the intro". Your reads and edits already move your cursor, so you don't need this to work; use it when the person asks where something is or you want them to look. It stays until you read, edit, point elsewhere or leave.
read
ChatGPTRead what a URL names. A project: its notebook pages, their threads newest first, and what each thread made, then its context (what the project is, the person's rules, and a line per other entry), its briefs and its newest files. A context entry or brief: its markdown and revision, for edit and write. The files (…/assets, or a folder like …/assets/downloads): each by its URL, newest first. A file (…/assets/<its path>): its media. A page, a thread (…/notebook/page-2#thread-9), a sequence (the files it was made from, its media, with a fresh download URL and, once completed, a picture of it: an image as itself, a video as a 3x3 sheet of frames across it), or a timeline (its branches). Every item carries its URL, status and who made it, and a sequence its judgement: approved or rejected, by the person or an agent, with the reason when one was given; null when unmarked. Give the URLs to the person. To check on a job, read it (with wait_s to wait for a change); never start it again to check it.
read_custom_effect
ChatGPTRead one custom effect: its GLSL source, name, expected_effect_hash and params, the starting point for changing it with write_custom_effect. inspect_objects shows custom effects without their source.
read_custom_transition
ChatGPTRead one custom transition: its GLSL source, name, easing, expected_transition_hash and params, the starting point for changing it with write_custom_transition. inspect_objects shows custom transitions without their source.
register
ChatGPTGive yourself a name in this project, so your work and your cursor are yours and not shared with every other agent of this person and client. Then pass it as as on every call here. Answers the agents already in the project. A name already in use here, an agent's or any other @ in the project, is refused, so pick another.
rename
ChatGPTRename the page, thread or sequence the URL names, as the person can in invideo: a page's title, a thread's heading, a sequence's name. Answers with read of it. A timeline is renamed with edit_timeline's set_name, a brief with write or edit.
report_bug
ChatGPTTell the invideo team when these tools get in your way: a call fails or is refused for a reason you can't see, a result contradicts the guide or a tool's description, or a description left you guessing; for something missing, use request_feature. Include the tool, the arguments you sent and the full answer. You may file reports about the tools yourself and tell the person in a line; ask the person before including anything from their project beyond its URL.
request_feature
ChatGPTAsk the invideo team for something these tools can't do yet: an op, effect, setting, tool or way of working the person asked for or you needed. Say what you were trying to make and what you did instead. Offer it to the person; you may also file it for gaps you hit yourself.
search_library
ChatGPTSearch a library. A model's voices (<model>_voices, as get_model names them): pass the chosen voice's id as that model's voice input. Stock footage, images and music (stock_video, stock_image, stock_music): each result is an id in this project; add_media with stock set to it places it, and the media tools look at it first. Stock and voices come with a preview_url for the person. You only see stock's watermarked preview; exports use the clean file.
send_follow_up_message
ChatGPTRelay your user's next message to an agent and reopen its live view for the new turn. Pass the agent_id from create_agent (or a list_agents row). Use this to answer Agent Two's questions or to send the user's follow-up direction. If it fails, do not assume the message went through — check get_conversation_history.
share_export_page
ChatGPTSet who may see the export page the URL names and what they may do there: visibility (public: anyone with its URL; shared: the workspace; private: only the person), each visibility's comment and download permissions (the page's current ones unless given), and what the workspace may do with the page itself. Ask the person before making a page public.
show_in_project_panel
ChatGPTMove the project panel already open beside the chat to what the URL names: a page, the context or a brief, a sequence, a timeline's editor. It needs that panel open, from open_project_panel; with none open nothing changes, so open one with open_project_panel instead.
start_upload
ChatGPTStart an upload for a file you hold locally. The answer is an upload_id and an upload_url that takes the raw bytes with one HTTP PUT (for example curl -X PUT -H 'content-type: video/mp4' --data-binary @file.mp4 '<upload_url>'). Then call add_media with that upload_id.
status
ChatGPTWhere each job stands, for sequence, timeline and thread URLs of the project url names, in one call: each URL's status (queued, running, completed, failed, held, needs_confirmation), and while it moves, retry_after_s, when to check again; a thread's is over everything it made and runs. The cheap way to follow work: call it again after the least retry_after_s, and read a URL once it is over for what it made or why it failed.
timeline_catalog
ChatGPTRead-only reference for editing timelines: every type of change edit_timeline accepts and the exact settings each takes, the available effects and transitions with their parameters, and editing guides. With no arguments it lists every change type, effect and transition with a line on what it does; name some in ops, effects or transitions for their full settings, or in guides to read a guide. The custom_shader guide explains write_custom_effect and write_custom_transition.
timeline_history
ChatGPTThe timeline's version history. action picks one: list (read-only) shows its branches and checkpoints; checkpoint saves the current state; restore returns a branch to a checkpoint; create_branch and create_tag start one from a checkpoint; rename, set_default and declare_final change a branch. Every action but list changes the history and needs expected_state_token from your latest get_timeline. After a timeout, retry with the same token and fields; if the token is then refused as stale, the first call landed, so read again.
video-operations
ChatGPTReturns the invideo app link for performing various video operations like share, rename, or any other video management tasks. The user should open the returned link to perform the operation in the invideo app.
write
ChatGPTReplace a context entry or a brief with markdown, as read shows it, or make a context entry at a new URL under …/context/world/, …/context/brands/ or …/context/knowledge/ (ending in .md). A brief is one document: # <name>, its description as > lines, > status: <status>, then each note under ## <note-slug> (lowercase, digits, - and _), in order; notes left out are deleted, a description or status left out stays. Link a sequence, page, brief, entry or asset by its URL from read. Empty markdown deletes the entry or archives the brief. Over one that exists, pass the revision your read gave: a change made since is refused rather than overwritten. To change a part, edit is safer. The project's agents work from these, so write what the person asked for; …/context/invideo_rules.md holds the person's own rules.
write_custom_effect
ChatGPTPut a GLSL effect you write on a video or image clip, or replace one. Read timeline_catalog with guides: ["custom_shader"] once first: it says what the shader gets and must do. The shader is checked before it lands; a refusal lists the compiler's errors with line and column. Without effect_id it adds an effect called name. With effect_id and expected_effect_hash it replaces that effect; if someone changed it since your read, it is refused with the current hash. Each param's default becomes its value; set_effect_parameter changes values later. dry_run checks the shader without adding it.
write_custom_transition
ChatGPTPut a GLSL transition you write on a cut, or replace one. Use it only when no transition in timeline_catalog fits. Read timeline_catalog with guides: ["custom_shader"] once first: its transitions section says what the shader gets and must do, which differs from an effect's. The shader is checked before it lands; a refusal lists the compiler's errors with line and column. Without transition_id it adds a transition called name: on the cut between left_clip and right_clip when both are given, at right_clip's start from black, or at left_clip's end to black. With transition_id and expected_transition_hash it replaces that transition's shader; if someone changed it since your read, it is refused with the current hash. Each param's default becomes its value; set_transition_parameter changes values later. dry_run checks the shader without adding it.