narratio
narratio is a Go orchestration application for processing D&D session audio into transcripts and generated artifacts.
Current Implementation
Implemented now:
- strict config loading/validation (
pipeline.ymlandsession.yml) - local workspace/session layout, locking, and manifest persistence
- resumable stage control (
run,plan,resume,run-stage,status) - real
prepare,transcribe,merge, andpolishstages - real WhisperX, Seriatim, and Audita adapters
- real Scriptorium subprocess adapter
- real
analyzestage forsession_recap - optional Scriptorium render diagnostics (
render_debug)
Not implemented yet:
- real
trimbehavior - real
archivebehavior - real
notifybehavior - additional analyze artifacts beyond
session_recap - generic DAG orchestration
Config Files
Narratio expects two YAML files:
pipeline.yml: pipeline/workspace settingssession.yml: per-session settings
YAML decoding is strict (KnownFields(true)), so unknown fields fail fast.
Trim Configuration (Scaffold)
pipeline.trim is optional. If omitted, no trim config is loaded. If trim.enabled is omitted, it defaults to false.
When trim.enabled: true:
trim.output_pathis requiredtrim.bounds.prompt_idis requiredtrim.bounds.transcript_input_nameis requiredtrim.bounds.output_pathis requiredtrim.bounds.timeoutmust be a valid Go duration when providedtrim.bounds.render_debug: truerequirestrim.bounds.render_output_pathtrim.bounds.profile_idmay be empty to use the prompt default profile
Trim paths are treated as session-workdir-relative when not absolute.
Example trim scaffold config:
trim:
enabled: true
output_path: "transcripts/trimmed.json"
bounds:
prompt_id: "dnd_session.bounds"
profile_id: ""
transcript_input_name: "transcript"
output_path: "artifacts/session_bounds.json"
timeout: "10m"
render_debug: false
render_output_path: "artifacts/session_bounds.render.json"
seriatim:
report: false
Scriptorium Configuration
pipeline.scriptorium is optional. When present, Narratio validates and uses it for analyze-stage artifact generation.
Key points:
scriptorium.binaryis required when section is presentscriptorium.config_pathis optionalscriptorium.timeoutdefaults to10mwhen omittedscriptorium.render_debugenables render diagnostics globally- artifacts are configured under
scriptorium.artifacts(map shape supports multiple artifacts) - enabled artifacts require
prompt_idandoutput_path - artifact
render_debugmay override global render setting varscurrently support boolean and string values
Example session_recap artifact definition:
scriptorium:
binary: "scriptorium"
config_path: "/etc/scriptorium/config.yml"
timeout: "10m"
render_debug: false
artifacts:
session_recap:
enabled: true
prompt_id: "dnd.session_recap"
profile_id: "local-quality" # optional
output_path: "artifacts/session_recap.md"
timeout: "10m"
# render_debug: true # optional per-artifact override
inputs:
transcript:
source: "processed_transcript"
required: true
previous_recap:
source: "previous_session_artifact"
artifact: "session_recap"
path: "" # optional; set when available
required: false
vars:
session_id: true
session_date: true
campaign_name: true
previous_session_id: true
output_kind: "session_recap"
Prompt IDs and profile IDs are configuration values. They are not hardcoded in analyze-stage logic.
Do not put secrets in pipeline.yml. If API-key behavior is configured, use env var names only.
Scriptorium Runtime Behavior
Narratio integrates with Scriptorium through the public CLI subprocess contract:
- generation:
scriptorium run - diagnostics/testing:
scriptorium render --format jsonwhenrender_debugis enabled
For the initial implementation, only session_recap generation is supported.
Analyze-stage session recap behavior:
- uses processed transcript input (
transcripts/processed.json) - optionally includes
previous_recapwhen configured and resolvable - omits optional previous recap when unavailable
- fails if required inputs are missing
- validates output file exists and is non-empty
Expected session output paths:
artifacts/session_recap.mdlogs/scriptorium.session_recap.stdout.loglogs/scriptorium.session_recap.stderr.logconfig/scriptorium.session_recap.generated.ymlartifacts/session_recap.render.jsonwhen render diagnostics are enabled
Examples
Starter files:
examples/pipeline.minimal.ymlexamples/session.minimal.ymlexamples/speakers.yml
Commands
Run tests:
go test ./...
Plan a run:
go run ./cmd/narratio plan --config examples/pipeline.minimal.yml --session examples/session.minimal.yml
Run full pipeline:
go run ./cmd/narratio run --config examples/pipeline.minimal.yml --session examples/session.minimal.yml
Run analyze only:
go run ./cmd/narratio run-stage --config examples/pipeline.minimal.yml --session examples/session.minimal.yml analyze
Roadmap
Near-term roadmap:
- extend analyze to additional configured artifacts
- support workflows where later artifacts consume earlier generated artifacts
- keep orchestration explicit without a generic DAG engine
- implement archive and notify backends