> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Prześlij muzykę

POST https://api.elevenlabs.io/v1/music/upload
Content-Type: multipart/form-data

Prześlij plik muzyczny do późniejszego użycia w inpaintingu. Cena przesłania jest taka sama jak cena generowania utworu. Wszystkie przesłane treści są sprawdzane pod kątem naruszeń praw autorskich. Jeśli wykryjemy treść chronioną prawem autorskim, nadal naliczymy połowę kosztu żądania.

Reference: https://elevenlabs.io/docs/api-reference/music/upload

## Servers

- `https://api.elevenlabs.io` (Production, default)
- `https://api.us.elevenlabs.io` (Production US)
- `https://api.eu.residency.elevenlabs.io` (Production EU)
- `https://api.in.residency.elevenlabs.io` (Production India)
- `https://api.sg.residency.elevenlabs.io` (Production Singapore)

## Request

### Body (multipart/form-data)

This endpoint expects a multipart form containing a file.

- `file` (file, required) — Plik audio do przesłania.
- `extract_composition_plan` (V1MusicUploadPostRequestBodyContentMultipartFormDataSchemaExtractCompositionPlan, optional) — Czy generować i zwracać plan kompozycji dla przesłanego utworu. Przekaż identyfikator modelu (`music_v1`, `music_v2` lub `music_v2_5`), aby określić zwracany format planu kompozycji. Przekazywanie `true`/`false` jest przestarzałe; `true` domyślnie używa formatu planu `music_v1`. Włączenie tej opcji zwiększy opóźnienie.
- `with_timestamps` (boolean, optional) — Czy transkrybować przesłany utwór i zwracać znaczniki czasu na poziomie słów. Jeśli True, odpowiedź będzie zawierać words_timestamps, ale zwiększy to opóźnienie.
- `with_waveform_visual` (boolean, optional) — Czy zwracać wizualną formę fali przesłanego utworu.

## Response

### 200

Pomyślnie przesłano plik muzyczny z opcjonalnym planem kompozycji

- `song_id` (string, required) — Unikalny identyfikator przesłanego utworu
- `composition_plan` (MusicUploadResponseCompositionPlan, optional, nullable) — Plan kompozycji wyodrębniony z przesłanego utworu. Występuje tylko, jeśli w treści żądania podano `extract_composition_plan`.
- `words_timestamps` (list of WordTimestamp, optional, nullable) — Znaczniki czasu na poziomie słów transkrybowane z przesłanego utworu. Obecne tylko, jeśli `with_timestamps` miało wartość True w treści żądania.
- `waveform_visual` (list of integer, optional, nullable) — Przebieg fali przesłanego utworu w niskiej rozdzielczości, używany do wyświetlenia podglądu. Zawiera 4 wartości na sekundę audio, od -1000 do 1000. Stereo jest miksowane do jednego kanału. Występuje tylko, gdy w treści żądania `with_waveform_visual` miało wartość True.

## Errors

### 422 Unprocessable Entity Error

Błąd walidacji

- `detail` (list of ValidationError, optional)

## Types

### MusicUploadResponseCompositionPlan

Plan kompozycji wyodrębniony z przesłanego utworu. Występuje tylko, jeśli w treści żądania podano `extract_composition_plan`.

- MusicPrompt: MusicPrompt
- CompositionPlan: CompositionPlan

### WordTimestamp

- `word` (string, required)
- `start_ms` (integer, required)
- `end_ms` (integer, required)

### ValidationError

- `loc` (list of ValidationErrorLocItems, required)
- `msg` (string, required)
- `type` (string, required)

### MusicPrompt

Plan kompozycji dla modelu `music_v1`. Użycie tego pola z innym modelem spowoduje błąd.

- `positive_global_styles` (list of string, required) — Style i wskazówki muzyczne, które powinny występować w całym utworze. Aby uzyskać najlepszy wynik, użyj języka angielskiego.
- `negative_global_styles` (list of string, required) — Style i wskazówki muzyczne, które nie powinny występować w całym utworze. Aby uzyskać najlepszy wynik, użyj języka angielskiego.
- `sections` (list of SongSection, required) — Sekcje utworu.

