MCP App Store
by KeenEthics

Overview

Treza makes and finishes videos from ChatGPT. Describe a video and Treza builds it with current video and image models, narration, music and captions, then renders it on your Treza account. You can also work with media you already have: join clips into one video over a voiceover and a music bed, or caption, upscale, crop or trim a single file. What you can do: - Start from a ready-made template, such as turning a long video or podcast into captioned vertical clips, or build a custom pipeline from a brief. - Run a pipeline and follow it to the finished video. - Check what a run will cost before spending, and see your credit balance. - Browse the videos, images and audio your account has made. - Add an image, video or audio file you attach or link, then edit it. - Publish a pipeline and pause or resume its schedule. - Connect your YouTube channel or TikTok account, and post a finished video after you review it. Nothing is posted until you press Post. Runs spend prepaid credits from your Treza account. You sign in with Google when you connect, which creates a Treza account if you don't have one. Posting needs your own YouTube channel or TikTok account, which you connect from a link Treza gives you in the chat.

Tools

add_captions

ChatGPT
Burn captions into a video the account already has: its speech is transcribed and shown on screen, or pass transcript when the words are known. The look (style, position, color, size) is optional. Renders on Treza in the background and saves the result as a new file in the library, leaving the original as it was; it spends credits, so poll get_run with the returned pipelineId and runId.

add_overlay

ChatGPT
Put an image, such as a logo, watermark or badge, on a video or a picture the account already has. A file the person attached goes into the library with import_media first. Corner, size, opacity and shape are optional. Renders on Treza in the background and saves the result as a new file in the library, leaving the original as it was; it spends credits, so poll get_run with the returned pipelineId and runId.

add_voiceover

ChatGPT
Speak a script over a video or a picture the account already has, in one render: the voice is generated from the script, in the language it is written in, and laid over the file with its own sound ducked under the voice. Fit the script to a video (about 2.5 words a second): its last frame holds up to 3 seconds so the voice can finish, and a script that reads longer than that past its end is refused with nothing charged; a picture holds for as long as the voice. A music bed composed under both (musicPrompt) and captions of the words are optional. Renders on Treza in the background and saves the result as a new file in the library, leaving the original as it was: poll get_run with the returned pipelineId and runId. Free once the account has bought credits (the result carries charged: false); charged on a trial.

assemble_video

ChatGPT
Join clips the account already has into ONE finished video, in the order given, optionally over a voiceover (narrationUrl) and a music bed, which become separate tracks with the clips ducked under the voice, and with burned-in captions. The bed is a track from the library (musicUrl) or one composed for this cut from a description (musicPrompt), never both. One clip plus a track is how to put music or narration under a single video: "add music to my video" is clipUrls [that video] with a musicPrompt, and no pipeline to build. Every url must come from list_assets or a run's outputs in get_run. Stills hold 3 seconds each, or stretch so a longer voiceover plays in full; lengthSec in the result is how long the cut will run, and any warning in it should be passed on. Renders in the background: poll get_run with the returned pipelineId and runId. Free once the account has bought credits (the result carries charged: false), so never ask a paying account to top up before assembling; charged on a trial. Needs the pipelines:run and pipelines:write scopes.

cancel_run

ChatGPT
Stop a run that is still going: one run_pipeline, assemble_video or an edit tool started. Use it when the person asks to cancel, stop or kill a render, including "stop, that's wrong" about one they can see running. A render that is rendering stops once its current step finishes (status "cancelling", then "cancelled" in get_run); one still waiting to start is closed at once and costs nothing. Steps that already finished keep their output and are not refunded. Leave out runId to cancel the pipeline's newest running run. Needs the pipelines:run scope.

confirm_publish

ChatGPT
Posts a video prepared by publish_asset, with the settings the person chose in the publish panel. Called by the panel when they press Post, never by the model.

connect_channel

