robot-data-diff / index.html
Japheth24's picture
Rename index .html to index.html
455abd3 verified
Raw History Blame Contribute Delete
45 kB
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>robot-data-diff — demo</title>
<style>
*{box-sizing:border-box}
body{font-family:system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;margin:0;line-height:1.6;color:#1a1a2e;background:#f8fafc}
.wrap{max-width:980px;margin:0 auto;padding:2em 1.25em 3em}
.hero{background:#ffffff;border:1px solid #e2e8f0;border-radius:16px;padding:1.75em 1.5em;margin-bottom:1.5em}
.hero h1{font-size:2em;line-height:1.2;margin:0 0 .25em;letter-spacing:-.02em}
.tagline{font-size:1.15em;color:#334155;margin:0 0 1em}
.badge{display:inline-block;background:#eff6ff;border:1px solid #bfdbfe;color:#1e40af;border-radius:999px;padding:.3em .9em;font-size:.9em;margin-bottom:1em}
.install{background:#0f172a;color:#e2e8f0;border-radius:12px;padding:1em 1.2em;overflow:auto}
.install p{margin:0 0 .5em;color:#94a3b8;font-size:.9em}
.install pre{margin:0;background:none;padding:0;font-size:13.5px;line-height:1.6;white-space:pre-wrap;word-break:break-all}
.note{background:#fffbeb;border:1px solid #fde68a;border-radius:12px;padding:1em 1.2em}
.tabs{display:flex;flex-wrap:wrap;gap:.5em;margin:1.5em 0 0}
.tab{border:1.5px solid #cbd5e1;background:#ffffff;color:#1a1a2e;border-radius:999px;padding:.6em 1.2em;font-size:.95em;cursor:pointer}
.tab.active{background:#1a1a2e;color:#ffffff;border-color:#1a1a2e}
.panel{display:none;background:#ffffff;border:1px solid #e2e8f0;border-radius:16px;padding:1.5em;margin-top:1em}
.panel.on{display:block}
.panel h2{margin-top:0;font-size:1.35em;line-height:1.35}
.lead{font-size:1.05em}
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:.75em;margin:1.25em 0}
.card{border:1px solid #e2e8f0;border-radius:12px;padding:.9em 1em;background:#f8fafc}
.card .num{font-size:1.5em;font-weight:700;line-height:1.2}
.card .lbl{color:#64748b;font-size:.85em}
.bar{display:flex;height:18px;border-radius:999px;overflow:hidden;background:#e2e8f0}
.bar-changed{background:#ea580c}
.bar-unchanged{background:#16a34a}
.legend{font-size:.9em;color:#475569}
.dot{display:inline-block;width:.7em;height:.7em;border-radius:50%;margin-right:.3em}
.changed-dot{background:#ea580c}
.unchanged-dot{background:#16a34a}
details{margin-top:1.25em}
details summary{cursor:pointer;font-weight:600;color:#1e40af}
details pre{background:#0f172a;color:#e2e8f0;padding:1.1em 1.2em;overflow:auto;font-size:13px;line-height:1.5;border-radius:12px}
footer{margin-top:2em;color:#475569;font-size:.95em}
footer a{color:#2563eb}
.how{background:#ffffff;border:1px solid #e2e8f0;border-radius:16px;padding:1.25em 1.5em;margin-bottom:1.5em}
.how h2{margin:0 0 .5em;font-size:1.25em}
.how svg{width:100%;height:auto;display:block}
.how .cap{color:#475569;font-size:.95em;margin:.75em 0 0}
.strip{display:flex;flex-wrap:wrap;gap:3px;margin:1em 0 .25em}
.ep{width:14px;height:14px;border-radius:4px}
.ep.changed,.ep.flagged{background:#ea580c}
.ep.unchanged{background:#16a34a}
.strip-cap{font-size:.9em;color:#475569;margin:0 0 1em}
.remap{border:1px solid #e2e8f0;border-radius:12px;padding:1em 1.2em;background:#f8fafc;margin:1em 0}
.remap h3{margin:0 0 .5em;font-size:1.05em}
.remap code{background:#0f172a;color:#e2e8f0;padding:.15em .5em;border-radius:6px;font-size:.92em}
.remap-same{color:#15803d;font-weight:600}
@media (max-width:560px){.wrap{padding:1.25em .9em 2em}.hero h1{font-size:1.6em}.panel{padding:1em}}
</style>
<script>
function show(id){
document.querySelectorAll('.panel').forEach(e=>e.classList.remove('on'));
document.getElementById(id).classList.add('on');
document.querySelectorAll('.tab').forEach(b=>b.classList.toggle('active',b.dataset.id===id));
}
</script>
</head>
<body>
<div class="wrap">
<header class="hero">
<h1>robot-data-diff</h1>
<p class="tagline">Track changes for robot training data.</p>
<p><span class="badge">Real pre-computed results &middot; this page runs no code</span></p>
<p>Compare two versions of a LeRobot dataset and see exactly which episodes changed.</p>
<div class="install"><p>Run it locally:</p><pre>pip install robot-data-diff
robot-data-diff diff lerobot/pusht@855546dc lerobot/pusht@main</pre></div>
</header>
<section class="how" aria-label="How robot-data-diff works">
<h2>How it works</h2>
<svg viewBox="0 0 820 230" role="img" aria-label="Two dataset versions go into robot-data-diff, which sorts every episode into Added, Removed, Changed, or Unchanged" font-family="system-ui, sans-serif">
<defs><marker id="arr" markerWidth="8" markerHeight="8" refX="7" refY="3" orient="auto"><path d="M0,0 L7,3 L0,6 Z" fill="#64748b"/></marker></defs>
<rect x="10" y="55" width="180" height="44" rx="10" fill="#ffffff" stroke="#cbd5e1"/>
<text x="100" y="82" text-anchor="middle" font-size="15" fill="#1a1a2e">Dataset v2.1</text>
<rect x="10" y="135" width="180" height="44" rx="10" fill="#ffffff" stroke="#cbd5e1"/>
<text x="100" y="162" text-anchor="middle" font-size="15" fill="#1a1a2e">Dataset v3.0</text>
<line x1="190" y1="77" x2="275" y2="105" stroke="#64748b" stroke-width="2" marker-end="url(#arr)"/>
<line x1="190" y1="157" x2="275" y2="130" stroke="#64748b" stroke-width="2" marker-end="url(#arr)"/>
<rect x="280" y="75" width="220" height="80" rx="12" fill="#1a1a2e"/>
<text x="390" y="112" text-anchor="middle" font-size="16" font-weight="700" fill="#ffffff">robot-data-diff</text>
<text x="390" y="134" text-anchor="middle" font-size="12" fill="#cbd5e1">episode-aware diff</text>
<line x1="500" y1="115" x2="575" y2="34" stroke="#64748b" stroke-width="2" marker-end="url(#arr)"/>
<line x1="500" y1="115" x2="575" y2="88" stroke="#64748b" stroke-width="2" marker-end="url(#arr)"/>
<line x1="500" y1="115" x2="575" y2="142" stroke="#64748b" stroke-width="2" marker-end="url(#arr)"/>
<line x1="500" y1="115" x2="575" y2="196" stroke="#64748b" stroke-width="2" marker-end="url(#arr)"/>
<rect x="580" y="12" width="200" height="44" rx="10" fill="#ffffff" stroke="#cbd5e1"/>
<text x="680" y="39" text-anchor="middle" font-size="14" fill="#1a1a2e">Added</text>
<rect x="580" y="66" width="200" height="44" rx="10" fill="#ffffff" stroke="#cbd5e1"/>
<text x="680" y="93" text-anchor="middle" font-size="14" fill="#1a1a2e">Removed</text>
<rect x="580" y="120" width="200" height="44" rx="10" fill="#fff7ed" stroke="#ea580c"/>
<text x="680" y="147" text-anchor="middle" font-size="14" fill="#c2410c">Changed</text>
<rect x="580" y="174" width="200" height="44" rx="10" fill="#f0fdf4" stroke="#16a34a"/>
<text x="680" y="201" text-anchor="middle" font-size="14" fill="#15803d">Unchanged</text>
</svg>
<p class="cap">Give the tool two versions of a dataset. It compares them episode by episode and sorts every episode into Added, Removed, Changed, or Unchanged.</p>
</section>
<p class="note">This page shows real, pre-computed diffs &mdash; the same reports the tool produces. It cannot run a new pair in the browser (this is a free Static Space: pages only, no Python). To diff your own pair, run it locally:</p>
<div class="tabs"><button class="tab active" data-id="so100" onclick="show('so100')">Silent recalibration</button><button class="tab" data-id="so101" onclick="show('so101')">Clean migration</button><button class="tab" data-id="pusht" onclick="show('pusht')">Labels only</button></div>
<section id="so100" class="panel on"><h2>Silent joint recalibration — svla_so100_pickplace v2.1 → v3.0</h2><p class="lead">50 → 50 · 0 added · 0 removed · 50 changed · 0 unchanged. Two joint dims remapped on every episode.</p><div class="cards"><div class="card"><div class="num">50 → 50</div><div class="lbl">Episodes</div></div><div class="card"><div class="num">0</div><div class="lbl">Added</div></div><div class="card"><div class="num">0</div><div class="lbl">Removed</div></div><div class="card"><div class="num">50</div><div class="lbl">Changed</div></div><div class="card"><div class="num">0</div><div class="lbl">Unchanged</div></div><div class="strip" role="img" aria-label="One block per episode — all 50 changed."><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span><span class="ep changed"></span></div><p class="strip-cap">One block per episode — all 50 changed.</p></div><div class="bar" role="img" aria-label="Changed 50 of 50, unchanged 0 of 50"><div class="bar-changed" style="width:100.0%"></div><div class="bar-unchanged" style="width:0.0%"></div></div><p class="legend"><span class="dot changed-dot"></span> Changed: 50 &nbsp;&nbsp;<span class="dot unchanged-dot"></span> Unchanged: 0</p>
<div class="remap"><h3>What actually changed: two joints remapped</h3>
<p><code>dim 1: v3 = 90 − v2</code> &nbsp; new value = 90 minus the old value</p>
<p><code>dim 2: v3 = v2 − 90</code> &nbsp; new value = the old value minus 90</p>
<p class="remap-same">Dims 0, 3, 4, 5 did not change — identical in v2.1 and v3.0.</p></div><details><summary>Show full report</summary><pre>========================================================================
robot-data-diff — episode-aware dataset diff
========================================================================
A: lerobot/svla_so100_pickplace@a440cbb2 (v2.1, 50 episodes, 30 fps)
B: lerobot/svla_so100_pickplace@main (v3.0, 50 episodes, 30 fps)
Episodes: 50 -&gt; 50 (+0 added, -0 removed, ~50 changed, =0 unchanged)
CHANGED EPISODES (50):
[ep 0] length 454 -&gt; 454 (+0 frames)
d(action_min) [+0.0000, -184.5703, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -184.5703, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -213.7291, -89.9998, +0.0000, +0.0001, +0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 1] length 468 -&gt; 468 (+0 frames)
d(action_min) [+0.0000, -178.0664, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -178.0664, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -204.3904, -89.9998, +0.0000, -0.0000, +0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 2] length 420 -&gt; 420 (+0 frames)
d(action_min) [+0.0000, -192.5684, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -192.5684, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -224.8841, -89.9997, +0.0000, +0.0002, +0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 3] length 416 -&gt; 416 (+0 frames)
d(action_min) [+0.0000, -179.3848, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -179.3848, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -208.7897, -89.9999, +0.0000, -0.0000, +0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 4] length 401 -&gt; 401 (+0 frames)
d(action_min) [+0.0000, -195.9961, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -195.9961, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -227.6912, -89.9998, +0.0000, -0.0001, +0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 5] length 354 -&gt; 354 (+0 frames)
d(action_min) [+0.0000, -190.9863, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -190.9863, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -223.9423, -89.9999, +0.0000, +0.0000, -0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 6] length 357 -&gt; 357 (+0 frames)
d(action_min) [+0.0000, -180.7910, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -180.7910, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -219.5686, -89.9998, +0.0000, +0.0000, +0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 7] length 351 -&gt; 351 (+0 frames)
d(action_min) [+0.0000, -180.9668, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -180.9668, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -221.6553, -89.9998, +0.0000, +0.0000, +0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 8] length 368 -&gt; 368 (+0 frames)
d(action_min) [+0.0000, -186.5918, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -186.5918, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -216.8870, -89.9997, +0.0000, +0.0000, +0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 9] length 388 -&gt; 388 (+0 frames)
d(action_min) [+0.0000, -181.9336, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -181.9336, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -213.1301, -89.9998, +0.0000, +0.0000, -0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 10] length 364 -&gt; 364 (+0 frames)
d(action_min) [+0.0000, -161.6309, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -161.6309, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -172.2101, -90.0000, +0.0000, -0.0000, +0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 11] length 377 -&gt; 377 (+0 frames)
d(action_min) [+0.0000, -166.3770, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -166.3770, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -197.8757, -89.9999, +0.0000, -0.0001, +0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 12] length 369 -&gt; 369 (+0 frames)
d(action_min) [+0.0000, -157.1484, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -157.1484, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -188.0868, -89.9998, +0.0000, +0.0001, +0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 13] length 357 -&gt; 357 (+0 frames)
d(action_min) [+0.0000, -164.8828, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -164.8828, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -206.6688, -89.9999, +0.0000, +0.0000, +0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 14] length 375 -&gt; 375 (+0 frames)
d(action_min) [+0.0000, -163.4766, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -163.4766, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -200.9436, -89.9999, +0.0000, +0.0000, +0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 15] length 384 -&gt; 384 (+0 frames)
d(action_min) [+0.0000, -167.9590, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -167.9590, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -203.6738, -89.9998, +0.0000, +0.0001, +0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 16] length 365 -&gt; 365 (+0 frames)
d(action_min) [+0.0000, -164.1797, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -164.1797, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -191.1779, -89.9999, +0.0000, -0.0000, +0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 17] length 409 -&gt; 409 (+0 frames)
d(action_min) [+0.0000, -156.7090, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -156.7090, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -187.6610, -89.9998, +0.0000, -0.0001, +0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 18] length 385 -&gt; 385 (+0 frames)
d(action_min) [+0.0000, -167.2559, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -167.2559, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -196.9664, -89.9999, +0.0000, +0.0000, -0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 19] length 367 -&gt; 367 (+0 frames)
d(action_min) [+0.0000, -173.7598, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -173.7598, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -206.0649, -89.9998, +0.0000, +0.0000, +0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 20] length 366 -&gt; 366 (+0 frames)
d(action_min) [+0.0000, -190.7227, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -190.7227, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -223.5961, -89.9997, +0.0000, +0.0000, -0.0000]
d(idle_ratio) +0.0000
d(spikes) +0
[ep 21] length 370 -&gt; 370 (+0 frames)
d(action_min) [+0.0000, -188.9648, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_max) [+0.0000, -188.9648, -90.0000, +0.0000, +0.0000, +0.0000]
d(action_mean) [+0.0000, -222.3631, -89.9997, +0.0000, +0.0000, +0.0000]
d(idle_ratio) +0.0000
… (full per-episode list truncated for the page — run the tool locally for the complete report.)
</pre></details></section><section id="so101" class="panel"><h2>Clean migration — svla_so101_pickplace v2.1 → v3.0</h2><p class="lead">50 → 50 · 0 added · 0 removed · 0 changed · 50 unchanged. A bit-perfect migration.</p><div class="cards"><div class="card"><div class="num">50 → 50</div><div class="lbl">Episodes</div></div><div class="card"><div class="num">0</div><div class="lbl">Added</div></div><div class="card"><div class="num">0</div><div class="lbl">Removed</div></div><div class="card"><div class="num">0</div><div class="lbl">Changed</div></div><div class="card"><div class="num">50</div><div class="lbl">Unchanged</div></div><div class="strip" role="img" aria-label="One block per episode — all 50 unchanged."><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span><span class="ep unchanged"></span></div><p class="strip-cap">One block per episode — all 50 unchanged.</p></div><div class="bar" role="img" aria-label="Changed 0 of 50, unchanged 50 of 50"><div class="bar-changed" style="width:0.0%"></div><div class="bar-unchanged" style="width:100.0%"></div></div><p class="legend"><span class="dot changed-dot"></span> Changed: 0 &nbsp;&nbsp;<span class="dot unchanged-dot"></span> Unchanged: 50</p><details><summary>Show full report</summary><pre>========================================================================
robot-data-diff — episode-aware dataset diff
========================================================================
A: lerobot/svla_so101_pickplace@50920d7c (v2.1, 50 episodes, 30 fps)
B: lerobot/svla_so101_pickplace@main (v3.0, 50 episodes, 30 fps)
Episodes: 50 -&gt; 50 (+0 added, -0 removed, ~0 changed, =50 unchanged)
No changed episodes (same index + identical stats).
TASK INVENTORY (episodes per task: A -&gt; B):
pink lego brick into the transparent box 50 -&gt; 50
Schema: identical feature sets.
QUALITY SUMMARY (heuristic, CPU-only):
mean idle-frame ratio: 0.2302 -&gt; 0.2302 (+0.0000)
total action spikes: 14 -&gt; 14 (+0)
========================================================================
</pre></details></section><section id="pusht" class="panel"><h2>Task labels only — lerobot/pusht v2.1 → v3.0</h2><p class="lead">206 → 206 · 0 added · 0 removed · 206 flagged · 0 unchanged — but only the task-label formatting changed; the episode data is untouched.</p><div class="cards"><div class="card"><div class="num">206 → 206</div><div class="lbl">Episodes</div></div><div class="card"><div class="num">0</div><div class="lbl">Added</div></div><div class="card"><div class="num">0</div><div class="lbl">Removed</div></div><div class="card"><div class="num">206</div><div class="lbl">Changed</div></div><div class="card"><div class="num">0</div><div class="lbl">Unchanged</div></div><div class="strip" role="img" aria-label="One block per episode — all 206 flagged (labels only)."><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span><span class="ep flagged"></span></div><p class="strip-cap">One block per episode — all 206 flagged (labels only).</p></div><div class="bar" role="img" aria-label="Changed 206 of 206, unchanged 0 of 206"><div class="bar-changed" style="width:100.0%"></div><div class="bar-unchanged" style="width:0.0%"></div></div><p class="legend"><span class="dot changed-dot"></span> Changed: 206 &nbsp;&nbsp;<span class="dot unchanged-dot"></span> Unchanged: 0</p><details><summary>Show full report</summary><pre>========================================================================
robot-data-diff — episode-aware dataset diff
========================================================================
A: lerobot/pusht@855546dc (v2.1, 206 episodes, 10 fps)
B: lerobot/pusht@main (v3.0, 206 episodes, 10 fps)
Episodes: 206 -&gt; 206 (+0 added, -0 removed, ~206 changed, =0 unchanged)
CHANGED EPISODES (206):
[ep 0] length 161 -&gt; 161 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 1] length 118 -&gt; 118 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 2] length 141 -&gt; 141 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 3] length 159 -&gt; 159 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 4] length 159 -&gt; 159 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 5] length 157 -&gt; 157 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 6] length 69 -&gt; 69 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 7] length 169 -&gt; 169 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 8] length 80 -&gt; 80 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 9] length 134 -&gt; 134 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 10] length 188 -&gt; 188 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 11] length 149 -&gt; 149 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 12] length 140 -&gt; 140 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 13] length 125 -&gt; 125 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 14] length 107 -&gt; 107 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 15] length 153 -&gt; 153 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 16] length 126 -&gt; 126 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 17] length 102 -&gt; 102 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 18] length 86 -&gt; 86 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 19] length 75 -&gt; 75 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 20] length 142 -&gt; 142 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 21] length 115 -&gt; 115 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 22] length 109 -&gt; 109 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 23] length 110 -&gt; 110 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 24] length 98 -&gt; 98 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 25] length 133 -&gt; 133 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 26] length 158 -&gt; 158 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 27] length 112 -&gt; 112 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 28] length 107 -&gt; 107 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 29] length 115 -&gt; 115 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 30] length 84 -&gt; 84 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 31] length 95 -&gt; 95 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 32] length 148 -&gt; 148 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 33] length 120 -&gt; 120 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 34] length 142 -&gt; 142 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 35] length 143 -&gt; 143 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 36] length 142 -&gt; 142 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 37] length 121 -&gt; 121 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 38] length 186 -&gt; 186 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 39] length 99 -&gt; 99 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 40] length 139 -&gt; 139 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 41] length 73 -&gt; 73 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 42] length 136 -&gt; 136 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 43] length 118 -&gt; 118 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 44] length 127 -&gt; 127 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 45] length 152 -&gt; 152 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 46] length 83 -&gt; 83 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 47] length 109 -&gt; 109 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 48] length 138 -&gt; 138 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 49] length 83 -&gt; 83 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 50] length 69 -&gt; 69 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 51] length 73 -&gt; 73 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 52] length 136 -&gt; 136 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 53] length 173 -&gt; 173 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 54] length 205 -&gt; 205 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 55] length 106 -&gt; 106 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 56] length 105 -&gt; 105 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 57] length 83 -&gt; 83 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 58] length 118 -&gt; 118 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 59] length 122 -&gt; 122 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 60] length 60 -&gt; 60 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 61] length 150 -&gt; 150 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 62] length 67 -&gt; 67 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 63] length 140 -&gt; 140 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 64] length 103 -&gt; 103 (+0 frames)
tasks: [&quot;[&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]&quot;] -&gt; [&#x27;Push the T-shaped block onto the T-shaped target.&#x27;]
[ep 65] length 166 -&gt; 166 (+0 frames)
… (full per-episode list truncated for the page — run the tool locally for the complete report.)
</pre></details></section>
<footer>
<p>Honest limits: “unchanged” means unchanged under the tool’s stats fingerprint (episode length, task labels, action stats, idle ratio, spike counts) — not byte-identical video. It is a diff, not a validator.</p>
<p>Source: <a href="https://github.com/yafetashenafi790-lgtm/robot-data-diff">github.com/yafetashenafi790-lgtm/robot-data-diff</a></p>
</footer>
</div>
<script>show('so100');</script>
</body>
</html>