Vai alla navigazione

Inpainting musicale

Modifica e combina sezioni di brani esistenti

L’inpainting musicale con il modello music_v2 o music_v2_5 ti consente di modificare parti specifiche di un brano mantenendo intatto il resto. Memorizza un brano generato, quindi fai riferimento alle sue parti in un piano di composizione per lasciarle invariate, rigenerarle o condizionare il nuovo audio sull’originale.

Come funziona

Un piano di composizione music_v2 o music_v2_5 è un elenco ordinato di chunk. Ogni chunk è di uno dei due tipi seguenti:

  • Chunk di generazione — genera nuovo audio da text e dagli stili. Usalo per rigenerare una sezione o aggiungere nuovo materiale.
  • Chunk di riferimento audio — inserisce invariata una porzione di un brano memorizzato. Usalo per mantenere una sezione di un brano esistente esattamente com’è.

Guida rapida

1

Memorizza un brano per l’inpainting

Puoi memorizzare un brano per l’inpainting in due modi: genera un nuovo brano con store_for_inpainting oppure carica un file audio esistente.

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

Mantieni e rigenera chunk

Crea un piano che combina chunk di riferimento audio (mantenuti) e chunk di generazione (rigenerati), quindi passalo a compose con 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)

Condizionamento

Un chunk di generazione può essere condizionato su una porzione di audio memorizzato con conditioning_ref. Il modello rigenera il chunk restando vicino alle caratteristiche musicali del riferimento. Controlla quanto strettamente il chunk segue il riferimento con condition_strength (low, medium, high o 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"
}

Il primo chunk influenza la generazione di tutti i chunk successivi. Per condizionare l’intero brano su un riferimento, applica conditioning_ref a partire dal primo chunk.

Un riferimento di condizionamento può durare al massimo 30 secondi (30.000 ms).

Aderenza al contesto

Ogni chunk di generazione ha un livello context_adherence che controlla quanto strettamente segue i chunk vicini:

  • high (predefinito) — resta coerente con i chunk circostanti. Usalo per transizioni fluide tra audio mantenuto e rigenerato.
  • medium — bilancia coerenza e libertà creativa.
  • low — consente al chunk di discostarsi dal contesto ed essere più creativo.

Esempi

Modifica una singola sezione

Genera il trailer di un film, quindi rigenera solo l’outro con un testo diverso.

1

Genera l’originale

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

Modifica solo l’outro

Mantieni le prime tre sezioni (secondi 0–50) con un singolo chunk di riferimento audio e rigenera l’outro:

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")

Estendi un brano

Aggiungi una nuova intro e un nuovo outro a un brano esistente.

1

Genera l’originale

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

Estendi con nuova intro e outro

Inserisci una porzione mantenuta dell’originale tra due nuovi chunk di generazione:

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")

Crea un loop continuo

Genera una frase musicale e crea un loop usando un chunk di “collegamento” che unisce la stessa porzione ripetuta due volte.

1

Genera una breve clip

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

Crea un loop con un chunk di collegamento

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")

Genera un brano simile

Condiziona un brano completamente nuovo su una breve porzione di uno esistente per trasferirne le caratteristiche musicali. Poiché il primo chunk influenza ogni chunk successivo, l’applicazione di conditioning_ref al primo chunk modella l’intera generazione, anche se solo quel chunk fa riferimento all’audio memorizzato.

1

Genera l’originale

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

Genera un nuovo brano condizionato sull’originale

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")

Riferimento dei chunk

Un piano music_v2 contiene fino a 30 chunk. Ogni chunk è un chunk di generazione o un chunk di riferimento audio.

Chunk di generazione

CampoTipoDescrizione
textstringNome della sezione tra parentesi quadre ([Verse 1]), righe del testo e indicazioni inline tra parentesi graffe ({scratching}).
duration_msnumberDurata in millisecondi (3.000 - 120.000).
positive_stylesarrayStili e indicazioni da includere (max 50).
negative_stylesarrayStili e indicazioni da evitare (max 50). Il valore predefinito è vuoto.
context_adherencestringlow, medium o high (predefinito). Indica quanto il chunk segue da vicino i chunk circostanti.
conditioning_refobject | nullPorzione facoltativa { song_id, range } dell’audio archiviato su cui effettuare il conditioning. Il valore predefinito è null.
condition_strengthstring | nulllow, medium (predefinito), high o xhigh. Indica quanto il chunk segue il riferimento di conditioning.

Gli stili del primo chunk sono i più importanti, poiché definiscono il tono e il genere generali. Cerca di usare almeno 6-7 stili nei primi chunk, finché non avrai definito la direzione.

Chunk di riferimento audio

CampoTipoDescrizione
song_idstringID del brano archiviato da cui estrarre l’audio.
rangeobjectPorzione { start_ms, end_ms } del brano archiviato da inserire invariata.

Limiti

LimiteValore
Numero massimo di chunk per piano30
Durata minima del chunk3 secondi (3.000 ms)
Durata massima del chunk2 minuti (120.000 ms)
Riferimento di conditioning massimo30 secondi (30.000 ms)
Intervallo di tempo minimo50 ms

Passaggi successivi