Spaces:
Running
Running
File size: 8,071 Bytes
36b8b48 c0e24e7 36b8b48 c0e24e7 c8f96cb c0e24e7 65c21d7 c0e24e7 0f8fa12 c0e24e7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | <!doctype html><html lang="en"><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Teleop Sample</title>
<style>
:root{color-scheme:dark}*{box-sizing:border-box}html,body{margin:0;height:100%}
body{background:#07090d;color:#e6e8ee;font:14px/1.5 -apple-system,"Helvetica Neue",Arial,"PingFang SC",sans-serif}
.wrap{display:flex;height:100vh;overflow:hidden}
.side{width:296px;flex:0 0 296px;background:#0b0e13;border-right:1px solid #1c2028;overflow-y:auto}
.side .st{display:flex;align-items:baseline;gap:9px;font-size:11.5px;letter-spacing:.05em;text-transform:uppercase;color:#8890a0;padding:15px 15px 8px}
.side .st .back{text-transform:none;letter-spacing:0;font-size:12px;color:#6f92c8;text-decoration:none;white-space:nowrap;flex-shrink:0}
.side .st .back:hover{text-decoration:underline}
.cat{border-top:1px solid #14181f}
.cat > .ch{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:10px 15px;cursor:pointer;background:#0e1219}
.cat > .ch:hover{background:#12151c}
.cat > .ch .ct{font-size:12px;font-weight:700;letter-spacing:.02em}
.cat > .ch .cc{font-size:10.5px;color:#6f7787;flex-shrink:0}
.cat > .ch .ct::before{content:"\25B8";color:#6f7787;display:inline-block;width:14px}
.cat.open > .ch .ct::before{content:"\25BE"}
.cbody{display:none}.cat.open .cbody{display:block}
.leaf{padding:9px 12px 9px 29px;cursor:pointer;border-left:3px solid transparent}
.leaf:hover{background:#12151c}
.leaf.on{background:#152036;border-left-color:#6f9fe0}
.leaf .lt{font-size:12.5px;font-weight:600}
.leaf .lm{font-size:10.5px;color:#7f8896;margin-top:2px;display:flex;gap:7px;align-items:center}
.rig{font:9.5px ui-monospace,monospace;color:#6f92c8;background:#12151c;border:1px solid #1c2028;border-radius:4px;padding:0 4px}
.main{flex:1;display:flex;flex-direction:column;min-width:0}
.bar{display:flex;align-items:center;gap:10px;padding:9px 16px;border-bottom:1px solid #1c2028;background:#0b0e13;min-height:44px}
.bar .title{font-size:13px;color:#c7ccd6}.bar .title b{color:#e6e8ee}
iframe{flex:1;width:100%;border:0;background:#07090d}
.empty{margin:auto;color:#6f7787;font-size:13px}
</style></head><body>
<div class="wrap">
<nav class="side">
<div class="st"><a class="back" href="../index.html">← all datasets</a><span>Teleop Sample — 22 episodes</span></div>
<div id="nav"></div>
</nav>
<div class="main">
<div class="bar" id="bar"><span class="empty">select an episode on the left</span></div>
<iframe id="stage" allow="autoplay" src="about:blank"></iframe>
</div>
</div>
<script id="D" type="application/json">[["Memory module insertion 路 Faber U", "Faber U", [{"label": "episode 0", "hash": "mem_ep0", "src": "mem_ep0.html", "dur": 25.63, "spans": 4}, {"label": "episode 1", "hash": "mem_ep1", "src": "mem_ep1.html", "dur": 36.8, "spans": 4}]], ["Place drink on coaster 路 Faber U", "Faber U", [{"label": "episode 0", "hash": "drink_ep0", "src": "drink_ep0.html", "dur": 22.53, "spans": 3}, {"label": "episode 1", "hash": "drink_ep1", "src": "drink_ep1.html", "dur": 18.23, "spans": 3}]], ["Sort garment bags 路 Faber U", "Faber U", [{"label": "episode 0", "hash": "sort_ep0", "src": "sort_ep0.html", "dur": 36.77, "spans": 16}, {"label": "episode 1", "hash": "sort_ep1", "src": "sort_ep1.html", "dur": 31.2, "spans": 16}]], ["Wipe table with sponge 路 Faber U", "Faber U", [{"label": "episode 0", "hash": "wipe_ep0", "src": "wipe_ep0.html", "dur": 24.33, "spans": 3}, {"label": "episode 1", "hash": "wipe_ep1", "src": "wipe_ep1.html", "dur": 26.47, "spans": 3}]], ["Pick up the water bottle and put it in the basket 路 Futurist", "Futurist", [{"label": "episode 0", "hash": "legacy-ep0", "src": "https://faradayfuture-sampleviewer.static.hf.space/teleopSample/ep0/viewer.html", "dur": 18.2, "spans": 3}, {"label": "episode 1", "hash": "legacy-ep1", "src": "https://faradayfuture-sampleviewer.static.hf.space/teleopSample/ep1/viewer.html", "dur": 18.8, "spans": 3}, {"label": "episode 2", "hash": "legacy-ep2", "src": "https://faradayfuture-sampleviewer.static.hf.space/teleopSample/ep2/viewer.html", "dur": 18.7, "spans": 3}, {"label": "episode 3", "hash": "legacy-ep3", "src": "https://faradayfuture-sampleviewer.static.hf.space/teleopSample/ep3/viewer.html", "dur": 20.5, "spans": 3}, {"label": "episode 4", "hash": "legacy-ep4", "src": "https://faradayfuture-sampleviewer.static.hf.space/teleopSample/ep4/viewer.html", "dur": 22.4, "spans": 3}, {"label": "episode 5", "hash": "legacy-ep5", "src": "https://faradayfuture-sampleviewer.static.hf.space/teleopSample/ep5/viewer.html", "dur": 18.4, "spans": 3}]], ["Place the water bottle into the white plastic tray on the checkout counter 路 Faber U", "Faber U", [{"label": "episode 0", "hash": "20260707052527", "src": "faberU/t2_water_bottle_into_steel_tray/20260707052527/viewer.html", "dur": 11.0, "spans": 7}, {"label": "episode 1", "hash": "20260707052609", "src": "faberU/t2_water_bottle_into_steel_tray/20260707052609/viewer.html", "dur": 11.6, "spans": 7}]], ["Place the juice bottle onto the patterned plate 路 Faber U", "Faber U", [{"label": "episode 0", "hash": "20260724050827", "src": "faberU/t3_juice_bottle_onto_plate/20260724050827/viewer.html", "dur": 10.1, "spans": 8}, {"label": "episode 1", "hash": "20260724050737", "src": "faberU/t3_juice_bottle_onto_plate/20260724050737/viewer.html", "dur": 9.6, "spans": 8}]], ["Place the juice bottle into the black tray 路 Faber U", "Faber U", [{"label": "episode 0", "hash": "20260728075709", "src": "faberU/t4_juice_bottle_into_black_tray/20260728075709/viewer.html", "dur": 5.9, "spans": 7}, {"label": "episode 1", "hash": "20260728080339", "src": "faberU/t4_juice_bottle_into_black_tray/20260728080339/viewer.html", "dur": 8.0, "spans": 7}]], ["Pick up the green-tea bottle and lift it 路 Faber U", "Faber U", [{"label": "episode 0", "hash": "20260730045152", "src": "faberU/t6_pick_up_green_tea_bottle/20260730045152/viewer.html", "dur": 9.9, "spans": 4}, {"label": "episode 1", "hash": "20260730045050", "src": "faberU/t6_pick_up_green_tea_bottle/20260730045050/viewer.html", "dur": 8.0, "spans": 5}]]]</script>
<script>
const TREE = JSON.parse(document.getElementById('D').textContent);
const esc = s => (s||'').replace(/[&<>"]/g,c=>({'&':'&','<':'<','>':'>','"':'"'}[c]));
function build(){
const box = document.getElementById('nav');
TREE.forEach(([cat, rig, leaves], ci)=>{
const c = document.createElement('div'); c.className = 'cat' + (ci===0?' open':'');
c.innerHTML = `<div class="ch"><span class="ct">${esc(cat)}</span><span class="cc">${leaves.length}</span></div><div class="cbody"></div>`;
c.querySelector('.ch').onclick = ()=>c.classList.toggle('open');
const body = c.querySelector('.cbody');
leaves.forEach(m=>{
const el = document.createElement('div'); el.className = 'leaf';
el.innerHTML = `<div class="lt">${esc(m.label)}</div>
<div class="lm"><span class="rig">${esc(rig)}</span>${m.dur.toFixed(0)}s 路 ${m.spans} steps</div>`;
el.onclick = ()=>go(m.hash);
el._hash = m.hash; el._m = m; el._cat = cat;
body.appendChild(el);
});
box.appendChild(c);
});
}
function openLeaf(el){
document.querySelectorAll('.leaf.on').forEach(x=>x.classList.remove('on'));
el.classList.add('on');
el.closest('.cat').classList.add('open');
el.scrollIntoView({block:'nearest'});
const m = el._m;
document.getElementById('stage').src = m.src;
document.getElementById('bar').innerHTML =
`<span class="title"><b>${esc(el._cat)}</b> · ${esc(m.label)}</span>`;
}
function go(hash){ if(location.hash.slice(1)===hash) route(); else location.hash = hash; }
function route(){
const h = decodeURIComponent(location.hash.slice(1));
let el = [...document.querySelectorAll('.leaf')].find(x=>x._hash===h)
|| document.querySelector('.cat.open .leaf') || document.querySelector('.leaf');
if(el) openLeaf(el);
}
window.addEventListener('hashchange', route);
build(); route();
</script>
</body></html>
|