<!--
  Dieser Skill ist eine der Arbeitsanweisungen, mit denen die Filme auf
  caligatus.eu entstanden sind. Er liegt hier so, wie er im Einsatz ist — bis
  auf Pfade und Zugangsdaten, die durch Platzhalter ersetzt wurden.

  Ablage: ~/.claude/skills/<name>/SKILL.md
  Zugang: die Umgebungsvariable KIE_API_KEY muss gesetzt sein.
-->

---
name: media-skill
description: Bilder, Videos und Sprachaufnahmen über die kie.ai-API erzeugen — deutlich günstiger als Higgsfield, bei gleicher Modellqualität. Immer verwenden, wenn ein Bild, ein Foto, eine Illustration, ein Video, ein Clip, eine Animation, ein Voiceover oder eine Sprachaufnahme erzeugt, generiert, gerendert oder neu erstellt werden soll — auch bei Formulierungen wie "mach mir ein Bild", "generiere ein Video", "erzeug ein Titelbild", "brauche einen Clip", "sprich das ein", "generate an image", "create a video", "text to image", "image to video", "TTS". Ebenso für Nachbesserungen an bereits erzeugten Medien, für Kostenfragen dazu ("was kostet das", "welches Modell ist günstiger") und für die Mediengalerie unter ~/Medien.
---

# media-skill — Medien über kie.ai

Erzeugt Bilder, Videos und Sprache über die kie.ai-API. Zwei Skripte:

- `scripts/kie.py` — Preisrechner, Guthaben, Aufträge, Download samt Protokoll
- `scripts/galerie.py` — baut `~/Medien/galerie.html` aus allen Protokollen

Details zu Modellen, Eingabefeldern und bekannten Fallen: `references/modelle.md`.
**Vor jedem Videoauftrag und vor jedem Modell, das noch nicht benutzt wurde,
dort nachlesen** — die Eingabefelder unterscheiden sich zwischen den Modellen.

## Schritt 0: Preisabgleich, immer zuerst

**Sobald dieser Skill anspringt, läuft als Allererstes dieser Befehl** — vor
jeder Beratung, vor jedem Preis, vor jeder Rückfrage:

```bash
python3 ~/.claude/skills/media-skill/scripts/kie.py preise --beim-start
```

Er holt den Live-Katalog von kie.ai, übernimmt Änderungen sofort in
`references/preise.json` und meldet sich in einer Zeile. Dauert rund zwei
Sekunden und braucht keinen Schlüssel.

- „Preise geprüft: … unverändert" — kommentarlos weitermachen, nicht erwähnen.
- Meldet er Änderungen, sind sie schon übernommen. dem Auftraggeber die geänderten
  Zeilen nennen, dann normal weiterarbeiten.
- „Preisabgleich nicht möglich" — mit der gespeicherten Tabelle weiterrechnen
  und einmal kurz sagen, dass die Preise von wann sind. Das ist kein Grund
  anzuhalten.

Der Abgleich läuft an keinem Zeitplan, sondern genau dann, wenn er gebraucht
wird: bei Aktivierung. Innerhalb derselben Sitzung reicht ein Lauf.

## Schlüssel

Der Schlüssel kommt immer aus der Umgebungsvariablen `KIE_API_KEY`, nie aus einer
Datei im Projekt. Er gehört dorthin, wo Sie Zugangsdaten verwahren.

```bash
export KIE_API_KEY='...'
```

Ist er nicht gesetzt, brechen alle Skripte mit einem klaren Hinweis ab.
`preis` läuft auch ohne Schlüssel.

## Die eine Frage vorweg: Hat der Nutzer ein Modell genannt?

### Fall A — kein Modell genannt

1. Überlegen, was der Auftrag wirklich braucht (Bild oder Video, Auflösung,
   Anzahl, Ton ja/nein, Bildvorlage ja/nein).
2. Höchstens **drei** Kandidaten als kompakte Tabelle zeigen. In der Spalte
   Kosten steht der Preis für **genau diesen Auftrag**, also sechs Bilder mal
   sechs, nicht der Stückpreis. Je ein Halbsatz dafür und dagegen.
3. Eine klare Empfehlung aussprechen. Die Wahl nicht zurückgeben.
4. Anhalten und auf ein Ja warten.

