Developer docs

Write a music video shot list

MCP tool
plan_music_video
CLI
kinetune plan music-video
POST/api/v1/music-video-plans

Not sent from the docs: it changes your workspace. Run it with curl, the CLI or its MCP tool.

The director's shot list for a music video, the idea and every shot, before anything is charged

Free (a limited number an hour). Takes about a minute. Returns a plan: the concept, the face and outfit photos, and its shots (cut between the song's lines, up to about 14 seconds each) with their lyrics and how each comes in (a cut, the director's transition, or carrying on in a continuous take). Show it to the user, rewrite it with revise until they like it, then quote_music_video and create_music_video with its plan_id.

Authorization

headerAuthorizationBearer <token>

An organization API key (kt_live_…) or an OAuth access token

Request Body

application/json
  1. body
song_id*string

The song; its artist performs the video and needs photos (add_artist_photos)

Length1 <= length <= 120
model?"one-take"

The music video model: one-take (default; MiniMax H3 Max, the artist lip-synced in shots cut between the song's lines). get_options lists the models with the categories, styles, formats, takes and length each makes

Default"one-take"
Value in"one-take"
category?string

performance (default), intercut, cinematic, story or surreal

Default"performance"
Value in"performance""intercut""cinematic""story""surreal"
style?string

Optional look: natural, film, golden-hour, neon-night, noir, vintage or dreamy; omitted, the director picks one from the cover

Value in"natural""film""golden-hour""neon-night""noir""vintage""dreamy"
aspect_ratio?string

"9:16" (default), "16:9" or "1:1"

Default"9:16"
Value in"9:16""16:9""1:1"
trim?

Only this section of the song (15 seconds to 10 minutes); omitted, the whole song (15 seconds to 10 minutes long). Best: a part from get_song_analysis (parts[]: its start and end never cut a word)

direction?string

Optional notes for the director (a place, an era, a story idea, a mood). Mention kit pieces by @handle (list_kit): "@nina-kazora in the @blue-set on the @rooftop, the @chrome-mic in hand"; a mentioned piece is used exactly as it is and the director designs the rest. An unknown handle answers 400

Lengthlength <= 2000
cast?

The two photos the artist is kept from: face_photo_id (a sharp face, mouth visible) and outfit_photo_id (the outfit and body worn throughout); either left out, the director picks it. One photo can be both; hidden photos (add_artist_photos hidden) work too

scenes?

Where it is set besides the places the direction mentions from the kit: {"mode":"invent"} (default: the director imagines the others) or {"mode":"stock"} (it finds a real stock photo of each place it writes, empty of people, and the artist is put into it), up to the model's kit.places in all

Default
{
  "mode": "invent"
}
lookbook_id?string

A lookbook (design_music_video_shoot) whose kept, drawn pieces the video uses like the kit pieces the direction mentions; its idea leads the director

Match^lookbook_[0-9a-f-]{36}$
takes?string

How the shots meet: "cuts" (default: shots meet between the song's lines like an edit, with a cut or the transition the director picks at each join: dissolve, dip to black, flash or whip; ask for them, or for none, in direction) or "continuous" (the director may carry a shot on into the next through a picture drawn of the moment they meet, priced per picture; the quote before a plan counts every join, the plan's quote only the ones it draws)

Default"cuts"
Value in"cuts""continuous"
revise?

Rewrite an earlier plan of this song: {"plan_id":"plan_…","note":"what to change"} (the next draft)

Response Body

OK

application/json
  1. response
id*string
song_id*string
draft*integer

1 for the first plan, n+1 for a rewrite

Range-9007199254740991 <= value <= 9007199254740991
revision_of*string|null
note*string|null
brief*

What it was planned from: model, category, style, aspect_ratio, trim, direction, cast

title*|

The film's name, as the director titled it

concept*string
style*string
clips*integer
Range-9007199254740991 <= value <= 9007199254740991
cast*

The photos it keeps the artist from

world*

What every shot keeps

places*array<>

The real places it is set in: kit pieces (kit), or stock photos the director found (photo); neither: no usable photo was found, so it is imagined. Empty: every place is imagined

outfits*array<>

The kit outfits it uses

props*array<>

The kit props it uses

joins*integer

In a continuous take, the joins drawn as pictures (priced per picture); 0 otherwise

Range-9007199254740991 <= value <= 9007199254740991
shots*array<>
created_at*string
[key: string]?unknown
Example Request
curl -X POST 'https://kinetune.com/api/v1/music-video-plans' \
  -H 'Content-Type: application/json' \
  -d '{
  "song_id": "string"
}'
Example Response
{
  "id": "string",
  "song_id": "string",
  "draft": -9007199254740991,
  "revision_of": "string",
  "note": "string",
  "brief": {
    "property1": null,
    "property2": null
  },
  "title": "string",
  "concept": "string",
  "style": "string",
  "clips": -9007199254740991,
  "cast": {
    "face_photo_id": "string",
    "outfit_photo_id": "string"
  },
  "world": {
    "setting": "string",
    "wardrobe": "string",
    "light": "string"
  },
  "places": [
    {
      "index": -9007199254740991,
      "description": "string",
      "kit": {
        "id": "string",
        "name": "string",
        "handle": "string"
      },
      "photo": {
        "stock_id": "string",
        "thumbnail_url": "string",
        "credit": {
          "property1": null,
          "property2": null
        }
      }
    }
  ],
  "outfits": [
    {
      "index": -9007199254740991,
      "kit": {
        "id": "string",
        "name": "string",
        "handle": "string"
      },
      "description": "string"
    }
  ],
  "props": [
    {
      "index": -9007199254740991,
      "kit": {
        "id": "string",
        "name": "string",
        "handle": "string"
      },
      "description": "string"
    }
  ],
  "joins": -9007199254740991,
  "shots": [
    {
      "index": -9007199254740991,
      "start_seconds": 0,
      "end_seconds": 0,
      "section": "string",
      "lyrics": "string",
      "summary": "string",
      "places": [
        -9007199254740991
      ],
      "outfit": -9007199254740991,
      "props": [
        -9007199254740991
      ],
      "continues": true,
      "transition": "cut"
    }
  ],
  "created_at": "string",
  "property1": null,
  "property2": null
}