Hoppa till navigering

Musik-inpainting

Redigera och kombinera sektioner från befintliga låtar

Musik-inpainting med modellen music_v2 eller music_v2_5 låter dig ändra specifika delar av en låt samtidigt som resten förblir intakt. Spara en genererad låt och referera sedan till dess delar i en kompositionsplan för att behålla dem oförändrade, generera dem på nytt eller basera nytt ljud på originalet.

Så fungerar det

En music_v2- eller music_v2_5-kompositionsplan är en ordnad lista med delar. Varje del är en av två typer:

  • Genereringsdel — genererar nytt ljud från text och stilar. Använd den för att generera en sektion på nytt eller lägga till nytt material.
  • Ljudreferensdel — infogar ett utsnitt av en sparad låt oförändrat. Använd den för att behålla en sektion av en befintlig låt exakt som den är.

Snabbstart

1

Spara en låt för inpainting

Du kan spara en låt för inpainting på två sätt: generera en ny låt med store_for_inpainting eller ladda upp en befintlig ljudfil.

import os
from dotenv import load_dotenv
from elevenlabs.client import ElevenLabs
load_dotenv()
elevenlabs = ElevenLabs(api_key=os.environ.get("ELEVENLABS_API_KEY"))
# Generate a song and store it for later inpainting
response = elevenlabs.music.compose_detailed(
prompt="An upbeat pop song with verse and chorus",
music_length_ms=60000,
model_id="music_v2_5",
store_for_inpainting=True
)
song_id = response.song_id
# Save the audio
with open("original.mp3", "wb") as f:
f.write(response.audio)
2

Behåll och generera delar på nytt

Bygg en plan som blandar ljudreferensdelar (behållna) med genereringsdelar (omgenererade) och skicka den sedan till compose med model_id="music_v2_5":

# Keep the first 30 seconds, regenerate the rest with a new style
composition_plan = {
"chunks": [
# Keep the original first 30 seconds unchanged
{
"song_id": song_id,
"range": {"start_ms": 0, "end_ms": 30000}
},
# Regenerate the chorus with a new style
{
"text": "[Chorus]\nWe're rising up tonight\nNothing can stop us now",
"duration_ms": 30000,
"positive_styles": ["bigger drums", "layered vocals", "anthemic"],
"negative_styles": ["sparse", "minimal"],
"context_adherence": "high"
}
]
}
audio = elevenlabs.music.compose(
composition_plan=composition_plan,
model_id="music_v2_5",
)
with open("edited.mp3", "wb") as f:
for chunk in audio:
f.write(chunk)

Konditionering

En genereringsdel kan baseras på ett utsnitt av sparat ljud med conditioning_ref. Modellen genererar delen på nytt samtidigt som den håller sig nära referensens musikaliska egenskaper. Styr hur nära delen följer referensen med condition_strength (low, medium, high eller xhigh).

{
"text": "[Chorus]\nThis is my moment\nI won't let it go",
"duration_ms": 15000,
"positive_styles": ["powerful vocals", "full band", "anthemic"],
"negative_styles": [],
"context_adherence": "high",
"conditioning_ref": {
"song_id": "vVtPM1Sas70E2LIhQFch",
"range": { "start_ms": 30000, "end_ms": 45000 }
},
"condition_strength": "high"
}

Den första delen påverkar genereringen av alla efterföljande delar. För att basera hela låten på en referens tillämpar du conditioning_ref från den första delen.

En konditioneringsreferens kan vara högst 30 sekunder (30 000 ms) lång.

Kontextföljsamhet

Varje genereringsdel har en nivå av context_adherence som styr hur nära den följer sina angränsande delar:

  • high (standard) — förblir konsekvent med omgivande delar. Använd den för mjuka övergångar mellan behållet och omgenererat ljud.
  • medium — balanserar konsekvens med kreativ frihet.
  • low — låter delen avvika från sitt sammanhang och vara mer kreativ.