### CompositionPlan

Plan kompozycji dla modeli `music_v2` i `music_v2_5`. Użycie tego pola z innym modelem spowoduje błąd.

- `chunks` (list of CompositionPlanChunksItems, required) — Fragmenty składające się na generowanie.

### ValidationErrorLocItems

- string
- integer

### SongSection

- `section_name` (string, required) — Nazwa sekcji. Musi mieć od 1 do 100 znaków.
- `positive_local_styles` (list of string, required) — Style i wskazówki muzyczne, które powinny występować w tej sekcji. Aby uzyskać najlepszy wynik, użyj języka angielskiego.
- `negative_local_styles` (list of string, required) — Style i wskazówki muzyczne, które nie powinny występować w tej sekcji. Aby uzyskać najlepszy wynik, użyj języka angielskiego.
- `duration_ms` (integer, required) — Czas trwania sekcji w milisekundach. Musi wynosić od 3000 ms do 120000 ms.
- `lines` (list of string, required) — Tekst sekcji. Maks. 30 wersów na sekcję i 200 znaków na wers.
- `source_from` (SectionSource, optional, nullable) — Opcjonalne źródło, z którego zostanie wyodrębniona sekcja. Używane do inpaintingu.

### CompositionPlanChunksItems

- GenerationChunk: GenerationChunk-Input
- AudioRefChunk: AudioRefChunk

### SectionSource

- `song_id` (string, required) — ID utworu, z którego pobrać sekcję. ID utworu znajdziesz w nagłówkach odpowiedzi podczas generowania utworu.
- `range` (TimeRange, required) — Zakres do wyodrębnienia z utworu źródłowego.
- `negative_ranges` (list of TimeRange, optional) — Zakresy do wykluczenia z „range”.

### GenerationChunk-Input

- `text` (string, required) — Konfiguracja tekstu do wygenerowania dla tego fragmentu. Może zawierać opcjonalną nazwę sekcji w nawiasach kwadratowych na początku, np. \[Verse 1], wersy tekstu i instrukcje w nawiasach klamrowych, np. \{scratching}. Nazwy sekcji muszą mieć od 1 do 100 znaków. Dozwolone jest maksymalnie 30 wierszy, każdy o długości do 200 znaków.
- `duration_ms` (integer, required) — Czas trwania fragmentu w milisekundach. Musi wynosić od 3000 ms do 120000 ms.
- `positive_styles` (list of string, required) — Style i wskazówki muzyczne, które powinny występować w tym fragmencie. Aby uzyskać najlepsze wyniki, użyj języka angielskiego. Style pierwszego fragmentu są najważniejsze, bo określają ogólny charakter i gatunek. Style kolejnych fragmentów mogą dodać niuanse, rozwój, akcenty lub zmienić kierunek utworu. We wczesnych fragmentach podaj co najmniej 6–7 stylów, aż kierunek będzie ustalony. Ogólne style, takie jak „great production quality”, dobrze sprawdzają się jako domyślne dodatki do listy.
- `negative_styles` (list of string, optional) — Style i wskazówki muzyczne, które nie powinny występować w tym fragmencie. Aby uzyskać najlepsze wyniki, użyj języka angielskiego. Domyślnie najlepiej zostawić to pole puste; użyj go tylko, jeśli chcesz wyraźnie uniknąć określonego stylu lub kierunku.
- `context_adherence` (enum, optional, default: high) — Jak bardzo model trzyma się kontekstu otaczających fragmentów. Niska zgodność oznacza, że model może odbiegać od kontekstu i być bardziej kreatywny. Wysoka zgodność oznacza większą spójność modelu z kontekstem.
  - Allowed values: `low`, `medium`, `high`
