Human-made production music for sync — search by brief or reference, preview, score to picture.
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.
Get information supplied by AINSOF about its production-music catalog, composers, technology, licensing, operational data collection, privacy, deletion requests, and official profiles. Use when the user asks about AINSOF or how its service works. Returns service information, not a music search.
This tool takes no arguments.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Get information supplied by AINSOF about its production-music catalog, composers, technology, licensing, operational data collection, privacy, deletion requests, and official profiles. Use when the user asks about AINSOF or how its service works. Returns service information, not a music search.
No arguments.
{
"type": "object",
"properties": {}
}Before AINSOF works with a video the person signs in once on ainsof.io (Google or email): without a sign_in_code this returns sign_in_required with a link to show them; after they sign in, call again with the same arguments plus that sign_in_code. Analyze a downloadable video, up to 15 minutes, for soundtrack planning without editing or scoring it. Fetches the linked file, creates or reuses an analysis job, stores analysis results and records operational activity. Returns `film`: what kind of video it is, the story it tells, how its feeling moves, its atmosphere and energy, whether it already has music, and the music that fits it (style, moods, instruments, tempo, and `music.search`, a description ready for find_soundtrack). Reading the film takes up to a minute; a still_running reply means call again with the same video_url. Also returns measured duration, frame rate, resolution, audio-stream presence, detected cut timestamps and edit-pace metrics. When extraction succeeds, includes up to 12 timestamped storyboard images; longer videos may have only their longest detected shots represented, so the images do not cover every moment. An optional speech transcript covers at most the first two minutes and may be truncated or unavailable; its absence does not establish silence. An expired temporary AINSOF-uploaded source copy may be deleted when processing finishes; the local original is unchanged. AINSOF keeps the storyboard images, transcript, optional user_request and a reduced-resolution review copy for 30 days, then deletes them.
| Argument | Type | Description |
|---|---|---|
| video_url* | string | link to the video |
| music_intent | string | optional — the music the user wants, in at most 8 English words, no names (e.g. 'tense build, minimal, no vocals'). Kept as anonymous usage statistics. |
| project_type | string | optional — what kind of project the video is. Kept as anonymous usage statistics. |
| sign_in_code | string | the sign_in_code AINSOF returned with its sign-in link, once the person has signed in. Pass it to every video tool in this conversation. |
| user_request | string | optional — in one sentence, what the user wants the music to do for this video, in their own words (e.g. 'tense build to the reveal at the end'). Kept by AINSOF for 30 days to review how well the music fit, then deleted. |
{
"type": "object",
"required": [
"video_url"
],
"properties": {
"video_url": {
"type": "string",
"description": "link to the video"
},
"music_intent": {
"type": "string",
"description": "optional — the music the user wants, in at most 8 English words, no names (e.g. 'tense build, minimal, no vocals'). Kept as anonymous usage statistics."
},
"project_type": {
"enum": [
"ad",
"social",
"documentary",
"film",
"trailer",
"game",
"corporate",
"event",
"podcast",
"music_video",
"other"
],
"type": "string",
"description": "optional — what kind of project the video is. Kept as anonymous usage statistics."
},
"sign_in_code": {
"type": "string",
"description": "the sign_in_code AINSOF returned with its sign-in link, once the person has signed in. Pass it to every video tool in this conversation."
},
"user_request": {
"type": "string",
"description": "optional — in one sentence, what the user wants the music to do for this video, in their own words (e.g. 'tense build to the reveal at the end'). Kept by AINSOF for 30 days to review how well the music fit, then deleted."
}
}
}Get the CUE SHEET for a track — album, catalog number, ISRC, tempo, key, publisher, and every writer with their IPI, society and performance share. Hand this over when the user needs delivery paperwork, rights information, or asks who wrote it. AINSOF controls master and publishing, so these are stated facts, not estimates.
| Argument | Type | Description |
|---|---|---|
| track_id* | string | a track_id, or the track's title |
{
"type": "object",
"required": [
"track_id"
],
"properties": {
"track_id": {
"type": "string",
"description": "a track_id, or the track's title"
}
}
}Before AINSOF works with a video the person signs in once on ainsof.io (Google or email): without a sign_in_code this returns sign_in_required with a link to show them; after they sign in, call again with the same arguments plus that sign_in_code. Hand over the finished score as files, once the user is happy with it. Returns a zip holding the scored video, every section of music as a separate MP3 (192k) trimmed exactly as it was used and named with the timecode it starts at, and a cue sheet. An editor drops each file at the timecode in its name and has the render back on their own timeline. Call this with THE SAME arguments you passed to score_my_video — that is how it finds the right render. It never re-cuts anything. Downloading the zip needs a signed-in AINSOF account with download access (sign in on ainsof.io with Google or email).
| Argument | Type | Description |
|---|---|---|
| brief | string | the same brief you scored with |
| version | string | |
| sections | array | |
| silences | array | |
| track_id | string | |
| video_url* | string | the same link you scored |
| sign_in_code | string | the sign_in_code AINSOF returned with its sign-in link, once the person has signed in. Pass it to every video tool in this conversation. |
Send AINSOF what the user thought of an answer — "none of these fit", "the music doesn't land on my cut", "that second one is perfect". ASK THEM FIRST, every time, in one short question: their words would be sent to AINSOF to improve the catalog, is that alright. Send only if they say yes, and set `consented` to true when they do. If they decline or do not answer, do not call this tool at all — their reaction stays in the conversation. Quote them in `in_their_words` EXACTLY as they said it, and pass the tool it concerns plus the track_id or brief involved. Never invent a complaint, and never send feedback the user did not give.
| Argument | Type | Description |
|---|---|---|
| about* | string | the tool this is about, e.g. 'search_music' or 'score_my_video' |
| brief | string | the brief or query that produced it, if any |
| verdict* | string | how it landed |
| expected | string | what they wanted instead, if they said |
| track_id | string | the cue it concerns, if any |
| consented* | boolean | true ONLY if you asked the user whether their feedback may be sent to AINSOF and they agreed. Never set this without having asked. |
| in_their_words |
Find AINSOF cues that sound like an AINSOF cue — the whole cue, or a passage of it marked with from and to (seconds, 5–60 s long), e.g. the hook or the bar before the drop. Each result names the matching passage inside it. Takes a track_id or the cue's title. For a song by another artist (a YouTube, Spotify, Apple Music or Deezer link) use search_by_reference instead.
| Argument | Type | Description |
|---|---|---|
| to | number | End of the marked passage, in seconds (5–60 s after from). |
| from | number | Start of the marked passage, in seconds. Omit for the whole cue. |
| top_k | integer | |
| track_id* | string | e.g. 'AIN-CAT 030_001' or 'Along The River' |
{
"type": "object",
"required": [
"track_id"
],
"properties": {
"to": {
"type": "number",
"minimum": 0,
"description": "End of the marked passage, in seconds (5–60 s after from)."
},
"from": {
"type": "number",
"minimum": 0,
"description": "Start of the marked passage, in seconds. Omit for the whole cue."
},
"top_k": {
"type": "integer",
"default": 8,
"maximum": 25,
"minimum": 1
},
"track_id": {
"type": "string",
"description": "e.g. 'AIN-CAT 030_001' or 'Along The River'"
}
}
}Use this when the user wants music for a specific video and its length is known. If the length is unknown, use search_music instead. Find music for a video. Given the video's length and a description of it, returns eight cues from the AINSOF catalog when suitable cues are available, preferring playable versions that fit the requested duration. When an exact-length cut is unavailable, for_your_video explains the required edit. Every result comes with its composer, publisher and a preview to listen to. Use this when someone asks for music or a soundtrack for a video and its exact duration is available. Each call is self-contained: for a refinement, describe the current musical requirements including the latest change. Send only the video description and musical requirements, never chat transcripts, assistant replies or unrelated personal information. Pass the customer's musical request in their original language, preserving their words, exclusions and durations. Do not add instruments, genres, mood, energy or vocal restrictions that they did not ask for. For a refinement, combine only the customer's established requirements and latest change, not suggestions from an assistant. One search returns evaluated matches or alternatives; present that result before proposing another direction. An unavailable search is a technical failure, not an empty catalog: explain it and do not automatically repeat or broaden the request. A user-requested retry remains possible.
| Argument | Type | Description |
|---|---|---|
| scope | string | Optional library restriction; omit to let the request select the library. |
| product | string | |
| description* | string | Describe the video, mood or music wanted, in the user's language. Required; duration alone is insufficient. |
| cuts_per_min |
Use this when the user has chosen an AINSOF cue and needs it at a specific length — a 15-second ad, a 6-second bumper, a loop. It edits the composer's own recording; it does not generate new music. Cut one catalog cue to the length you need — for an ad, a reel, a sting or a video — the way an editor would: the song's opening, a jump of whole bars, and the song's REAL ending ringing out. Never stretched, never faded in the middle. kind='length' returns the nearest MUSICAL length (ask for 5 and you may get 6-8 seconds, so the ending still lands); kind='video' returns exactly `seconds` with the final hit before the last frame; kind='loop' returns a seamless loop of whole bars close to `seconds`. hit_at puts the song's arrival (its climax) on that second — use it for a reveal or a logo. stems=true also cuts every stem at the same points. Returns a listen link and a zip (MP3 192k mix + stems), kept 7 days. Identify the cue by the track_id or title search_music returned. For an ordinary request such as 'an 11-second version', use kind='length' and report the returned musical duration. Use kind='video' only when the user supplies a video's duration or explicitly asks for an exact duration. Do not carry a previous test's exact-length setting into a new request. When the user asks you to create, shorten or adapt a selected cue to a duration, call fit_to_length with that cue and the requested seconds. This works for arbitrary durations from 1 to 300 seconds, not just stock 15/30/40/60-second cuts or clips below 15 seconds. Preserve their chosen source version (for example NO_VOCALS); never silently use MAIN instead. If no cue has been chosen, search using their musical brief and help them choose first; a search result is not a newly generated edit. When status is processing, continue the same returned retry arguments without asking the user to repeat their request. Do not claim the edit is ready until status is ready and the returned edit links exist. Reply in the user's language, naming the cue, requested duration and actual duration. Show the supplied player and a clearly labeled download link; never show the source track's audio as the generated edit.
| Argument | Type | Description |
|---|---|---|
| kind | string | For an ordinary request such as 'an 11-second version', use kind='length' and report the returned musical duration. Use kind='video' only when the user supplies a video's duration or explicitly asks for an exact duration. Do not carry a previous test's exact-length setting into a new request. Use loop for an explicitly requested loop. |
One cue in full: album, catalog number, composer with IPI, publisher, tempo, key, description, and every version and stem. Takes a track_id OR the track's title — call it by name when the user names a cue.
| Argument | Type | Description |
|---|---|---|
| track_id* | string | e.g. 'AIN-CAT 031_002' or 'Shine On Today' |
{
"type": "object",
"required": [
"track_id"
],
"properties": {
"track_id": {
"type": "string",
"description": "e.g. 'AIN-CAT 031_002' or 'Shine On Today'"
}
}
}Use this when the user says their video is ON THEIR COMPUTER rather than at a link — "I have a video on my desktop, find me music and score it". Returns upload_page — a link with a file picker — plus the video_url to score afterwards. GIVE THEM upload_page AS A LINK TO OPEN. Do not paste a terminal command at someone in a chat window — they have no terminal, and this is the step where we lose them. Wait for them to say it finished, then call score_my_video with the video_url this returned. If you are an agent that can run commands on their machine yourself, you may PUT the file to upload_url instead only when it is present. Otherwise the upload page asks for Google or email sign-in first. If they already have a direct video-file URL or a Dropbox or Google Drive share link, skip this and pass it straight to score_my_video. Do not pass YouTube, Vimeo, Dailymotion or Twitch to score_my_video; ask for the file itself, then use this tool to create an upload link.
| Argument | Type | Description |
|---|---|---|
| filename | string | their file's name, for the link |
{
"type": "object",
"properties": {
"filename": {
"type": "string",
"description": "their file's name, for the link"
}
}
}Get an AINSOF link to hear a complete track preview. The AINSOF link obtains a fresh temporary storage address when opened; it remains usable while that preview is available.
| Argument | Type | Description |
|---|---|---|
| version | string | MAIN, CUT_30, CUT_15… |
| track_id* | string | e.g. 'AIN-CAT 053_004' — or the title, e.g. 'Shine On Today' |
{
"type": "object",
"required": [
"track_id"
],
"properties": {
"version": {
"type": "string",
"default": "MAIN",
"description": "MAIN, CUT_30, CUT_15…"
},
"track_id": {
"type": "string",
"description": "e.g. 'AIN-CAT 053_004' — or the title, e.g. 'Shine On Today'"
}
}
}Before AINSOF works with a video the person signs in once on ainsof.io (Google or email): without a sign_in_code this returns sign_in_required with a link to show them; after they sign in, call again with the same arguments plus that sign_in_code. Create a music-scored MP4 from a supported video URL and an English music brief, an explicit catalog track, or timed sections. Measures video duration and edit pace, selects or uses the specified music, and mixes it with the source audio. Sections support separate cues, versions or stems; silences specify music-free intervals. Section and silence boundaries are adjusted to measured shot boundaries. Returns video download/watch links, chosen cues, mix details, duration and shot-count summary. Watching is free; downloading the file needs a signed-in AINSOF account with download access (sign in on ainsof.io with Google or email). Detailed cut timestamps, storyboard frames and transcripts are provided by analyze_video, not this tool. Completed delivery packages are retrieved with deliver_score using the scoring arguments. Supports direct video files and supported Dropbox/Google Drive shares; stream-only YouTube, Vimeo, Dailymotion and Twitch pages are unsupported. Creates private processing jobs and stored outputs. After verified output storage, the temporary AINSOF-uploaded source copy is deleted or queued for deletion retry; the local original is unchanged. Processing may return still_running; recent identical requests reuse existing work. Terminal failures return a reason.
| Argument | Type | Description |
|---|---|---|
| brief | string | the music you want, IN ENGLISH. Leave it out and AINSOF watches the film first and chooses the music for what it is and how it feels (returned as `film`). |
| version | string | force a version — MAIN, CUT_30, CUT_60… |
| sections | array |
Use this when the user wants licensable music that sounds like a song they name or link. Do not use it to identify, play or download the reference recording itself. Find AINSOF music that SOUNDS LIKE a reference. Accepts a YouTube, Spotify, Apple Music or Deezer link, or 'artist - title'. SoundCloud is not supported because it exposes no permitted preview clip; TikTok is not supported because its published metadata identifies the post caption, not the recording. Ask for the artist and title instead. Use it when the user asks for AINSOF music similar to that reference: it matches the reference against the AINSOF catalog using available audio or metadata. Supply musical_description with concrete style, groove and instruments when supported by the user's description or reliable knowledge of the reference; omit it if uncertain. This adds a separate catalog-context search. Returned candidates are not verified sound-alikes; musical suitability requires listening. Records by other artists cannot be licensed from AINSOF, so this returns our cues rather than a reading list. The first reply is often still_running because it resolves the reference through public or authorized metadata and compares a permitted preview clip by sound — call it again with the same link and it picks up the search already running.
| Argument | Type | Description |
|---|---|---|
| link* | string | |
| top_k | integer | Number of candidates requested. Values below eight are normalized to eight. |
| musical_styles | array | Known English genre labels from the user's request or reliable knowledge of the reference, e.g. disco, funk. Omit if uncertain. Matches catalog genre tags (including single words) and may return fewer cues. Multiple styles are alternatives, not proof of their combination. Never invent a genre to fill this field. |
Use this when the user needs existing, licensable music or sound effects for a project — background music, production music, music for an ad, trailer, YouTube video, podcast, game or film — described in words (mood, scene, genre, instruments, energy). Do not use it to generate new music, write lyrics, identify a song, or play commercial releases by other artists. Find AINSOF music from a written brief — mood, scene, genre, energy, instruments. Example: 'lo-fi hip hop underscore, warm, no vocals'. Send the user's original language and musical intent, including durations and exclusions. Each call is self-contained. For a refinement, combine the current musical requirements and the latest change into brief; do not send only the clarification question. Send only musical requirements, never chat transcripts, assistant replies or unrelated personal information. Pass the customer's musical request in their original language, preserving their words, exclusions and durations. Do not add instruments, genres, mood, energy or vocal restrictions that they did not ask for. For a refinement, combine only the customer's established requirements and latest change, not suggestions from an assistant. One search returns evaluated matches or alternatives; present that result before proposing another direction. An unavailable search is a technical failure, not an empty catalog: explain it and do not automatically repeat or broaden the request. A user-requested retry remains possible. Use the returned understanding, followups and selected preview version when presenting the answer. A NAME also works, and is answered exactly: pass a track title ('Shine On Today'), an album ('Shining Ahead'), a catalog number ('AIN-CAT 031') or a COMPOSER ('Alon Peretz') as the brief and you get that cue, that album in full, or everything that writer wrote. A composer named inside an ordinary brief puts their cues first without narrowing it. NEVER tell a user we do not have a track until you have passed its name here.
| Argument | Type | Description |
|---|---|---|
| brief* | string | What the music should be — or the exact name of a track, album or catalog number. |
| music_offset_db | number | the same value you scored with, if you set one |
{
"type": "object",
"required": [
"video_url"
],
"properties": {
"brief": {
"type": "string",
"description": "the same brief you scored with"
},
"version": {
"type": "string"
},
"sections": {
"type": "array",
"items": {
"type": "object",
"properties": {
"to": {
"type": "number"
},
"from": {
"type": "number"
},
"brief": {
"type": "string"
},
"stems": {
"type": "array",
"items": {
"type": "string"
}
},
"version": {
"type": "string"
},
"track_id": {
"type": "string"
}
}
}
},
"silences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"at": {
"type": "number"
},
"for": {
"type": "number"
}
}
}
},
"track_id": {
"type": "string"
},
"video_url": {
"type": "string",
"description": "the same link you scored"
},
"sign_in_code": {
"type": "string",
"description": "the sign_in_code AINSOF returned with its sign-in link, once the person has signed in. Pass it to every video tool in this conversation."
},
"music_offset_db": {
"type": "number",
"description": "the same value you scored with, if you set one"
}
}
}| string |
| the user's own sentence, verbatim, not paraphrased |
{
"type": "object",
"required": [
"about",
"verdict",
"consented"
],
"properties": {
"about": {
"type": "string",
"description": "the tool this is about, e.g. 'search_music' or 'score_my_video'"
},
"brief": {
"type": "string",
"description": "the brief or query that produced it, if any"
},
"verdict": {
"enum": [
"good",
"bad",
"partly"
],
"type": "string",
"description": "how it landed"
},
"expected": {
"type": "string",
"description": "what they wanted instead, if they said"
},
"track_id": {
"type": "string",
"description": "the cue it concerns, if any"
},
"consented": {
"type": "boolean",
"description": "true ONLY if you asked the user whether their feedback may be sent to AINSOF and they agreed. Never set this without having asked."
},
"in_their_words": {
"type": "string",
"description": "the user's own sentence, verbatim, not paraphrased"
}
}
}| number |
| edit pace, if known |
| duration_sec* | number | the video's length in seconds |
| has_narration | boolean | true if anyone speaks over it |
{
"type": "object",
"required": [
"duration_sec",
"description"
],
"properties": {
"scope": {
"enum": [
"music",
"sfx"
],
"type": "string",
"description": "Optional library restriction; omit to let the request select the library."
},
"product": {
"type": "string"
},
"description": {
"type": "string",
"minLength": 1,
"description": "Describe the video, mood or music wanted, in the user's language. Required; duration alone is insufficient."
},
"cuts_per_min": {
"type": "number",
"description": "edit pace, if known"
},
"duration_sec": {
"type": "number",
"description": "the video's length in seconds"
},
"has_narration": {
"type": "boolean",
"description": "true if anyone speaks over it"
}
}
}| stems | boolean | also cut every stem the same way |
| hit_at | number | optional: the second where the song's arrival should land |
| seconds* | number | the length you need (for kind='video', the video's length) |
| version | string | optional: cut from this version instead of MAIN |
| track_id* | string | e.g. 'AIN-CAT 038_007', or the cue's title |
{
"type": "object",
"required": [
"track_id",
"seconds"
],
"properties": {
"kind": {
"enum": [
"length",
"video",
"loop"
],
"type": "string",
"description": "For an ordinary request such as 'an 11-second version', use kind='length' and report the returned musical duration. Use kind='video' only when the user supplies a video's duration or explicitly asks for an exact duration. Do not carry a previous test's exact-length setting into a new request. Use loop for an explicitly requested loop."
},
"stems": {
"type": "boolean",
"description": "also cut every stem the same way"
},
"hit_at": {
"type": "number",
"minimum": 0,
"description": "optional: the second where the song's arrival should land"
},
"seconds": {
"type": "number",
"maximum": 300,
"minimum": 1,
"description": "the length you need (for kind='video', the video's length)"
},
"version": {
"type": "string",
"description": "optional: cut from this version instead of MAIN"
},
"track_id": {
"type": "string",
"description": "e.g. 'AIN-CAT 038_007', or the cue's title"
}
}
}| Timed sections with separate music briefs or specified cues. Boundaries are adjusted to measured shot boundaries. This tool does not support per-section volume automation. |
| silences | array | Music-free intervals, in seconds. Boundaries are adjusted to measured shot boundaries. analyze_video provides the cut list. |
| track_id | string | use this exact cue instead, e.g. 'AIN-CAT 006_004' |
| video_url* | string | link to the video |
| music_intent | string | optional — the music the user wants, in at most 8 English words, no names (e.g. 'tense build, minimal, no vocals'). Kept as anonymous usage statistics. |
| project_type | string | optional — what kind of project the video is. Kept as anonymous usage statistics. |
| sign_in_code | string | the sign_in_code AINSOF returned with its sign-in link, once the person has signed in. Pass it to every video tool in this conversation. |
| user_request | string | optional — in one sentence, what the user wants the music to do for this video, in their own words (e.g. 'tense build to the reveal at the end'). Kept by AINSOF for 30 days to review how well the music fit, then deleted. |
| music_offset_db | number | how far under the video's own audio the music sits, in dB. Negative is quieter; 0 is level with it. Leave unset for the default. |
{
"type": "object",
"required": [
"video_url"
],
"properties": {
"brief": {
"type": "string",
"description": "the music you want, IN ENGLISH. Leave it out and AINSOF watches the film first and chooses the music for what it is and how it feels (returned as `film`)."
},
"version": {
"type": "string",
"description": "force a version — MAIN, CUT_30, CUT_60…"
},
"sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"from",
"to"
],
"properties": {
"to": {
"type": "number",
"description": "end of this act, in seconds"
},
"from": {
"type": "number",
"description": "start of this act, in seconds"
},
"brief": {
"type": "string",
"description": "the music for THIS act, in English"
},
"stems": {
"type": "array",
"items": {
"type": "string"
},
"description": "Or build this act from individual instruments of that cue — [\"STRINGS\"], or [\"BRASS\",\"BASS\"]. Every stem is the same length as the full mix and perfectly in sync with it, so any combination stays together. Use it when a moment needs one color rather than a whole arrangement. Needs track_id."
},
"version": {
"type": "string",
"description": "An alternate mix available for this cue, such as MAIN, UNDERSCORE, MUSIC_BED or NO_MELODY. get_track lists the versions actually available for the selected cue."
},
"track_id": {
"type": "string",
"description": "or an exact cue for this act"
}
}
},
"description": "Timed sections with separate music briefs or specified cues. Boundaries are adjusted to measured shot boundaries. This tool does not support per-section volume automation."
},
"silences": {
"type": "array",
"items": {
"type": "object",
"required": [
"at"
],
"properties": {
"at": {
"type": "number",
"description": "seconds into the video"
},
"for": {
"type": "number",
"description": "how long the silence lasts, in seconds"
}
}
},
"description": "Music-free intervals, in seconds. Boundaries are adjusted to measured shot boundaries. analyze_video provides the cut list."
},
"track_id": {
"type": "string",
"description": "use this exact cue instead, e.g. 'AIN-CAT 006_004'"
},
"video_url": {
"type": "string",
"description": "link to the video"
},
"music_intent": {
"type": "string",
"description": "optional — the music the user wants, in at most 8 English words, no names (e.g. 'tense build, minimal, no vocals'). Kept as anonymous usage statistics."
},
"project_type": {
"enum": [
"ad",
"social",
"documentary",
"film",
"trailer",
"game",
"corporate",
"event",
"podcast",
"music_video",
"other"
],
"type": "string",
"description": "optional — what kind of project the video is. Kept as anonymous usage statistics."
},
"sign_in_code": {
"type": "string",
"description": "the sign_in_code AINSOF returned with its sign-in link, once the person has signed in. Pass it to every video tool in this conversation."
},
"user_request": {
"type": "string",
"description": "optional — in one sentence, what the user wants the music to do for this video, in their own words (e.g. 'tense build to the reveal at the end'). Kept by AINSOF for 30 days to review how well the music fit, then deleted."
},
"music_offset_db": {
"type": "number",
"description": "how far under the video's own audio the music sits, in dB. Negative is quieter; 0 is level with it. Leave unset for the default."
}
}
}| musical_description |
| string |
| Known musical style, groove and instrumentation, preferably in English. Include the user's constraints. Do not invent traits or treat the artist/title as a musical description. |
{
"type": "object",
"required": [
"link"
],
"properties": {
"link": {
"type": "string"
},
"top_k": {
"type": "integer",
"default": 8,
"maximum": 25,
"minimum": 1,
"description": "Number of candidates requested. Values below eight are normalized to eight."
},
"musical_styles": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"maxItems": 4,
"description": "Known English genre labels from the user's request or reliable knowledge of the reference, e.g. disco, funk. Omit if uncertain. Matches catalog genre tags (including single words) and may return fewer cues. Multiple styles are alternatives, not proof of their combination. Never invent a genre to fill this field."
},
"musical_description": {
"type": "string",
"maxLength": 1000,
"description": "Known musical style, groove and instrumentation, preferably in English. Include the user's constraints. Do not invent traits or treat the artist/title as a musical description."
}
}
}| scope |
| string |
| Optional library restriction; omit to let the request select the library. |
| top_k | integer | Number of candidates requested. Discovery searches normalize values below eight to eight. |
{
"type": "object",
"required": [
"brief"
],
"properties": {
"brief": {
"type": "string",
"description": "What the music should be — or the exact name of a track, album or catalog number."
},
"scope": {
"enum": [
"music",
"sfx"
],
"type": "string",
"description": "Optional library restriction; omit to let the request select the library."
},
"top_k": {
"type": "integer",
"default": 8,
"maximum": 40,
"minimum": 1,
"description": "Number of candidates requested. Discovery searches normalize values below eight to eight."
}
}
}