Exempel

Redigera en enskild sektion

Generera en filmtrailer och generera sedan bara outrot på nytt med annan låttext.

1

Generera originalet

composition_plan = {
"chunks": [
{
"text": "[Intro]\nIn a world beyond code\nWhere sound becomes life",
"duration_ms": 15000,
"positive_styles": ["cinematic", "epic", "orchestral", "low strings", "suspenseful"],
"negative_styles": ["acoustic", "pop", "minimalistic"],
"context_adherence": "high"
},
{
"text": "[Build]\nTechnology awakens the future\nShaping every word into power",
"duration_ms": 20000,
"positive_styles": ["rising brass", "full orchestra", "epic"],
"negative_styles": ["acoustic", "pop"],
"context_adherence": "high"
},
{
"text": "[Bridge]\n(ah ah ah ah)",
"duration_ms": 15000,
"positive_styles": ["ethereal choir", "crescendo"],
"negative_styles": [],
"context_adherence": "high"
},
{
"text": "[Outro]\nThe voice of tomorrow, unleashed\nElevenLabs",
"duration_ms": 10000,
"positive_styles": ["deep narration", "epic finale"],
"negative_styles": [],
"context_adherence": "high"
}
]
}
response = elevenlabs.music.compose_detailed(
composition_plan=composition_plan,
model_id="music_v2_5",
store_for_inpainting=True
)
song_id = response.song_id
2

Redigera bara outrot

Behåll de första tre sektionerna (sekund 0–50) med en enda ljudreferensdel och generera outrot på nytt:

edited_plan = {
"chunks": [
# Keep the intro, build, and bridge unchanged
{
"song_id": song_id,
"range": {"start_ms": 0, "end_ms": 50000}
},
# Regenerate the outro with new lyrics
{
"text": "[Outro]\nThe future has arrived\nElevenLabs",
"duration_ms": 10000,
"positive_styles": ["deep narration", "epic finale"],
"negative_styles": [],
"context_adherence": "high"
}
]
}
audio = elevenlabs.music.compose(composition_plan=edited_plan, model_id="music_v2_5")

Förläng en låt

Lägg till ett nytt intro och outro i en befintlig låt.

1

Generera originalet

response = elevenlabs.music.compose_detailed(
prompt="Berlin night club techno",
music_length_ms=60000,
model_id="music_v2_5",
store_for_inpainting=True
)
song_id = response.song_id
2

Förläng med nytt intro och outro

Placera ett behållet utsnitt av originalet mellan två nya genereringsdelar:

extend_plan = {
"chunks": [
# New intro
{
"text": "[Intro]",
"duration_ms": 30000,
"positive_styles": ["techno", "building tension", "filtered synths"],
"negative_styles": [],
"context_adherence": "high"
},
# Keep the core of the original (seconds 10-50)
{
"song_id": song_id,
"range": {"start_ms": 10000, "end_ms": 50000}
},
# New outro
{
"text": "[Outro]",
"duration_ms": 30000,
"positive_styles": ["techno", "fading out", "sparse"],
"negative_styles": [],
"context_adherence": "high"
}
]
}
audio = elevenlabs.music.compose(composition_plan=extend_plan, model_id="music_v2_5")

Skapa en sömlös loop

Generera en musikalisk fras och skapa en loop med en “lim”-del som kopplar ihop samma utsnitt som upprepas två gånger.

1

Generera ett kort klipp

composition_plan = {
"chunks": [
{
"text": "[Solo Acoustic]",
"duration_ms": 10000,
"positive_styles": ["acoustic guitar", "fingerpicking", "warm tone", "soft dynamics"],
"negative_styles": ["electric", "drums", "electronic"],
"context_adherence": "high"
}
]
}
response = elevenlabs.music.compose_detailed(
composition_plan=composition_plan,
model_id="music_v2_5",
store_for_inpainting=True
)
song_id = response.song_id
2

