Split artifacts across per-class buckets, record the baseline run

Panels, wavs, layers, clips, and the chapter mp4 leave the `manga` bucket for
`panels`, `audio`, `layers`, and `video`. The key under the bucket is unchanged,
so every reader that derives the bucket from the first path segment keeps
working. The orchestrator half moves in the same commit, per invariant 7.

The 2026-08-11 chapter run proves the split for `raw` and `panels` and produced
the first quality read on speaker attribution, which is wrong in every sampled
multi-character panel.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XD7cAy81MZrc7gCr6aZGWr
This commit is contained in:
2026-08-11 23:00:13 +04:00
parent b2cd11dd1c
commit 54c456801a
11 changed files with 253 additions and 20 deletions
+2 -2
View File
@@ -71,8 +71,8 @@ def _audio_uri(data: "TTSInput") -> str:
# panel_uri from run_stage_tts to make it per-chapter unique.
if data.panel_uri:
parts = data.panel_uri.replace("s3://", "").split("/")
return f"s3://manga/{parts[1]}/{parts[2]}/audio/{data.panel_id or 'p'}.wav"
return f"s3://manga/_audio/{data.panel_id or 'p'}.wav"
return f"s3://audio/{parts[1]}/{parts[2]}/audio/{data.panel_id or 'p'}.wav"
return f"s3://audio/_audio/{data.panel_id or 'p'}.wav"
def _ensure_ref() -> str: