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:
+6
-6
@@ -207,7 +207,7 @@ async def render_scene(data: SceneInput):
|
||||
out = f"{SHM}/rnd_{tag}.mp4"
|
||||
subprocess.run(scene_cmd(img, audio, ass, out, dur, data.camera), check=True, capture_output=True)
|
||||
manga_id, chapter_id = _mc_from_uri(data.panel_uri)
|
||||
uri = f"s3://manga/{manga_id}/{chapter_id}/clips/{data.panel_id or 'p'}.mp4"
|
||||
uri = f"s3://video/{manga_id}/{chapter_id}/clips/{data.panel_id or 'p'}.mp4"
|
||||
transport.put(out, uri)
|
||||
for p in (img, audio, ass, out):
|
||||
os.remove(p)
|
||||
@@ -353,7 +353,7 @@ async def render_composite(data: CompositeInput):
|
||||
for p in imgs + [still]:
|
||||
os.remove(p)
|
||||
manga_id, chapter_id = _mc_from_uri(data.panels[0]["panel_uri"])
|
||||
uri = f"s3://manga/{manga_id}/{chapter_id}/clips/{data.panel_id or 'p'}.mp4"
|
||||
uri = f"s3://video/{manga_id}/{chapter_id}/clips/{data.panel_id or 'p'}.mp4"
|
||||
transport.put(out, uri)
|
||||
for p in auds + [ass, out]:
|
||||
os.remove(p)
|
||||
@@ -400,7 +400,7 @@ async def render_group(data: GroupInput):
|
||||
subprocess.run(cmd, check=True, capture_output=True)
|
||||
|
||||
manga_id, chapter_id = _mc_from_uri(data.panels[0]["panel_uri"])
|
||||
uri = f"s3://manga/{manga_id}/{chapter_id}/clips/{data.panel_id or 'p'}.mp4"
|
||||
uri = f"s3://video/{manga_id}/{chapter_id}/clips/{data.panel_id or 'p'}.mp4"
|
||||
transport.put(final, uri)
|
||||
total = _audio_dur(final) or sum(durs)
|
||||
for f in cleanup + [final]:
|
||||
@@ -537,7 +537,7 @@ async def render_beat(data: BeatInput):
|
||||
check=True, capture_output=True)
|
||||
|
||||
manga_id, chapter_id = _mc_from_uri(data.panel_uris[0])
|
||||
uri = f"s3://manga/{manga_id}/{chapter_id}/clips/{data.panel_id or 'p'}.mp4"
|
||||
uri = f"s3://video/{manga_id}/{chapter_id}/clips/{data.panel_id or 'p'}.mp4"
|
||||
transport.put(out, uri)
|
||||
total = _audio_dur(out) or (D + PAD_S)
|
||||
for f in imgs + [audio, ass, out]:
|
||||
@@ -637,7 +637,7 @@ async def render_collage(data: CollageInput):
|
||||
subprocess.run(collage_cmd(imgs, active, lay["rects"], lay["entrances"], lay["z_order"],
|
||||
audio, ass, out, D, lay["transition_s"]), check=True, capture_output=True)
|
||||
manga_id, chapter_id = _mc_from_uri(uris[0])
|
||||
uri = f"s3://manga/{manga_id}/{chapter_id}/clips/{data.panel_id or 'p'}.mp4"
|
||||
uri = f"s3://video/{manga_id}/{chapter_id}/clips/{data.panel_id or 'p'}.mp4"
|
||||
transport.put(out, uri)
|
||||
total = _audio_dur(out) or (D + PAD_S)
|
||||
for f in imgs + [audio, ass, out]:
|
||||
@@ -829,7 +829,7 @@ async def assemble(data: AssembleInput):
|
||||
out = _add_music_bed(out, tag, cleanup)
|
||||
|
||||
manga_id, chapter_id = _mc_from_uri(data.clip_uris[0])
|
||||
uri = f"s3://manga/{manga_id}/{chapter_id}/chapter.mp4"
|
||||
uri = f"s3://video/{manga_id}/{chapter_id}/chapter.mp4"
|
||||
transport.put(out, uri)
|
||||
for p in cleanup:
|
||||
os.remove(p)
|
||||
|
||||
Reference in New Issue
Block a user