Skapa en loop med en lim-del

loop_plan = {
"chunks": [
# Loop start - keep a slice of the original
{
"song_id": song_id,
"range": {"start_ms": 3000, "end_ms": 8000}
},
# Glue - generate a smooth transition between the two slices
{
"text": "[Glue]",
"duration_ms": 3000,
"positive_styles": ["acoustic guitar", "fingerpicking", "smooth transition"],
"negative_styles": [],
"context_adherence": "high"
},
# Loop end - keep the same slice again
{
"song_id": song_id,
"range": {"start_ms": 3000, "end_ms": 8000}
}
]
}
audio = elevenlabs.music.compose(composition_plan=loop_plan, model_id="music_v2_5")

Generera en liknande låt

Basera en helt ny låt på ett kort utsnitt av en befintlig för att föra över dess musikaliska egenskaper. Eftersom den första delen påverkar varje efterföljande del formar en conditioning_ref på den första delen hela genereringen, även om endast den delen refererar till det sparade ljudet.

1

Generera originalet

response = elevenlabs.music.compose_detailed(
prompt="An upbeat pop song with bright synths and driving drums",
music_length_ms=60000,
model_id="music_v2_5",
store_for_inpainting=True
)
song_id = response.song_id
2

Generera en ny låt baserad på originalet

similar_plan = {
"chunks": [
# The first chunk conditions the whole song on the reference
{
"text": "[Verse]\nSalt on my skin from a borrowed sea\nCounting the heartbeats it takes to break free",
"duration_ms": 30000,
"positive_styles": ["pop", "energetic", "bright synths", "driving drums"],
"negative_styles": ["sparse", "minimal"],
"context_adherence": "high",
"conditioning_ref": {
"song_id": song_id,
"range": {"start_ms": 0, "end_ms": 10000}
},
"condition_strength": "high"
},
{
"text": "[Chorus]\nWe're rising up tonight\nNothing can stop us now",
"duration_ms": 30000,
"positive_styles": ["bigger drums", "layered vocals", "anthemic"],
"negative_styles": ["sparse", "minimal"],
"context_adherence": "high"
}
]
}
audio = elevenlabs.music.compose(composition_plan=similar_plan, model_id="music_v2_5")

Chunk-referens

En music_v2-plan innehåller upp till 30 chunkar. Varje chunk är antingen en genereringschunk eller en ljudreferenschunk.

Genereringschunk

FältTypBeskrivning
textstringSektionsnamn inom hakparenteser ([Vers 1]), textrader och inbäddade instruktioner inom klamrar ({scratching}).
duration_msnumberLängd i millisekunder (3 000–120 000).
positive_stylesarrayStilar och instruktioner att inkludera (max 50).
negative_stylesarrayStilar och instruktioner att undvika (max 50). Standardvärdet är tomt.
context_adherencestringlow, medium eller high (standard). Hur nära chunken följer omgivande chunkar.
conditioning_refobject | nullValfritt { song_id, range }-utdrag av lagrat ljud att villkora utifrån. Standardvärdet är null.
condition_strengthstring | nulllow, medium (standard), high eller xhigh. Hur starkt chunken följer villkoringsreferensen.

Stilarna för den första chunken är viktigast eftersom de anger den övergripande tonen och genren. Sikta på minst 6–7 stilar i tidiga chunkar tills riktningen har etablerats.

Ljudreferenschunk

FältTypBeskrivning
song_idstringID för den lagrade låten som ljudet ska hämtas från.
rangeobject{ start_ms, end_ms }-utdrag av den lagrade låten som infogas oförändrat.

Begränsningar

BegränsningVärde
Maximalt antal chunkar per plan30
Minsta chunklängd3 sekunder (3 000 ms)
Största chunklängd2 minuter (120 000 ms)
Maximal villkoringsreferens30 sekunder (30 000 ms)
Minsta tidsintervall50 ms

Nästa steg