Skip to content

Changelog

Libretto follows semantic versioning. Until the first 1.0.0 release, the public API may still change between minor versions.

Unreleased (0.1.0-dev)

First public pre-release. Highlights:

  • Dialogue Editor — full authoring: subdialogues, all line types, conditions, actions, tags, spell-checking (Windows spell checker), format rules, and CSV import/export.
  • Generation — Sequencer cutscene generation with camera rules, animation, audio, subtitles and event tracks; the camera-rules preset is wired by default so shots target the speaker out of the box.
  • Text to speech — ElevenLabs (cloud) and a local MSVoice provider (Windows speech API) with per-character voices by gender, culture and prosody.
  • Runtime — staged, over-the-shoulder 3C and cinematic playback, with the StartDialogue* entry points and priority handling.
  • Data & logic — GPVars, conditions, gameplay tag flags and auto-generated dynamic tags.
  • Localization — a full pipeline (dashboard targets, dated CSV batches, status tracking).

No external programs

Libretto no longer launches any program outside the editor:

  • Recording writes the mp4 with the Movie Render Pipeline's built-in H.264 MP4 output. ffmpeg is no longer used: the Ffmpeg Executable Path setting and the winget install are removed.
  • MSVoice calls the Windows speech API (SAPI) in process instead of a PowerShell script.
  • ElevenLabs audio is requested as PCM and saved as WAV directly (no mp3 conversion).
  • Keyword-timed gestures: vosk is no longer downloaded by the plugin. Install it yourself and set the new Vosk Model Folder setting — see Keyword-timed gestures.
  • The Third-Party Downloads editor preferences and their consent dialog are removed.
  • The Google Doc review export (dialogue editor menu) is removed.

Condition history

  • ULBRConditionHistorySubsystem is now a global engine subsystem (it was a world subsystem, lost on every level change). The bUseSubsystem config property is removed; an orphan key in an ini file is ignored.
  • The history is the only source of the condition cache: "once" now holds after a level change and after loading a save.
  • Its storage is a single SaveGame map instead of two sets (nothing was actually recorded before, so no data is lost).
  • New: ClearConditionsOf(Owner) and ClearAll(), plus FindConditionResult in C++.
  • InvalidateLastResult now removes the history entry.

Note

This page will list dated, versioned entries once the plugin ships its first release.