Spaces:
Running
Running
Download index.html from Japheth24/robot-data-diff: direct link, hf CLI and curl.
- Browser
- Download file 45 kB
-
https://huggingface.co/spaces/Japheth24/robot-data-diff/resolve/main/index.html
- Command line
-
hf download hf://spaces/Japheth24/robot-data-diff/index.html
-
curl -L -o index.html https://huggingface.co/spaces/Japheth24/robot-data-diff/resolve/main/index.html
45 kB
| <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 · 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 — 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 <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> new value = 90 minus the old value</p> | |
| <p><code>dim 2: v3 = v2 − 90</code> 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 -> 50 (+0 added, -0 removed, ~50 changed, =0 unchanged) | |
| CHANGED EPISODES (50): | |
| [ep 0] length 454 -> 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 -> 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 -> 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 -> 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 -> 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 -> 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 -> 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 -> 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 -> 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 -> 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 -> 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 -> 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 -> 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 -> 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 -> 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 -> 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 -> 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 -> 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 -> 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 -> 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 -> 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 -> 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 <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 -> 50 (+0 added, -0 removed, ~0 changed, =50 unchanged) | |
| No changed episodes (same index + identical stats). | |
| TASK INVENTORY (episodes per task: A -> B): | |
| pink lego brick into the transparent box 50 -> 50 | |
| Schema: identical feature sets. | |
| QUALITY SUMMARY (heuristic, CPU-only): | |
| mean idle-frame ratio: 0.2302 -> 0.2302 (+0.0000) | |
| total action spikes: 14 -> 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 <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 -> 206 (+0 added, -0 removed, ~206 changed, =0 unchanged) | |
| CHANGED EPISODES (206): | |
| [ep 0] length 161 -> 161 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 1] length 118 -> 118 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 2] length 141 -> 141 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 3] length 159 -> 159 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 4] length 159 -> 159 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 5] length 157 -> 157 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 6] length 69 -> 69 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 7] length 169 -> 169 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 8] length 80 -> 80 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 9] length 134 -> 134 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 10] length 188 -> 188 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 11] length 149 -> 149 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 12] length 140 -> 140 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 13] length 125 -> 125 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 14] length 107 -> 107 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 15] length 153 -> 153 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 16] length 126 -> 126 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 17] length 102 -> 102 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 18] length 86 -> 86 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 19] length 75 -> 75 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 20] length 142 -> 142 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 21] length 115 -> 115 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 22] length 109 -> 109 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 23] length 110 -> 110 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 24] length 98 -> 98 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 25] length 133 -> 133 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 26] length 158 -> 158 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 27] length 112 -> 112 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 28] length 107 -> 107 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 29] length 115 -> 115 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 30] length 84 -> 84 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 31] length 95 -> 95 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 32] length 148 -> 148 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 33] length 120 -> 120 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 34] length 142 -> 142 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 35] length 143 -> 143 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 36] length 142 -> 142 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 37] length 121 -> 121 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 38] length 186 -> 186 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 39] length 99 -> 99 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 40] length 139 -> 139 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 41] length 73 -> 73 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 42] length 136 -> 136 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 43] length 118 -> 118 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 44] length 127 -> 127 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 45] length 152 -> 152 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 46] length 83 -> 83 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 47] length 109 -> 109 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 48] length 138 -> 138 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 49] length 83 -> 83 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 50] length 69 -> 69 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 51] length 73 -> 73 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 52] length 136 -> 136 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 53] length 173 -> 173 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 54] length 205 -> 205 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 55] length 106 -> 106 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 56] length 105 -> 105 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 57] length 83 -> 83 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 58] length 118 -> 118 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 59] length 122 -> 122 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 60] length 60 -> 60 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 61] length 150 -> 150 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 62] length 67 -> 67 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 63] length 140 -> 140 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 64] length 103 -> 103 (+0 frames) | |
| tasks: ["['Push the T-shaped block onto the T-shaped target.']"] -> ['Push the T-shaped block onto the T-shaped target.'] | |
| [ep 65] length 166 -> 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> | |