You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
core/render.py: shared prose helpers (clean, finish, soundscape_sentences)
now used by both fallback and r2v (removes duplicated soundscape logic).
core/llm.py: LLMError raised for unreachable endpoints, non-2xx responses,
and malformed payloads; max_tokens/timeout/retries settings with
exponential backoff on transient failures (5xx / network / timeout).
config.toml[llm] max_tokens, timeout, retries keys; S2P_TEMPERATURE
and S2P_TIMEOUT environment overrides in core/config.py.
pyproject.tomldev extra (ruff) with [tool.ruff] lint config.
LICENSE (GPL-3.0-or-later) with matching pyproject.toml metadata.
install.sh: when the web extra is chosen it explains Streamlit's default
telemetry collection and, if interactive, offers to write [browser] gatherUsageStats = false to ~/.streamlit/config.toml (preserving
existing content, and flipping an existing gatherUsageStats = true).
Changed
core/chunker.py: long action beats are split at sentence boundaries instead
of being clamped to one chunk; a sub-5s trailing chunk merges into its
predecessor when the pair still fits the 10s cap (the 5s floor now applies
only to a chunk that stands alone).
core/characters.py: title() preserves interior capitals (MARY-JANE -> Mary-Jane, O'BRIEN -> O'Brien) and the caps-name detector matches
apostrophized/hyphenated names.
core/ref_manifest.py: the environment subject uses the parsed slugline
location/time ("Newsroom at night") instead of the raw INT. ... - NIGHT.
core/h3_builder.py: falls back to templates only on llm.LLMError;
unexpected exceptions from a custom rewrite now propagate.
Version 0.9.1 -> 0.10.0.
Fixed
core/llm.py: chat no longer surfaces raw HTTPError/JSONDecodeError,
block silently on a hung endpoint, or leak the error response body.
Web wizard: the "Write pack to ./out" button exported nothing because the
generated project lived in a local variable that did not survive Streamlit's
rerun. The project is now cached in st.session_state (keyed by the uploaded
file's name/size), so the write step works; a new upload invalidates it.