| Modell | Kosten für diesen Auftrag | dafür | dagegen |
|---|---|---|---|
| gpt-image-2-text-to-image, 2K | 60 Credits · 0,258 € | folgt dem Prompt genau | kein 4K-Feinzeichnen |
| nano-banana-2, 2K | 72 Credits · 0,310 € | kräftigere Bildsprache | weicher bei Text im Bild |
| nano-banana-2-lite, 1K | 24 Credits · 0,103 € | Viertel des Preises | nur 1K, für Entwürfe |

> Empfehlung: gpt-image-2-text-to-image in 2K. Soll ich?

Die Zahlen oben zeigen nur die Form. Die echten kommen aus `kie.py preis`,
niemals aus dem Kopf und niemals aus dieser Datei.

### Fall B — Modell genannt

Keine Beratung, keine Alternativen, keine Belehrung. Eine Zeile:

> GPT Image 2, 2K, ein Bild: 10 Credits · 0,043 €. Loslegen?

Nur wenn das gewünschte Modell den Auftrag technisch **nicht erfüllen kann**
(etwa Ton verlangt, aber seedance-1.5-pro liefert keinen), kommt ein Halbsatz
Hinweis dazu.

### Nachbesserungen

Läuft eine Nachbesserung innerhalb eines schon bestätigten Auftrags, gar nicht
mehr fragen. Nur die Kosten nennen und machen.

## Preise nie schätzen

**Alle Preise stehen ausschließlich in `references/preise.json`.** Weder im Code
noch in dieser Datei noch in `references/modelle.md` steht eine zweite Zahl, die
veralten könnte. Wer Preise ändert, ändert nur diese eine Datei.

Immer rechnen lassen:

```bash
python3 ~/.claude/skills/media-skill/scripts/kie.py preis gpt-image-2-text-to-image --qualitaet 2k --anzahl 6
python3 ~/.claude/skills/media-skill/scripts/kie.py preis veo3.1 --stufe fast --sekunden 8
python3 ~/.claude/skills/media-skill/scripts/kie.py preis grok-imagine/image-to-video --qualitaet 1080p --sekunden 8
python3 ~/.claude/skills/media-skill/scripts/kie.py preis elevenlabs --zeichen 2500
```

200 Credits = 1 US-Dollar, ein Credit rund 0,0043 €. Guthaben prüfen:

```bash
python3 ~/.claude/skills/media-skill/scripts/kie.py guthaben
```

## Preise aktuell halten

```bash
kie.py preise --beim-start     # Pflichtlauf bei Aktivierung, siehe Schritt 0
kie.py preise                  # aktuelle Tabelle plus Stand, ohne Netz
kie.py preise --pruefen        # vergleichen, aber nichts ändern
kie.py preise --aktualisieren  # Abweichungen übernehmen
```

### Woher die Preise kommen — nicht anders versuchen

Der Abgleich zieht alle Preiszeilen von
`https://api.kie.ai/client/v1/model-pricing/page`, per **POST** mit
`{"pageNum": 1, "pageSize": 100}`, höchstens 100 je Seite, Gesamtzahl in
`data.total`. Öffentlich, **ohne Schlüssel**.

**`https://kie.ai/pricing` liefert Automaten HTTP 403.** WebFetch, curl auf die
Seite oder ein Scraper sind dort verlorene Zeit — der Endpunkt oben ist der
kurze Weg und liefert dieselben Daten sauberer. Gefunden wurde er, indem die
Seite im echten Browser geladen und ihre Netzwerkanfragen gelesen wurden.

### Zwei weitere Sicherungen

1. Nach jedem Lauf wird die tatsächliche Abrechnung (`creditsConsumed`) gegen
   die Vorhersage gehalten. Ab 5 % Unterschied kommt eine deutliche Warnung.
   Das ist die verlässlichste Sicherung, weil die Rechnung nicht lügt.
2. Ist die Tabelle älter als 30 Tage, weist jede Preisrechnung darauf hin. Das
   greift nur, wenn der Startabgleich mehrfach nicht durchkam.

## Erzeugen

Der übliche Weg ist ein Zug — anlegen, warten, herunterladen, protokollieren:

```bash
python3 ~/.claude/skills/media-skill/scripts/kie.py lauf \
  --modell gpt-image-2-text-to-image \
  --projekt heimatszene \
  --typ bild \
  --input '{"prompt": "Nebel über dem Ammersee, weiches Gegenlicht", "image_size": "2K"}'
```

