Write a music video shot list
- MCP tool
plan_music_video- CLI
kinetune plan music-video
/api/v1/music-video-plansNot 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.
AuthorizationBearer <token>An organization API key (kt_live_…) or an OAuth access token
application/json- body
song_id*stringThe song; its artist performs the video and needs photos (add_artist_photos)
1 <= length <= 120model?"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
"one-take""one-take"category?stringperformance (default), intercut, cinematic, story or surreal
"performance""performance""intercut""cinematic""story""surreal"style?stringOptional look: natural, film, golden-hour, neon-night, noir, vintage or dreamy; omitted, the director picks one from the cover
"natural""film""golden-hour""neon-night""noir""vintage""dreamy"aspect_ratio?string"9:16" (default), "16:9" or "1:1"
"9:16""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?stringOptional 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
length <= 2000cast?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
{
"mode": "invent"
}lookbook_id?stringA lookbook (design_music_video_shoot) whose kept, drawn pieces the video uses like the kit pieces the direction mentions; its idea leads the director
^lookbook_[0-9a-f-]{36}$takes?stringHow 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)
"cuts""cuts""continuous"revise?Rewrite an earlier plan of this song: {"plan_id":"plan_…","note":"what to change"} (the next draft)
OK
application/json- response
id*stringsong_id*stringdraft*integer1 for the first plan, n+1 for a rewrite
-9007199254740991 <= value <= 9007199254740991revision_of*string|nullnote*string|nullbrief*What it was planned from: model, category, style, aspect_ratio, trim, direction, cast
title*|The film's name, as the director titled it
concept*stringstyle*stringclips*integer-9007199254740991 <= value <= 9007199254740991cast*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*integerIn a continuous take, the joins drawn as pictures (priced per picture); 0 otherwise
-9007199254740991 <= value <= 9007199254740991shots*array<>created_at*string[key: string]?unknowncurl -X POST 'https://kinetune.com/api/v1/music-video-plans' \
-H 'Content-Type: application/json' \
-d '{
"song_id": "string"
}'{
"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
}