ChatGPT
A link the person opens to connect a YouTube channel or a TikTok account to their Treza account, so a pipeline can post there. Returns what is already connected on that platform and connectUrl. Only the person can finish it, in their own browser: give them the link, tell them the platform will ask their permission to post and that the page says when it is connected, and after they say so check list_connected_channels. The link asks them to sign in to Treza first with the Google account this connection uses, and it does not expire. When something is already connected, the link adds another, so only offer it when that is what they want.

create_from_template

ChatGPT
Copy one of Treza's ready-made templates (list_pipeline_templates describes each) into the account as a pipeline of its own. It does not run it: check the price with estimate_run_cost and tell the person, and once they accept, start it with run_pipeline, passing the person's own brief in inputs keyed by the entryNodes this returns. Needs the pipelines:write scope.

create_pipeline

ChatGPT
Create a new pipeline (as a draft) on your Treza account, from a template (templateId, see list_pipeline_templates) or with an initial node graph. Use list_node_types / get_node_type to learn the graph vocabulary: every edge names the two nodes it joins and a port on each, e.g. {"source":"music","sourceHandle":"audio","target":"sequence","targetHandle":"shots"}. A graph with error-level issues is refused with every issue listed, and nothing is saved. That includes a config key the node does not define, a value outside a field's options or range, and a model id, duration, aspect ratio or voice the chosen model does not offer: pick them from get_node_type. Drafts can be run with run_pipeline; publish_pipeline makes them invokable over the public API. To put music under a video the account already has, call assemble_video with musicPrompt instead of building a graph.

create_upload_url

ChatGPT
A one-time link to upload a local file into the media library, for a client that can run a command (Claude Code, Codex, Cursor): PUT the file to uploadUrl with the returned Content-Type (the result includes the curl command), then call import_media with url set to the returned mediaUrl. The link expires in 15 minutes and signs one content type. If you cannot run a command, do not call this: ask the person to drop the file into their Treza library in the web app and find it with list_assets. Needs the pipelines:write scope. Spends no credits.

edit_asset

ChatGPT
Run pipeline nodes over ONE video, image, or audio file the account already has and get the edited file back: captions, an upscale, background removal, lipsync, a crop, an overlay, a cutaway, a thumbnail, a trim, or any other transform in list_node_types. To put music under a video, use assemble_video with musicPrompt instead. Operations run in order, each fed the output of the one before, so "caption it and upscale it" is one call with two operations; a Transcribe stage is added wherever an operation needs a transcript. Check a node's config and ports with get_node_type first. A setting the node does not define, or a value outside what it offers, is refused with the valid ones listed. The source, and any url given as an input, must come from list_assets or a run's outputs in get_run. Renders in the background and spends credits: poll get_run with the returned pipelineId and runId. Needs the pipelines:run and pipelines:write scopes.

estimate_run_cost

ChatGPT
Estimate what one run of a pipeline will charge the credit balance (estimated provider cost × markup), which steps the money goes to (lines), and whether the current balance covers it. Estimates use the draft graph, the same one run_pipeline executes. When a video step would render the same clip for far less on Veo 3.1 Lite, cheaper names it with the run's price on it. Call this before running a pipeline you built or changed in this conversation, tell the person the price, and wait for their go-ahead before run_pipeline. Clients that show panels put the estimate in front of them with a Start render button, which sends that go-ahead as their message.

get_credit_balance

ChatGPT
Current credit balance and plan usage for this Treza account, with roughly how many typical videos it covers, and plansUrl, a page describing the credit plans to give the person when the balance runs short. Use it to budget before starting runs; estimate_run_cost says whether the balance covers one run of a given pipeline.

get_node_type

ChatGPT
Full definition of one node type: input/output ports and the config field schema needed to author a node of this type. For a model-bearing node the live model catalog comes with it, and for video-gen each model carries what a second of video costs (usdPerSecond), so compare prices before choosing one.

get_pipeline

ChatGPT
Get one pipeline: metadata plus a summary of its node graph (node ids, types, labels). Pass includeGraph to get the complete graph — every node with position and config, and every edge — which is what update_pipeline needs as a starting point. Never write a graph reconstructed from the summary: it drops configs.

get_profile

ChatGPT
Which Treza account this connection is signed in to: a stable account id, its email, and its name when it has one. Use it when the person asks which account is connected, or before acting when more than one may be.

