LoreKeeper
API Referenz

POST /api/scenes/generate

Generiert eine neue narrative Szene mit automatischer Directus-Lore-Injektion

POST /api/scenes/generate

Startet die mehrstufige Agentic RAG Pipeline: Analysiert den Plot-Prompt, ruft kanonische Lore-Entitäten und bitemporale State-Patches aus Directus ab, generiert die Prosa und speichert die Szene optional direkt im Directus-Katalog.


Request Body

ParameterTypPflichtStandardBeschreibung
bookIdstring (uuid)Ja-UUID des Zielbuchs in Directus.
chapterIdstring (uuid)Nein-UUID des Kapitels. Falls leer, wird das erste Kapitel des Buchs verwendet oder angelegt.
chapterNumberintegerNein1Kapitelnummer für automatische Kapitel-Erstellung.
sceneNumberintegerNein1Fortlaufende Szenennummer im Kapitel.
titlestringNein-Optionaler Arbeitstitel der Szene.
promptstringJa-Das Handlungsziel der Szene (mindestens 3 Zeichen).
entityIdsstring[]Nein[]Optionale UUIDs explizit zu ladender Lore-Entitäten.
saveToDirectusbooleanNeintrueOb das Ergebnis in Directus (scenes) gespeichert werden soll.

Code-Beispiele

curl -X POST http://localhost:3005/api/scenes/generate \
  -H "Content-Type: application/json" \
  -d '{
    "bookId": "11111111-2222-3333-4444-555555555555",
    "chapterNumber": 1,
    "sceneNumber": 1,
    "title": "Der Schwur im Schattenwald",
    "prompt": "Vaelin trifft sich heimlich mit der Informantin an der alten Basaltruine.",
    "saveToDirectus": true
  }'

Antworten

201 Created

{
  "success": true,
  "data": {
    "sceneTitle": "Der Schwur im Schattenwald",
    "summary": "Vaelin empfängt brisante Informationen über den Aufmarsch der Legion.",
    "content": "Der Regen fiel wie graue Schleier über die verwitterten Basaltsäulen...",
    "consistencyNotes": "Vaelins Schulterverletzung berücksichtigt; Informationsaustausch ohne Magieeinsatz gelöst.",
    "retrievedContext": {
      "charactersCount": 2,
      "locationsCount": 1,
      "factionsCount": 1,
      "rulesAndObjectsCount": 1,
      "loreStatesCount": 2
    },
    "persistedSceneId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
  }
}

400 Bad Request

{
  "error": "Validation failed",
  "details": {
    "bookId": { "_errors": ["bookId is required"] }
  }
}

2. Vollständiges Kapitel generieren (POST /api/scenes/generate-chapter)

Generiert ein vollständiges, dramaturgisch gegliedertes Kapitel inklusive Dialogen in Guimet-Klammern (»...«) mit nativer Agentic-Lore-Konsistenz.

curl -X POST http://localhost:3005/api/scenes/generate-chapter \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Mira und Jaro entdecken ein geheimnisvolles Schiffswrack am Strand der Nebelinsel.",
    "references": [
      { "name": "Mira", "type": "character", "description": "Mutige junge Entdeckerin mit Lederjacke und Messingkompass." }
    ],
    "targetWords": 600
  }'

Antwort:

{
  "success": true,
  "data": {
    "title": "Das Geisterschiff in der Bucht",
    "content": "Der Morgen graute über der Nebelinsel... »Schau mal dort drüben!«, rief Mira leise.",
    "summary": "Mira und Jaro entdecken bei Tagesanbruch ein gestrandetes altes Holzschiff."
  }
}

3. Lektorats-Zusammenfassung erstellen (POST /api/scenes/generate-summary)

Erstellt eine professionelle Lektorats-Zusammenfassung eines Kapitels oder Romanabschnitts.

curl -X POST http://localhost:3005/api/scenes/generate-summary \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Das Geisterschiff",
    "content": "Der Morgen graute über der Dracheninsel...",
    "targetLengthWords": 140
  }'

On this page