web: chapter audio player + render button

Chapter view now shows a narration card between title and prose
with three states:
  - succeeded → HTML5 <audio> + voice + duration + download link
  - running   → 'rendering…' banner with relative start time
  - none/failed → 'Render audio' POST button (spawns background
                  tokio task calling narrate::run)

ServeDir mounted at /audio serves WAVs from the f5-tts bind-mount
read-only. Range requests work, so 16-min chapters seek cleanly.

Deploy needs: compose mount /srv/appdata/f5-tts/audio:/audio:ro
on skald (already staged in /srv/appdata/skald/compose.yml on
the host).
This commit is contained in:
Sulkta 2026-05-13 17:08:43 -07:00
parent 1f2dd40105
commit dbd41424ac
3 changed files with 217 additions and 6 deletions

View file

@ -13,7 +13,7 @@ repository = "http://127.0.0.1:3001/Sulkta/skald"
tokio = { version = "1", features = ["full"] }
axum = "0.8"
tower = "0.5"
tower-http = { version = "0.6", features = ["trace", "limit"] }
tower-http = { version = "0.6", features = ["trace", "limit", "fs"] }
sqlx = { version = "0.8", default-features = false, features = [
"postgres", "runtime-tokio", "tls-rustls",
"chrono", "uuid", "macros", "migrate",