Kinetic Film
Short animated type films for a site: big words that punch in on the beat, lines that get struck through, a number that counts up and an end card with name, tagline and web address, in the site's own colours. Call schema once for the format and an example, write a spec, check it with validate, then save it under a film_key. save and get return embed_html, a block to place in any page (for example the homepage hero, with create_page or patch_page), and preview_html, a complete page you can create as its own page (for example films/<film_key>.html) so the owner can watch it. The film is stored inline in that HTML and plays by itself on the page; after a change, save again and replace the block on the page. Every save is kept as a version (versions, restore). Available on every plan. On paid plans the owner can also have a film rendered to an mp4 video with a poster image, for social media or a <video> on the site, paid in credits: render_quote shows the price, render starts it, render_status follows it until the video URL is there.
Try it with your AI assistant
Once WebsitePublisher is connected to your AI assistant, paste one of these into the chat.
@WebsitePublisher make a 10-second animated promo film for the top of my homepage@WebsitePublisher turn my three main selling points into a kinetic type film in my brand colours@WebsitePublisher show my film in portrait 9:16 on a preview pageWith WebsitePublisher, make a 10-second animated promo film for the top of my homepageWith WebsitePublisher, turn my three main selling points into a kinetic type film in my brand coloursWith WebsitePublisher, show my film in portrait 9:16 on a preview pageWith WebsitePublisher, make a 10-second animated promo film for the top of my homepageWith WebsitePublisher, turn my three main selling points into a kinetic type film in my brand coloursWith WebsitePublisher, show my film in portrait 9:16 on a preview pageEndpoints (13)
The film format: timing rules, palette and fx, every block type (words, strike, counter, end) with its fields and limits, writing tips, the display formats (16:9, 9:16, 1:1) and an example spec that validates. Read it before writing a spec. Read-only.
No input parameters required.
Check a spec without saving it. Returns valid true with duration_s, total_beats, the film text and the normalised spec, or valid false with error as "path: reason" (for example "blocks[1].at: must be 6 (blocks follow each other without gaps or overlap)"). Read-only.
| Field | Type | Required | Description |
|---|---|---|---|
spec |
object|string | ✓ Yes | The film spec (see schema), as an object or as JSON text. |
Save a spec as the new version of a film; creates the film when the film_key is new. The same spec again makes no new version (changed false). Returns film_key, title, version, duration_s, spec, embed_html and preview_html for the display options given. A refused spec returns 422 with "path: reason".
| Field | Type | Required | Description |
|---|---|---|---|
film_key |
string | ✓ Yes | 1-48 characters a-z, 0-9 or "-", e.g. "homepage-hero". Unique within the project. |
spec |
object|string | ✓ Yes | The film spec (see schema), as an object or as JSON text. |
title |
string | No | Name of the film for the owner, max 120 characters, no < or >. |
format |
string | No | Display format of the returned HTML: "16:9" (default), "9:16" or "1:1". The same film works in every format. |
autoplay |
boolean | No | Play when the film is on screen. Default true. |
loop |
boolean | No | Start again after the end card. Default true. |
controls |
boolean | No | Play/pause button and click to pause. Default true. |
One film with its spec, embed_html and preview_html: the current version, or an earlier version. Takes the same display options as save. Read-only.
| Field | Type | Required | Description |
|---|---|---|---|
film_key |
string | ✓ Yes | The film_key. |
version |
integer | No | An earlier version (see versions). Default: the current one. |
format |
string | No | "16:9" (default), "9:16" or "1:1". |
autoplay |
boolean | No | Default true. |
loop |
boolean | No | Default true. |
controls |
boolean | No | Default true. |
Films of this project, most recently changed first, without their specs: film_key, title, version, duration_s, created_at, updated_at; plus count and the maximum per project. Read-only.
| Field | Type | Required | Description |
|---|---|---|---|
limit |
integer | No | Max films, default 50, max 200. |
Saved versions of a film, newest first: version, duration_s, note, created_at; plus the current version. The newest 30 versions are kept. Read-only.
| Field | Type | Required | Description |
|---|---|---|---|
film_key |
string | ✓ Yes | The film_key. |
limit |
integer | No | Max versions, default 30, max 100. |
Make an earlier version the current one again; it is saved as a new version, nothing is overwritten. Returns the same as save. Pages keep the film they were given: replace the block on the page with the new embed_html.
| Field | Type | Required | Description |
|---|---|---|---|
film_key |
string | ✓ Yes | The film_key. |
version |
integer | ✓ Yes | The version to go back to (see versions). |
format |
string | No | "16:9" (default), "9:16" or "1:1". |
Delete a film and all its versions. Pages that embed it keep playing their own copy until you remove the block from the page.
| Field | Type | Required | Description |
|---|---|---|---|
film_key |
string | ✓ Yes | The film_key. |
Price and size of rendering a film version to an mp4 video, before you start it. Returns price_credits, width, height, duration_s, estimated_render_s, the owner's available_credits, can_render and, when it cannot, reasons (not switched on yet, free plan, not the owner, not enough credits). Nothing is reserved or charged. Read-only.
| Field | Type | Required | Description |
|---|---|---|---|
film_key |
string | ✓ Yes | The film_key. |
version |
integer | No | An earlier version (see versions). Default: the current one. |
format |
string | No | "16:9" (default), "9:16" or "1:1". |
quality |
string | No | "1080p" (default) or "720p": the short side of the video. |
visibility |
string | No | "public" (default): a project asset with a public URL. "private": a private asset the owner can share with a link. |
Render a film version to an mp4 video (H.264, 30 fps, no sound) plus a poster JPG, on paid plans, paid from the project owner's credits. Only the owner can start it; check the price with render_quote and get the owner's consent first. The render waits in a queue and takes about as long as estimated_render_s; follow it with render_status. The price is charged only when both files are stored; a render that fails, times out or is cancelled costs nothing. Files: films/<film_key>/<film_key>-v<version>-<width>x<height>.mp4 and .jpg (a new render of the same version and size replaces them). The same version at the same size again returns the earlier render for free (reused true) while its files are still there.
| Field | Type | Required | Description |
|---|---|---|---|
film_key |
string | ✓ Yes | The film_key. |
version |
integer | No | An earlier version (see versions). Default: the current one. |
format |
string | No | "16:9" (default), "9:16" (stories, reels) or "1:1". |
quality |
string | No | "1080p" (default) or "720p". |
visibility |
string | No | "public" (default) or "private". |
One render: status (queued, running, saving, done, failed, cancelled, expired), progress 0-100, queue_position while queued, error, and when done the video and poster with slug and url (url null for private files), bytes, charged. Poll every 10-20 s. Read-only.
| Field | Type | Required | Description |
|---|---|---|---|
render_id |
integer | ✓ Yes | From render or renders. |
Renders of this project, newest first, in the same shape as render_status. Read-only.
| Field | Type | Required | Description |
|---|---|---|---|
film_key |
string | No | Only the renders of this film. |
limit |
integer | No | Max renders, default 20, max 100. |
Cancel a render that is queued or running. Nothing is charged. Owner only.
| Field | Type | Required | Description |
|---|---|---|---|
render_id |
integer | ✓ Yes | The render to cancel. |
MCP Tool Names
When using this integration through an AI assistant (Claude, ChatGPT, Cursor, etc.), the endpoints are available as MCP tools:
| Endpoint | MCP Tool Name |
|---|---|
| schema | kinetic_film_schema |
| validate | kinetic_film_validate |
| save | kinetic_film_save |
| get | kinetic_film_get |
| list | kinetic_film_list |
| versions | kinetic_film_versions |
| restore | kinetic_film_restore |
| delete | kinetic_film_delete |
| render_quote | kinetic_film_render_quote |
| render | kinetic_film_render |
| render_status | kinetic_film_render_status |
| renders | kinetic_film_renders |
| render_cancel | kinetic_film_render_cancel |
Website