Agent-planned videos
You direct; Cliptude executes. Cliptude writes the narration (or voices your script, or aligns your audio), gives you every sentence with word timings, renders exactly the plan you lock, sources the media you asked for, and tells you afterwards what it used and where it had to fall back. Its own planner does not run: it adds, moves and drops nothing.
Formats: faceless_documentary, faceless_top_10, avatar_video, vector_explainer. Not available in the desktop app yet.
Flow
- Template.
list_templates; orget_template_options+list_voices+create_template. The template fixes the voice, language, aspect ratio and duration bucket. (Theme, colours, style and music can be set in the plan.) The template'sgeneration_modeldecides whether footage can move: Cinder (high) sources still pictures only, soprefer: "video"becomes a still there; Caldera (pro) sources video clips.check_planwarnsvideo_needs_caldera. - Start.
create_plan_job/cliptude plan-jobwith exactly one of:script(your narration, voiced as is),prompt(a brief; Cliptude writes the narration — never the bare title), orvoiceover_path(audio you already have). Needs the full website price in credits; charges only the narration now. Names, places and borrowed words the voice may get wrong go inpronunciations(ElevenLabs voices):[{"word": "Gmay", "alias": "guh-MAY"}]or{"word", "phoneme", "alphabet": "ipa"}, on the template or the job (CLI--pronunciations file.json). Keep the real spelling in the script: captions, phrases and searches use it. - Wait. Poll
get_jobuntilstatusisplan_ready(narration_urlis set). Plans expire after 14 days. - Read.
get_narration:sentences[](id,start,end,text,words[]),narration_digest,suggested_chapters,template(theme, switched-off graphics, andlook: the template's style pack, colours and music now),pricing,narration_audio(urlto listen to;download= the API path, CLIcliptude download-voiceover <job>). Listen to the hard words before you lock: the sentence text is a transcript of the audio, so a misspoken name often shows there as a different word. A wrong word needs a new plan job (new narration) withpronunciations; locking cannot change the voice. - Choose graphics.
get_kind_catalog(format, compact=true)for one line per graphic, thenget_kind_catalog(types=[...])for the full entries you will use: description (when to use / not for),prop_schema(required props),media_slots, durations, cap, and a preview video URL. - Write the plan (schema below), then
check_planand fix every error untilvalidis true. Checks are free, use no LLM, 60/minute. Read the warnings and the scorecard; they are advice, not blockers. - Lock.
lock_planstores it and applies itslook. You can lock again to replace it until you continue, and again after production to revise it (step 10). - Produce.
continue_job, then pollget_jobuntilstatusisready_for_edit. Cliptude has voiced, sourced and built the video; nothing is rendered yet. The job is charged here, once. - Review the build, not a render.
get_plan_reviewreturns every picture or clip in order (beat, time, the sentence under it, what you asked for, what was used, a link to the file) and every graphic (time on screen and the props it will be drawn with, or why it is missing).get_plan_reportadds every media request's fallback. Look at the media links: a search can return a wrong picture that still counts as found.used.sourceis one ofyour URL,stock footage,stock photo,web video,web image,AI still,reused(a file another beat also shows),text card(a last-resort plate) orkept(a file you put back withmedia.keep); both endpoints list them insource_labels. Each used file also carrieskeep, a 12-character id (picture_keepon a graphic). - Revise on the same job if anything is wrong:
check_planandlock_plana revised plan (same narration,get_narrationstill works), thencontinue_jobagain. Cliptude rebuilds from the new plan, reuses every picture or clip whose request did not change, and charges nothing more. Repeat 9–10 as needed. - Render once.
open_editor_projectfor the job, thenrender_projectfor the final MP4.
CLI: cliptude plan-job, narration, catalog --compact, catalog --types a,b, plan-check <job> plan.json,
plan-lock <job> plan.json, continue <job>, plan-get, plan-review, plan-report, upload-media <job> <path>, editor <job>,
render <project>.
Render-only (you bring everything)
When the user already has the narration and you can find every picture and clip yourself, create the plan job with
render_only: true (CLI plan-job --render-only --voiceover narration.mp3, or --voiceover-url https://…). Cliptude then searches, writes, voices
and generates nothing: it aligns your voiceover, builds the plan you lock and renders it, for a flat
15 credits per minute (estimate_credits(render_only=true, output="plan", voiceover_seconds=…) quotes it).
- Needs
output: "plan"and your own voiceover.check_planthen refuses any searched media: every beat and every graphic picture slot is yoururlorkeep(render_only_needs_media), with nofallback_query; a plate is{"beat": true}or yoururl; and there are nopresenter_windows(no avatar render;render_only_no_avatar). - Getting your files to Cliptude. Upload them; nothing has to be public. From any host, remote MCP included
(claude.ai, ChatGPT, any agent on
mcp.cliptude.com) as long as you can runcurl:- Narration, before the job:
start_voiceover_upload(filename, size)→ PUT each part's bytes to its signedurl(tail -c +$((offset+1)) FILE | head -c LENGTH | curl -sf -X PUT --data-binary @- "URL", orcurl -sf -X PUT --upload-file FILE "URL"for one part) →finish_voiceover_upload(key, upload_id)→ pass itsvoiceover_urltocreate_plan_job(render_only=true, …)within the hour. - Pictures and clips, on the job:
start_media_upload(job, filename, size)→ PUT the parts the same way →finish_media_upload(job, key, upload_id)→ use itskeepid. With the CLI or a local MCP server the same uploads are one call:voiceover_path/cliptude plan-job --voiceover, andupload_plan_media(job, path)/cliptude upload-media. A public https link still works asvoiceover_urlor a mediaurl. Trim long clips withstart_s/end_s.
- Narration, before the job:
- A board's picture slot draws one image: a clip given there is shown as one frame of it.
- If a file cannot be loaded at build time the job fails and says which (
RenderOnlyMediaMissing), instead of quietly searching. Boards left without a picture hold the footage under them; nothing is generated. - Graphics, overlays, transitions, sound effects and library music work as in any plan; they cost nothing extra.
- A beat with your own clip or capture holds still unless you set
camera. - A full-frame or plate-capable board shows the picture of the beat under it (from slightly before it starts) as its see-through plate. Don't put a board over a screen capture or any picture with text in it: give boards a clean picture underneath.
- A beat longer than what is left of its clip (
end_s-start_s) holds the clip's last frame. Split long sentences into several beats, or use longer clips. - Plan each file once. A render-only video needs a lot of distinct footage, about one clip per 4-6 s of narration; the same stock clips over and over read as cheap.
- Your voiceover is the soundtrack: the clips you upload play muted.
- Flow:
create_plan_job(render_only=true, voiceover_url=…)(orvoiceover_path=…locally) →get_narration→ find and link (or upload) your media → write the plan →check_plan→lock_plan→continue_job→ review → render.
Finding your own media (render-only)
Cliptude searches for nothing on these jobs, so the pictures and clips come from you, and you must be allowed to use each one in a published video: Cliptude stores and renders what you send. Good sources, most usable without asking:
- Free stock with an API key you create: Pexels (
api.pexels.com, photos and video) and Pixabay (pixabay.com/api, photos and video). Both allow commercial use without credit; read their license for identifiable people, brands and logos (no implied endorsement, no reselling an unaltered file). - Stock the user subscribes to: Storyblocks, Vecteezy, Shutterstock, Getty Images / iStock, Adobe Stock, Envato Elements, Pond5, Unsplash+ and Artgrid. Use their API or downloads with the user's own key or account, within that subscription's license (some files are editorial-only, and some plans exclude broadcast or ads).
- Public domain and open archives: NASA, US federal government works (most are public domain), the Library of Congress, the US National Archives, Wikimedia Commons and the Internet Archive. On Commons and the Archive, check each file's own license: CC BY needs a credit line, and "no known restrictions" is not the same as public domain.
- Short excerpts under fair use from YouTube and other video sites: a few seconds the narration is actually about (commenting on it, reporting on it, analysing it), credited on screen or in the description. Never a whole video, long stretches of one creator's work, or a clip used only as background decoration; avoid music videos, films and sports broadcasts beyond a brief quoted moment. Fair use is judged case by case, and downloading is subject to each platform's terms: the user decides and is responsible.
- Download services such as VidKraken and Oxylabs (its YouTube Downloader) fetch a video file for you with the user's own account. They give no rights to what they fetch (Oxylabs says so outright), so use them only for content the user may use: public domain, Creative Commons, the user's own or licensed footage, and the fair-use excerpts above.
- The user's own material: their footage, photos, screen recordings and documents.
- Pictures you generate with an image or video model the user has a key for.
If a key is needed, ask the user to add it to your environment;
sourcing.env.examplenext to this skill lists the ones the sources above use. Never put a key in a plan.
Using the user's own browser. When your host can drive the user's Chrome (the Claude in Chrome extension, or Chrome
DevTools / remote debugging through an MCP server such as chrome-devtools-mcp), you can source the way the user would:
search Storyblocks, Shutterstock, Getty or another site they are signed in to, download the licensed file, find a
public-domain photo on an archive page, or capture a frame or screenshot the narration is about. Ask the user before you
start, work only in accounts and sites they have access to, take each file the site's own way (its download button or
API, within that license), and stop at a paywall, CAPTCHA or sign-in you do not have rather than getting around it. Then
send each file to Cliptude: upload it (upload_plan_media / cliptude upload-media) or, on a remote host, give a public
link (url). Note in your summary where each picture came from, so the user can credit it.
Pricing
The total for the job equals the website price for the same video. Render-only jobs: 15 credits per minute flat. Re-rendering a finished video costs 10% of the job's credits, and never less than 6 credits per minute of timeline. The narration (charged per minute by voice — 18 credits/min with
ElevenLabs, 4 with Voicetory — plus the script at cost, or max(2, minutes) credits to align an uploaded voiceover) is charged when it is ready and is kept if you abandon the
job. The rest is charged when the video completes. check_plan returns cost.due_at_continue. Avatar Video prices
the presenter seconds you plan.
Plan schema (cliptude.plan/v1)
{
"version": "cliptude.plan/v1",
"narration_digest": "sha1:… (copy from get_narration)",
"look": {
"visual_theme": "history",
"faceless_documentary_style": "investigative",
"faceless_documentary_primary": "#F5F0E6",
"faceless_documentary_secondary": "#C81828",
"background_music_mode": "library",
"background_music_library_file": "<a filename from get_template_options>",
"background_music_volume": 0.3,
"enable_sound_effects": true,
"enable_transitions": true,
"excluded_transition_kinds": []
},
"sense": {"topic": "TSMC and Taiwan", "must_include": ["TSMC"], "must_avoid": ["TSMC stock ticker"],
"people": ["Morris Chang"], "places": ["Hsinchu"]},
"chapters": [{"title": "The bet", "from_sentence": 0, "to_sentence": 21}],
"beats": [
{"id": "b0", "sentence_id": 0, "media": {"query": "Hsinchu Science Park aerial", "alts": ["TSMC fab exterior"],
"negatives": ["stock chart"], "prefer": "video", "query_kind": "place",
"intent": "Aerial view of Hsinchu Science Park with TSMC fab buildings, Taiwan, 1990s", "era": "1990s"},
"camera": "zoom_in", "treatment": "grain"},
{"id": "b1", "sentence_id": 3, "phrase": "Morris Chang", "media": {"person": "Morris Chang", "prefer": "image"},
"transition_in": "film-burn", "transition_sound": "el_join_film_burn",
"reveal_next": "crash_zoom", "reveal_sound": "cue_deep_impact"},
{"id": "b2", "sentence_id": 5, "media": {"url": "https://example.org/fab.jpg", "fallback_query": "TSMC cleanroom"}},
{"id": "b3", "sentence_id": 9, "media": {"auto": true}, "transition_in": "none"}
],
"graphics": [
{"id": "g1", "sentence_id": 0, "phrase": "1987,", "kind": "giant_centered_year", "props": {"text": "1987"}},
{"id": "g2", "sentence_id": 3, "phrase": "Morris Chang", "animation_type": "person_cutout_headline", "dur": 5.6,
"props": {"personName": "Morris Chang", "personTitle": "Founder, TSMC", "accentColor": "#C81828"},
"media": [{"slot": "personImageQuery", "person": "Morris Chang"}], "sound": "el_gap_cutout_rise", "volume": 40,
"intent": "introduce the founder"},
{"id": "g3", "sentence_id": 12, "kind": "checklist_sticky_card_right",
"props": {"text": "Why nobody copies it", "listItems": ["EUV machines", "Process know-how", "Customer trust"]}}
],
"beat_fx": [{"sentence_id": 30, "phrase": "collapsed", "kind": "vignette", "opacity": 0.5}],
"sfx": [{"id": "s1", "sentence_id": 30, "phrase": "collapsed", "sound": "cue_low_boom", "volume": 55, "offset_s": -0.1}],
"ranked_items": [{"rank": 10, "label": "Intel", "sentence_id": 2, "dur": 4.0}],
"presenter_windows": [{"from_sentence": 0, "to_sentence": 2, "layout": "full_screen"},
{"from_sentence": 40, "to_sentence": 41, "layout": "split_left",
"collage_media": [{"query": "TSMC Arizona fab"}]}]
}
Timing
- Every item names a
sentence_id. Addphrase(words from that sentence, punctuation and case ignored; Chinese, Japanese and Thai match on characters) to start exactly on that word; without it the item starts with the sentence. duris seconds (default: the catalog's typical hold). Minimum 1 s. Cliptude only snaps to spoken words.- Beats tile the narration: each beat lasts until the next one starts; the first starts at 0. Every beat ≥ 1 s, in narration order.
Graphics
- Give exactly one of
kind(a planner kind or an overlay style; Cliptude picks the concrete type) oranimation_type(full control; use"animation_type": "b_roll_text_overlay", "style": "<overlay style>"for an overlay text style). - Layout comes from the type:
boardreplaces the picture (full frame; two boards may not overlap by 0.3 s or more),overlaysits on the footage. An overlay cannot sit on a board: a board hides the footage, socheck_planrefuses an overlay that overlaps one. - People: a person board needs a real portrait that passes Cliptude's visual check (a face, the right person).
Cliptude never invents a face for a real person, so a board whose portrait is not found is dropped (the report
gives the reason). For anyone less famous, give the slot a
urlto a portrait you checked, with afallback_query; with no checked picture, use a name card (callout_overlay,title_name_card_overlay) over a scene picture instead. A fictional or animated character is not a person: search it withquery("Woody Toy Story character"). Write names on boards in their correct spelling even where the narration's transcript mangles them. props: all on-screen text and data, per the type'sprop_schema(write it in the narration language). Overlay styles taketext(+secondaryText,listItems,series/chartKindfor the holographic chart).- Colours per graphic: hex
accentColor,textColor,backgroundColor,bgColor,secondaryColor,highlightColor,primaryColoroverride the template palette for that graphic only. sound: a sound id from the catalog'ssounds,"none"(silent) or"auto"(Cliptude's sound, the default).volume: 0–100 for it. On a premium or speaker board it also sets the board's own timed cues: 100 plays them as designed, 50 about 6 dB quieter, 25 about 12 dB quieter, 0 silent. Leave it unset for the designed level.media: one entry per picture slot from the catalog'smedia_slots:{"slot": "<slot>", "query": "…"},{"slot": …, "person": "Full Name"}(portrait search; only on portrait slots such asportraitorpersonImageQuery: animagesslot takesqueryorurl), or{"slot": …, "url": "https://…", "fallback_query": "…"}. A board with no picture found gets an AI still and the report says so. A media item may also carryintent(one sentence describing the picture) andera, as on beats. Aurlcan be any public http(s) picture or clip; Cliptude downloads and keeps a copy.- Rule: fill every picture slot. For each graphic, read its
media_slotsand give each slot as many pictures as itsmin(a two-picture comparison takes two).check_planrefuses a plan that gives fewer (missing_media). A board with picture slots but nomedia(and noplate) shows whatever picture is under its sentence, which is rarely the one it needs:check_planwarns (borrowed_picture, naming that beat). Give it its own picture unless that beat's picture is what you want there. After the build,get_plan_reviewshowspictures: "n of m"on each such graphic; anything below m is dropped from the video, never drawn empty.
Plates under boards
- Types with
plate_capable: truein the catalog (charts, stat cards, lists, timelines, article and social cards) read well as an inset card: the board shrinks to ~80% with a shadow over a dimmed, slowly pushing-in picture, so the viewer keeps seeing real footage or a real document. By default that picture is the beat's own footage under the board. plateon such a graphic picks the picture instead (exactly one of):{"beat": true}(the beat's footage, the default made explicit),{"query": "TSMC 2023 annual report revenue page", "kind": "document"}(a real primary document: report, filing, law, official page;"kind": "photo", the default, searches for a photograph),{"url": "https://…"}(a picture or clip you checked). A plate that cannot be found falls back to the beat's footage (a document query first tries a photo search); the report'sslot: "plate"entry says what was used.check_planrefusesplateon a type that is not plate-capable, or with an unknown field, more than one source, akindother than document/photo, or a bad URL.- When full-frame boards cover more than ~65% of the runtime,
check_planwarns (board_share_high) and names the boards that can sit over a picture; plate them, shorten them or turn some into overlays.
Premium boards
- Catalog entries with
premium: true(about 190, mostly full-frame boards: maps, data charts, comparisons, lists, timelines, document and article boards) are the newest designs, ported from a premium motion library.get_kind_catalog(premium=true)/cliptude catalog --premiumlists only them. Place one with"animation_type": "<type>"; check itsprop_schemaandmedia_slotslike any other type. - Each premium board carries its own timed sound cues (several hits matched to its motion). Leave its
soundunset (or"auto") to keep them, even when the plan listssfx. Settingsoundreplaces them with your one sound and"none"silences it. Listing anysfxmutes the sounds Cliptude would add on its own, not your graphics' cues. - A premium board's
prop_schemalists the fields its component actually draws (e.g.multi_pie_chart:pie1Value/pie1Label…,comparison_bar_chart:titleText,firstBarLabel,firstBarValue,firstBarText…,five_step_timeline:firstStepText…fifthStepText). Fill those data fields from the narration, not just aheadline: most premium boards never drawheadline, and any required field left empty renders the component's sample data.check_planrefuses a premium board missing a required field (missing_prop, with the real fields in the hint). Each field'sexamplesshows the sample it replaces; ranges andenums are in the schema. - Pictures are never props: ask for them in
media_slots(step images, portraits, cut-outs fill in order).
A board for every fact (how the best documentaries are planned)
The strongest faceless documentaries put one premium board on each sentence that states a fact, and let footage carry the sentences between. A 9.6-minute reference video ran 50 boards (about 5 a minute, one every ~10 s, each 4-8 s, median 6 s) over ~56% of its runtime, with almost no text overlays. Plan the same way:
-
Pick the board from the kind of fact the sentence states, then vary the design within that kind:
The sentence states… Board (premium) a percentage or share circle_chart_overlay,percentage_bar_chart,text_and_image_progress_overlaya money amount large_number_text_overlay(numberup to 999.99 +wordsuch as "MILLION" +currency)a big count number_count_overlay,icon_count_overlaytwo values or two sides comparison_bar_chart,vertical_bar_chart_comparison,double_image_comparison,splitscreen_comparisona trend or market share over time comparison_line_chart_overlay,line_chart_callout,chart_race_comparisona country, city or region country_map_icon_popup,country_map,country_border_highlight,multi_country_highlight_texta named person callout_overlay(NAME + role),portrait_card,character_introduction_splita company or brand logo_reveal_overlay,logoa date or year date_overlay,day_month_year_text_overlay,year_text_overlaya list of things bullet_point_overlay,icon_and3_bulletpoints,text_lista sequence of events five_step_timeline,timeline_of_eventsa headline, report or document image_article,headline_article_slide_upa new chapter chapter_title_scene,chapter_title(4-5 s)a preview / promise of what the video covers ("by the end of this video…") filmstrip_panel_layout(leavemediaempty: it previews later footage itself)a call to subscribe ("subscribe for more…", "hit the bell") the subscribe_ctaoverlay (kind: "subscribe_cta",textsuch as "SUBSCRIBE", 4-5 s); outside a full-screen presenter window -
Give every board its own picture. Most premium boards take an optional
imagespicture behind or beside the data; fill it with a search for this sentence's subject, never the beat's footage by default. Write the query as subject + era + medium:"Morris Chang Texas Instruments 1980s archival portrait photograph","TSMC Fab 1 Hsinchu 1987 archival photo","Intel 1987 annual report cover scan". A board with no picture of its own is the most common reason a premium board looks empty (borrowed_picture,empty_board). -
Board text is a label, not a sentence: 2-4 words, the way a title card reads (
"ADVANCED CHIPS", callout"MORRIS CHANG"with role"TI EXEC", versus"CHIP DESIGN"/"OWN A FAB"). The narration says the rest. Quote boards (character_quote,quote_box_graphic,quote_and_transparent_portrait, articles) are the exception: they show the quoted words as spoken, andnarration_as_textdoes not flag them. -
Two facts in one sentence can take two boards back to back (a person card, then that company's logo board).
-
Open on footage. The hook (first ~15-20 s) is fast cuts, 1.5-4 s a picture; the first board lands on the first hard fact. The scorecard still wants a first graphic by ~6 s: when the opening states no fact, put a short title overlay or name card there.
-
Join chapters and big turns with a real transition (
film-burn,glitch,zoom,sliding-panor a template-allowed one), about one every 20 s, and leave the other cuts onauto. Silence about half of those joins ("transition_sound": "none") so the whooshes do not repeat on every cut. A join needs a visible cut, so put it on a beat that starts in footage, not under a board (join_under_board): with boards on half the runtime, that is the beat right after a board ends, or a footage stretch between boards (a mid-sentence beat is fine). -
Let the boards make the sound. The reference video had no separate effects track: its sound was each board's own cues and the joins, over one music bed. Leave premium boards'
soundunset and set theirvolumeto 30-50 (0 on a quiet, serious line): that plays every one of the board's own timed cues (its whooshes, pops and hits together) about 10-6 dB under their designed level, which keeps them under the voice;volumenever makes a cue louder than designed. Addsfxhits only for the two or three biggest moments (a number landing, a verdict). -
Text overlays are only for a quote over the footage, at most one graphic in ten. Names, dates, years and money the narration states go on boards (name card, date or year board, number board), not on tags or highlights: they count for the coverage targets too.
check_planwarnstoo_many_overlayswhen overlays are more than 10% of graphics, andfew_board_kindsunder about 16 different board designs per 10 minutes.
Speaker boards (Avatar Video and Talking Head)
- Catalog entries with
speaker: true(type: "speaker", about 60, namedtalking_head_*plusdual_metric_talking_headandframework_mind_map_talking_head) keep the presenter on screen and animate a graphic with them: a bar chart, numbered list, receipt, calendar, mind map, chapter title, card collage and more. The catalog lists them only for these two formats; elsewherecheck_planrefuses one (wrong_format). - Put each one inside a full-screen presenter window (start and end within it); Cliptude plays that window's
presenter clip in the board. Outside one, or in a split window,
check_planrefuses it (speaker_outside_presenter). They are the exception to "full-screen windows may not cover graphics". - Fill the fields in its
prop_schema, not aheadline:talking_head_bar_chartdrawstitleandbars([{"value": 0-100, "icon": "chart"}]),talking_head_numbered_listdrawsitems,talking_head_receipt_breakdowndrawsitemsas[{"label", "price"}]. Lists are JSON arrays of the item shape the schema shows. - Use them to keep a presenter window from being one long talking head: about one per presenter window, on the
sentence that states the number, list or step it shows. A card collage, browser window or feed board also takes
pictures through its
media_slots; the presenter clip is never one of them.
Beat media
Give every searched beat 1-2 alts (no_alts warns otherwise).
One of: query (+ alts, negatives, query_kind such as object, place or person, prefer: video|image), person,
url (+ fallback_query; public http(s) images ≤15 MB or videos ≤300 MB), auto: true (Cliptude writes the
query), or keep (+ fallback_query): the keep id get_plan_review or get_plan_report shows for a file an
earlier build of this job used. A kept file is never searched again, so change a beat's request to try for something
better and, if the new pick is worse, put the old one back with {"keep": "<id>"}. Revising keeps an unchanged
request's file only from the last build; keep reaches any build of the job. Picture slots of graphics take keep
wherever they take url.
- Your own files. A picture or clip you found as a page (not a direct file link) or have on disk: download it, then
upload_plan_media(job_id, path)(CLIcliptude upload-media <job> <path>; JPG/PNG/WEBP/GIF up to 15 MB, MP4/MOV/ WEBM/M4V up to 300 MB). It goes straight to Cliptude's storage on signed URLs (no storage keys needed), is checked to be a real picture or video, and returns{"keep": "<id>"}to use as above. Only send media you may use. - Part of a clip. On a beat whose media is a
urlorkeepclip,start_sandend_s(seconds into the clip) play only that part:{"keep": "3f9a1c0d2b7e", "start_s": 72, "end_s": 78}.check_planrefuses them on a searched beat (invalid_trim); the report shows the cut, orfailedif the whole clip played instead. Your query is searched verbatim first, then youralts; if nothing usable is found Cliptude uses its normal fallbacks (an AI still or a plate), and the report shows it. The sameurlmay sit on several beats: each one plays that file.
Give every beat an intent too (optional, recommended; up to 300 characters): one concrete sentence describing the
picture you want — the subject, what is visible, the era and the place, plus the medium when it matters (news
footage, archival photo, document). Add era ("1999", "1980s", "present-day") when the narration is dated.
Why: Cliptude's media library is searched by meaning, not by keywords, so a sentence that says what a camera saw
finds the right picture, and era keeps a 1999 line from getting a 2020 photo. Keywords still go in query/alts:
the intent is used beside them and never changes them.
- Good:
"Taiwan Chi-Chi earthquake 1999 utility crews restoring power at night, news footage","Morris Chang speaking at a TSMC press conference, Hsinchu, late 1980s, archival photo","Rows of ASML EUV lithography machines inside a TSMC fab cleanroom, present-day". - Bad:
"the earthquake showed how fragile the supply chain is"(an argument, not a picture),"TSMC"(a keyword),"cinematic, 4k, dramatic lighting"(style words; nothing to find). auto: truebeats take anintenttoo: Cliptude writes the query and searches the library with your sentence.camera:zoom_in, zoom_out, zoom_in_left, zoom_in_right, pan_left, pan_right, tilt_left, tilt_right, slant_left, slant_right, inset_wiggle, or a look such asbokeh_overlay,retro_film_overlay,smoke_fog_overlay(an invalid value's error hint lists them all).treatment:kenBurns, grain, flicker8mm, grayscaleIn, paper, dust, lightLeak, godRays, smoke, lensFlare, scanLine, cctv, colorChange, footageReveal, or"none".- A beat gets a treatment only when it sets
treatment; Cliptude adds none (no grain, smoke, light leak or colour change of its own). The theme's colour grade still applies to every picture. cameraunset: a beat that plays yoururlor a file you uploaded (keepfromupload_plan_media) holds still (a finished clip, capture or screenshot is shown as sent); any other beat, a kept file an earlier build found included, gets a plain slow move (zoom or pan, never an overlay or frame)."camera": "none"holds any beat still.
Cuts and reveals
transition_inon a beat is the join on the cut into it: aslugfrom the catalog'stransitions(e.g.fade,film-burn,glitch,zoom,whip-pan,wipe-left,iris,paper-tear),"none"for a hard cut, or"auto"(the default: Cliptude decides, at about one join per 10–15 s). Not on the first beat.transition_sound(a sound id or"none") replaces the join's own sound; it needs atransition_inslug.reveal_nexton a beat joins it and the next beat into one moving A→B shot, styled by astylefrom the catalog'sreveal_styles(whip_pan,crash_zoom,split_wipe,modern_film_burn, …; each has a preview video). Both beats must end up as stills, so give bothmedia.prefer: "image"; a pair that sources a clip is skipped and the report says so. The next beat cannot also have atransition_inor its ownreveal_next.reveal_soundreplaces the reveal's sound. In a plan, Cliptude adds no reveals of its own.look.enable_transitions: falseor a template that excludes a transition makes those slugs errors.
Sound effects
- Ids come from the catalog's
sounds: about 285 entries, each with acategory(transition, whoosh, graphic, ui, click, marker, typing, shutter, impact, boom, glitch, ambient), adescription, aduration_sand apreviewlink to listen to (the compact catalog keeps only id, category and description). - Per graphic
sound/volume, per cuttransition_sound, per revealreveal_sound(see above), and free hits insfx:{sound, sentence_id, phrase?, offset_s? (-2 to 5 s from the phrase), volume? (0–100, default 50)}. - When
sfxlists anything, only the sounds the plan names play. Graphics, cuts and reveals without a sound of their own are silent, and Cliptude adds no cue hits. Leavesfxout to keep Cliptude's sound design and override it item by item. look.enable_sound_effects: falseturns every effect off; any sound other than"none"is then an error. Music is separate (look.background_music_*).
Look
Same names and values as create_template (see get_template_options): themes standard, crime, history, modern, minimalist, sports; styles default, news, yellow, maroon, investigative, dramatic; primary = headline text colour
over footage (keep it light), secondary = accent. The voice cannot change here (the narration is recorded).
Leave out any field you are happy with: get_narration's template.look shows what the template has now, and a
look field you set replaces it for this video.
Format-specific
ranked_items(Top 10 only): one title per entry, unique ranks, titles may not overlap each other or a board. Anchor each title on the sentence (orphrase) that opens its entry;duris 3-8 s (default 4). Number the ranks as the narration counts them. Titles are not graphics: they do not count toward boards, coverage or joins.ranked_pacingwarns when titles are under 3 or over 8 s, or 40-95 s apart; when the narration's own entries are shorter than 40 s, leave that warning. An entry that opens on its year or date ("In 1969, ...") puts the year board right after the title: coverage counts a board anywhere from 1 s before that sentence to 4 s after it ends.presenter_windows(Avatar Video only):full_screen,split_leftorsplit_right; no overlaps; total seconds within the template's cap (intro-only templates: one opening window). Full-screen windows may not cover graphics, except speaker boards, which must sit inside one. A split window'scollage_mediais up to three searched pictures beside the presenter,{"query": "…", "intent": "…"}each (nourlorkeepthere yet); without it Cliptude picks the pictures from the narration. Each window costs its sentences plus ~0.7 s of padding.- Vector Explainer: every picture beat is drawn as a flat vector illustration (the template's or job's character,
colour or black-and-white style). Nothing is searched: write
media.intentas what to draw (subject, action, setting) and keepquerya short label;personnames are drawn as stylised figures. Alts and eras are not needed. Boards that show photos (any catalog entry with media slots) are not listed for this format andcheck_planrefuses them (excluded_type).get_narrationreturns the settings undertemplate.vector. Motion comes fromvector_reveal_mode(template orcreate_plan_job):"none"draws stills that the beat'scameramoves (zoom_in,pan_left, …);"video"animates every picture beat as an AI clip, andmedia.prefer: "image"keeps one beat still. In stills modeprefer: "video"does nothing (check_planwarnsvector_stills_mode). Drawn beats get camera moves only; settreatmenton a beat to add grain, light leak etc. Boards are drawn full screen, never as an inset card on a drawing: leaveplateout (check_planwarnsvector_beat_plate), and a beat that full-screen boards cover from start to end gets no drawing of its own. - Vector Explainer, render-only:
render_onlyworks as for other formats. Bring every picture (url/keep, ideally flat vector art in one style) and the voiceover; nothing is drawn or animated whatevervector_reveal_modesays, the vector look (tone pack, theme, camera-only treatment) still applies, and since the pictures are yours, photo boards are allowed again. - A-roll is off for agent plans.
What check_plan rejects
Unknown version, stale narration_digest (409: fetch the narration again), unknown kind/type/style, graphics switched
off or excluded by the template, graphics the theme does not use, unknown sentence or a phrase not in its sentence
(the hint shows the sentence), missing or invalid props (including chart data the renderer needs), a calendar year
on a counter (use giant_centered_year), an overlay on a board, a transition_in on a beat whose start a board
covers (there is no cut to see), bad media (unknown slot, not exactly one source, private or non-http URL),
overlapping boards, bad beats, radial_wash on history/minimalist/sports, unknown camera/treatment, invalid look
values or colours, ranked/presenter items on the wrong format or overlapping, unknown transition slugs, reveal styles
or sound ids, a transition on the first beat or inside a reveal, a reveal chained onto a reveal, sounds while sound
effects are off, and transitions while transitions are off or excluded.
Scorecard targets (from reference videos; advisory)
Graphics/min ≈ 4.9 (3.6–6.7); ~55% of runtime covered (50–60%); ≥80% of graphics starting on a sentence start; first graphic
≤ 6 s; ≥ 9 visuals in the first minute; longest gap ≲ 30 s; no kind more than twice in a row; ≥ 16 distinct kinds per
10 minutes; at least ~70% of graphics are premium boards (all boards is fine), covering ~55% of the runtime
(board_share_high over 65%; a plated board, an inset over a picture, does not count toward it); every spoken date, ~50% of years and ~60% of money
figures on screen. A date, year or amount counts as shown when any board on screen from 1 s before its sentence to
4 s after the sentence ends writes it in any of its text or number fields. Warnings also flag numbers on cards not
spoken within 5 s of the card (number_not_spoken; digits read one by one, like "nine eight eight", are not
matched) and sample text left in props. The sentence-start target gives way where a rank title or an earlier
board holds the sentence start: start the board on a phrase.
Pictures: about one beat per sentence, each on screen 4–6 s on average (avg_picture_s); slow_pictures warns
above 6 s on average or for any picture held over 12 s, naming the beats to split. few_graphics warns below 3.6
graphics a minute and busy_graphics above 7, few_boards when boards are under 40% of graphics, boards_too_short when boards hold under 4 s
on the median, low_board_share when boards cover under 45% of the runtime, and few_joins under one planned join
per 28 s (target one about every 20 s; videos over 3 minutes).
What Cliptude still decides
Joins on cuts you leave at "auto", the direction and timing details inside a reveal (a locked plan gets no
collages or reveals you did not ask for), where a searched picture or clip comes from (you choose video vs still), the
plain camera move on a searched beat without a camera, the
voice, caption styling, and fallbacks when your media cannot be found. The report (get_plan_report) lists every
graphic, transition, reveal and free sound effect you planned against what was rendered, with the reason for anything
dropped.