- `conditioning_ref` (AudioRefChunk, optional, nullable) — Referencja audio, na której oprze się generowanie. Pierwszy fragment jest najważniejszy, ponieważ wpłynie na generowanie wszystkich kolejnych fragmentów. Jeśli chcesz zastosować warunkowanie do całego utworu, zacznij od pierwszego fragmentu.
- `condition_strength` (enum, optional, nullable) — Jak bardzo model trzyma się referencji warunkującej. Niska wartość oznacza, że model będzie bardziej kreatywny i może odbiegać od referencji. Wysoka wartość oznacza większą zgodność modelu z referencją.
  - Allowed values: `low`, `medium`, `high`, `xhigh`

### AudioRefChunk

- `song_id` (string, required) — ID utworu, z którego pobrać fragment. ID utworu znajdziesz w nagłówkach odpowiedzi podczas generowania utworu.
- `range` (TimeRange, required) — Zakres czasu do wyodrębnienia z utworu.

### TimeRange

- `start_ms` (integer, required)
- `end_ms` (integer, required)

## Examples

**Request**

```json
{
  "file": "<file: string>"
}
```

**Response**

```json
{
  "song_id": "jR4Xz8kL2mNpQ9wVtY1b"
}
```

**SDK Code**

```python
import requests

url = "https://api.elevenlabs.io/v1/music/upload"

files = { "file": "open('string', 'rb')" }
payload = {
    "extract_composition_plan": ,
    "with_timestamps": ,
    "with_waveform_visual": 
}

response = requests.post(url, data=payload, files=files)

print(response.json())
```

```javascript
const url = 'https://api.elevenlabs.io/v1/music/upload';
const form = new FormData();
form.append('extract_composition_plan', '');
form.append('file', 'string');
form.append('with_timestamps', '');
form.append('with_waveform_visual', '');

const options = {method: 'POST'};

options.body = form;

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.elevenlabs.io/v1/music/upload"

	payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"extract_composition_plan\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"string\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_timestamps\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_waveform_visual\"\r\n\r\n\r\n-----011000010111000001101001--\r\n")

	req, _ := http.NewRequest("POST", url, payload)

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.elevenlabs.io/v1/music/upload")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"extract_composition_plan\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"string\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_timestamps\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_waveform_visual\"\r\n\r\n\r\n-----011000010111000001101001--\r\n"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.elevenlabs.io/v1/music/upload")
  .body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"extract_composition_plan\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"string\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_timestamps\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_waveform_visual\"\r\n\r\n\r\n-----011000010111000001101001--\r\n")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.elevenlabs.io/v1/music/upload', [
  'multipart' => [
    [
        'name' => 'file',
        'filename' => 'string',
        'contents' => null
    ]
  ]
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/music/upload");
var request = new RestRequest(Method.POST);
request.AddParameter("undefined", "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"extract_composition_plan\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"string\"\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_timestamps\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"with_waveform_visual\"\r\n\r\n\r\n-----011000010111000001101001--\r\n", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation
let parameters = [
  [
    "name": "extract_composition_plan",
    "value": 
  ],
  [
    "name": "file",
    "fileName": "string"
  ],
  [
    "name": "with_timestamps",
    "value": 
  ],
  [
    "name": "with_waveform_visual",
    "value": 
  ]
]

let boundary = "---011000010111000001101001"

var body = ""
var error: NSError? = nil
for param in parameters {
  let paramName = param["name"]!
  body += "--\(boundary)\r\n"
  body += "Content-Disposition:form-data; name=\"\(paramName)\""
  if let filename = param["fileName"] {
    let contentType = param["content-type"]!
    let fileContent = String(contentsOfFile: filename, encoding: String.Encoding.utf8)
    if (error != nil) {
      print(error as Any)
    }
    body += "; filename=\"\(filename)\"\r\n"
    body += "Content-Type: \(contentType)\r\n\r\n"
    body += fileContent
  } else if let paramValue = param["value"] {
    body += "\r\n\r\n\(paramValue)"
  }
}

let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/music/upload")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```