Films and music videos. You're the star. No subscription.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Returns verified native-app navigation and privacy/support links. No IDs selects account controls; accessible artistId/projectId adds the corresponding artist or project screens and appOnlyActions with reasons. Each ID is checked against viewer access. App-only workflows retain existing consent and spend controls. No purchase, paid work or account deletion.
Optional Artist DNA ID whose app controls to open; current viewer access is required.
Optional project whose app screens to open; current viewer access is required.
Returns verified native-app navigation and privacy/support links. No IDs selects account controls; accessible artistId/projectId adds the corresponding artist or project screens and appOnlyActions with reasons. Each ID is checked against viewer access. App-only workflows retain existing consent and spend controls. No purchase, paid work or account deletion.
| Argument | Type | Description |
|---|---|---|
| artistId | string | Optional Artist DNA ID whose app controls to open; current viewer access is required. |
| projectId | string | Optional project whose app screens to open; current viewer access is required. |
{
"type": "object",
"required": [],
"properties": {
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Optional Artist DNA ID whose app controls to open; current viewer access is required."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Optional project whose app screens to open; current viewer access is required."
}
},
"additionalProperties": false
}Read the connected customer account and its current catalogue memberships. Returns user details and up to 50 catalogues with roles. The connection determines identity; no account or workspace argument is accepted. Free.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Records the person's own answer to the AI-sharing question after a creation tool returned ai_processing_choice_required. allowed true means Allow and false means Not now. Consent counts only as that explicit reply; it is never inferred from the request to create and never supplied on the person's behalf. supersedes is the sequence that refusal returned (null when it was unset). Returns the stored answer; nothing is created or charged.
| Argument | Type | Description |
|---|---|---|
| allowed* | boolean | The person's explicit answer: true for Allow, false for Not now. |
| supersedes | integer | null | The sequence from the ai_processing_choice_required refusal; null when it was unset. |
{
"type": "object",
"required": [
"allowed"
],
"properties": {
"allowed": {
"type": "boolean",
"description": "The person's explicit answer: true for Allow, false for Not now."
},
"supersedes": {
"type": [
"integer",
"null"
],
"minimum": 1,
"description": "The sequence from the ai_processing_choice_required refusal; null when it was unset."
}
},
"additionalProperties": false
}Returns an existing artist's Film castId, identity readiness and Film creation link. castId equals artistId. No duplicate actor or artist-flag change is created.
| Argument | Type | Description |
|---|---|---|
| artistId* | string | Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film. |
{
"type": "object",
"required": [
"artistId"
],
"properties": {
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film."
}
},
"additionalProperties": false
}Sets an existing passed DNA photograph as the artist cover; referenceId:null restores automatic cover selection. Requires artist permission and expectedRevision from the current profile. Returns profile and revision; creates no image.
| Argument | Type | Description |
|---|---|---|
| artistId* | string | Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film. |
| referenceId* | string | null | Passed current DNA photo ID, or null for automatic cover. |
| expectedRevision* | integer | Current revision from the latest read. Stale revisions are refused. |
{
"type": "object",
"required": [
"artistId",
"expectedRevision",
"referenceId"
],
"properties": {
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film."
},
"referenceId": {
"type": [
"string",
"null"
],
"maxLength": 64,
"minLength": 1,
"description": "Passed current DNA photo ID, or null for automatic cover."
},
"expectedRevision": {
"type": "integer",
"minimum": 1,
"description": "Current revision from the latest read. Stale revisions are refused."
}
},
"additionalProperties": false
}Creates an artist through the app service and returns profile and revision. Name is required; photos use dedicated upload/reference tools. catalogueArtistId optionally selects a manageable catalogue through an existing artist. Creation has no replay receipt; the artist list exposes persisted results after an uncertain response. No generation or charge.
| Argument | Type | Description |
|---|---|---|
| bio | string | Artist biography; an empty string clears it. |
| name* | string | New artist name. |
| genres | array | Artist genres. An empty array clears the list. |
| location | string | Artist location; an empty string clears it. |
| influences | array | Artist influences. An empty array clears the list. |
| identityKind | string | Factual identity of the new artist. Real person by default. Adding a real face photo follows the app real-person rules. |
| visualKeywords | array | Artist visual keywords. An empty array clears the list. |
| primaryLanguage | string | Artist primary language; an empty string clears it. |
Permanently erases an artist and their projects, storyboards, references and identity photos. Requires catalogue-owner access, the customer's deletion request and their exact current artist name as confirmation. In-flight work or payments prevent deletion. Returns artist=deleted and queued purge counts; external erasure is asynchronous.
| Argument | Type | Description |
|---|---|---|
| artistId* | string | Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film. |
| confirmation* | string | Artist exact current name, supplied by the customer after they request permanent deletion. |
{
"type": "object",
"required": [
"artistId",
"confirmation"
],
"properties": {
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film."
},
"confirmation": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Artist exact current name, supplied by the customer after they request permanent deletion."
}
},
"additionalProperties": false
}Returns identity summary, published photo pack, pending screening, approved creative facts and up to 20 recent social-scan statuses. Pending or held photos retain their status. The app link identifies consent and scan controls. No scan, language model or image generation starts.
| Argument | Type | Description |
|---|---|---|
| artistId* | string | Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film. |
{
"type": "object",
"required": [
"artistId"
],
"properties": {
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film."
}
},
"additionalProperties": false
}Saves customer-authored or approved creative facts as a new published Artist DNA version, preserving facts pinned by older projects. baseVersionId identifies the current version, or null when absent. Returns versionId and facts. Facts apply at once and need no pin. Requires manager permission; no language model or credit charge.
| Argument | Type | Description |
|---|---|---|
| facts* | array | Full replacement set; an empty array clears the artist creative facts. |
| artistId* | string | Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film. |
| baseVersionId* | string | null | Current versionId from the last Artist DNA read, or explicit null when no version exists. |
{
"type": "object",
"required": [
"artistId",
"baseVersionId",
"facts"
],
"properties": {
"facts": {
"type": "array",
"items": {
"type": "object",
"required": [
"category",
"statement"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Existing fact ID, if preserving a fact read from the app."
},
"category": {
"type": "string",
"description": "Existing app Artist DNA fact category. One of: \"visual_language\", \"palette\", \"wardrobe\", \"performance\", \"cinematography\", \"narrative\", \"avoid\"."
},
"priority": {
"type": "integer",
"maximum": 1000,
"minimum": 0,
"description": "Importance of this fact; defaults to the app value 100."
},
"statement": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "One concrete creative fact approved by the customer."
}
},
"additionalProperties": false
},
"maxItems": 200,
"description": "Full replacement set; an empty array clears the artist creative facts."
},
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film."
},
"baseVersionId": {
"type": [
"string",
"null"
],
"maxLength": 64,
"minLength": 1,
"description": "Current versionId from the last Artist DNA read, or explicit null when no version exists."
}
},
"additionalProperties": false
}Returns an artist-photo upload widget and a one-time fallback uploadUrl. File bytes go directly to Brix36. Repeated calls return the same link or report an existing photo. No charge.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | The video whose artist needs the photo, from studio_video_start. |
{
"type": "object",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The video whose artist needs the photo, from studio_video_start."
}
},
"additionalProperties": false
}Returns one artist's profile, current revision and Artist DNA summary, including genres, visual notes and identity readiness. The revision binds profile and cover edits. Read-only.
| Argument | Type | Description |
|---|---|---|
| artistId* | string | Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film. |
{
"type": "object",
"required": [
"artistId"
],
"properties": {
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film."
}
},
"additionalProperties": false
}Saves one Brix36 ready-made fictional portrait on an existing artist using the same service as the app. Requires artist permission and a current starId from the ready-made star list. Returns the saved reference pack and whether it was newly created; choosing the same star retains the existing pack. No image generation or credit charge. Current generation readiness is read separately from the artist list.
| Argument | Type | Description |
|---|---|---|
| starId* | string | Current star ID returned by studio_ready_made_stars_list; not an image URL. |
| artistId* | string | Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film. |
{
"type": "object",
"required": [
"artistId",
"starId"
],
"properties": {
"starId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Current star ID returned by studio_ready_made_stars_list; not an image URL."
},
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film."
}
},
"additionalProperties": false
}Adds a customer photograph to Artist DNA through screened identity-reference services. Inline input accepts canonical base64, MIME type and angle up to 512 KiB. Larger files have dedicated upload/app paths. Validates and deduplicates bytes under existing face-source/publication rules. Returns pack and created flag. No image generation.
| Argument | Type | Description |
|---|---|---|
| angle* | string | Camera angle shown in this existing photo. |
| artistId* | string | Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film. |
| mimeType* | string | Actual photo MIME type; the app also checks bytes. |
| bytesBase64* | string | Canonical base64 file bytes without a data URL prefix, up to 512 KiB decoded. Larger files have an app upload-link path. |
{
"type": "object",
"required": [
"artistId",
"angle",
"mimeType",
"bytesBase64"
],
"properties": {
"angle": {
"enum": [
"front",
"three_quarter_left",
"three_quarter_right",
"smiling",
"left",
"right",
"full_body",
"detail"
],
"type": "string",
"description": "Camera angle shown in this existing photo."
},
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film."
},
"mimeType": {
"enum": [
"image/png",
"image/jpeg",
"image/webp"
],
"type": "string",
"description": "Actual photo MIME type; the app also checks bytes."
},
"bytesBase64": {
"type": "string",
"pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$",
"maxLength": 699052,
"minLength": 4,
"description": "Canonical base64 file bytes without a data URL prefix, up to 512 KiB decoded. Larger files have an app upload-link path."
}
},
"additionalProperties": false
}Remove one identity reference photo using the app service. Requires artist-level permission and the customer choosing this specific photo. Returns the updated identity pack. This can affect future likeness generation; older pinned projects keep their existing rules.
| Argument | Type | Description |
|---|---|---|
| artistId* | string | Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film. |
| referenceId* | string | Identity reference ID from studio_artist_dna_read. |
{
"type": "object",
"required": [
"artistId",
"referenceId"
],
"properties": {
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film."
},
"referenceId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Identity reference ID from studio_artist_dna_read."
}
},
"additionalProperties": false
}Places the one quoted reference-pack purchase only after the customer has explicitly approved the exact credits in this chat. Takes the exact operationId, quoteToken, quotedCredits and priceVersion from the quote (and the same look inputs); an existing Brix36 approval code is accepted as confirmationToken instead. Identical retries return the first outcome and never charge twice. status still_checking keeps the original operation; an identical later call returns its outcome without a new price.
| Argument | Type | Description |
|---|---|---|
| kind* | string | photo_pack: missing views from their existing photo. look: an invented look for an artist with no customer photo. |
| artistId* | string | The artist, from studio_artists_list or studio_artist_create. |
| quoteToken* | string | Exact signed quote. |
| operationId* | string | Exact quoted operation ID. |
| priceVersion | string | The priceVersion returned by the quote. |
| quotedCredits | integer | The exact credits the customer approved in chat. |
| lookDescription |
Prices the artist's missing reference views (photo_pack) or invented look (look) with the same signed price the Brix36 app shows. Charges nothing. Returns creditAmount, operationId, quoteToken, priceVersion and approvalExpiresAt. Approval of the exact credits takes place in this chat; no link is created. When nothing can be offered, says so without claiming their references are complete. Creating an artist stays free.
| Argument | Type | Description |
|---|---|---|
| kind* | string | photo_pack: missing views from their existing photo. look: an invented look for an artist with no customer photo. |
| artistId* | string | The artist, from studio_artists_list or studio_artist_create. |
| lookDescription | string | Look only: the look to make, up to 1000 characters. Send the same text to quote and confirm. |
| inspirationAssetIds | array | Look only, optional: up to four owned inspiration photos. Send the same list to quote and confirm. |
{
"type": "object",
"required": [
"artistId",
"kind"
],
"properties": {
"kind": {
"enum": [
"photo_pack",
"look"
],
"type": "string",
"description": "photo_pack: missing views from their existing photo. look: an invented look for an artist with no customer photo."
},
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The artist, from studio_artists_list or studio_artist_create."
},
"lookDescription": {
"type": "string",
"maxLength": 1000,
"minLength": 1,
"description": "Look only: the look to make, up to 1000 characters. Send the same text to quote and confirm."
},
"inspirationAssetIds": {
"type": "array",
"items": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Owned inspiration photo asset."
},
"maxItems": 4,
"description": "Look only, optional: up to four owned inspiration photos. Send the same list to quote and confirm.",
"uniqueItems": true
}
},
"additionalProperties": false
}Updates supplied artist profile fields with expectedRevision from the current profile. Returns the updated profile and revision; conflicting edits are refused. Photos, voices, identity kind and Film casting have separate operations.
| Argument | Type | Description |
|---|---|---|
| patch* | object | |
| artistId* | string | Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film. |
| expectedRevision* | integer | Current revision from the latest read. Stale revisions are refused. |
{
"type": "object",
"required": [
"artistId",
"expectedRevision",
"patch"
],
"properties": {
"patch": {
"type": "object",
"required": [],
"properties": {
"bio": {
"type": "string",
"maxLength": 4000,
"description": "Artist biography; an empty string clears it."
},
"name": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Artist display name."
},
"genres": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "One value."
},
"maxItems": 24,
"description": "Artist genres. An empty array clears the list."
},
"location": {
"type": "string",
"maxLength": 120,
"description": "Artist location; an empty string clears it."
},
"influences": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "One value."
},
"maxItems": 24,
"description": "Artist influences. An empty array clears the list."
},
"faceCovered": {
"type": "boolean",
"description": "Whether the artist intentionally covers their face. This does not declare a fictional identity."
},
"visualKeywords": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "One value."
},
"maxItems": 24,
"description": "Artist visual keywords. An empty array clears the list."
},
"primaryLanguage": {
"type": "string",
"maxLength": 60,
"description": "Artist primary language; an empty string clears it."
},
"recurringThemes": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "One value."
},
"maxItems": 24,
"description": "Artist recurring themes. An empty array clears the list."
},
"preferredPalette": {
"type": "array",
"items": {
"type": "string",
"maxLength": 32,
"minLength": 1,
"description": "One value."
},
"maxItems": 12,
"description": "Artist palette tokens. An empty array clears the list."
}
},
"minProperties": 1,
"additionalProperties": false
},
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film."
},
"expectedRevision": {
"type": "integer",
"minimum": 1,
"description": "Current revision from the latest read. Stale revisions are refused."
}
},
"additionalProperties": false
}Assigns an offered ready-made voice from the voice library through a durable revision-bound operation. voiceId is an opaque catalogue ID and expectedRevision is the current voice revision, or null when no voice exists. May add a shared library voice; creates no speech and debits no credits. Film speech requires its separate quoted financial approval. Identical operation retries retain identity.
| Argument | Type | Description |
|---|---|---|
| voiceId* | string | An offered lib:<owner>:<voice> or acct:<voice> ID. Film supports lib: voices. |
| artistId* | string | The cast artist id. |
| operationId* | string | Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier. |
| expectedRevision* | integer | null | The revision from studio_artist_voices_list, or null when no saved voice exists. |
{
"type": "object",
"required": [
"artistId",
"operationId",
"expectedRevision",
"voiceId"
],
"properties": {
"voiceId": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "An offered lib:<owner>:<voice> or acct:<voice> ID. Film supports lib: voices."
},
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The cast artist id."
},
"operationId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier."
},
"expectedRevision": {
"type": [
"integer",
"null"
],
"minimum": 1,
"description": "The revision from studio_artist_voices_list, or null when no saved voice exists."
}
},
"additionalProperties": false
}Read the artist’s saved speaking voice and revision, with a private sample link when available. A recorded voice is already selected for this artist’s Film dialogue. No voice is created, no speech is generated and no credits are spent.
| Argument | Type | Description |
|---|---|---|
| artistId* | string | The existing cast artist. |
{
"type": "object",
"required": [
"artistId"
],
"properties": {
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The existing cast artist."
}
},
"additionalProperties": false
}Creates and selects an artist's own speaking voice from an owned confirmed audio sampleAssetId, typically 30–120 seconds. App recording validation, durable operation, provider admission and daily spend guards apply. Setup cost is included in the artist's first Film quote; this call debits no customer credits. Identical operation/input retries reconcile the saved effect. Unconfigured cloning refuses before provider work. This voice is for Film dialogue, not song singing.
| Argument | Type | Description |
|---|---|---|
| artistId* | string | The existing cast artist. |
| operationId* | string | Stable operation identity. Identical retries retain the original identifier and arguments; new work has a distinct identifier. |
| sampleAssetId* | string | Confirmed audio assetId returned by the upload/import path. |
| expectedRevision* | integer | null | The current voice revision from studio_artist_voice_read; null only when no voice exists. |
{
"type": "object",
"required": [
"artistId",
"sampleAssetId",
"operationId",
"expectedRevision"
],
"properties": {
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The existing cast artist."
},
"operationId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Stable operation identity. Identical retries retain the original identifier and arguments; new work has a distinct identifier."
},
"sampleAssetId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Confirmed audio assetId returned by the upload/import path."
},
"expectedRevision": {
"type": [
"integer",
"null"
],
"minimum": 1,
"description": "The current voice revision from studio_artist_voice_read; null only when no voice exists."
}
},
"additionalProperties": false
}Returns pending, unknown, refused or succeeded for an earlier owned voice operation, with saved voice/revision on success. Unknown provider effects remain unresolved. This read does not repeat provider work or synthesize speech.
| Argument | Type | Description |
|---|---|---|
| artistId* | string | The artist id from the original request. |
| operationId* | string | Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier. |
{
"type": "object",
"required": [
"artistId",
"operationId"
],
"properties": {
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The artist id from the original request."
},
"operationId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier."
}
},
"additionalProperties": false
}Searches the voice library's ready-made voices. Returns offered opaque IDs, names, descriptions, selected voice, current revision and nextCursor. lib: voices use Brix36's account; acct: voices belong to connected personal accounts and are currently unavailable for Film. No speech generation or credit charge.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum items to return, 1–50. Default 20. |
| cursor | string | Opaque previous-page nextCursor; absent for the first page. |
| search | string | Voice name or traits to search for. |
| artistId* | string | The cast artist whose speaking voice this operation concerns. |
{
"type": "object",
"required": [
"artistId"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum items to return, 1–50. Default 20."
},
"cursor": {
"type": "string",
"maxLength": 512,
"minLength": 1,
"description": "Opaque previous-page nextCursor; absent for the first page."
},
"search": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Voice name or traits to search for."
},
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The cast artist whose speaking voice this operation concerns."
}
},
"additionalProperties": false
}Lists the customer's artists alphabetically, with IDs, names, identity kind, screened photo count, face-check status and whether the real-person video model can use them. Artist IDs also identify Film cast members. Fictional characters need no photo or likeness consent; real-person artists retain the app's consent flow. Free, read-only pagination, up to 50 artists per page.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Number of results, default 20 and maximum 50. |
| query | string | Optional case-insensitive artist name fragment. Pagination binds nextCursor to the same query. |
| cursor | string | The previous page’s nextCursor; absent on the first page. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Number of results, default 20 and maximum 50."
},
"query": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Optional case-insensitive artist name fragment. Pagination binds nextCursor to the same query."
},
"cursor": {
"type": "string",
"maxLength": 400,
"minLength": 1,
"description": "The previous page’s nextCursor; absent on the first page."
}
},
"additionalProperties": false
}Read an owned saved customer-AI text version without generating or charging.
| Argument | Type | Description |
|---|---|---|
| copyId* | string | Saved copy version. |
| projectId* | string | The current owned project. |
{
"type": "object",
"required": [
"projectId",
"copyId"
],
"properties": {
"copyId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Saved copy version."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The current owned project."
}
},
"additionalProperties": false
}Saves finished customer-authored headline/caption drafts and supporting source facts as a free text version. Identical source/revision/result inputs return the saved version. No Brix36 language-model request, publishing or credit charge.
| Argument | Type | Description |
|---|---|---|
| result* | object | |
| projectId* | string | The current owned project. |
| sourceText* | string | Exact customer-supplied source facts supporting the draft. |
| finishedAssetId | string | Optional completed master the text accompanies. |
| expectedRevision* | integer | Current project revision. A stale revision returns revision_conflict. |
{
"type": "object",
"required": [
"projectId",
"expectedRevision",
"sourceText",
"result"
],
"properties": {
"result": {
"type": "object",
"required": [
"version",
"variations"
],
"properties": {
"version": {
"type": "integer",
"const": 1
},
"variations": {
"type": "array",
"items": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "An exact customer-AI-authored draft."
},
"maxItems": 8,
"minItems": 1
}
},
"additionalProperties": false
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The current owned project."
},
"sourceText": {
"type": "string",
"maxLength": 8000,
"minLength": 1,
"description": "Exact customer-supplied source facts supporting the draft."
},
"finishedAssetId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Optional completed master the text accompanies."
},
"expectedRevision": {
"type": "integer",
"minimum": 1,
"description": "Current project revision. A stale revision returns revision_conflict."
}
},
"additionalProperties": false
}Returns an owned completed creative result by operationId with image.url or video.url, downloadUrl and gallery-widget data. Links are private and signed; another read refreshes expired links. The original source is retained. No processing or charge is repeated.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | The current owned project. |
| operationId* | string | Quoted operation ID. |
{
"type": "object",
"required": [
"projectId",
"operationId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The current owned project."
},
"operationId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Quoted operation ID."
}
},
"additionalProperties": false
}Lists the connected customer's purchases, spends, refunds and adjustments newest first. Returns signed amounts, source, time, accessible projectTitle and nextCursor. Pagination preserves the cursor value. No wallet changes.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum items to return, 1–50. Default 20. |
| cursor | string | Opaque previous-page nextCursor; absent for the first page. |
{
"type": "object",
"required": [],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum items to return, 1–50. Default 20."
},
"cursor": {
"type": "string",
"maxLength": 512,
"minLength": 1,
"description": "Opaque previous-page nextCursor; absent for the first page."
}
},
"additionalProperties": false
}Read the connected customer wallet. Returns productionBalance, sandboxBalance, spendableBalance, status, reviewReason and sandboxSpendingEnabled from the app ledger. A review_required wallet cannot spend. Free; purchases remain in the Brix36 app.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Add one finished dialogue line to a scene and return its lineId. Uses expectedRevision, the current saved Film plan revision, and a stable operationId; identical operationId/input retries reconcile the same edit. No model call or credit charge.
| Argument | Type | Description |
|---|---|---|
| text* | string | The finished dialogue line. |
| projectId* | string | The Film project id. |
| sceneIndex* | integer | The saved scene index from studio_film_read. |
| operationId* | string | Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier. |
| expectedRevision* | integer | The savedPlan.revision from studio_film_read. |
{
"type": "object",
"required": [
"projectId",
"operationId",
"expectedRevision",
"sceneIndex",
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "The finished dialogue line."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The Film project id."
},
"sceneIndex": {
"type": "integer",
"minimum": 0,
"description": "The saved scene index from studio_film_read."
},
"operationId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier."
},
"expectedRevision": {
"type": "integer",
"minimum": 1,
"description": "The savedPlan.revision from studio_film_read."
}
},
"additionalProperties": false
}Assign one available artist to one saved dialogue line. Uses expectedRevision, the current saved Film plan revision, and a stable operationId; identical operationId/input retries reconcile the same edit. No model call or credit charge.
| Argument | Type | Description |
|---|---|---|
| lineId* | string | The saved dialogue line id from studio_film_read. |
| artistId* | string | An available artist in this project’s workspace. |
| projectId* | string | The Film project id. |
| sceneIndex* | integer | The saved scene index from studio_film_read. |
| operationId* | string | Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier. |
| expectedRevision* | integer | The savedPlan.revision from studio_film_read. |
{
"type": "object",
"required": [
"projectId",
"operationId",
"expectedRevision",
"sceneIndex",
"lineId",
"artistId"
],
"properties": {
"lineId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The saved dialogue line id from studio_film_read."
},
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "An available artist in this project’s workspace."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The Film project id."
},
"sceneIndex": {
"type": "integer",
"minimum": 0,
"description": "The saved scene index from studio_film_read."
},
"operationId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier."
},
"expectedRevision": {
"type": "integer",
"minimum": 1,
"description": "The savedPlan.revision from studio_film_read."
}
},
"additionalProperties": false
}Replace one scene’s direction and reference pictures. A null sceneIndex with empty text binds whole-Film references. Uses expectedRevision, the current saved Film plan revision, and a stable operationId; identical operationId/input retries reconcile the same edit. No model call or credit charge.
| Argument | Type | Description |
|---|---|---|
| text* | string | |
| projectId* | string | The Film project id. |
| sceneIndex* | integer | null | |
| operationId* | string | Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier. |
| expectedRevision* | integer | The savedPlan.revision from studio_film_read. |
| referenceAttachmentIds* | array |
{
"type": "object",
"required": [
"projectId",
"operationId",
"expectedRevision",
"sceneIndex",
"text",
"referenceAttachmentIds"
],
"properties": {
"text": {
"type": "string",
"maxLength": 2000
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The Film project id."
},
"sceneIndex": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"operationId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier."
},
"expectedRevision": {
"type": "integer",
"minimum": 1,
"description": "The savedPlan.revision from studio_film_read."
},
"referenceAttachmentIds": {
"type": "array",
"items": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "An attachment id belonging to this project."
},
"maxItems": 8,
"uniqueItems": true
}
},
"additionalProperties": false
}Replace the text of one saved dialogue line. Uses expectedRevision, the current saved Film plan revision, and a stable operationId; identical operationId/input retries reconcile the same edit. No model call or credit charge.
| Argument | Type | Description |
|---|---|---|
| text* | string | The finished replacement dialogue line. |
| lineId* | string | The saved dialogue line id from studio_film_read. |
| projectId* | string | The Film project id. |
| sceneIndex* | integer | The saved scene index from studio_film_read. |
| operationId* | string | Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier. |
| expectedRevision* | integer | The savedPlan.revision from studio_film_read. |
{
"type": "object",
"required": [
"projectId",
"operationId",
"expectedRevision",
"sceneIndex",
"lineId",
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "The finished replacement dialogue line."
},
"lineId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The saved dialogue line id from studio_film_read."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The Film project id."
},
"sceneIndex": {
"type": "integer",
"minimum": 0,
"description": "The saved scene index from studio_film_read."
},
"operationId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier."
},
"expectedRevision": {
"type": "integer",
"minimum": 1,
"description": "The savedPlan.revision from studio_film_read."
}
},
"additionalProperties": false
}Returns saved Film scenes, dialogue, cast, voice assignments, planning state and savedPlan.revision. Add include:['languages'] for supportedLanguages and nativeSpeechLanguages (the video model's own speech), and include:['artists'] for every artist who can join the cast; leave include out for the project view. nativeSpeechEngines holds model-specific evidence. Saved per-scene voice choices determine routing; absent saved voices use native speech. Audio-off prices are unavailable for speaking scenes. operationId reads prior plan progress without starting or settling work.
| Argument | Type | Description |
|---|---|---|
| include | array | Optional extras: 'languages' adds supportedLanguages and nativeSpeechLanguages; 'artists' adds availableArtists. Omit for the project view. |
| projectId* | string | The Film project id. |
| operationId | string | Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier. |
{
"type": "object",
"required": [
"projectId"
],
"properties": {
"include": {
"type": "array",
"items": {
"enum": [
"languages",
"artists"
],
"type": "string"
},
"maxItems": 2,
"description": "Optional extras: 'languages' adds supportedLanguages and nativeSpeechLanguages; 'artists' adds availableArtists. Omit for the project view.",
"uniqueItems": true
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The Film project id."
},
"operationId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier."
}
},
"additionalProperties": false
}Remove one saved dialogue line. Uses expectedRevision, the current saved Film plan revision, and a stable operationId; identical operationId/input retries reconcile the same edit. No model call or credit charge.
| Argument | Type | Description |
|---|---|---|
| lineId* | string | The saved dialogue line id from studio_film_read. |
| projectId* | string | The Film project id. |
| sceneIndex* | integer | The saved scene index from studio_film_read. |
| operationId* | string | Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier. |
| expectedRevision* | integer | The savedPlan.revision from studio_film_read. |
{
"type": "object",
"required": [
"projectId",
"operationId",
"expectedRevision",
"sceneIndex",
"lineId"
],
"properties": {
"lineId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The saved dialogue line id from studio_film_read."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The Film project id."
},
"sceneIndex": {
"type": "integer",
"minimum": 0,
"description": "The saved scene index from studio_film_read."
},
"operationId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier."
},
"expectedRevision": {
"type": "integer",
"minimum": 1,
"description": "The savedPlan.revision from studio_film_read."
}
},
"additionalProperties": false
}Saves finished Film scenes, visualWorld, camera directions and dialogue against the current revision. Scenes form 30-second cards, with at most six spoken lines per card and five minutes per Film. Identical operationId/input retries return the saved result. visualWorld is required for quoting. No Brix36 planning model, media generation or credit charge.
| Argument | Type | Description |
|---|---|---|
| scenes* | array | |
| castIds* | array | |
| language* | string | The selected supported Film language; studio_film_read with include:['languages'] lists them. Text is preserved, never translated. |
| projectId* | string | A project created by studio_video_start with kind film. |
| operationId* | string | Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier. |
| visualWorld | object | Board-wide visual facts. Optional characters, vehicles, locations, props and never are arrays of up to 12 non-empty strings, each at most 300 characters. Combined rendered fields are limited to 2,400 characters including labels, separators and newlines after trimming. Scene-specific costume and visual direction belong to scene text. |
Imports finished screenplay-style Film text, with SCENE headings, NAME: dialogue and optional visualWorld. Preserves scenes, dialogue and speaker names, caps Film at five minutes and reports uncast speakers. Identical retries return the same plan. A visualWorld is required for quoting. No Brix36 planning model or credit charge.
| Argument | Type | Description |
|---|---|---|
| cast | array | Optional: artist names to cast, in slot order. Names must be the customer's own artists. |
| script* | string | The finished script, exactly as written. Its language is preserved as-is. |
| language* | string | The selected Film language. The host validates its actual model capability; text is not translated. |
| projectId* | string | From studio_video_start with kind 'film'. |
| visualWorld | object | Board-wide visual facts. Optional characters, vehicles, locations, props and never are arrays of up to 12 non-empty strings, each at most 300 characters. Combined rendered fields are limited to 2,400 characters including labels, separators and newlines after trimming. Scene-specific costume and visual direction belong to scene text. |
| expectedRevisionId* | string | null | The revisionId from studio_sections_read, or null only when no storyboard exists. |
Set one scene’s duration, normalized to 4–30 seconds; later scenes move to follow it. Uses expectedRevision, the current saved Film plan revision, and a stable operationId; identical operationId/input retries reconcile the same edit. No model call or credit charge.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | The Film project id. |
| durationMs* | integer | How long this scene lasts, in milliseconds. Brought onto the 4-30 second range, in whole seconds; later scenes move to follow it and the quote prices the new length. |
| sceneIndex* | integer | The saved scene index from studio_film_read. |
| operationId* | string | Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier. |
| expectedRevision* | integer | The savedPlan.revision from studio_film_read. |
{
"type": "object",
"required": [
"projectId",
"operationId",
"expectedRevision",
"sceneIndex",
"durationMs"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The Film project id."
},
"durationMs": {
"type": "integer",
"maximum": 600000,
"minimum": 1,
"description": "How long this scene lasts, in milliseconds. Brought onto the 4-30 second range, in whole seconds; later scenes move to follow it and the quote prices the new length."
},
"sceneIndex": {
"type": "integer",
"minimum": 0,
"description": "The saved scene index from studio_film_read."
},
"operationId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier."
},
"expectedRevision": {
"type": "integer",
"minimum": 1,
"description": "The savedPlan.revision from studio_film_read."
}
},
"additionalProperties": false
}Set the lip-sync choice for one saved scene. Uses expectedRevision, the current saved Film plan revision, and a stable operationId; identical operationId/input retries reconcile the same edit. No model call or credit charge.
| Argument | Type | Description |
|---|---|---|
| choice* | null | string | |
| sceneId* | string | The stableSceneId from studio_film_read. |
| projectId* | string | The Film project id. |
| operationId* | string | Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier. |
| expectedRevision* | integer | The savedPlan.revision from studio_film_read. |
{
"type": "object",
"required": [
"projectId",
"operationId",
"expectedRevision",
"sceneId",
"choice"
],
"properties": {
"choice": {
"enum": [
"on",
"off",
null
],
"type": [
"null",
"string"
]
},
"sceneId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The stableSceneId from studio_film_read."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The Film project id."
},
"operationId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier."
},
"expectedRevision": {
"type": "integer",
"minimum": 1,
"description": "The savedPlan.revision from studio_film_read."
}
},
"additionalProperties": false
}Set one storyboard shot’s video engine, camera movement, lens, lighting or look; unnamed controls keep their saved values. Uses expectedRevision, the current saved Film plan revision, and a stable operationId; identical operationId/input retries reconcile the same edit. No model call or credit charge.
| Argument | Type | Description |
|---|---|---|
| direction* | object | Only the controls to change; the others keep their saved values. |
| projectId* | string | The Film project id. |
| operationId* | string | Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier. |
| stableShotId* | string | The storyboard stableShotId for the scene, from studio_storyboard_readiness. |
| expectedRevision* | integer | The savedPlan.revision from studio_film_read. |
{
"type": "object",
"required": [
"projectId",
"operationId",
"expectedRevision",
"stableShotId",
"direction"
],
"properties": {
"direction": {
"type": "object",
"required": [],
"properties": {
"lens": {
"enum": [
"auto",
"wide_24mm",
"natural_35mm",
"portrait_50mm",
"telephoto_85mm",
"anamorphic"
],
"type": "string"
},
"look": {
"enum": [
"auto",
"cinematic",
"documentary",
"film_noir",
"vintage",
"vivid"
],
"type": "string"
},
"engine": {
"enum": [
"auto",
"seedance_2_5",
"minimax_h3",
"kling_v4",
"kling_o3",
"wan_3"
],
"type": "string",
"description": "The exact video engine for this shot; kling_v4 carries native sound when a sound layer is on. auto lets Brix36 choose."
},
"lighting": {
"enum": [
"auto",
"natural",
"soft_studio",
"golden_hour",
"low_key",
"neon"
],
"type": "string"
},
"cameraMovement": {
"enum": [
"auto",
"locked",
"pan",
"tilt",
"dolly_in",
"dolly_out",
"tracking",
"handheld",
"orbit"
],
"type": "string"
}
},
"description": "Only the controls to change; the others keep their saved values.",
"minProperties": 1,
"additionalProperties": false
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The Film project id."
},
"operationId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier."
},
"stableShotId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The storyboard stableShotId for the scene, from studio_storyboard_readiness."
},
"expectedRevision": {
"type": "integer",
"minimum": 1,
"description": "The savedPlan.revision from studio_film_read."
}
},
"additionalProperties": false
}Set the saved-character or native speech voice choice for one character in one scene. Uses expectedRevision, the current saved Film plan revision, and a stable operationId; identical operationId/input retries reconcile the same edit. No model call or credit charge.
| Argument | Type | Description |
|---|---|---|
| artistId* | string | A speaking cast character in this Film. |
| projectId* | string | The Film project id. |
| sceneIndex* | integer | The saved scene index from studio_film_read. |
| operationId* | string | Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier. |
| expectedRevision* | integer | The savedPlan.revision from studio_film_read. |
| voiceDescription | string | Optional native voice direction. |
| useCharacterVoice* | boolean | The customer’s voice choice for this scene and character: true selects the saved voice; false selects native video-model speech. |
Toggle whether one dialogue line’s speaker is on camera. Uses expectedRevision, the current saved Film plan revision, and a stable operationId; identical operationId/input retries reconcile the same edit. No model call or credit charge.
| Argument | Type | Description |
|---|---|---|
| lineId* | string | The saved dialogue line id from studio_film_read. |
| projectId* | string | The Film project id. |
| sceneIndex* | integer | The saved scene index from studio_film_read. |
| operationId* | string | Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier. |
| expectedRevision* | integer | The savedPlan.revision from studio_film_read. |
{
"type": "object",
"required": [
"projectId",
"operationId",
"expectedRevision",
"sceneIndex",
"lineId"
],
"properties": {
"lineId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The saved dialogue line id from studio_film_read."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The Film project id."
},
"sceneIndex": {
"type": "integer",
"minimum": 0,
"description": "The saved scene index from studio_film_read."
},
"operationId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier."
},
"expectedRevision": {
"type": "integer",
"minimum": 1,
"description": "The savedPlan.revision from studio_film_read."
}
},
"additionalProperties": false
}Toggle one Film music, background or effects layer. Uses expectedRevision, the current saved Film plan revision, and a stable operationId; identical operationId/input retries reconcile the same edit. No model call or credit charge.
| Argument | Type | Description |
|---|---|---|
| layer* | string | |
| projectId* | string | The Film project id. |
| operationId* | string | Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier. |
| expectedRevision* | integer | The savedPlan.revision from studio_film_read. |
{
"type": "object",
"required": [
"projectId",
"operationId",
"expectedRevision",
"layer"
],
"properties": {
"layer": {
"enum": [
"music",
"background",
"effects"
],
"type": "string"
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The Film project id."
},
"operationId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier."
},
"expectedRevision": {
"type": "integer",
"minimum": 1,
"description": "The savedPlan.revision from studio_film_read."
}
},
"additionalProperties": false
}Spends Brix36 credits and starts the quoted work under the customer's financial approval. In chat mode, stage:pictures records one approval for pictures and video using the original operationId, quoteToken, priceVersion, quotedCredits and revisionId. Insufficient balance returns balance, shortfall and creditsInformationUrl without a checkout. Stage:video uses the current picture revision and the same financial approval, subject to the existing readiness gates. Identical stage and argument retries reconcile the same operation. New authorizations retain pause/cap, OAuth studio.spend, account and exact-quote checks. The response waits up to 45 seconds for the started stage and includes current progress, a finished video link when available, or the free status-call arguments for work still rendering. Existing page-approved operations and confirmationToken codes remain supported.
| Argument | Type | Description |
|---|---|---|
| stage | string | Chat mode: pictures records one financial approval and starts pictures; video starts video under that same approval and the current readiness gates. Each retry retains its original stage. |
| modelId | string | Optional with an approved quote (the approved model is used). Otherwise the id of the model the customer chose, from that quote's models list. |
| projectId* | string | |
| quoteToken* | string | The exact opaque quoteToken returned by studio_generation_quote. |
| revisionId |
Prices missing storyboard pictures plus the exact video price for one run without spending credits. Returns totalCredits, totalGbpInclVat, balance, shortfall, signed quoteToken, operationId, revisionId and priceVersion. engineRecommendations contains server-ranked choices, current selections and quoted alternatives; section engine selection returns a revised quote. Film filmScenes can quote one scene preview at a time (renderOnly:true), or remake named/missing scenes and assemble all saved clips (renderOnly:false). After each preview confirm, check the result, and quote the next scene. Film quotes include per-character, per-scene speech, motion and lip-sync routes, or historical_unavailable when prior evidence is absent. Chat-mode confirmation uses these exact quote fields. The saved financial approval covers pictures and video; requested picture changes have separate quotes. No checkout or approval-page URL is created. Existing app approvals and issued codes remain supported.
| Argument | Type | Description |
|---|---|---|
| scope* | string | 'whole' for the whole song, 'ticked' for the sections currently ticked on the board. |
| projectId* | string | |
| filmScenes | object | |
| operationId* | string | Stable operation identifier shared by this quote and its confirmation. |
| stillQuality | string | Picture quality for the pictures. Default high. |
Waits up to 45 seconds for an active rendering stage to finish, then returns its current state and continuation data. Reads a saved whole-job or picture-only operation by its original projectId and operationId. Returns approval and generation state, next-step data, balance or shortfall where applicable, and any fresh unapproved quote. Whole-job states include making_pictures, pictures_ready, video_waiting_for_payment, starting_video, making_video and failed. Picture-only approval covers only its quoted pictures. Video retains the original financial approval and applicable readiness gates; likeness not_required needs no likeness verdict. This free read does not advance stages or charge credits.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | |
| operationId* | string | The original operationId from studio_generation_quote or studio_storyboard_stills_quote. |
{
"type": "object",
"required": [
"projectId",
"operationId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"operationId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]+$",
"maxLength": 128,
"minLength": 8,
"description": "The original operationId from studio_generation_quote or studio_storyboard_stills_quote."
}
},
"additionalProperties": false
}Waits up to 45 seconds for active picture generation or the finished video. projectId identifies the video; optional operationId identifies its original picture/video approval. A pending response is a nonterminal timeout containing the exact nextCall for another bounded wait. A completed video response contains video.url. Free and read-only; no generation, approval, quote, payment or credit change.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | |
| operationId | string | Original operationId, when waiting on the picture stage or a combined generation. |
{
"type": "object",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"operationId": {
"type": "string",
"maxLength": 128,
"minLength": 8,
"description": "Original operationId, when waiting on the picture stage or a combined generation."
}
},
"additionalProperties": false
}Returns one Brix36 creative skill, style card or writing guide by catalogue ID, including full body, version, hash and resource URI. Read-only.
| Argument | Type | Description |
|---|---|---|
| id* | string | Exact id returned by studio_list_skills. |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 240,
"minLength": 1,
"description": "Exact id returned by studio_list_skills."
}
},
"additionalProperties": false
}Spends Brix36 credits and starts one picture under the customer's financial approval of the exact quoted draftId and quoteId. Identical retries return the same operation without another charge.
| Argument | Type | Description |
|---|---|---|
| draftId* | string | Exact draftId returned with the picture price. |
| quoteId* | string | Exact quoteId returned with the picture price. |
| confirmationToken | string | Customer-issued approval code, when the customer has one. |
{
"type": "object",
"required": [
"draftId",
"quoteId"
],
"properties": {
"draftId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
"maxLength": 128,
"minLength": 1,
"description": "Exact draftId returned with the picture price."
},
"quoteId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
"maxLength": 128,
"minLength": 1,
"description": "Exact quoteId returned with the picture price."
},
"confirmationToken": {
"type": "string",
"maxLength": 4096,
"minLength": 1,
"description": "Customer-issued approval code, when the customer has one."
}
},
"additionalProperties": false
}Prices one standalone picture from a text prompt and optional owned uploads, using the same pricing as the Brix36 create box. Returns the exact credits and price with draftId and quoteId. Nothing is generated or charged.
| Argument | Type | Description |
|---|---|---|
| prompt* | string | What the picture should show, in the customer's words. |
| draftId | string | Stable draft ID for this picture. Optional when pricing; the price returns one. Reusing it with changed details reprices the same draft. |
| attachmentIds | array | Optional owned uploaded pictures that guide the result. |
{
"type": "object",
"required": [
"prompt"
],
"properties": {
"prompt": {
"type": "string",
"maxLength": 100000,
"minLength": 1,
"description": "What the picture should show, in the customer's words."
},
"draftId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
"maxLength": 128,
"minLength": 1,
"description": "Stable draft ID for this picture. Optional when pricing; the price returns one. Reusing it with changed details reprices the same draft."
},
"attachmentIds": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
"maxLength": 128,
"minLength": 1,
"description": "Owned uploaded picture ID."
},
"maxItems": 64,
"description": "Optional owned uploaded pictures that guide the result.",
"uniqueItems": true
}
},
"additionalProperties": false
}Returns the owned picture for an approved quoteId with image.url, downloadUrl and gallery-widget data once ready, or its current progress. Links are private and signed; another read refreshes them. No processing or charge is repeated.
| Argument | Type | Description |
|---|---|---|
| quoteId* | string | Exact quoteId returned with the picture price. |
{
"type": "object",
"required": [
"quoteId"
],
"properties": {
"quoteId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
"maxLength": 128,
"minLength": 1,
"description": "Exact quoteId returned with the picture price."
}
},
"additionalProperties": false
}Searches Brix36 creative skills and style cards by keyword, medium or family. Returns summaries rather than full bodies, plus resource URIs and nextCursor. No Brix36 language-model call.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum items to return, 1–50. Default 20. |
| query | string | Words to match in the approved catalogue. |
| cursor | string | Opaque previous-page nextCursor; absent for the first page. |
| family | string | Catalogue family returned by a previous result. |
| medium | string |
{
"type": "object",
"required": [],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum items to return, 1–50. Default 20."
},
"query": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Words to match in the approved catalogue."
},
"cursor": {
"type": "string",
"maxLength": 512,
"minLength": 1,
"description": "Opaque previous-page nextCursor; absent for the first page."
},
"family": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Catalogue family returned by a previous result."
},
"medium": {
"enum": [
"music_video",
"film",
"advert_ugc",
"talking_video"
],
"type": "string"
}
},
"additionalProperties": false
}Returns pending or accepted attachment status and assetId for the exact owned uploadToken. Reconciles the existing upload without creating a second attachment, generating media or spending credits.
| Argument | Type | Description |
|---|---|---|
| uploadToken* | string | The signed uploadToken returned by studio_media_upload_url. |
{
"type": "object",
"required": [
"uploadToken"
],
"properties": {
"uploadToken": {
"type": "string",
"maxLength": 4096,
"minLength": 1,
"description": "The signed uploadToken returned by studio_media_upload_url."
}
},
"additionalProperties": false
}Import a public HTTPS song, artist photo or reference into the same private attachment pipeline as an upload. projectId is optional in the schema but required to attach media: omission returns guidance to select a project, never another user project. Refuses private/loopback destinations, unsafe redirects, DNS rebinding, invalid file types, oversized downloads and slow sources. Song/photo replacement rules remain unchanged. Identical reference bytes in the same project replay the existing asset. Returns assetId and status; no provider or language model is called.
| Argument | Type | Description |
|---|---|---|
| url* | string | A direct public HTTPS media URL, port 443, without user credentials. |
| purpose* | string | The customer file role; this never selects a paid generation. |
| projectId | string | The project receiving the file. Required for song, Artist DNA (artist is derived from the project) and reference attachment; no project is selected implicitly. |
{
"type": "object",
"required": [
"purpose",
"url"
],
"properties": {
"url": {
"type": "string",
"pattern": "^https://[\\s\\S]*$",
"maxLength": 2048,
"minLength": 1,
"description": "A direct public HTTPS media URL, port 443, without user credentials."
},
"purpose": {
"enum": [
"song",
"artist_photo",
"reference"
],
"type": "string",
"description": "The customer file role; this never selects a paid generation."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The project receiving the file. Required for song, Artist DNA (artist is derived from the project) and reference attachment; no project is selected implicitly."
}
},
"additionalProperties": false
}Creates an HTTPS POST upload capability bound to the user, project, role, exact file metadata and SHA-256, expiring in 15 minutes. Returns uploadUrl, uploadToken, method and expiresAt. The upload accepts raw bytes with the declared MIME Content-Type; attachment status is confirmed separately. No file bytes pass through MCP and no generation credits are spent.
| Argument | Type | Description |
|---|---|---|
| name* | string | File name, not a local path. |
| size* | integer | |
| purpose* | string | The customer file role; this never selects a paid generation. |
| mimeType* | string | The file MIME type. |
| projectId* | string | The project receiving the file. Required for song, Artist DNA (artist is derived from the project) and reference attachment; no project is selected implicitly. |
| contentHash* | string | SHA-256 of the exact file bytes. The signed capability binds these bytes and cannot attach another file. |
{
"type": "object",
"required": [
"projectId",
"purpose",
"name",
"mimeType",
"size",
"contentHash"
],
"properties": {
"name": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "File name, not a local path."
},
"size": {
"type": "integer",
"maximum": 67108864,
"minimum": 1
},
"purpose": {
"enum": [
"song",
"artist_photo",
"reference"
],
"type": "string",
"description": "The customer file role; this never selects a paid generation."
},
"mimeType": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The file MIME type."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The project receiving the file. Required for song, Artist DNA (artist is derived from the project) and reference attachment; no project is selected implicitly."
},
"contentHash": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "SHA-256 of the exact file bytes. The signed capability binds these bytes and cannot attach another file."
}
},
"additionalProperties": false
}Opens a file picker for a song, artist photo or image/video reference on the specified project. The customer selects the file; bytes go directly to Brix36. No paid work.
| Argument | Type | Description |
|---|---|---|
| purpose* | string | The customer file role; this never selects a paid generation. |
| projectId* | string | The project receiving the file. Required for song, Artist DNA (artist is derived from the project) and reference attachment; no project is selected implicitly. |
{
"type": "object",
"required": [
"projectId",
"purpose"
],
"properties": {
"purpose": {
"enum": [
"song",
"artist_photo",
"reference"
],
"type": "string",
"description": "The customer file role; this never selects a paid generation."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The project receiving the file. Required for song, Artist DNA (artist is derived from the project) and reference attachment; no project is selected implicitly."
}
},
"additionalProperties": false
}Returns the current Brix36 model catalogue, including profiles, settings, media limits, availability reasons, recommended choices and qualified starting prices in credits and GBP minor units including VAT. Starting prices are distinct from generation quotes. Pagination uses nextCursor with the same kind. No generation or charge.
| Argument | Type | Description |
|---|---|---|
| kind | string | Optional media-kind filter; absence includes all kinds. |
| limit | integer | Maximum items to return, 1–50. Default 20. |
| cursor | string | Opaque nextCursor from the catalogue, bound to the same kind and catalogue version. Absence starts a fresh page. |
{
"type": "object",
"required": [],
"properties": {
"kind": {
"enum": [
"video",
"image",
"audio",
"edit"
],
"type": "string",
"description": "Optional media-kind filter; absence includes all kinds."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum items to return, 1–50. Default 20."
},
"cursor": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Opaque nextCursor from the catalogue, bound to the same kind and catalogue version. Absence starts a fresh page."
}
},
"additionalProperties": false
}List available Motion Graphics templates (lyric_video, audio_visualiser, living_cover, kinetic_type, club_tunnel, organic_landscape), 7 genre looks (pop, hiphop_drill, rnb, house_edm, rock, country_acoustic, afrobeats), and all 24 popular motion styles with preview video URLs and input requirements. Read-only discovery.
| Argument | Type | Description |
|---|---|---|
| aspect | string |
{
"type": "object",
"required": [],
"properties": {
"aspect": {
"enum": [
"16:9",
"9:16"
],
"type": "string"
}
},
"additionalProperties": false
}Starts the exact paid server render after the customer explicitly approves its quoted price. Chat approval returns operationId, quoteToken, revisionId, inputDigest and quotedCredits unchanged from the quote. Existing Brix36 confirmationToken codes remain supported as a separate flow. The server enforces spending permission, account policy and exact quote bindings. Identical retries reconcile the original operation. Annotations do not attest to consent or guarantee a host confirmation screen.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | |
| quoteToken* | string | |
| revisionId | string | |
| inputDigest | string | |
| operationId* | string | |
| quotedCredits | integer | |
| confirmationToken | string |
{
"type": "object",
"required": [
"projectId",
"operationId",
"quoteToken"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 128,
"minLength": 1
},
"quoteToken": {
"type": "string",
"maxLength": 4096,
"minLength": 1
},
"revisionId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
"maxLength": 128,
"minLength": 1
},
"inputDigest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"operationId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]+$",
"maxLength": 128,
"minLength": 8
},
"quotedCredits": {
"type": "integer",
"maximum": 1000000,
"minimum": 0
},
"confirmationToken": {
"type": "string",
"maxLength": 4096,
"minLength": 1
}
},
"additionalProperties": false
}Saves a ready server-rendered Motion scene and returns its exact paid-render quote plus an optional free first-frame preview. Supports lyric video, beat-reactive visualiser, kinetic titles, photo-motion poster, promo cards, the 6 music/lyric/visualiser templates (lyric_video, audio_visualiser, living_cover, kinetic_type, club_tunnel, organic_landscape) across 7 genre looks (pop, hiphop_drill, rnb, house_edm, rock, country_acoustic, afrobeats), and all 24 popular motion styles (styleId). Uses owned audio and picture asset IDs; saved song timing supplies lyric cues and the saved scene can be edited. No AI video model or paid render is called. requestId identifies the saved document across retries. Each returned quote has its own identity; rendering requires explicit customer approval bound to that quote.
| Argument | Type | Description |
|---|---|---|
| style | string | |
| title | string | |
| aspect* | string | |
| family* | string | |
| lookId | string | |
| lyrics | string | |
| styleId | string | |
| artistId | string | |
Generate a free bounded first-frame image of this exact saved revision, maximum 640px long side. No LLM, render debit or full free movie. Preview is not an approval or a priced render.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | |
| revisionId* | string |
{
"type": "object",
"required": [
"projectId",
"revisionId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 128,
"minLength": 1
},
"revisionId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
"maxLength": 128,
"minLength": 1
}
},
"additionalProperties": false
}Returns the server price in credits and GBP including VAT, bound to the exact revision, output, source and runtime. A paid render requires one explicit customer approval of this exact price. Edits invalidate prior quotes. No debit or render.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | |
| revisionId* | string |
{
"type": "object",
"required": [
"projectId",
"revisionId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 128,
"minLength": 1
},
"revisionId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
"maxLength": 128,
"minLength": 1
}
},
"additionalProperties": false
}Read the exact authored scene and revision, including editable lyric cue timing, text and owned media layers.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | |
| documentId* | string |
{
"type": "object",
"required": [
"projectId",
"documentId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 128,
"minLength": 1
},
"documentId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
"maxLength": 128,
"minLength": 1
}
},
"additionalProperties": false
}Restores a saved scene as a new revision with optimistic version checking. Original versions and media remain intact. Prior quotes become stale; further paid rendering requires a quote for the restored revision.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | |
| documentId* | string | |
| revisionId* | string | |
| expectedRevision* | integer |
{
"type": "object",
"required": [
"projectId",
"documentId",
"revisionId",
"expectedRevision"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 128,
"minLength": 1
},
"documentId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
"maxLength": 128,
"minLength": 1
},
"revisionId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
"maxLength": 128,
"minLength": 1
},
"expectedRevision": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false
}Read the finished owned asset with video.url and authenticated playback/download links. Source media remain preserved. Pending work is not a completed result.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | |
| operationId* | string |
{
"type": "object",
"required": [
"projectId",
"operationId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 128,
"minLength": 1
},
"operationId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]+$",
"maxLength": 128,
"minLength": 8
}
},
"additionalProperties": false
}Read the original durable operation after pending, timeout or unknown outcome. Successful work includes playback and download links. Reconcile means the existing effect is being checked; no replacement render is started.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | |
| operationId* | string |
{
"type": "object",
"required": [
"projectId",
"operationId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 128,
"minLength": 1
},
"operationId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]+$",
"maxLength": 128,
"minLength": 8
}
},
"additionalProperties": false
}Saves typed MotionSceneV1 with exact words, cue frame ranges and owned asset IDs. Accepts typed layers and approved fonts; HTML, JS, CSS and URLs are not scene inputs. First save creates an opaque documentId with expectedRevision 0; edits bind the current expectedRevision. Conflicts preserve the newer saved version. No Brix36 language model is called.
| Argument | Type | Description |
|---|---|---|
| scene* | object | |
| projectId* | string | |
| documentId | string | |
| expectedRevision | integer |
{
"type": "object",
"required": [
"projectId",
"scene"
],
"properties": {
"scene": {
"type": "object"
},
"projectId": {
"type": "string",
"maxLength": 128,
"minLength": 1
},
"documentId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
"maxLength": 128,
"minLength": 1
},
"expectedRevision": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
}Add the exact finished Motion result to project media through normal attachment screening, preserving original assets, movie orders and expected project revision. This does not replace or regenerate a paid movie.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | |
| operationId* | string | |
| expectedRevision* | integer |
{
"type": "object",
"required": [
"projectId",
"operationId",
"expectedRevision"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 128,
"minLength": 1
},
"operationId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]+$",
"maxLength": 128,
"minLength": 8
},
"expectedRevision": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false
}Waits up to 40 seconds for the original Motion operation, then returns its finished video.url and downloadUrl or a nonterminal pending response with an exact nextCall. Each status read checks current access. No generation, approval or credit change.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | |
| operationId* | string |
{
"type": "object",
"required": [
"projectId",
"operationId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 128,
"minLength": 1
},
"operationId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]+$",
"maxLength": 128,
"minLength": 8
}
},
"additionalProperties": false
}Sets an owned uploaded photograph as a shot's original picture, bound to attachment contentHash and confirmed rights. Creates a canonical revision and retains earlier versions. Identical argument retries reconcile the same operation. No generation or credit charge.
| Argument | Type | Description |
|---|---|---|
| shotId* | string | The stable shot ID from that board. |
| projectId* | string | The current owned project. |
| revisionId* | string | The exact current storyboard revision. |
| attachmentId* | string | Owned image attachment. |
| rightsConfirmed* | boolean | |
| expectedContentHash* | string |
{
"type": "object",
"required": [
"projectId",
"revisionId",
"shotId",
"attachmentId",
"expectedContentHash",
"rightsConfirmed"
],
"properties": {
"shotId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The stable shot ID from that board."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The current owned project."
},
"revisionId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The exact current storyboard revision."
},
"attachmentId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Owned image attachment."
},
"rightsConfirmed": {
"type": "boolean",
"const": true
},
"expectedContentHash": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"additionalProperties": false
}Set featured or not_featured for this project. Featured requires pinned DNA; the existing directed-storyboard rules still apply. No generation or charge.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | Project ID returned by studio_projects_list or studio_video_start. |
| artistPresence* | string |
{
"type": "object",
"required": [
"projectId",
"artistPresence"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project ID returned by studio_projects_list or studio_video_start."
},
"artistPresence": {
"enum": [
"featured",
"not_featured"
],
"type": "string"
}
},
"additionalProperties": false
}Archive one video or Film using the app project deletion service after the customer requests deletion. Requires editor permission. In-flight orders, paid work awaiting consumption and open/review-required checkouts refuse deletion. Returns deleted=true. This is separate from permanently erasing an artist or account.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | Project ID returned by studio_projects_list or studio_video_start. |
{
"type": "object",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project ID returned by studio_projects_list or studio_video_start."
}
},
"additionalProperties": false
}Pin this artist’s currently published DNA to this project once, within its existing pin window. Read project state after a lost response before retrying. No generation or charge.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | Project ID returned by studio_projects_list or studio_video_start. |
{
"type": "object",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project ID returned by studio_projects_list or studio_video_start."
}
},
"additionalProperties": false
}Save 0–5 unique uppercase #RRGGBB colours as exact project creative direction. An empty list clears the selection. Existing work remains in history; stale revision and active work refuse safely.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | The current owned project. |
| creatorPalette* | array | |
| expectedRevision* | integer | Current project revision. A stale revision returns revision_conflict. |
{
"type": "object",
"required": [
"projectId",
"expectedRevision",
"creatorPalette"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The current owned project."
},
"creatorPalette": {
"type": "array",
"items": {
"type": "string",
"pattern": "^#[0-9A-F]{6}$"
},
"maxItems": 5,
"minItems": 0,
"uniqueItems": true
},
"expectedRevision": {
"type": "integer",
"minimum": 1,
"description": "Current project revision. A stale revision returns revision_conflict."
}
},
"additionalProperties": false
}Renames a video or Film using expectedRevision, title and optional songTitle. Returns updated project and revision. No generation or charge.
| Argument | Type | Description |
|---|---|---|
| title* | string | New project title. |
| projectId* | string | Project ID returned by studio_projects_list or studio_video_start. |
| songTitle | string | Optional song catalogue title; absence leaves it unchanged. |
| expectedRevision* | integer | Current revision from the latest read. Stale revisions are refused. |
{
"type": "object",
"required": [
"projectId",
"expectedRevision",
"title"
],
"properties": {
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "New project title."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project ID returned by studio_projects_list or studio_video_start."
},
"songTitle": {
"type": "string",
"maxLength": 200,
"description": "Optional song catalogue title; absence leaves it unchanged."
},
"expectedRevision": {
"type": "integer",
"minimum": 1,
"description": "Current revision from the latest read. Stale revisions are refused."
}
},
"additionalProperties": false
}Lists the customer's videos newest first, optionally filtered by artistId. Returns projectId, title, artist, status, picture, last-change time and nextCursor. Free and read-only, up to 50 projects per page.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Number of results, default 20 and maximum 50. |
| cursor | string | The previous page’s nextCursor; absent on the first page. |
| artistId | string | Optional artist ID from studio_artists_list or studio_video_start. Absence lists every accessible artist’s videos. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Number of results, default 20 and maximum 50."
},
"cursor": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The previous page’s nextCursor; absent on the first page."
},
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Optional artist ID from studio_artists_list or studio_video_start. Absence lists every accessible artist’s videos."
}
},
"additionalProperties": false
}Lists the same free fictional character portraits offered by the Brix36 app, with each current star ID, name, description and versioned preview image. Read-only; creates no artist, image, generation or charge.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Stores and screens an image/video reference through the app attachment service. Inline files are limited to 512 KiB; larger files have an app upload-link path. Returns attachment and signed preview. scope:project applies to the project; scope:shot supports later shot binding. The reference list exposes persisted results after uncertain replies. No language model or generation-credit charge.
| Argument | Type | Description |
|---|---|---|
| kind* | string | Existing reference media kind. |
| name* | string | File display name, for example wardrobe.webp. |
| scope | string | Whole project by default; shot is supported only for an image. |
| mimeType* | string | Actual MIME type. It must match the kind and file bytes. |
| projectId* | string | Project ID returned by studio_projects_list or studio_video_start. |
| bytesBase64* | string | Canonical base64 file bytes without a data URL prefix, up to 512 KiB decoded. Larger files have an app upload-link path. |
| intendedAtMs | integer | Optional song position for a shot-scoped image; this records intent and does not bind a shot. |
Remove an existing image/video reference attachment from a project using the app service. Requires editor permission and the customer choosing this reference. The app removes its dependent notes and applies existing reference binding rules. Returns deleted=true; it does not delete another project reference or a song.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | Project ID returned by studio_projects_list or studio_video_start. |
| attachmentId* | string | Attachment ID returned by studio_references_list or studio_song_status. |
{
"type": "object",
"required": [
"projectId",
"attachmentId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project ID returned by studio_projects_list or studio_video_start."
},
"attachmentId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Attachment ID returned by studio_references_list or studio_song_status."
}
},
"additionalProperties": false
}Save one concrete creative instruction about a customer reference already on this project. The connected assistant does the interpretation with the customer; Brix36 validates and stores the finished sentence through the existing app fact service. Returns an approved user-authored fact. Duplicate category/sentence on the same attachment is reused. Free; no server language model is called.
| Argument | Type | Description |
|---|---|---|
| category* | string | App reference fact category. |
| projectId* | string | Project ID returned by studio_projects_list or studio_video_start. |
| statement* | string | One customer-approved instruction grounded in the uploaded reference. |
| attachmentId* | string | Attachment ID returned by studio_references_list or studio_song_status. |
{
"type": "object",
"required": [
"projectId",
"attachmentId",
"category",
"statement"
],
"properties": {
"category": {
"enum": [
"world",
"wardrobe",
"object",
"palette",
"cinematography",
"avoid"
],
"type": "string",
"description": "App reference fact category."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project ID returned by studio_projects_list or studio_video_start."
},
"statement": {
"type": "string",
"maxLength": 240,
"minLength": 1,
"description": "One customer-approved instruction grounded in the uploaded reference."
},
"attachmentId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Attachment ID returned by studio_references_list or studio_song_status."
}
},
"additionalProperties": false
}Approve, reject or rewrite one reference note using the app service. Rewriting records the sentence as user-authored; omitted fields stay unchanged. Returns the updated fact. Requires permission to edit its project and the customer choosing the change. No server interpretation or paid work starts.
| Argument | Type | Description |
|---|---|---|
| factId* | string | Fact ID returned by studio_reference_notes_list. |
| status | string | Customer review choice for this fact. |
| projectId* | string | Project ID returned by studio_projects_list or studio_video_start. |
| statement | string | Replacement sentence approved by the customer. |
{
"type": "object",
"required": [
"projectId",
"factId"
],
"properties": {
"factId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Fact ID returned by studio_reference_notes_list."
},
"status": {
"enum": [
"approved",
"rejected"
],
"type": "string",
"description": "Customer review choice for this fact."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project ID returned by studio_projects_list or studio_video_start."
},
"statement": {
"type": "string",
"maxLength": 240,
"minLength": 1,
"description": "Replacement sentence approved by the customer."
}
},
"minProperties": 3,
"additionalProperties": false
}Returns a paginated list of existing approved, proposed or rejected reference notes for a project, optionally filtered by attachment. No server interpretation starts.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum items to return, 1–50. Default 20. |
| cursor | string | Opaque previous-page nextCursor; absent for the first page. |
| projectId* | string | Project ID returned by studio_projects_list or studio_video_start. |
| attachmentId | string | Attachment ID returned by studio_references_list or studio_song_status. |
{
"type": "object",
"required": [
"projectId"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum items to return, 1–50. Default 20."
},
"cursor": {
"type": "string",
"maxLength": 512,
"minLength": 1,
"description": "Opaque previous-page nextCursor; absent for the first page."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project ID returned by studio_projects_list or studio_video_start."
},
"attachmentId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Attachment ID returned by studio_references_list or studio_song_status."
}
},
"additionalProperties": false
}Returns the app reference-upload screen for an editable project, including for files over the 512 KiB inline limit. Uploaded results appear in the project's reference list. No upload or generation occurs in this read.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | Project ID returned by studio_projects_list or studio_video_start. |
{
"type": "object",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project ID returned by studio_projects_list or studio_video_start."
}
},
"additionalProperties": false
}Browse customer image/video references across their accessible projects, or filter one project. Returns up to 50 references with projectId, attachmentId, signed contentUrl, scope, analysis status and a small preview of existing facts, plus nextCursor. Shot references affect only bound shots. Nothing is analysed by this tool.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum items to return, 1–50. Default 20. |
| cursor | string | Opaque previous-page nextCursor; absent for the first page. |
| projectId | string | Project ID returned by studio_projects_list or studio_video_start. |
{
"type": "object",
"required": [],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum items to return, 1–50. Default 20."
},
"cursor": {
"type": "string",
"maxLength": 512,
"minLength": 1,
"description": "Opaque previous-page nextCursor; absent for the first page."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project ID returned by studio_projects_list or studio_video_start."
}
},
"additionalProperties": false
}Creates an album, EP or single collection with title, type, year and artwork preset. Returns release summary and app project-creation links. Creation has no replay receipt; the artist's release list exposes saved title/type/year after an uncertain response. No language model, generation or charge.
| Argument | Type | Description |
|---|---|---|
| type* | string | Existing app release collection type. |
| year* | integer | Four-digit release year accepted by the app. |
| title* | string | Collection title, such as an album name. |
| artwork* | string | Existing app artwork preset. |
| artistId* | string | Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film. |
{
"type": "object",
"required": [
"artistId",
"title",
"type",
"year",
"artwork"
],
"properties": {
"type": {
"enum": [
"album",
"ep",
"single"
],
"type": "string",
"description": "Existing app release collection type."
},
"year": {
"type": "integer",
"maximum": 2200,
"minimum": 1900,
"description": "Four-digit release year accepted by the app."
},
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Collection title, such as an album name."
},
"artwork": {
"enum": [
"afterglow",
"glasshouse",
"signal",
"solstice",
"archive"
],
"type": "string",
"description": "Existing app artwork preset."
},
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film."
}
},
"additionalProperties": false
}Lists an artist's album, EP and single collections with projectIds, status, artwork, year, verified app project-creation links and nextCursor. Free and read-only. MCP project creation currently creates standalone releases; collection project creation uses the app.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum items to return, 1–50. Default 20. |
| cursor | string | Opaque previous-page nextCursor; absent for the first page. |
| artistId* | string | Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film. |
{
"type": "object",
"required": [
"artistId"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum items to return, 1–50. Default 20."
},
"cursor": {
"type": "string",
"maxLength": 512,
"minLength": 1,
"description": "Opaque previous-page nextCursor; absent for the first page."
},
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film."
}
},
"additionalProperties": false
}Selects an available modelName or generation profile for one quoted section and returns a revised signed quote with costEstimateId. Film uses saved scene.index. modelName:null restores the server-ranked Recommended choice; omitted modelName preserves explicit selections. profile {aspect,resolution} is constrained to availableProfiles. Other sections retain their choices; outputs fit the project canvas without cropping. The revised quote has its own price and approval binding. operationId identifies identical selection retries. Film speech data reports the actual per-scene routes or historical_unavailable. No credits are spent and no generation starts.
| Argument | Type | Description |
|---|---|---|
| profile | object | |
| modelName | string | null | Available modelName from studio_section_engines; null restores Recommended and absence retains explicit selections during a profile change. Profiles are constrained to returned availableProfiles. |
| projectId* | string | Project identified by the quote. |
| operationId* | string | Client-generated identity for a selection quote. Identical retries share the identity; different selections have distinct identities. |
| sectionIndex* | integer | Music section index, or the exact saved Film scene.index, whose new generation uses this engine. |
| costEstimateId* |
Returns engine options for one section of an existing generation quote identified by costEstimateId or quoteToken. Film sectionIndex is the saved zero-based scene.index. Includes availability, requirements, selection, server Recommended marker, allocated_final_total section share, availableProfiles and finalVideoCredits. Option selection_total is a whole alternative video quote total, excluding pictures. No selection change or spending.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | Project identified by the quote. |
| sectionIndex* | integer | Music section index, or the exact saved Film scene.index, to show options for. |
| costEstimateId* | string | Exact costEstimateId returned by studio_generate_quote or studio_section_engine_select. |
| expectedRevisionId* | string | Exact current storyboard revision from studio_storyboard_context. |
{
"type": "object",
"required": [
"projectId",
"expectedRevisionId",
"costEstimateId",
"sectionIndex"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project identified by the quote."
},
"sectionIndex": {
"type": "integer",
"maximum": 239,
"minimum": 0,
"description": "Music section index, or the exact saved Film scene.index, to show options for."
},
"costEstimateId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Exact costEstimateId returned by studio_generate_quote or studio_section_engine_select."
},
"expectedRevisionId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Exact current storyboard revision from studio_storyboard_context."
}
},
"additionalProperties": false
}Returns the project's 30-second storyboard sections, including indexes, times, names, inclusion, pictures, action, Performance/Story type and lyric line IDs with lip-sync settings. These indexes and IDs identify inputs to section-edit tools. Free and read-only.
| Argument | Type | Description |
|---|---|---|
| projectId* | string |
{
"type": "object",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1
}
},
"additionalProperties": false
}Sets lip-sync for one existing lyric line identified by section index and stable line ID. sync:true means the artist mouths the line. Defaults are true for the artist's own words and false for guest/ad-lib lines. No generation or charge.
| Argument | Type | Description |
|---|---|---|
| sync* | boolean | True when the artist mouths this line. |
| lineId* | string | The line id from studio_sections_read. |
| projectId* | string | |
| revisionId | string | The revisionId returned by the read. Required by the hosted writer. |
| expectedText | string | Exact line text from the read; a precondition, never an edit. Required by the hosted writer. |
| sectionIndex* | integer | |
| expectedStartMs | integer | Exact startMs from the read; a precondition, never a retiming. Required by the hosted writer. |
{
"type": "object",
"required": [
"projectId",
"sectionIndex",
"lineId",
"sync"
],
"properties": {
"sync": {
"type": "boolean",
"description": "True when the artist mouths this line."
},
"lineId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "The line id from studio_sections_read."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"revisionId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The revisionId returned by the read. Required by the hosted writer."
},
"expectedText": {
"type": "string",
"maxLength": 10000,
"description": "Exact line text from the read; a precondition, never an edit. Required by the hosted writer."
},
"sectionIndex": {
"type": "integer",
"maximum": 999,
"minimum": 0
},
"expectedStartMs": {
"type": "integer",
"minimum": 0,
"description": "Exact startMs from the read; a precondition, never a retiming. Required by the hosted writer."
}
},
"additionalProperties": false
}Updates included, type and/or what for one existing 30-second storyboard section. Omitted fields remain unchanged. Timing, names and pictures are outside this operation. No generation or charge.
| Argument | Type | Description |
|---|---|---|
| type | string | Performance or Story. |
| what | string | "What happens" in this section. |
| index* | integer | |
| included | boolean | The tick. False leaves this section out of the generation. |
| projectId* | string | |
| revisionId | string | The revisionId returned by the read. Required by the hosted writer. |
{
"type": "object",
"required": [
"projectId",
"index"
],
"properties": {
"type": {
"enum": [
"performance",
"story"
],
"type": "string",
"description": "Performance or Story."
},
"what": {
"type": "string",
"maxLength": 2000,
"description": "\"What happens\" in this section."
},
"index": {
"type": "integer",
"maximum": 999,
"minimum": 0
},
"included": {
"type": "boolean",
"description": "The tick. False leaves this section out of the generation."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"revisionId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The revisionId returned by the read. Required by the hosted writer."
}
},
"additionalProperties": false
}Read the actual owned driving-video references for a shot. These are distinct from extracted reference pictures. No paid work.
| Argument | Type | Description |
|---|---|---|
| shotId* | string | The stable shot ID from that board. |
| projectId* | string | The current owned project. |
| revisionId* | string | The exact current storyboard revision. |
{
"type": "object",
"required": [
"projectId",
"revisionId",
"shotId"
],
"properties": {
"shotId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The stable shot ID from that board."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The current owned project."
},
"revisionId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The exact current storyboard revision."
}
},
"additionalProperties": false
}Binds up to three owned uploaded 1–15 second original clips as shot motion/composition references. Measures bytes and creates one canonical revision. Stricter model limits or unsupported driving-video inputs refuse before payment. Clips remain video references rather than sampled pictures. Empty attachmentIds clears the selection; identical retries reconcile the same write.
| Argument | Type | Description |
|---|---|---|
| shotId* | string | The stable shot ID from that board. |
| projectId* | string | The current owned project. |
| revisionId* | string | The exact current storyboard revision. |
| attachmentIds* | array | |
| rightsConfirmed* | boolean | |
| expectedRevisionId* | string | The exact current storyboard revision. |
{
"type": "object",
"required": [
"projectId",
"revisionId",
"shotId",
"expectedRevisionId",
"attachmentIds",
"rightsConfirmed"
],
"properties": {
"shotId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The stable shot ID from that board."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The current owned project."
},
"revisionId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The exact current storyboard revision."
},
"attachmentIds": {
"type": "array",
"items": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Owned original video attachment."
},
"maxItems": 3,
"uniqueItems": true
},
"rightsConfirmed": {
"type": "boolean",
"const": true
},
"expectedRevisionId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The exact current storyboard revision."
}
},
"additionalProperties": false
}Returns a song upload widget and a one-time fallback uploadUrl for an existing project. File bytes go directly to Brix36. Repeated calls return the same fallback link or the existing song attachment. No charge.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | From studio_video_start. |
{
"type": "object",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "From studio_video_start."
}
},
"additionalProperties": false
}Attaches existing customer audio from an accessible source project to an empty target through the durable upload/analysis path. sourceAttachmentId identifies the saved song attachment. Returns attachment/asset/job IDs or already_attached for identical audio. Repeats return the existing result; different current audio refuses replacement. No arbitrary URL fetch, generated audio or language-model call.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | Project ID returned by studio_projects_list or studio_video_start. |
| sourceProjectId* | string | Readable source project already holding the song. |
| sourceAttachmentId* | string | Source audio attachment ID from studio_song_status. |
{
"type": "object",
"required": [
"projectId",
"sourceProjectId",
"sourceAttachmentId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project ID returned by studio_projects_list or studio_video_start."
},
"sourceProjectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Readable source project already holding the song."
},
"sourceAttachmentId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Source audio attachment ID from studio_song_status."
}
},
"additionalProperties": false
}Read the currently attached song and its technical analysis for a project. Returns the song attachment, latest upload job status, analysis ID, measured duration, tempo, sections and existing themes when available. Absent analysis stays pending. Free; this never starts transcription, reasoning or a storyboard.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | Project ID returned by studio_projects_list or studio_video_start. |
{
"type": "object",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project ID returned by studio_projects_list or studio_video_start."
}
},
"additionalProperties": false
}Saves finished song understanding against the current analysisId, assetId and understandingRevision. Accepts lyrics/description, language, themes and required words/lines arrays in the timed-transcription shape; empty arrays represent unavailable genuine timing. Source text alone supplies no lip-sync timing or voice ownership. voiceAnswer represents the customer's all_me, other_voices or skipped decision. Preserves measured audio facts and returns canonical understanding with a new revision. Stale input is refused. No transcription/planning model or credit charge.
| Argument | Type | Description |
|---|---|---|
| lines* | array | TimedLine text/startMs/endMs, requiring supplied timed words. An empty array leaves section line-sync empty; prose alone supplies no timing. |
| words* | array | Existing TimedWord shape: text/startMs/endMs. Genuine customer-supplied master timing only; [] when unknown. IDs are assigned by the canonical app normalizer. |
| lyrics | string | Customer-supplied source lyrics with original line breaks. Absence retains existing lyrics; an empty string clears them. |
| themes | array | Optional song themes. Absence retains existing themes; [] clears them. |
| language | string | null | Customer-supplied language, null when unknown. Absence retains the existing language. |
| projectId* | string |
List one artist songs using the app canonical grouping, including their available project versions. Returns a bounded songs page and nextCursor. Each song projectId identifies the project holding that song version. Free; this does not upload or generate audio.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum items to return, 1–50. Default 20. |
| cursor | string | Opaque previous-page nextCursor; absent for the first page. |
| artistId* | string | Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film. |
{
"type": "object",
"required": [
"artistId"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum items to return, 1–50. Default 20."
},
"cursor": {
"type": "string",
"maxLength": 512,
"minLength": 1,
"description": "Opaque previous-page nextCursor; absent for the first page."
},
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Artist ID returned by studio_artists_list or studio_artist_read. Also identifies this artist when casting a Film."
}
},
"additionalProperties": false
}Records the customer's storyboard approval for the exact current revisionId using the app's approval service. Changed revisions are refused. Directed-board and existing purchase guards remain enforced. No credits are spent and no media is generated.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | The music-video or Film project id. |
| revisionId* | string | Exact storyboard revisionId from studio_sections_read. Identical retries retain the originally quoted revision. |
{
"type": "object",
"required": [
"projectId",
"revisionId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The music-video or Film project id."
},
"revisionId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Exact storyboard revisionId from studio_sections_read. Identical retries retain the originally quoted revision."
}
},
"additionalProperties": false
}Returns current song analysis, brief, approved Artist DNA, references, exact shot timings and storyboard for a Music project. Includes audioAnalysisId, expectedRevisionId, fixed skeleton, approved evidence and submission schema for direction and visualWorld. No planning model or other work starts.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | Music-video project to read. |
| targetShotCount | integer | Optional first-board shot count, shared with studio_storyboard_submit. |
{
"type": "object",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Music-video project to read."
},
"targetShotCount": {
"type": "integer",
"maximum": 240,
"minimum": 1,
"description": "Optional first-board shot count, shared with studio_storyboard_submit."
}
},
"additionalProperties": false
}Saves finished prompt text and existing uploaded references as an immutable storyboard revision. Whole/section scope writes shared sectionDirection; shot/still scope writes frame description and optional motion/camera. References replace targeted bindings; [] clears and omission inherits. Requires the current revision. No pictures, video, planning model or credit charge.
| Argument | Type | Description |
|---|---|---|
| scope* | string | Whole/section saves a shared sectionDirection; shot/still edits the visible frame prompt. |
| camera | string | Finished camera movement for a shot/still. |
| motion | string | Finished subject movement for a shot/still. |
| prompt | string | Finished prompt, at most 4,000 characters for shot/still or 2,000 for whole/section. The server fits saved direction to the selected engine. |
| shotId | string | Current stable shot id, required for shot or still scope. |
| projectId* | string | Project identified by the current storyboard read. |
| sectionIndex | integer | Current section index, required for section scope. |
| expectedRevisionId |
Record the customer’s confirmed or rejected likeness verdict for one exact saved picture. Requires the revision, shot and still asset the customer reviewed. Changes no picture and spends no credits.
| Argument | Type | Description |
|---|---|---|
| verdict* | string | For record_likeness: confirmed means the customer said this picture carries the right likeness; rejected means the customer said replace it. |
| projectId* | string | The music-video or Film project id. |
| revisionId* | string | Exact storyboard revisionId from studio_sections_read. Identical retries retain the originally quoted revision. |
| stableShotId* | string | For record_likeness: the exact stableShotId shown to the customer. |
| expectedStillAssetId* | string | For record_likeness: the exact saved stillAssetId reviewed by the customer, binding the verdict to that picture. |
{
"type": "object",
"required": [
"projectId",
"revisionId",
"stableShotId",
"expectedStillAssetId",
"verdict"
],
"properties": {
"verdict": {
"enum": [
"confirmed",
"rejected"
],
"type": "string",
"description": "For record_likeness: confirmed means the customer said this picture carries the right likeness; rejected means the customer said replace it."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The music-video or Film project id."
},
"revisionId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Exact storyboard revisionId from studio_sections_read. Identical retries retain the originally quoted revision."
},
"stableShotId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "For record_likeness: the exact stableShotId shown to the customer."
},
"expectedStillAssetId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "For record_likeness: the exact saved stillAssetId reviewed by the customer, binding the verdict to that picture."
}
},
"additionalProperties": false
}Record the customer’s acceptance of the complete saved key-look picture set. Supply the exact revision and shot/asset pairs reviewed. Changes no picture and spends no credits.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | The music-video or Film project id. |
| revisionId* | string | Exact storyboard revisionId from studio_sections_read. Identical retries retain the originally quoted revision. |
| expectedStills* | array | For accept_look: the complete saved lookTest.stableShotIds set paired with the stillAssetIds reviewed by the customer. Corresponds to readiness.reviewStills entries with lookSelected:true, with one saved picture per stableShotId. |
{
"type": "object",
"required": [
"projectId",
"revisionId",
"expectedStills"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The music-video or Film project id."
},
"revisionId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Exact storyboard revisionId from studio_sections_read. Identical retries retain the originally quoted revision."
},
"expectedStills": {
"type": "array",
"items": {
"type": "object",
"required": [
"stableShotId",
"stillAssetId"
],
"properties": {
"stableShotId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "A saved key-look stableShotId."
},
"stillAssetId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The exact current saved picture the customer accepted for that shot."
}
},
"additionalProperties": false
},
"maxItems": 5,
"minItems": 1,
"description": "For accept_look: the complete saved lookTest.stableShotIds set paired with the stillAssetIds reviewed by the customer. Corresponds to readiness.reviewStills entries with lookSelected:true, with one saved picture per stableShotId.",
"uniqueItems": true
}
},
"additionalProperties": false
}Prices requested picture changes by original projectId/operationId, a new requestId and selected stableShotIds. New approvals produce separate picture-only quotes containing operationId, quoteToken, revisionId, modelId, mode, priceVersion and totalCredits. Identical requestId retries return the original quotes. Historical approvals can complete their previously approved paid picture changes. No charge for quoting.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | |
| requestId* | string | New identifier for this picture-change request. Identical retries retain the original requestId. |
| operationId* | string | The operationId of the customer's approval (from studio_generation_quote). |
| stableShotIds* | array | The shots to redo or make, as stableShotIds from studio_storyboard_preview. |
{
"type": "object",
"required": [
"projectId",
"operationId",
"requestId",
"stableShotIds"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"requestId": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"maxLength": 64,
"minLength": 8,
"description": "New identifier for this picture-change request. Identical retries retain the original requestId."
},
"operationId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]+$",
"maxLength": 128,
"minLength": 8,
"description": "The operationId of the customer's approval (from studio_generation_quote)."
},
"stableShotIds": {
"type": "array",
"items": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"maxItems": 10,
"minItems": 1,
"description": "The shots to redo or make, as stableShotIds from studio_storyboard_preview.",
"uniqueItems": true
}
},
"additionalProperties": false
}Validates and saves visualWorld for an existing Music or Film storyboard at expectedRevisionId. Preserves scenes, dialogue, timing, stable shot IDs, cast, identity choices and references. Returns ready synchronously for a valid world, or needs_visual_world with saved-scene context and schema when absent. An already-valid saved world returns ready without a new revision. No planning model, queue, generation provider or credit use.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | Existing music-video or Film project. |
| visualWorld | object | Board-wide visual facts. Optional characters, vehicles, locations, props and never are arrays of up to 12 non-empty strings, each at most 300 characters. Combined rendered fields are limited to 2,400 characters including labels, separators and newlines after trimming. Scene-specific costume and visual direction belong to scene text. |
| expectedRevisionId* | string | Exact current authored storyboard revision. Current saved state is available through storyboard reads after uncertain replies. |
{
"type": "object",
"required": [
"projectId",
"expectedRevisionId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Existing music-video or Film project."
},
"visualWorld": {
"type": "object",
"required": [
"timeOfDay",
"light",
"setting"
],
"properties": {
"light": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"never": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
},
"props": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
},
"artist": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"palette": {
"type": "array",
"items": {
"type": "string",
"pattern": "^#[0-9A-F]{6}$"
},
"maxItems": 5,
"description": "Optional creator-selected palette: 0–5 unique uppercase #RRGGBB colours.",
"uniqueItems": true
},
"setting": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"vehicles": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
},
"locations": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
},
"timeOfDay": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"characters": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
}
},
"description": "Board-wide visual facts. Optional characters, vehicles, locations, props and never are arrays of up to 12 non-empty strings, each at most 300 characters. Combined rendered fields are limited to 2,400 characters including labels, separators and newlines after trimming. Scene-specific costume and visual direction belong to scene text.",
"additionalProperties": false
},
"expectedRevisionId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Exact current authored storyboard revision. Current saved state is available through storyboard reads after uncertain replies."
}
},
"additionalProperties": false
}Returns the stored storyboard as 30-second section cards with lines and numbered shots. Each shot includes stableShotId and a signed stillUrl valid for about a day, or null if no picture exists. Supported hosts also receive an interactive preview. Free and read-only.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | Project id from the Brix36 library. |
{
"type": "object",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project id from the Brix36 library."
}
},
"additionalProperties": false
}Returns readyForVideo, shotsMissingStills, public likenessGate, look-test state and reviewStills for the exact project and revision. Each review binding identifies a saved stableShotId/stillAssetId. A likenessGate of not_required needs no likeness verdict; an absent look test needs no look acceptance. Required likeness verdicts and acceptance of the saved look set are recorded separately. Video uses the original approved price and the existing readiness gates. No state change, provider call or charge.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | The music-video or Film project id. |
| revisionId* | string | Exact storyboard revisionId from studio_sections_read. Identical retries retain the originally quoted revision. |
{
"type": "object",
"required": [
"projectId",
"revisionId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The music-video or Film project id."
},
"revisionId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Exact storyboard revisionId from studio_sections_read. Identical retries retain the originally quoted revision."
}
},
"additionalProperties": false
}Validates a widget-selected stableShotId against the current visible storyboard and returns a request to price that picture change. No approval, generation or spending.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | Current storyboard project. |
| stableShotId* | string | The shot whose picture the customer tapped. |
{
"type": "object",
"required": [
"projectId",
"stableShotId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Current storyboard project."
},
"stableShotId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The shot whose picture the customer tapped."
}
},
"additionalProperties": false
}Spends Brix36 credits for exactly the approved quoted pictures. Chat mode requires the quote's unchanged projectId, revisionId, mode, operationId, quoteToken, modelId, priceVersion and quotedCredits. Insufficient balance returns balance, shortfall and creditsInformationUrl without a checkout. Durable purchase/job reconciliation makes identical retries safe, including after expiry. Legacy confirmationToken remains supported. No video authorization or planning-model call.
| Argument | Type | Description |
|---|---|---|
| mode* | string | missing prepares selected shots without pictures; new_version buys another picture for exactly one shot that already has one. |
| modelId* | string | The exact modelId label returned with that still quote. |
| projectId* | string | The music-video or Film project id. |
| quoteToken* | string | The exact opaque quoteToken returned by studio_storyboard_stills_quote. |
| revisionId* | string | Exact storyboard revisionId from studio_sections_read. Identical retries retain the originally quoted revision. |
| operationId* | string |
Prices selected storyboard pictures without spending. Supports missing pictures or new_version for exactly one existing picture, bound to the current revision, quality and stableShotIds. lookTest:true selects the saved bounded key-look set. Returns a signed picture-only quote and exact confirmation fields. Missing operationId is derived by the server; new_version uses a stable op_ ID. Chat approval and existing issued confirmation codes are supported. Short balance returns credit information only. This quote covers no video or planning model.
| Argument | Type | Description |
|---|---|---|
| mode* | string | missing prepares selected shots without pictures; new_version buys another picture for exactly one shot that already has one. |
| quality* | string | The customer’s explicit picture quality; high is the app’s best-picture option. |
| lookTest | boolean | For missing mode, true selects the approved storyboard’s saved key-look set. In this mode stableShotIds and operationId are absent. |
| projectId* | string | The music-video or Film project id. |
| revisionId* | string | Exact storyboard revisionId from studio_sections_read. Identical retries retain the originally quoted revision. |
| operationId |
Validates and saves a finished Music storyboard with one DirectedShot per fixed shot order, exact expectedRevisionId/audioAnalysisId, optional treatment and visualWorld. Creates an immutable revision while preserving server-owned timing. visualWorld is required for quoting. No model, queue, provider or credit use.
| Argument | Type | Description |
|---|---|---|
| shots* | array | Finished direction, exactly one entry per server-owned shot order. |
| projectId* | string | Existing music-video project id. |
| treatment | object | |
| visualWorld | object | Board-wide visual facts. Optional characters, vehicles, locations, props and never are arrays of up to 12 non-empty strings, each at most 300 characters. Combined rendered fields are limited to 2,400 characters including labels, separators and newlines after trimming. Scene-specific costume and visual direction belong to scene text. |
| audioAnalysisId* | string | Exact current song analysis id returned by the context. |
| targetShotCount | integer | Optional first-board shot count used when reading the context. Existing timing is preserved. |
| expectedRevisionId* | string | null |
Updates the supplied existing 30-second storyboard sections with what, type and included fields. The server owns section indexes, count, names, timing and pictures. All supplied edits succeed together or the prior board is restored with a refusal identifying the failed section. No generation or credit charge.
| Argument | Type | Description |
|---|---|---|
| sections* | array | The drafted sections. Each names the index it changes and any of what, type, included. |
| projectId* | string |
{
"type": "object",
"required": [
"projectId",
"sections"
],
"properties": {
"sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"index"
],
"properties": {
"type": {
"type": "string",
"description": "Performance or Story. One of: \"performance\", \"story\"."
},
"what": {
"type": "string",
"maxLength": 2000,
"description": "\"What happens\" in this section."
},
"index": {
"type": "integer",
"maximum": 999,
"minimum": 0
},
"included": {
"type": "boolean",
"description": "The tick. False leaves this section out."
}
},
"additionalProperties": false
},
"maxItems": 24,
"minItems": 1,
"description": "The drafted sections. Each names the index it changes and any of what, type, included."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1
}
},
"additionalProperties": false
}Returns signed download links for existing finished Music video or Film results and selected range files, including results beside unfinished edits. No public publishing, render, payment or extra export charge.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | Project id from the Brix36 library. |
{
"type": "object",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project id from the Brix36 library."
}
},
"additionalProperties": false
}Creates or updates a film or music-video project, saves its script or storyboard, and returns a price quote without charging. Film input contains the finished script, language, cast and visualWorld. Music input contains sections, visualWorld and optional songUnderstanding. start identifies a new project; projectId identifies an existing one. A music project without a song returns state needs_song and its projectId; planning can continue on that project after its song upload. The result contains the project, saved plan and quote. Identical operationId and input retries return the same project and quote. Rendering is separate and requires the customer's approval of the quoted price.
| Argument | Type | Description |
|---|---|---|
| film | object | Film only: the finished script, language, cast and visualWorld (same fields as studio_film_script_write). expectedRevisionId may be omitted for a new film. |
| music | object | Music only: what to save on the board once the song is on the project. |
| scope* | string | 'whole' for the whole song, 'ticked' for the sections currently ticked on the board. |
| start | object | Start a new video (same fields as studio_video_start). Omit when continuing an existing projectId. |
| projectId | string | Continue this existing project instead of starting a new one. |
| filmScenes |
Returns current edit status and signed playback links for an existing finished master or selected range files, including finished results beside unfinished edits. Supported hosts receive players. No generation or credit charge.
| Argument | Type | Description |
|---|---|---|
| projectId* | string | Project id from the Brix36 library. |
{
"type": "object",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project id from the Brix36 library."
}
},
"additionalProperties": false
}Creates a Music or Film project in the customer's catalogue. Accepts an existing artist name or a new fictional name with createArtist:true. Fictional characters require no photo or likeness consent; real-person creation retains the app consent flow. Music requires songTitle; Film requires title or songTitle and no song. Identical retries return the same project. Returns project identifiers for song upload or Film script import. No generation or charge.
| Argument | Type | Description |
|---|---|---|
| kind* | string | The requested video kind: music is a music video for a song; film is a short film with scenes, dialogue and optional music. |
| title | string | What to call the video. Defaults to the song title. A film without a songTitle needs this. |
| artistId | string | Exact artist ID from studio_artists_list, disambiguating artists with the same name. ID and artistName must match. |
| songTitle | string | The song this video is for. Required for a music video; optional for a film, which needs no song. Shown to the customer and used for the catalogue entry. |
| artistName* | string | The existing artist or invented character starring in it. Required: an existing name from studio_artists_list (case and spacing do not matter), or the customer's chosen new fictional name with createArtist: true. |
| durationMs | integer | The song length in milliseconds, if the customer's AI knows it. |
Waits up to 45 seconds while rendering, then returns draft, storyboard_ready, making, ready or needs_attention state, section progress counts, the studio's explanation and video.url when finished, with selected range labels, extent and original file links. Excluded sections are counted separately from failures. Provider fallback remains within the quoted price. No new work or charge.
| Argument | Type | Description |
|---|---|---|
| projectId* | string |
{
"type": "object",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1
}
},
"additionalProperties": false
}| recurringThemes |
| array |
| Artist recurring themes. An empty array clears the list. |
| catalogueArtistId | string | Optional existing artist identifying the catalogue for creation. Not needed for a single-catalogue account. |
{
"type": "object",
"required": [
"name"
],
"properties": {
"bio": {
"type": "string",
"maxLength": 4000,
"description": "Artist biography; an empty string clears it."
},
"name": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "New artist name."
},
"genres": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "One value."
},
"maxItems": 24,
"description": "Artist genres. An empty array clears the list."
},
"location": {
"type": "string",
"maxLength": 120,
"description": "Artist location; an empty string clears it."
},
"influences": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "One value."
},
"maxItems": 24,
"description": "Artist influences. An empty array clears the list."
},
"identityKind": {
"enum": [
"real_person",
"fictional_character"
],
"type": "string",
"description": "Factual identity of the new artist. Real person by default. Adding a real face photo follows the app real-person rules."
},
"visualKeywords": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "One value."
},
"maxItems": 24,
"description": "Artist visual keywords. An empty array clears the list."
},
"primaryLanguage": {
"type": "string",
"maxLength": 60,
"description": "Artist primary language; an empty string clears it."
},
"recurringThemes": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "One value."
},
"maxItems": 24,
"description": "Artist recurring themes. An empty array clears the list."
},
"catalogueArtistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Optional existing artist identifying the catalogue for creation. Not needed for a single-catalogue account."
}
},
"additionalProperties": false
}| string |
| Look only: the look to make, up to 1000 characters. Send the same text to quote and confirm. |
| confirmationToken | string | Optional: an existing Brix36 approval code instead of in-chat consent. |
| inspirationAssetIds | array | Look only, optional: up to four owned inspiration photos. Send the same list to quote and confirm. |
{
"type": "object",
"required": [
"artistId",
"kind",
"operationId",
"quoteToken"
],
"properties": {
"kind": {
"enum": [
"photo_pack",
"look"
],
"type": "string",
"description": "photo_pack: missing views from their existing photo. look: an invented look for an artist with no customer photo."
},
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The artist, from studio_artists_list or studio_artist_create."
},
"quoteToken": {
"type": "string",
"maxLength": 8192,
"minLength": 1,
"description": "Exact signed quote."
},
"operationId": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Exact quoted operation ID."
},
"priceVersion": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The priceVersion returned by the quote."
},
"quotedCredits": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "The exact credits the customer approved in chat."
},
"lookDescription": {
"type": "string",
"maxLength": 1000,
"minLength": 1,
"description": "Look only: the look to make, up to 1000 characters. Send the same text to quote and confirm."
},
"confirmationToken": {
"type": "string",
"maxLength": 4096,
"minLength": 1,
"description": "Optional: an existing Brix36 approval code instead of in-chat consent."
},
"inspirationAssetIds": {
"type": "array",
"items": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Owned inspiration photo asset."
},
"maxItems": 4,
"description": "Look only, optional: up to four owned inspiration photos. Send the same list to quote and confirm.",
"uniqueItems": true
}
},
"additionalProperties": false
}| expectedRevisionId* |
| string | null |
| The exact revisionId from studio_sections_read; null only for a Film with no storyboard. |
{
"type": "object",
"required": [
"projectId",
"operationId",
"expectedRevisionId",
"language",
"castIds",
"scenes"
],
"properties": {
"scenes": {
"type": "array",
"items": {
"type": "object",
"description": "Shape: {what: string, camera: string, lines?: list of {speakerId: string, parenthetical: string, text: string, onCamera: boolean, useCharacterVoice?: boolean, voiceDescription?: string}}"
},
"maxItems": 240,
"minItems": 1
},
"castIds": {
"type": "array",
"items": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "An available artist/actor in this Film’s workspace, in cast-slot order."
},
"maxItems": 6,
"uniqueItems": true
},
"language": {
"type": "string",
"maxLength": 35,
"minLength": 1,
"description": "The selected supported Film language; studio_film_read with include:['languages'] lists them. Text is preserved, never translated."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "A project created by studio_video_start with kind film."
},
"operationId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier."
},
"visualWorld": {
"type": "object",
"required": [
"timeOfDay",
"light",
"setting"
],
"properties": {
"light": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"never": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
},
"props": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
},
"artist": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"palette": {
"type": "array",
"items": {
"type": "string",
"pattern": "^#[0-9A-F]{6}$"
},
"maxItems": 5,
"description": "Optional creator-selected palette: 0–5 unique uppercase #RRGGBB colours.",
"uniqueItems": true
},
"setting": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"vehicles": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
},
"locations": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
},
"timeOfDay": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"characters": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
}
},
"description": "Board-wide visual facts. Optional characters, vehicles, locations, props and never are arrays of up to 12 non-empty strings, each at most 300 characters. Combined rendered fields are limited to 2,400 characters including labels, separators and newlines after trimming. Scene-specific costume and visual direction belong to scene text.",
"additionalProperties": false
},
"expectedRevisionId": {
"type": [
"string",
"null"
],
"maxLength": 64,
"minLength": 1,
"description": "The exact revisionId from studio_sections_read; null only for a Film with no storyboard."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"projectId",
"script",
"expectedRevisionId",
"language"
],
"properties": {
"cast": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"maxItems": 6,
"description": "Optional: artist names to cast, in slot order. Names must be the customer's own artists."
},
"script": {
"type": "string",
"maxLength": 100000,
"minLength": 1,
"description": "The finished script, exactly as written. Its language is preserved as-is."
},
"language": {
"type": "string",
"maxLength": 35,
"minLength": 2,
"description": "The selected Film language. The host validates its actual model capability; text is not translated."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "From studio_video_start with kind 'film'."
},
"visualWorld": {
"type": "object",
"required": [
"timeOfDay",
"light",
"setting"
],
"properties": {
"light": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"never": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
},
"props": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
},
"artist": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"palette": {
"type": "array",
"items": {
"type": "string",
"pattern": "^#[0-9A-F]{6}$"
},
"maxItems": 5,
"description": "Optional creator-selected palette: 0–5 unique uppercase #RRGGBB colours.",
"uniqueItems": true
},
"setting": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"vehicles": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
},
"locations": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
},
"timeOfDay": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"characters": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
}
},
"description": "Board-wide visual facts. Optional characters, vehicles, locations, props and never are arrays of up to 12 non-empty strings, each at most 300 characters. Combined rendered fields are limited to 2,400 characters including labels, separators and newlines after trimming. Scene-specific costume and visual direction belong to scene text.",
"additionalProperties": false
},
"expectedRevisionId": {
"type": [
"string",
"null"
],
"maxLength": 64,
"minLength": 1,
"description": "The revisionId from studio_sections_read, or null only when no storyboard exists."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"projectId",
"operationId",
"expectedRevision",
"sceneIndex",
"artistId",
"useCharacterVoice"
],
"properties": {
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "A speaking cast character in this Film."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The Film project id."
},
"sceneIndex": {
"type": "integer",
"minimum": 0,
"description": "The saved scene index from studio_film_read."
},
"operationId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Stable operation identifier. Identical retries retain the original identifier; new work has a distinct identifier."
},
"expectedRevision": {
"type": "integer",
"minimum": 1,
"description": "The savedPlan.revision from studio_film_read."
},
"voiceDescription": {
"type": "string",
"maxLength": 200,
"description": "Optional native voice direction."
},
"useCharacterVoice": {
"type": "boolean",
"description": "The customer’s voice choice for this scene and character: true selects the saved voice; false selects native video-model speech."
}
},
"additionalProperties": false
}| string |
| For pictures, the quoted revisionId; for video, the current picture revision with applicable readiness checks satisfied. |
| operationId* | string | The same id used for this operation at quote time. |
| priceVersion | string | Exact version of the combined quote the customer approved. |
| quotedCredits | integer | Exact totalCredits approved by the customer; bound to the quoted price. |
| confirmationToken | string | Brix36-issued code for an existing app-approved operation. New chat approvals are bound by the chat-stage quote fields. |
{
"type": "object",
"required": [
"projectId",
"operationId",
"quoteToken"
],
"properties": {
"stage": {
"enum": [
"pictures",
"video"
],
"type": "string",
"description": "Chat mode: pictures records one financial approval and starts pictures; video starts video under that same approval and the current readiness gates. Each retry retains its original stage."
},
"modelId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Optional with an approved quote (the approved model is used). Otherwise the id of the model the customer chose, from that quote's models list."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"quoteToken": {
"type": "string",
"maxLength": 80000,
"minLength": 16,
"description": "The exact opaque quoteToken returned by studio_generation_quote."
},
"revisionId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "For pictures, the quoted revisionId; for video, the current picture revision with applicable readiness checks satisfied."
},
"operationId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]+$",
"maxLength": 128,
"minLength": 8,
"description": "The same id used for this operation at quote time."
},
"priceVersion": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Exact version of the combined quote the customer approved."
},
"quotedCredits": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Exact totalCredits approved by the customer; bound to the quoted price."
},
"confirmationToken": {
"type": "string",
"maxLength": 80000,
"minLength": 16,
"description": "Brix36-issued code for an existing app-approved operation. New chat approvals are bound by the chat-stage quote fields."
}
},
"additionalProperties": false
}| stillShotIds | array | Optional customer-selected stableShotIds from studio_sections_read. Absence selects every shot without a picture. Other shots may have separate later quotes and financial approvals. |
{
"type": "object",
"required": [
"projectId",
"operationId",
"scope"
],
"properties": {
"scope": {
"enum": [
"whole",
"ticked"
],
"type": "string",
"description": "'whole' for the whole song, 'ticked' for the sections currently ticked on the board."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"filmScenes": {
"type": "object",
"properties": {
"sceneIds": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 240,
"minItems": 1,
"description": "Saved stableSceneId values from studio_film_read. Named scenes are remade; other good clips are reused.",
"uniqueItems": true
},
"renderOnly": {
"type": "boolean",
"description": "True quotes only these scenes for a scene preview. Confirm, check the result, then quote the next scene. False assembles the complete Film, making only named or missing scenes."
}
},
"additionalProperties": false
},
"operationId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]+$",
"maxLength": 128,
"minLength": 8,
"description": "Stable operation identifier shared by this quote and its confirmation."
},
"stillQuality": {
"enum": [
"medium",
"high"
],
"type": "string",
"description": "Picture quality for the pictures. Default high."
},
"stillShotIds": {
"type": "array",
"items": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"maxItems": 200,
"minItems": 1,
"description": "Optional customer-selected stableShotIds from studio_sections_read. Absence selects every shot without a picture. Other shots may have separate later quotes and financial approvals.",
"uniqueItems": true
}
},
"additionalProperties": false
}| intensity |
| string |
| projectId* | string |
| requestId* | string |
| artistName | string |
| templateId | string |
| audioAssetId | string |
| imageAssetId | string |
| durationSeconds* | number |
| trimStartSeconds | number |
| approvedAlignmentId | string |
| expectedArtistRevision | integer |
{
"type": "object",
"required": [
"projectId",
"requestId",
"family",
"durationSeconds",
"aspect"
],
"properties": {
"style": {
"enum": [
"bars",
"waves",
"particles"
],
"type": "string"
},
"title": {
"type": "string",
"maxLength": 2000
},
"aspect": {
"enum": [
"16:9",
"9:16"
],
"type": "string"
},
"family": {
"enum": [
"lyric_video",
"beat_visualiser",
"kinetic_text",
"photo_poster",
"promo_cards"
],
"type": "string"
},
"lookId": {
"enum": [
"pop",
"hiphop_drill",
"rnb",
"house_edm",
"rock",
"country_acoustic",
"afrobeats"
],
"type": "string"
},
"lyrics": {
"type": "string",
"maxLength": 100000
},
"styleId": {
"enum": [
"3d-text-flight",
"bold-hook",
"chat-story",
"clean-creator",
"colour-pop",
"data-and-map",
"genre-title-cards",
"glass-keynote",
"grunge-rock",
"hype-countdown",
"kinetic-lyric",
"liquid-shaders",
"neon-club",
"newsroom",
"paper-and-ink",
"parallax-25d",
"particle-text",
"product-drop",
"sing-along-karaoke",
"social-proof",
"street-grit",
"trailer-slam",
"velvet-cinematic",
"vox-collage-explainer"
],
"type": "string"
},
"artistId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
"maxLength": 128,
"minLength": 1
},
"intensity": {
"enum": [
"subtle",
"normal",
"high",
"standard"
],
"type": "string"
},
"projectId": {
"type": "string",
"maxLength": 128,
"minLength": 1
},
"requestId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]+$",
"maxLength": 128,
"minLength": 8
},
"artistName": {
"type": "string",
"maxLength": 160
},
"templateId": {
"enum": [
"lyric_video",
"audio_visualiser",
"living_cover",
"kinetic_type",
"club_tunnel",
"organic_landscape"
],
"type": "string"
},
"audioAssetId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
"maxLength": 128,
"minLength": 1
},
"imageAssetId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
"maxLength": 128,
"minLength": 1
},
"durationSeconds": {
"type": "number",
"maximum": 180,
"minimum": 1
},
"trimStartSeconds": {
"type": "number",
"maximum": 7200,
"minimum": 0
},
"approvedAlignmentId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
"maxLength": 128,
"minLength": 1
},
"expectedArtistRevision": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"projectId",
"kind",
"name",
"mimeType",
"bytesBase64"
],
"properties": {
"kind": {
"enum": [
"reference_image",
"reference_video"
],
"type": "string",
"description": "Existing reference media kind."
},
"name": {
"type": "string",
"maxLength": 260,
"minLength": 1,
"description": "File display name, for example wardrobe.webp."
},
"scope": {
"enum": [
"project",
"shot"
],
"type": "string",
"description": "Whole project by default; shot is supported only for an image."
},
"mimeType": {
"enum": [
"image/png",
"image/jpeg",
"image/webp",
"image/avif",
"video/mp4",
"video/quicktime",
"video/webm"
],
"type": "string",
"description": "Actual MIME type. It must match the kind and file bytes."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project ID returned by studio_projects_list or studio_video_start."
},
"bytesBase64": {
"type": "string",
"pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$",
"maxLength": 699052,
"minLength": 4,
"description": "Canonical base64 file bytes without a data URL prefix, up to 512 KiB decoded. Larger files have an app upload-link path."
},
"intendedAtMs": {
"type": "integer",
"minimum": 0,
"description": "Optional song position for a shot-scoped image; this records intent and does not bind a shot."
}
},
"additionalProperties": false
}| string |
| Exact estimate returned by the preceding quote. |
| expectedRevisionId* | string | Exact current storyboard revision from studio_storyboard_context. |
{
"type": "object",
"required": [
"projectId",
"expectedRevisionId",
"costEstimateId",
"sectionIndex",
"operationId"
],
"properties": {
"profile": {
"type": "object",
"required": [
"aspect",
"resolution"
],
"properties": {
"aspect": {
"enum": [
"16:9",
"9:16",
"1:1"
],
"type": "string"
},
"resolution": {
"enum": [
"720p",
"1080p",
"4k"
],
"type": "string"
}
},
"additionalProperties": false
},
"modelName": {
"type": [
"string",
"null"
],
"maxLength": 120,
"minLength": 1,
"description": "Available modelName from studio_section_engines; null restores Recommended and absence retains explicit selections during a profile change. Profiles are constrained to returned availableProfiles."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project identified by the quote."
},
"operationId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]+$",
"maxLength": 128,
"minLength": 8,
"description": "Client-generated identity for a selection quote. Identical retries share the identity; different selections have distinct identities."
},
"sectionIndex": {
"type": "integer",
"maximum": 239,
"minimum": 0,
"description": "Music section index, or the exact saved Film scene.index, whose new generation uses this engine."
},
"costEstimateId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Exact estimate returned by the preceding quote."
},
"expectedRevisionId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Exact current storyboard revision from studio_storyboard_context."
}
},
"additionalProperties": false
}| Project whose currently uploaded master song is being described. |
| description | string | Customer-approved song meaning/description. Absence retains the existing value; an empty string clears it. |
| voiceAnswer | object | The customer’s voice-answer decision. Absence leaves ownership unconfirmed. Shape: {answer: "all_me"} | {answer: "skipped"} | {answer: "other_voices", spans: list of {startMs: integer, endMs: integer, label?: string, role?: "feature"|"dj"|"adlib"|"unknown", overlapsArtist?: boolean}} |
| expectedAssetId* | string | Current assetId from studio_song_status analysis: the existing uploaded master, not a new or remote audio source. |
| expectedAnalysisId* | string | Current analysisId from studio_song_status. |
| expectedUnderstandingRevision* | string | Opaque current understandingRevision from studio_song_status. |
{
"type": "object",
"required": [
"projectId",
"expectedAnalysisId",
"expectedAssetId",
"expectedUnderstandingRevision",
"words",
"lines"
],
"properties": {
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"text",
"startMs",
"endMs"
],
"properties": {
"text": {
"type": "string",
"maxLength": 1000,
"minLength": 1,
"description": "The customer-supplied word or line at this measured timestamp."
},
"endMs": {
"type": "integer",
"maximum": 2147483647,
"minimum": 0,
"description": "Actual timestamp on the uploaded master song in whole milliseconds, from supplied timing data."
},
"startMs": {
"type": "integer",
"maximum": 2147483647,
"minimum": 0,
"description": "Actual timestamp on the uploaded master song in whole milliseconds, from supplied timing data."
}
},
"additionalProperties": false
},
"maxItems": 600,
"description": "TimedLine text/startMs/endMs, requiring supplied timed words. An empty array leaves section line-sync empty; prose alone supplies no timing."
},
"words": {
"type": "array",
"items": {
"type": "object",
"required": [
"text",
"startMs",
"endMs"
],
"properties": {
"text": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "The customer-supplied word or line at this measured timestamp."
},
"endMs": {
"type": "integer",
"maximum": 2147483647,
"minimum": 0,
"description": "Actual timestamp on the uploaded master song in whole milliseconds, from supplied timing data."
},
"startMs": {
"type": "integer",
"maximum": 2147483647,
"minimum": 0,
"description": "Actual timestamp on the uploaded master song in whole milliseconds, from supplied timing data."
}
},
"additionalProperties": false
},
"maxItems": 4000,
"description": "Existing TimedWord shape: text/startMs/endMs. Genuine customer-supplied master timing only; [] when unknown. IDs are assigned by the canonical app normalizer."
},
"lyrics": {
"type": "string",
"maxLength": 24000,
"description": "Customer-supplied source lyrics with original line breaks. Absence retains existing lyrics; an empty string clears them."
},
"themes": {
"type": "array",
"items": {
"type": "string",
"maxLength": 180,
"minLength": 1,
"description": "One non-lyrical customer-approved song theme."
},
"maxItems": 8,
"description": "Optional song themes. Absence retains existing themes; [] clears them."
},
"language": {
"type": [
"string",
"null"
],
"maxLength": 35,
"minLength": 1,
"description": "Customer-supplied language, null when unknown. Absence retains the existing language."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project whose currently uploaded master song is being described."
},
"description": {
"type": "string",
"maxLength": 4000,
"description": "Customer-approved song meaning/description. Absence retains the existing value; an empty string clears it."
},
"voiceAnswer": {
"type": "object",
"required": [
"answer"
],
"properties": {
"answer": {
"enum": [
"all_me",
"skipped",
"other_voices"
],
"type": "string"
}
},
"description": "The customer’s voice-answer decision. Absence leaves ownership unconfirmed. Shape: {answer: \"all_me\"} | {answer: \"skipped\"} | {answer: \"other_voices\", spans: list of {startMs: integer, endMs: integer, label?: string, role?: \"feature\"|\"dj\"|\"adlib\"|\"unknown\", overlapsArtist?: boolean}}"
},
"expectedAssetId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Current assetId from studio_song_status analysis: the existing uploaded master, not a new or remote audio source."
},
"expectedAnalysisId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Current analysisId from studio_song_status."
},
"expectedUnderstandingRevision": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"maxLength": 64,
"minLength": 64,
"description": "Opaque current understandingRevision from studio_song_status."
}
},
"additionalProperties": false
}| string |
| Exact current storyboard revision from studio_storyboard_context. |
| referenceAttachmentIds | array | Replacement reference bindings for the targeted shots. [] clears; omitted inherits. |
{
"type": "object",
"required": [
"projectId",
"expectedRevisionId",
"scope"
],
"properties": {
"scope": {
"enum": [
"whole",
"section",
"shot",
"still"
],
"type": "string",
"description": "Whole/section saves a shared sectionDirection; shot/still edits the visible frame prompt."
},
"camera": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "Finished camera movement for a shot/still."
},
"motion": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "Finished subject movement for a shot/still."
},
"prompt": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "Finished prompt, at most 4,000 characters for shot/still or 2,000 for whole/section. The server fits saved direction to the selected engine."
},
"shotId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Current stable shot id, required for shot or still scope."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Project identified by the current storyboard read."
},
"sectionIndex": {
"type": "integer",
"maximum": 239,
"minimum": 0,
"description": "Current section index, required for section scope."
},
"expectedRevisionId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Exact current storyboard revision from studio_storyboard_context."
},
"referenceAttachmentIds": {
"type": "array",
"items": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Existing shot-scoped reference attachment in this project."
},
"maxItems": 8,
"description": "Replacement reference bindings for the targeted shots. [] clears; omitted inherits.",
"uniqueItems": true
}
},
"additionalProperties": false
}| Stable operationId from the picture quote. A new_version operation uses op_ followed by 10–120 letters, digits, underscores or dashes. |
| priceVersion | string | Chat mode: exact priceVersion from the picture quote the customer approved. |
| quotedCredits | integer | Chat mode: exact creditAmount shown to and approved by the customer. |
| confirmationToken | string | Brix36-issued confirmation code for these pictures and credits. |
{
"type": "object",
"required": [
"projectId",
"revisionId",
"mode",
"operationId",
"quoteToken",
"modelId"
],
"properties": {
"mode": {
"enum": [
"missing",
"new_version"
],
"type": "string",
"description": "missing prepares selected shots without pictures; new_version buys another picture for exactly one shot that already has one."
},
"modelId": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "The exact modelId label returned with that still quote."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The music-video or Film project id."
},
"quoteToken": {
"type": "string",
"maxLength": 80000,
"minLength": 1,
"description": "The exact opaque quoteToken returned by studio_storyboard_stills_quote."
},
"revisionId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Exact storyboard revisionId from studio_sections_read. Identical retries retain the originally quoted revision."
},
"operationId": {
"type": "string",
"pattern": "^op_[A-Za-z0-9_-]{10,120}$",
"maxLength": 130,
"minLength": 1,
"description": "Stable operationId from the picture quote. A new_version operation uses op_ followed by 10–120 letters, digits, underscores or dashes."
},
"priceVersion": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "Chat mode: exact priceVersion from the picture quote the customer approved."
},
"quotedCredits": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Chat mode: exact creditAmount shown to and approved by the customer."
},
"confirmationToken": {
"type": "string",
"maxLength": 80000,
"minLength": 1,
"description": "Brix36-issued confirmation code for these pictures and credits."
}
},
"additionalProperties": false
}| string |
| Stable operationId from the picture quote. A new_version operation uses op_ followed by 10–120 letters, digits, underscores or dashes. |
| stableShotIds | array |
{
"type": "object",
"required": [
"projectId",
"revisionId",
"mode",
"quality"
],
"properties": {
"mode": {
"enum": [
"missing",
"new_version"
],
"type": "string",
"description": "missing prepares selected shots without pictures; new_version buys another picture for exactly one shot that already has one."
},
"quality": {
"enum": [
"medium",
"high"
],
"type": "string",
"description": "The customer’s explicit picture quality; high is the app’s best-picture option."
},
"lookTest": {
"type": "boolean",
"const": true,
"description": "For missing mode, true selects the approved storyboard’s saved key-look set. In this mode stableShotIds and operationId are absent."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The music-video or Film project id."
},
"revisionId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Exact storyboard revisionId from studio_sections_read. Identical retries retain the originally quoted revision."
},
"operationId": {
"type": "string",
"pattern": "^op_[A-Za-z0-9_-]{10,120}$",
"maxLength": 130,
"minLength": 1,
"description": "Stable operationId from the picture quote. A new_version operation uses op_ followed by 10–120 letters, digits, underscores or dashes."
},
"stableShotIds": {
"type": "array",
"items": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "A stableShotId on this exact storyboard."
},
"maxItems": 200,
"minItems": 1,
"uniqueItems": true
}
},
"additionalProperties": false
}| Exact current revision id, or null only for the first storyboard. |
{
"type": "object",
"required": [
"projectId",
"expectedRevisionId",
"audioAnalysisId",
"shots"
],
"properties": {
"shots": {
"type": "array",
"items": {
"type": "object",
"description": "Shape: {order: integer, label: string, description: string, visual: string, setup: string, role: \"hook-anchor\"|\"verse\"|\"insert\"|\"payoff\", performance: boolean, motion: string, camera: string, references: list of {evidenceId: string, useMode: \"style_reference\"|\"generation_input\", reason: string}, identityTarget?: \"artist\"|\"none\", sectionDirection?: string or null, referenceAttachmentIds?: list of string}"
},
"maxItems": 240,
"minItems": 1,
"description": "Finished direction, exactly one entry per server-owned shot order."
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Existing music-video project id."
},
"treatment": {
"type": "object",
"required": [
"family",
"title",
"summary",
"visualDirection",
"storyApproach"
],
"properties": {
"title": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Treatment title."
},
"family": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "The app treatment family, or an open/custom family."
},
"summary": {
"type": "string",
"maxLength": 800,
"minLength": 1,
"description": "Customer-readable treatment."
},
"storyApproach": {
"type": "string",
"maxLength": 1200,
"minLength": 1,
"description": "How the story is told."
},
"artistCoverage": {
"type": "string",
"maxLength": 1000,
"minLength": 1,
"description": "Where the artist appears."
},
"setupContinuity": {
"type": "string",
"maxLength": 1000,
"minLength": 1,
"description": "Continuity across setups."
},
"visualDirection": {
"type": "string",
"maxLength": 1200,
"minLength": 1,
"description": "The visual treatment."
},
"customFamilyLabel": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Name for a custom treatment family."
},
"performanceApproach": {
"type": "string",
"maxLength": 1000,
"minLength": 1,
"description": "How delivery to camera is used."
}
},
"additionalProperties": false
},
"visualWorld": {
"type": "object",
"required": [
"timeOfDay",
"light",
"setting"
],
"properties": {
"light": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"never": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
},
"props": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
},
"artist": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"palette": {
"type": "array",
"items": {
"type": "string",
"pattern": "^#[0-9A-F]{6}$"
},
"maxItems": 5,
"description": "Optional creator-selected palette: 0–5 unique uppercase #RRGGBB colours.",
"uniqueItems": true
},
"setting": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"vehicles": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
},
"locations": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
},
"timeOfDay": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"characters": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[\\s\\S]*\\S[\\s\\S]*$",
"maxLength": 300,
"minLength": 1,
"description": "A non-empty concrete visual fact; 300 characters at most."
},
"maxItems": 12
}
},
"description": "Board-wide visual facts. Optional characters, vehicles, locations, props and never are arrays of up to 12 non-empty strings, each at most 300 characters. Combined rendered fields are limited to 2,400 characters including labels, separators and newlines after trimming. Scene-specific costume and visual direction belong to scene text.",
"additionalProperties": false
},
"audioAnalysisId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Exact current song analysis id returned by the context."
},
"targetShotCount": {
"type": "integer",
"maximum": 240,
"minimum": 1,
"description": "Optional first-board shot count used when reading the context. Existing timing is preserved."
},
"expectedRevisionId": {
"type": [
"string",
"null"
],
"maxLength": 64,
"minLength": 1,
"description": "Exact current revision id, or null only for the first storyboard."
}
},
"additionalProperties": false
}| object |
| operationId* | string | Stable operation identifier shared by this quote and its confirmation. |
| stillQuality | string | Picture quality for the pictures. Default high. |
| stillShotIds | array | Optional customer-selected stableShotIds from studio_sections_read. Absence selects every shot without a picture. Other shots may have separate later quotes and financial approvals. |
{
"type": "object",
"required": [
"operationId",
"scope"
],
"properties": {
"film": {
"type": "object",
"required": [
"script",
"language"
],
"properties": {
"cast": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"maxItems": 6,
"description": "Optional: artist names to cast, in slot order. Names must be the customer's own artists."
},
"script": {
"type": "string",
"maxLength": 100000,
"minLength": 1,
"description": "The finished script, exactly as written. Its language is preserved as-is."
},
"language": {
"type": "string",
"maxLength": 35,
"minLength": 2,
"description": "The selected Film language. The host validates its actual model capability; text is not translated."
},
"visualWorld": {
"type": "object",
"description": "Board-wide visual facts. Optional characters, vehicles, locations, props and never are arrays of up to 12 non-empty strings, each at most 300 characters. Combined rendered fields are limited to 2,400 characters including labels, separators and newlines after trimming. Scene-specific costume and visual direction belong to scene text. Shape: {timeOfDay: string, light: string, setting: string, artist?: string, characters?: list of string, vehicles?: list of string, locations?: list of string, props?: list of string, never?: list of string, palette?: list of string}"
},
"expectedRevisionId": {
"type": [
"string",
"null"
],
"maxLength": 64,
"minLength": 1,
"description": "The revisionId from studio_sections_read, or null only when no storyboard exists."
}
},
"description": "Film only: the finished script, language, cast and visualWorld (same fields as studio_film_script_write). expectedRevisionId may be omitted for a new film.",
"additionalProperties": false
},
"music": {
"type": "object",
"properties": {
"sections": {
"type": "array",
"items": {
"type": "object",
"description": "Shape: {index: integer, what?: string, type?: \"performance\"|\"story\", included?: boolean}"
},
"maxItems": 24,
"minItems": 1,
"description": "Music only: the drafted sections (same as studio_storyboard_write)."
},
"visualWorld": {
"type": "object",
"description": "Music only: the board's visual world (same as studio_storyboard_prepare). Required before a finished board can be priced. Shape: {timeOfDay: string, light: string, setting: string, artist?: string, characters?: list of string, vehicles?: list of string, locations?: list of string, props?: list of string, never?: list of string, palette?: list of string}"
},
"songUnderstanding": {
"type": "object",
"description": "Music only, optional: the song understanding fields of studio_song_understanding_write, without projectId."
}
},
"description": "Music only: what to save on the board once the song is on the project.",
"additionalProperties": false
},
"scope": {
"enum": [
"whole",
"ticked"
],
"type": "string",
"description": "'whole' for the whole song, 'ticked' for the sections currently ticked on the board."
},
"start": {
"type": "object",
"required": [
"kind",
"artistName"
],
"properties": {
"kind": {
"enum": [
"music",
"film"
],
"type": "string",
"description": "The requested video kind: music is a music video for a song; film is a short film with scenes, dialogue and optional music."
},
"title": {
"type": "string",
"maxLength": 160,
"description": "What to call the video. Defaults to the song title. A film without a songTitle needs this."
},
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Exact artist ID from studio_artists_list, disambiguating artists with the same name. ID and artistName must match."
},
"songTitle": {
"type": "string",
"maxLength": 160,
"minLength": 1,
"description": "The song this video is for. Required for a music video; optional for a film, which needs no song. Shown to the customer and used for the catalogue entry."
},
"artistName": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "The existing artist or invented character starring in it. Required: an existing name from studio_artists_list (case and spacing do not matter), or the customer's chosen new fictional name with createArtist: true."
},
"durationMs": {
"type": "integer",
"maximum": 3600000,
"minimum": 1000,
"description": "The song length in milliseconds, if the customer's AI knows it."
},
"createArtist": {
"type": "boolean",
"description": "True creates a new fictional_character under an unmatched artistName. Fictional characters need no photo or likeness consent. Real-person creation uses the existing app consent flow. Existing names are reused either way; identical retries retain the original flag."
}
},
"description": "Start a new video (same fields as studio_video_start). Omit when continuing an existing projectId.",
"additionalProperties": false
},
"projectId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Continue this existing project instead of starting a new one."
},
"filmScenes": {
"type": "object",
"properties": {
"sceneIds": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 240,
"minItems": 1,
"description": "Saved stableSceneId values from studio_film_read. Named scenes are remade; other good clips are reused.",
"uniqueItems": true
},
"renderOnly": {
"type": "boolean",
"description": "True quotes only these scenes for a scene preview. Confirm, check the result, then quote the next scene. False assembles the complete Film, making only named or missing scenes."
}
},
"additionalProperties": false
},
"operationId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]+$",
"maxLength": 128,
"minLength": 8,
"description": "Stable operation identifier shared by this quote and its confirmation."
},
"stillQuality": {
"enum": [
"medium",
"high"
],
"type": "string",
"description": "Picture quality for the pictures. Default high."
},
"stillShotIds": {
"type": "array",
"items": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"maxItems": 200,
"minItems": 1,
"description": "Optional customer-selected stableShotIds from studio_sections_read. Absence selects every shot without a picture. Other shots may have separate later quotes and financial approvals.",
"uniqueItems": true
}
},
"additionalProperties": false
}| createArtist | boolean | True creates a new fictional_character under an unmatched artistName. Fictional characters need no photo or likeness consent. Real-person creation uses the existing app consent flow. Existing names are reused either way; identical retries retain the original flag. |
{
"type": "object",
"required": [
"kind",
"artistName"
],
"properties": {
"kind": {
"enum": [
"music",
"film"
],
"type": "string",
"description": "The requested video kind: music is a music video for a song; film is a short film with scenes, dialogue and optional music."
},
"title": {
"type": "string",
"maxLength": 160,
"description": "What to call the video. Defaults to the song title. A film without a songTitle needs this."
},
"artistId": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Exact artist ID from studio_artists_list, disambiguating artists with the same name. ID and artistName must match."
},
"songTitle": {
"type": "string",
"maxLength": 160,
"minLength": 1,
"description": "The song this video is for. Required for a music video; optional for a film, which needs no song. Shown to the customer and used for the catalogue entry."
},
"artistName": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "The existing artist or invented character starring in it. Required: an existing name from studio_artists_list (case and spacing do not matter), or the customer's chosen new fictional name with createArtist: true."
},
"durationMs": {
"type": "integer",
"maximum": 3600000,
"minimum": 1000,
"description": "The song length in milliseconds, if the customer's AI knows it."
},
"createArtist": {
"type": "boolean",
"description": "True creates a new fictional_character under an unmatched artistName. Fictional characters need no photo or likeness consent. Real-person creation uses the existing app consent flow. Existing names are reused either way; identical retries retain the original flag."
}
},
"additionalProperties": false
}