Commit Graph

4 Commits

Author SHA1 Message Date
f5b69a9213 feat: ElevenLabs-Voice-Liste + Fehlerdetails in Audio-Batch-Ergebnissen
- GET /api/tts-settings/voices/available listet die Account-Stimmen
  (Grundlage für Voice-Auswahl im CMT statt Freitext-IDs)
- Audio-Batch/-Fill-Fehler enthalten jetzt das ElevenLabs-Detail
  (z.B. voice_not_found) statt nur 'ElevenLabs error'

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 21:00:27 +02:00
985119bb03 fix: Übersetzungs-Retry + robuster Translate-Step + Nachhol-Endpoints
- callClaude: Retry mit Backoff bei Überlast/Rate-Limit/Netzfehler
  (429/500/503/529) — wahrscheinliche Ursache der fehlenden SV-Übersetzung
- Translate-Step pro Pair gekapselt: ein Fehler reißt nicht mehr den ganzen
  Lauf ab, Fehlversuche werden gezählt (pipeline_progress.translateFailures)
- translatePair als wiederverwendbarer Helfer extrahiert
- POST /pipeline/picture/:id/translate-fill: fehlende Übersetzungen
  (Sätze + Antwort-Wörter) eines Bildes nachholen

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 22:03:11 +02:00
fb93d2296e fix: Readiness pro answer_type + Objekt-Zuweisung & Audio-Nachholen im Publish-Flow
- computeReadiness: yes_no braucht keinen Positiv-Satz (nur answer-Flag),
  word-Pairs prüfen verlinkte Wörter (Titel + Audio) statt Statement-Sätze
  → behebt 'bei jedem Pair fehlt ein Audio' im Publish-Review
- Bundle liefert Placeholder-Kandidaten: Objekt-Wörter, die im deutschen
  Satz vorkommen (außerhalb bestehender Placeholder, inkl. Flexion)
- POST /pipeline/assign-object: Wort in allen 3 Sprachen als
  {{wort.o:objectId}} markieren (über die Wort-Übersetzungen)
- POST /pipeline/picture/:id/audio-fill: fehlende Audios nachgenerieren

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 21:48:03 +02:00
6af2428df5 feat: automatische Content-Pipeline (release → pairs → übersetzen → audio → ready)
- pictures.pipeline_* Spalten + app_settings Tabelle (Migration)
- lib/placeholders.js: Placeholder-Auflösung; TTS spricht keine UUIDs mehr
- lib/pairContent.js: geteilte Pair-Logik (Readiness mit Skip-Optionen)
- lib/generatePairs.js: Claude-Generierung (konfigurierbare Anzahl, nur
  Nomen/Adjektive bei word-Pairs) + serverseitige Persistenz inkl. object_pairs
- lib/pipeline.js: In-Process-Runner, idempotente Schritte, Boot-Resume
- routes/pipeline.js: release/retry/overview/bundle/settings + Bild-Publish
  (kaskadiert Fragen/Statements/Pairs/Wörter/Objekte/Bild)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 20:52:11 +02:00