• AI reference · Area studio

studio_job

Make films and sound in the studio. Make films and sound in the cloud studio, with no Mac. Sound: the Immersive Desk (one sound piece JSON: voice, music, effects, spatial sound, master). Picture: the Video Desk (one video piece JSON on a shared beat grid and word times, free scenes in HTML/CSS/GSAP; contract co1.video.piece.v1). kind: analyze (beats, bars, sections and word times of audio → analysis/timeline.json), check (piece problems, each with its fix; deep adds layout and contrast), preview (stills you can see), render (the film), sound_check, sound_preview (a window of up to 30 s, with a waveform), sound_render (the mix, renders/<piece>.wav). files: the text files to write first (the piece, scenes, the Desk piece, brand/brand.json from the company's brand); media: files from the company's media library into the project (asset_id + path). Rules: render and sound_render need request_key (the same key never renders twice); a film's audio is a Desk piece rendered first with sound_render; text at least 28 px; every media file has its source and licence. Rendering reaches nobody: no yes. Long work gives a job_id: poll studio_status. Motion JSON films (the easy way): motion_brief first (the brand's guide; format, style), write the piece as files, then motion_lint (piece; deep = final) → motion_stills (piece, at in seconds, max; look) → motion_render (piece, quality, request_key) → studio_status; motion_kit rebuilds the kit from brand/brand.json; motion_analyze (audio: beats, bars, words) and motion_edit_analyze (video: transcript, chapters, hook, fillers) feed the piece. 2D and 2.5D only for now. A done motion_render lands unapproved; studio_status gives film_ready: ask the owner with film_ready. Posting is a second yes: a post card (propose kind post, content_item_id + content_item_version), posted once.

Where it is

In the studio area (making films and sound in the cloud studio (Video Desk, Immersive Desk)): open it with tools_for { area: "studio" }, then call it with use_tool { name: "studio_job", args }.

Does it need a yes?

Runs at once, no yes card: it changes only the office's own working state, and nothing reaches anyone. Here: a render or check in the cloud studio: it reaches nobody (posting it is a separate yes).

Inputs

InputTypeNeededAbout
projectstringyesThe studio project, e.g. spring-reel (letters, numbers, dot, dash, underscore). · format `^[a-z0-9][a-z0-9._-]{0,63}$`
kind"analyze" | "check" | "preview" | "render" | "sound_check" | "sound_preview" | "sound_render" | "motion_brief" | "motion_kit" | "motion_lint" | "motion_stills" | "motion_render" | "motion_analyze" | "motion_edit_analyze"yes
piecestringnoThe piece in the project: e.g. piece.json (video) or sound/piece.json (sound). · up to 200 characters
audiostringnoanalyze: the audio or video in the project. · up to 200 characters
wordsbooleannoanalyze: false to skip word times (music only).
deepbooleannocheck: also compile and run the layout, contrast and craft checks.
atarray of number or stringnopreview: seconds or anchors (bar:3, word:yes). · up to 12 items
fromnumberno0 or more
tonumberno0 or more
quality"draft" | "looks" | "delivery"no
filesobjectnoText files to write first, by path in the project.
mediaarray of objectnoup to 10 items
media[].asset_idstringyesup to 160 characters
media[].pathstringyesup to 200 characters
media[].versionstringnoup to 100 characters
request_keystringnorender, sound_render and motion_render: your own key for this exact render. · format `^[A-Za-z0-9][A-Za-z0-9:._-]{0,99}$`
videostringnomotion_edit_analyze: the source video in the project. · up to 200 characters
langstringnomotion_edit_analyze: the spoken language, as a 2 or 3 letter code like hi or en, or auto. · format `^(auto|[a-z]{2,3})$`
taskintegernoWith media: the task you hold. · 1 or more
format"16:9" | "9:16" | "1:1"nomotion_brief: the film's shape (default 16:9).
style"template" | "brand" | "wild"nomotion_brief: how free the design is (default template).
maxintegernomotion_stills: how many frames (default 12). · 1 to 24
run_idstringyesThe run_id from start. Pass it on every call: it keeps your task held. · 1 to 100 characters

Example

{
  "name": "studio_job",
  "arguments": {
    "project": "spring-reel",
    "kind": "analyze",
    "run_id": "the run_id from start"
  }
}

When it is refused

  • invalid: The input isn't right. The sentence names the field and the fix; nothing was done. Fix it and call again.
  • not_found: No such thing in this company (a task, file, person, record). Check the number or name, or list first.
  • not_allowed: Not without another step: the owner's yes, your own task held with pick_up, or a setting the owner turns on. The sentence says which.
  • taken: Someone else holds it (another AI on that task). Pick another task.
  • stale: It changed since you read it. Read it again and use the new version.
  • failed: On our side or a service's, never your input. Try again in a minute; if it keeps failing, call report_problem.