get_run

ChatGPT
Get one run: overall status plus per-node results and output URLs. Poll this after run_pipeline, assemble_video or edit_asset until the status is no longer "running". A finished run carries outputs, what its Output nodes returned (for assemble_video and edit_asset, the finished file). While a run is still "running", nodes lists the steps that have completed so far (with their outputs) and finishedAt/durationMs are omitted.

import_media

ChatGPT
Add an image, video or audio file to the account's media library, so assemble_video and edit_asset can use it: a file the user attached in this conversation (file, where the client passes attachments), a public https link to the file itself (url), or a local file uploaded through create_upload_url (url set to its mediaUrl). Returns the library url. Putting an attached logo in the corner of a video or a picture is this, then edit_asset on the video or picture with an overlay operation whose inputs.image is the returned url and whose config.position names the corner (a picture comes back a PNG). Images up to 25 MB, audio 100 MB, video 200 MB; the type is read from the file, and anything else (SVG, PDF, a web page) is refused. When the user attached a file you cannot pass on (you see it but have no file or link to give), ask them to drop it into their Treza library at https://www.trezalabs.com/chat/assets and find it with list_assets. Needs the pipelines:write scope. Spends no credits.

list_assets

ChatGPT
Browse the account's media library: every image, video, and audio file its pipeline runs and chat generations produced, newest first. The urls it returns are the ones assemble_video and edit_asset accept, so start here when asked to cut, caption, score, or otherwise finish media the account already has. A file the user attached in the conversation is not here until import_media adds it. Clients that show panels let the person pick files from this list: the picks reach you as context naming each file by its #position in the list with its exact url, and the person then says in the chat what to do with them. Apply that to exactly those files, and do not assume picks mean joining them.

list_connected_channels

ChatGPT
The YouTube channels and TikTok accounts connected to this Treza account, with the ids a publishing node needs. A youtube-upload node needs a channelId and a tiktok-upload node needs an openId; both come from here. To connect one, call connect_channel and give the person its link.

list_node_types

ChatGPT
List the node types available for building pipeline graphs, grouped by category. Use get_node_type for a full port/config schema before wiring a node.

list_pipeline_templates

ChatGPT
Ready-made pipelines that create_pipeline can copy with templateId, so you do not have to draw a graph node by node. Each entry lists its entry nodes, the ids to key run_pipeline inputs by, and estimatedChargeUsd, what one run charges the balance as the template stands, to compare against get_credit_balance before you pick one. Clipping a long recording, file, or direct video URL into a captioned vertical clip is "video-clip-factory" (entry node "source", a File node that takes a URL); "podcast-clip-factory" pulls the newest episode from a podcast RSS feed; "campaign-clip" is for Vyro / Whop clipping briefs.

list_pipelines

ChatGPT
List the video pipelines on your Treza account, with status and a summary of recent runs.

list_runs

ChatGPT
List recent runs for a pipeline, newest first.

make_video

ChatGPT
The quickest way to make a video from a description: no template, node types or graph to wire. Picks a video model that renders the shape and length asked for (Veo 3.1 Lite unless a model is named or it cannot), prepares the render, and answers like estimate_run_cost: the price, whether the balance covers it, and a quoteId. It does NOT start the render: tell the person what it makes and the price, and once they accept, call run_pipeline with the returned pipelineId and quoteId (no inputs; the prompt is saved). Clients that show panels put the price in front of them with a Start render button. Use 9:16 for Shorts, Reels and TikTok. With maxPriceUsd, a video over it is refused with its price rather than shortened. For anything beyond one generated clip (clipping a long video, music, narration, editing a file) use a template, assemble_video or an edit tool (add_captions, trim_video, add_overlay, remove_background, upscale_video) instead. Needs the pipelines:write scope; the run needs pipelines:run.

open_library

ChatGPT
The account's media library on a page of its own, newest first, for the person to browse and pick files from. Opened from ChatGPT's sidebar or beside a conversation; only the library panel calls it.

publish_asset

