WitneyWW's picture
Upload folder using huggingface_hub
78ef2dc verified
Raw
History Blame Contribute Delete
14.4 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>AV Curation Pipeline — e2e run on 9NcjRFu6C4I</title>
<style>
:root {
--bg: #0f1117; --card: #181b24; --border: #2a2f3d;
--text: #e8eaf0; --muted: #9aa1b5; --accent: #7aa2ff;
--ok: #8fd3a7; --warn: #f0b86a; --bad: #f28b82;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
body { background: var(--bg); color: var(--text);
font: 15px/1.55 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
padding: 2rem 1.25rem 4rem; }
.wrap { max-width: 1050px; margin: 0 auto; }
h1 { font-size: 1.45rem; margin-bottom: .35rem; }
.sub { color: var(--muted); font-size: .92rem; margin-bottom: 1.4rem; }
code { color: var(--accent); background: var(--card); padding: .08em .35em; border-radius: 4px; font-size: .88em; }
.flow { color: var(--muted); font-size: .85rem; background: var(--card); border: 1px solid var(--border);
border-radius: 10px; padding: .8rem 1rem; margin-bottom: 1.6rem; overflow-x: auto; white-space: nowrap; }
.flow b { color: var(--text); }
.step { background: var(--card); border: 1px solid var(--border); border-radius: 12px;
padding: 1.1rem 1.25rem; margin-bottom: 1.4rem; }
.step-head { display: flex; align-items: baseline; gap: .7rem; flex-wrap: wrap; margin-bottom: .35rem; }
.num { color: var(--accent); font-weight: 700; font-size: .85rem; }
.step h2 { font-size: 1.08rem; }
.badge { font-size: .72rem; font-weight: 600; letter-spacing: .04em; text-transform: uppercase;
padding: .16em .55em; border-radius: 99px; border: 1px solid var(--border); }
.real { color: var(--ok); border-color: #2e5d41; background: #16281d; }
.cached { color: var(--accent); border-color: #33518c; background: #141c30; }
.stand { color: var(--warn); border-color: #6b5228; background: #2a2113; }
.mock { color: var(--bad); border-color: #6d3733; background: #2a1715; }
.io { color: var(--muted); font-size: .86rem; margin-bottom: .8rem; }
.io b { color: var(--text); font-weight: 600; }
.row { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: .9rem; }
.cell { background: #12151d; border: 1px solid var(--border); border-radius: 8px; padding: .6rem; }
.cell h3 { font-size: .8rem; font-weight: 600; color: var(--muted); margin-bottom: .45rem; }
video, audio { width: 100%; border-radius: 5px; display: block; background: #000; }
audio { height: 34px; }
.quote { border-left: 3px solid var(--accent); padding: .5rem .9rem; color: var(--text);
background: #12151d; border-radius: 0 6px 6px 0; font-size: .93rem; }
.note { color: var(--muted); font-size: .84rem; margin-top: .7rem; }
.metric { font-size: .95rem; margin: .4rem 0; }
.metric b { color: var(--ok); }
table { border-collapse: collapse; width: 100%; font-size: .86rem; }
th, td { text-align: left; padding: .35rem .6rem; border-bottom: 1px solid var(--border); }
th { color: var(--muted); font-weight: 600; }
tr.winner td { color: var(--ok); font-weight: 600; background: #16281d; }
.tablewrap { overflow-x: auto; }
.gates td:nth-child(2), .gates td:nth-child(3) { font-variant-numeric: tabular-nums; }
footer { color: var(--muted); font-size: .82rem; margin-top: 2.5rem; border-top: 1px solid var(--border); padding-top: 1rem; }
</style>
</head>
<body>
<div class="wrap">
<h1>AV Curation Pipeline — end-to-end run on <code>9NcjRFu6C4I</code></h1>
<p class="sub">
LangGraph agentic pipeline (<code>av_langgraph_pipeline</code>), Slurm job 386863 on an H100, 2026-07-22,
total 656&nbsp;s — final status <b style="color:var(--ok)">passed</b>. Each card below shows one graph node
with its input and output. Badges: <span class="badge real">real</span> model ran in this job,
<span class="badge cached">cached</span> real output reused from the previous job,
<span class="badge stand">stand-in</span> offline substitute, <span class="badge mock">mock</span> not yet implemented.
</p>
<div class="flow">
<b>caption</b><b>sounding-object</b><b>SAM3 segmentation</b> → gate → <b>EffectErase inpaint</b>
<b>visual check</b> → gate → <b>SAM-Audio best-of-10 + ImageBind select</b><b>audio check</b> → gate → <b>paired output</b>
</div>
<div class="step">
<div class="step-head"><span class="num">INPUT</span><h2>Source AV clip</h2></div>
<p class="io"><b>8&nbsp;s, 24&nbsp;fps train-simulator clip with audio</b> — plus the preprocessed mono wav that feeds SAM-Audio.</p>
<div class="row">
<div class="cell"><h3>input.mp4 (with audio)</h3><video src="media/input.mp4" controls loop playsinline></video></div>
<div class="cell"><h3>extracted source audio</h3><audio src="media/source_audio.wav" controls></audio></div>
</div>
</div>
<div class="step">
<div class="step-head"><span class="num">STEP 1</span><h2>AV caption generation</h2><span class="badge cached">cached real — Qwen3-Omni 30B</span></div>
<p class="io"><b>In:</b> input video+audio &nbsp;·&nbsp; <b>Out:</b> caption text</p>
<p class="quote">“A blue and yellow CSX locomotive travels along a track in a flat, grassy landscape. As it approaches a junction,
the train derails and begins to flip over, lifting its front end high into the air while the rear remains on the ground.
The train continues to tilt and rotate, eventually becoming almost vertical. The sound of a train horn is heard,
followed by the clatter of wheels on the tracks.”</p>
<p class="note">Generated by Qwen3-Omni in the first job of this session and reused here (identical node, cached to avoid ~10 min of recompute).</p>
</div>
<div class="step">
<div class="step-head"><span class="num">STEP 2</span><h2>Sounding-object extraction</h2><span class="badge stand">offline stand-in</span></div>
<p class="io"><b>In:</b> caption &nbsp;·&nbsp; <b>Out:</b> target object = <code>train engine</code></p>
<p class="note">Normally GPT (<code>gpt-4o-mini</code>) via the OpenAI API; the provided key had no quota (429 insufficient_quota),
so an offline rule returned “train engine” — the same prompt used by all earlier experiments on this clip, and the phrase SAM3
responds to far better than the bare “train” (first-frame ratio 0.095 vs 0.002).</p>
</div>
<div class="step">
<div class="step-head"><span class="num">STEP 3</span><h2>Target-object segmentation (SAM3)</h2><span class="badge real">real</span></div>
<p class="io"><b>In:</b> input video + prompt “train engine” &nbsp;·&nbsp; <b>Out:</b> whole-video mask (+ overlay / masked previews)</p>
<div class="row">
<div class="cell"><h3>overlay (mask on video)</h3><video src="media/sam3_overlay.mp4" controls loop muted playsinline></video></div>
<div class="cell"><h3>binary mask</h3><video src="media/sam3_mask.mp4" controls loop muted playsinline></video></div>
<div class="cell"><h3>masked (object zeroed)</h3><video src="media/sam3_masked.mp4" controls loop muted playsinline></video></div>
</div>
<p class="metric">first-frame / mask-area ratio: <b>0.0951</b></p>
<p class="note">SAM3 tracks this synthetic (game-rendered) train in only ~9 of 202 frames — the mask goes empty after the opening
frames. That weakness drives everything downstream on this clip and is why the demo gates below were lowered.</p>
</div>
<div class="step">
<div class="step-head"><span class="num">STEP 4</span><h2>Object-removal inpainting (EffectErase)</h2><span class="badge real">real</span></div>
<p class="io"><b>In:</b> input video + SAM3 mask &nbsp;·&nbsp; <b>Out:</b> inpainted video (object visually removed)</p>
<div class="row">
<div class="cell"><h3>before (input)</h3><video src="media/input.mp4" controls loop muted playsinline></video></div>
<div class="cell"><h3>after (inpainted)</h3><video src="media/inpainted.mp4" controls loop muted playsinline></video></div>
</div>
<p class="note">With only ~9 masked frames, EffectErase's temporal context (train visible in every unmasked frame) largely
repaints the train — an honest failure case for this clip, quantified by the next step.</p>
</div>
<div class="step">
<div class="step-head"><span class="num">STEP 5</span><h2>Visual removal check</h2><span class="badge real">real</span></div>
<p class="io"><b>In:</b> inpainted video + original mask &nbsp;·&nbsp; <b>Out:</b> removal score (SAM3 re-segmentation ratio)</p>
<p class="metric">visual_removal_score: <b>0.4352</b> — passed the demo gate (0.40); the production gate is 0.80.</p>
</div>
<div class="step">
<div class="step-head"><span class="num">STEP 6</span><h2>SAM-Audio best-of-10 + ImageBind selection</h2><span class="badge real">real</span></div>
<p class="io"><b>In:</b> source audio + SAM3 mask video + prompt “train engine” &nbsp;·&nbsp;
<b>Out:</b> 10 candidates (visual & text prompts × 5 seeds), winner picked by max <code>ib_ta</code>
(ImageBind text↔target), tiebreak min <code>ib_ta_res</code> (text↔residual, lower = cleaner removal).</p>
<div class="tablewrap">
<table>
<tr><th>rank</th><th>prompt</th><th>seed</th><th>ib_ta ↑</th><th>ib_ta_res ↓</th><th>target (train engine)</th><th>residual (removed)</th></tr>
<tr class="winner"><td>1 ★</td><td>visual</td><td>1453635084</td><td>0.2335</td><td>0.0835</td>
<td><audio src="media/visual_seed_1453635084_target.wav" controls></audio></td>
<td><audio src="media/visual_seed_1453635084_residual.wav" controls></audio></td></tr>
<tr><td>2</td><td>visual</td><td>240868205</td><td>0.1889</td><td>0.0220</td>
<td><audio src="media/visual_seed_240868205_target.wav" controls></audio></td>
<td><audio src="media/visual_seed_240868205_residual.wav" controls></audio></td></tr>
<tr><td>3</td><td>text</td><td>1335522078</td><td>0.1781</td><td>0.1930</td>
<td><audio src="media/text_seed_1335522078_target.wav" controls></audio></td>
<td><audio src="media/text_seed_1335522078_residual.wav" controls></audio></td></tr>
<tr><td>4</td><td>visual</td><td>1335522078</td><td>0.1727</td><td>0.1741</td>
<td><audio src="media/visual_seed_1335522078_target.wav" controls></audio></td>
<td><audio src="media/visual_seed_1335522078_residual.wav" controls></audio></td></tr>
<tr><td>5</td><td>text</td><td>240868205</td><td>0.1397</td><td>0.0393</td>
<td><audio src="media/text_seed_240868205_target.wav" controls></audio></td>
<td><audio src="media/text_seed_240868205_residual.wav" controls></audio></td></tr>
<tr><td>6</td><td>text</td><td>1453635084</td><td>0.0915</td><td>0.1489</td>
<td><audio src="media/text_seed_1453635084_target.wav" controls></audio></td>
<td><audio src="media/text_seed_1453635084_residual.wav" controls></audio></td></tr>
<tr><td>7</td><td>visual</td><td>1132891577</td><td>0.0731</td><td>0.2736</td>
<td><audio src="media/visual_seed_1132891577_target.wav" controls></audio></td>
<td><audio src="media/visual_seed_1132891577_residual.wav" controls></audio></td></tr>
<tr><td>8</td><td>text</td><td>1132891577</td><td>0.0588</td><td>0.2716</td>
<td><audio src="media/text_seed_1132891577_target.wav" controls></audio></td>
<td><audio src="media/text_seed_1132891577_residual.wav" controls></audio></td></tr>
<tr><td>9</td><td>text</td><td>1778986134</td><td>0.0453</td><td>0.2587</td>
<td><audio src="media/text_seed_1778986134_target.wav" controls></audio></td>
<td><audio src="media/text_seed_1778986134_residual.wav" controls></audio></td></tr>
<tr><td>10</td><td>visual</td><td>1778986134</td><td>0.0242</td><td>0.2637</td>
<td><audio src="media/visual_seed_1778986134_target.wav" controls></audio></td>
<td><audio src="media/visual_seed_1778986134_residual.wav" controls></audio></td></tr>
</table>
</div>
<p class="note">Generation: SAM-Audio large, one model load, seeded per candidate (samaudio311 env).
Scoring: same <code>calc_imagebind_score</code> as the ranking_test eval (JavisDiT repo, javisdit env).</p>
</div>
<div class="step">
<div class="step-head"><span class="num">STEP 7</span><h2>Audio removal check</h2><span class="badge mock">mock</span></div>
<p class="io"><b>In:</b> winner residual &nbsp;·&nbsp; <b>Out:</b> audio_removal_score = 0.9 (placeholder checker, passes the 0.80 gate)</p>
</div>
<div class="step">
<div class="step-head"><span class="num">STEP 8</span><h2>Paired AV output</h2></div>
<p class="io"><b>Out:</b> inpainted video paired with the winning object-removed audio.</p>
<div class="row">
<div class="cell"><h3>final: inpainted video + best residual audio (unmute!)</h3><video src="media/final_paired.mp4" controls loop playsinline></video></div>
<div class="cell"><h3>best residual (train engine removed)</h3><audio src="media/best_residual.wav" controls></audio>
<h3 style="margin-top:.7rem">best target (isolated train engine)</h3><audio src="media/best_target.wav" controls></audio></div>
</div>
</div>
<div class="step">
<div class="step-head"><span class="num">CONFIG</span><h2>Demo gate overrides</h2></div>
<div class="tablewrap">
<table class="gates">
<tr><th>gate</th><th>production</th><th>this demo run</th><th>observed value</th></tr>
<tr><td>SAM3 first-frame ratio</td><td>0.10 (dev; 0.80 target)</td><td>0.05</td><td>0.0951</td></tr>
<tr><td>whole-video mask area</td><td>0.15</td><td>0.05</td><td>0.0951</td></tr>
<tr><td>visual removal score</td><td>0.80</td><td>0.40</td><td>0.4352</td></tr>
</table>
</div>
<p class="note">Lowered (via env vars, defaults unchanged in code) solely so this hard clip traverses every stage for
visualization; at production thresholds the pipeline correctly discards it at the mask gate.</p>
</div>
<footer>
Run artifacts: <code>data/work/</code> in <code>av_langgraph_pipeline</code>; candidate scores in <code>selection.json</code>
(also uploaded alongside this page). Related Space: JavisDiT edit-model samples at <code>WitneyWW/javisdit-edit-text-both</code>.
</footer>
</div>
</body>
</html>