> ## Documentation Index
> Fetch the complete documentation index at: https://docs.youka.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Medien

> Wiederverwendbare Hintergründe, Logos sowie Intro-/Outro-Videos hochladen und verwalten

Medien sind wiederverwendbare Dateien — Video-Hintergründe, statische Bilder, Logos und Intro-/Outro-Clips — auf die du aus Presets oder den Projekteinstellungen verweisen kannst. Einmal hochladen und projektübergreifend wiederverwenden.

## Medientypen

| Typ           | Beschreibung                                |
| ------------- | ------------------------------------------- |
| `video`       | Looping-Hintergrundvideo.                   |
| `image`       | Statisches Hintergrundbild.                 |
| `logo`        | Logo-Overlay.                               |
| `intro-video` | Wird abgespielt, bevor das Karaoke startet. |
| `outro-video` | Wird abgespielt, nachdem das Karaoke endet. |

## `client.media.list(options?)`

Listet alle wiederverwendbaren Medienelemente auf, die dem authentifizierten Konto gehören.

```ts theme={null}
const media = await client.media.list();
```

## `client.media.get(mediaId, options?)`

Ruft ein einzelnes Medienelement ab.

```ts theme={null}
const media = await client.media.get("bg_abc123");
```

## `client.media.create(body, options?)`

Erstellt ein neues Medienelement aus einem lokalen Pfad, Bytes oder einer bereits hochgeladenen `inputFileId`. Bei lokalen Pfaden und Bytes bereitet das SDK den Upload vor, sendet die Datei-Bytes an die Upload-URL und registriert die hochgeladene Datei als wiederverwendbares Medium.

```ts theme={null}
const media = await client.media.create({
  type: "video",
  source: {
    type: "path",
    path: "./background.mp4",
    contentType: "video/mp4",
  },
});
```

<ParamField path="type" type="'video' | 'image' | 'logo' | 'intro-video' | 'outro-video'" required>
  Welche Rolle dieses Medienelement in einem Render einnimmt.
</ParamField>

<ParamField path="source" type="object">
  Die Dateiquelle. Verwende `{ type: "path", path }` für lokale Dateien, `{ type:
      "bytes", data, filename }` für `Blob`, `File`, `ArrayBuffer` oder Daten aus
  Typed Arrays, oder `{ type: "inputFile", inputFileId }`, wenn du bereits eine
  Upload-ID hast.
</ParamField>

<ParamField path="inputFileId" type="string">
  Erweiterte Low-Level-Option: Übergib die ID, die von
  `client.uploads.create(...)` zurückgegeben wird, anstelle von `source`.
</ParamField>

## `client.media.delete(mediaId, options?)`

Löscht ein Medienelement.

```ts theme={null}
await client.media.delete("bg_abc123", {
  idempotencyKey: "delete-bg_abc123",
});
```

<Warning>
  Das Löschen von Medien wirkt sich nicht auf Projekte oder Exporte aus, die
  zuvor damit gerendert wurden. Zukünftige Renders, die auf die gelöschten
  Medien verweisen, fallen auf den Standardhintergrund zurück.
</Warning>

## End-to-end-Beispiel

```ts theme={null}
import { YoukaClient } from "@youka/de/sdk";

const client = new YoukaClient({ apiKey: process.env.YOUKA_API_KEY! });

async function uploadBackground(path: string, contentType: string) {
  return client.media.create({
    type: "video",
    source: {
      type: "path",
      path,
      contentType,
    },
  });
}

const media = await uploadBackground("./loop.mp4", "video/mp4");
console.log("Media ID:", media.id);
```

## Hintergrund anwenden

Verweise auf hochgeladene Medien aus einem Preset oder direkt aus den Projekteinstellungen:

```ts theme={null}
const media = await uploadBackground("./loop.mp4", "video/mp4");

await client.projects.updateSettings("prj_abc123", {
  settings: {
    style: {
      background: {
        type: "video",
        url: media.url,
        objectFit: "cover",
      },
    },
  },
});
```

Für die vollständige Menge an Feldern, die unter `background` akzeptiert werden, wandle das Schema der Projekteinstellungen in JSON um:

```ts theme={null}
import { RestUpdateProjectSettingsRequestSchema } from "@youka/de/sdk";

const schema = RestUpdateProjectSettingsRequestSchema.toJSONSchema();
```

## Wie geht es weiter?

* [Render settings reference](/en/render-settings-reference) — alle geteilten Feldpfade und Enum-Werte
* [Projects](/de/sdk/projects) — Projekterstellung und Uploads
* [Presets](/de/sdk/presets) — Medien zusammen mit anderen Render-Einstellungen bündeln
* [Project settings](/de/sdk/project-settings) — Hintergründe auf ein Projekt anwenden