ChatGPT
Prepare a post of one finished video to a connected YouTube channel or TikTok account, for the person to review and confirm. It posts nothing itself: clients that show panels put the video, the account and the post's settings in front of the person, and it goes out only when they press Post there (TikTok requires them to choose who can view it and to confirm its disclosures themselves). Call it only when the person asked to publish. The video must come from list_assets or a finished run's outputs in get_run, copied exactly; write a real title (on TikTok it is the caption, hashtags allowed). channelId picks the channel or TikTok account from list_connected_channels when more than one is connected; with none connected, call connect_channel first. A client without panels cannot post from here: build a pipeline that ends in a youtube-upload or tiktok-upload node instead. Needs the pipelines:write scope.

publish_pipeline

ChatGPT
Publish a pipeline's current draft graph as an immutable deployed version. Publishing requires a fully valid graph (no errors or warnings) and makes the pipeline invokable via the public /invoke and /chat/completions APIs.

remove_background

ChatGPT
Cut the subject out of a picture or a video the account already has and drop the background: a picture comes back as a transparent PNG, a video with the subject on black (without its sound). Renders on Treza in the background and saves the result as a new file in the library, leaving the original as it was; it spends credits, so poll get_run with the returned pipelineId and runId.

run_pipeline

ChatGPT
Start a pipeline run in the background and return its runId immediately. Video pipelines take minutes; poll get_run for progress. Runs consume account credits. inputs is keyed by entry node id (get_pipeline lists them as entryNodes): a Text Input node takes text, an HTTP Payload node takes a JSON value, and a File node takes a URL that overrides the file placed on the canvas, so a clipping pipeline can be pointed at a new source video per run without editing the graph. An entry node left out runs with the value saved on the canvas; one with nothing saved is refused, so pass it (or "" to leave it blank on purpose), and ask the user what it should say when the request does not tell you. A key that names no entry node is refused before anything runs or is charged. Before running a pipeline you built or changed in this conversation, call estimate_run_cost and wait for the person to accept the price. Every run renders every node again, so to add music, narration or captions to a video an earlier run made, pass its url from get_run outputs to assemble_video (musicPrompt composes a bed) or edit_asset rather than editing the pipeline and running it again.

set_schedule_paused

ChatGPT
Pause or resume a published pipeline's schedule. Pausing flips the flag the cron runner checks without touching the published graph, so the deployed snapshot stays an honest record of what was published. Resuming re-anchors the schedule to now, so it waits for the next real slot instead of replaying slots missed while paused. Requires the pipelines:write scope. Schedules themselves are authored as a schedule-trigger node (see get_node_type) and armed by publish_pipeline.

trim_video

ChatGPT
Cut one stretch out of a video or audio file the account already has, from startSec to endSec, and optionally reframe a video to vertical 9:16 for Shorts, Reels and TikTok. Renders on Treza in the background and saves the result as a new file in the library, leaving the original as it was; it spends credits, so poll get_run with the returned pipelineId and runId.

update_pipeline

ChatGPT
Update a pipeline: rename it, change its description, or replace its node graph. For a graph change, read the current one with get_pipeline includeGraph and send the whole graph back, nodes and edges together, every edge naming the two nodes it joins and a port on each, e.g. {"source":"music","sourceHandle":"audio","target":"sequence","targetHandle":"shots"}. A graph with error-level issues is refused with every issue listed, and nothing is saved; settings you change are checked against get_node_type and the live model catalog the same way create_pipeline checks them. To add music, narration or captions to a video a run already made, pass its url from get_run outputs to assemble_video or edit_asset instead: a changed pipeline renders every node again when it runs, the video included, and charges for it.

upscale_video

ChatGPT
Raise a video the account already has to a higher resolution, 1080p unless 2k or 4k is asked for; 2k costs twice the 1080p price and 4k four times. Renders on Treza in the background and saves the result as a new file in the library, leaving the original as it was; it spends credits, so poll get_run with the returned pipelineId and runId.

Capabilities

WritesInteractive

Example Prompts

Click any prompt to copy it.

Similar Apps