Längere oder mehrzeilige Eingaben besser über eine Datei:
`--input-datei auftrag.json`.

Einzelschritte, wenn etwas hakt:

```bash
kie.py erzeuge --modell ... --input '...'      # gibt die taskId aus
kie.py status <taskId>                          # Zustand und Ergebnis-URLs
kie.py lade <taskId> --projekt name --typ bild  # holt und protokolliert
```

Zustände laufen über `waiting`, `queuing`, `generating` bis `success` oder
`fail`; das Skript fragt alle acht Sekunden nach und wiederholt bei 429, 500,
502 und 503 bis zu fünfmal mit wachsender Pause.

## ⚠ Erzeugte Videos werden gekennzeichnet

**Jedes fertige Video trägt den Hinweis `KI-generiert`** — oben rechts, klein, rund zwei
Sekunden ab Beginn. Unabhängig vom Stil, auch beim erkennbaren Trickfilm. Entscheidung vom
16.08.2026, gilt bis auf Weiteres.

Der Auslöser ist nicht das Bild, sondern **die Stimme**: Ein synthetischer Sprecher ist von
einem echten nicht zu unterscheiden, und ob das unter Art. 50 KI-VO fällt, ist offen.

```bash
python3 ~/.claude/skills/schulung/scripts/kennzeichnung.py <fertige-datei.mp4>
```

Gilt für den **fertigen Master**, nicht für Rohclips mitten in der Produktion — sonst steht
der Hinweis später mitten im Film. Wer nur einen einzelnen Clip erzeugt und ihn so
weitergibt, kennzeichnet ihn trotzdem. Ausführlich im `schulung`-Skill.

## Ablage und Protokoll

Alles landet in `~/Medien/JJJJ-MM-TT-projektname/`. Die Ergebnis-URLs von kie.ai
verfallen nach 24 Stunden, deshalb lädt das Skript sofort herunter und schreibt
im selben Schritt `meta.json` fort — angehängt, nie überschrieben:

```json
{"zeit": "2026-08-15T11:20:03", "datei": "01.png", "typ": "bild",
 "modell": "gpt-image-2-text-to-image", "prompt": "…",
 "credits": 6, "eur": 0.026}
```

Die Credits stammen aus `creditsConsumed`, also aus der tatsächlichen
Abrechnung, nicht aus der Vorabschätzung.

## Galerie

**Die Galerie baut sich nach jedem Download von selbst neu.** `lauf` und `lade`
rufen `galerie.py` am Ende auf, ohne den Browser zu öffnen. Nichts von Hand
nachziehen, nichts vergessen.

```bash
python3 ~/.claude/skills/media-skill/scripts/galerie.py             # bauen und öffnen
python3 ~/.claude/skills/media-skill/scripts/galerie.py --nooeffnen # nur bauen
kie.py lauf … --ohne-galerie                                       # Neubau ausnahmsweise überspringen
```

Von Hand aufrufen lohnt nur, wenn die Seite tatsächlich im Browser aufgehen
soll, oder wenn im Ordner von außen etwas gelöscht oder verschoben wurde.

Die Galerie liest alle `meta.json` unter `~/Medien` und baut
`~/Medien/galerie.html`: Raster mit Vorschau, Filter nach Typ und Modell, Suche
über Prompt, Modell und Projekt, oben die Gesamtsumme aus Anzahl, Credits und
Euro. Neueste zuerst. Videos bekommen einmalig ein Vorschaubild über ffmpeg,
gespeichert als `<datei>.thumb.jpg`.

## Grundregeln

- Prompts für **Videomodelle immer auf Englisch**. Deutsche werden ignoriert.
- Bei mehreren Bildern lieber einen Auftrag mit mehreren Ergebnissen als
  mehrere Aufträge, sonst wird das Protokoll unübersichtlich. **Aber nicht jedes
  Modell kann das:** `gpt-image-2` ignoriert `n` und liefert immer genau ein Bild.
  Vorher in `references/modelle.md` nachsehen.
- Nach dem Lauf kurz melden, was erzeugt wurde, wo es liegt und was es
  tatsächlich gekostet hat.
- Preise ändern sich häufig. Vor größeren Läufen auf kie.ai/pricing schauen.
