EgoInfinity / index.html
VectorW's picture
Initial commit
66d097c
Raw
History Blame Contribute Delete
29.4 kB
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>EgoInfinity / Dataset Viewer</title>
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=Inter:wght@400;500;600;700&family=Fraunces:opsz,wght@9..144,400;9..144,500&display=swap" rel="stylesheet">
<link rel="stylesheet" href="css/styles.css">
</head>
<body data-theme="noir">
<header class="topbar">
<div class="brand">
<div class="brand-mark"></div>
<span>EGOINFINITY</span>
</div>
<div class="topbar-right">
<a href="#viewer">3D Viewer</a>
<a href="#browse">Browse</a>
<a href="#stats">Stats</a>
<a href="#roadmap">Roadmap</a>
<a href="#waitlist">Waitlist</a>
<a href="#team">Team</a>
<a href="https://github.com/Rice-RobotPI-Lab/EgoInfinity" target="_blank" rel="noopener">GitHub ↗</a>
<a href="https://huggingface.co/datasets/Rice-RobotPI-Lab/egoinfinity" target="_blank" rel="noopener">Dataset ↗</a>
<button class="btn ghost" id="theme-btn" style="padding: 6px 10px; font-size: 11px;">Theme</button>
</div>
</header>
<section class="hero">
<video class="hero-bg" autoplay muted loop playsinline preload="metadata" poster="hero_poster.png">
<source src="hero.mp4" type="video/mp4">
</video>
<div class="hero-scrim"></div>
<div class="hero-inner">
<div class="hero-content">
<div class="eyebrow">001 / Curated, processed, ready</div>
<h1>EgoInfinity</h1>
<p class="hero-subtitle">A Web-Scale Data Engine for Video-to-Action Robot Learning through Egocentric Views</p>
<p class="hero-lead"><span class="mono" style="color:var(--ink)">EgoInfinity</span> is a <strong>data engine</strong> that automatically curates and processes any-view video clips into high-quality 4D hand-object-interaction (HOI) sequences, and transforms them into any other views, including egocentric. <span class="mono" style="color:var(--ink)">EgoInfinity</span> also provides a framework to retarget processed human motions to motions on any robots.</p>
<p class="hero-lead"><strong>Click any clip in the Browse section below to load it into the 3D viewer and inspect panels.</strong></p>
<div class="hero-actions">
<a class="btn" href="#browse">Browse <span id="hero-count">-</span> episodes <span class="mono"></span></a>
<a class="btn ghost" href="#viewer">
<svg class="btn-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linejoin="round" aria-hidden="true">
<path d="M12 2 L21 7 L21 17 L12 22 L3 17 L3 7 Z"/>
<path d="M12 2 L12 12 L21 7"/>
<path d="M12 12 L12 22"/>
<path d="M12 12 L3 7"/>
</svg>
Open 3D viewer <span class="mono"></span>
</a>
</div>
<div style="margin-top: 26px; display: flex; gap: 10px; flex-wrap: wrap; align-items: center; font-family: 'IBM Plex Mono', monospace; font-size: 11px; color: var(--ink-3);">
<span style="padding: 3px 8px; border: 1px solid var(--rule-2); color: var(--ink-2);">source: action100m</span>
<span style="opacity:0.6"></span>
<span style="padding: 3px 8px; border: 1px solid var(--rule-2); color: var(--ink-2);">extract: pose · contact · sam3d_mesh</span>
<span style="opacity:0.6"></span>
<span style="padding: 3px 8px; border: 1px solid var(--accent); color: var(--accent-ink);">retarget: any embodiment</span>
</div>
</div>
<div class="hero-stats">
<div class="hero-stat">
<span class="hero-stat-kicker">01 / Duration</span>
<span class="hero-stat-key">14.6+ Years<sup>*</sup></span>
</div>
<div class="hero-stat">
<span class="hero-stat-kicker">02 / Pipeline</span>
<span class="hero-stat-key">Modular &amp; Upgradable</span>
</div>
<div class="hero-stat">
<span class="hero-stat-kicker">03 / Scope</span>
<span class="hero-stat-key">Data Engine For Any Video</span>
</div>
<div class="hero-stat">
<span class="hero-stat-kicker">04 / Enabling</span>
<span class="hero-stat-key">Retargeting to Any Robot</span>
</div>
<span class="hero-stat-note"><sup>*</sup> total duration, sourced from Action100M</span>
<div class="hero-links">
<a class="btn ghost" href="https://huggingface.co/datasets/Rice-RobotPI-Lab/egoinfinity" target="_blank" rel="noopener">
<svg class="btn-icon" viewBox="0 0 95 88" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path d="M47.2 75.5c20.5 0 37.1-13.4 37.1-30s-16.6-30-37.1-30-37.1 13.4-37.1 30 16.6 30 37.1 30Z" fill="#FFD21E"/>
<path d="M81.3 47.4c0 14.4-15.3 26-34.1 26s-34.1-11.6-34.1-26c0-7.1 3.7-13.5 9.7-18.2-2.7 4.5-4.3 9.6-4.3 15 0 14 13.7 25.4 30.5 25.4s30.5-11.4 30.5-25.4c0-5.4-1.6-10.5-4.3-15 6 4.7 9.7 11.1 9.7 18.2Z" fill="#FF9D0B"/>
<circle cx="34" cy="42" r="5" fill="#3A3B45"/>
<circle cx="60" cy="42" r="5" fill="#3A3B45"/>
<path d="M37 56c2 4 6 6.5 10.2 6.5S55.4 60 57.4 56" stroke="#3A3B45" stroke-width="3" stroke-linecap="round" fill="none"/>
</svg>
Dataset <span class="mono"></span>
</a>
<a class="btn ghost" href="https://github.com/Rice-RobotPI-Lab/EgoInfinity" target="_blank" rel="noopener">
<svg class="btn-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
<path d="M12 .5C5.65.5.5 5.65.5 12c0 5.08 3.29 9.39 7.86 10.91.58.11.79-.25.79-.55v-1.94c-3.2.7-3.87-1.54-3.87-1.54-.52-1.32-1.27-1.67-1.27-1.67-1.04-.71.08-.7.08-.7 1.15.08 1.76 1.18 1.76 1.18 1.02 1.75 2.69 1.24 3.34.95.1-.74.4-1.24.73-1.53-2.55-.29-5.24-1.28-5.24-5.69 0-1.26.45-2.29 1.18-3.1-.12-.29-.51-1.46.11-3.05 0 0 .97-.31 3.18 1.19a11.06 11.06 0 0 1 5.79 0c2.21-1.5 3.18-1.19 3.18-1.19.62 1.59.23 2.76.11 3.05.74.81 1.18 1.84 1.18 3.1 0 4.42-2.69 5.4-5.25 5.68.41.36.78 1.06.78 2.13v3.16c0 .31.21.67.79.55A11.51 11.51 0 0 0 23.5 12C23.5 5.65 18.35.5 12 .5z"/>
</svg>
GitHub <span class="mono"></span>
</a>
<a class="btn ghost" href="https://rice-robotpi-lab.github.io/EgoInfinity/" target="_blank" rel="noopener">Project page <span class="mono"></span></a>
<a class="btn ghost" href="https://arxiv.org/abs/2606.17385" target="_blank" rel="noopener">arXiv <span class="mono"></span></a>
</div>
</div>
</div>
</section>
<!-- 4D VIEWER -->
<section class="section" id="viewer">
<div class="section-head">
<div>
<div class="section-num">002 / 3D Viewer <span style="color:var(--accent-ink); margin-left:8px">· viser</span></div>
<h2 class="section-title">Same scene as the pipeline.</h2>
</div>
<p class="section-note"><strong>Click any clip in the Browse section below to load its 3D scene here.</strong> Embedded <span class="mono" style="color:var(--ink)">viser</span> session with the same renderer, GUI controls, and layers as <span class="mono">exo_pipeline.py --load-cache</span>. One viser process at a time; selecting an episode swaps it.</p>
</div>
<div class="viewer-grid">
<div class="viewer-stage">
<iframe id="viser-iframe" src="about:blank" allow="fullscreen"
style="position:absolute;inset:0;width:100%;height:100%;border:0;background:white"></iframe>
<div class="viewer-chrome-tl">
<div class="viewer-hint">
<div class="viewer-hint-title">Default view: Egocentric</div>
<div class="viewer-hint-sub">Drag to interact</div>
</div>
<div class="viewer-chip-row">
<span class="viewer-chip mono" id="viewer-clip-tag">-</span>
<span class="viewer-chip mono" id="viser-state">idle</span>
</div>
</div>
<div class="viewer-chrome-tr">
<button class="viewer-btn" id="viser-open" title="open in new tab"></button>
</div>
<div id="viser-overlay" class="viser-overlay" data-state="idle">
<div class="viser-overlay-inner">
<div id="viser-overlay-title" class="viser-overlay-title">Pick an episode</div>
<div id="viser-overlay-sub" class="viser-overlay-sub">Click any clip in the browse list. Its pre-recorded viser scene will load here.</div>
</div>
</div>
</div>
<aside class="viewer-side">
<div class="side-block">
<div class="panel-label-light">now loaded</div>
<div class="loaded-card">
<div id="loaded-title" style="font-family:'Fraunces',serif; font-size:22px; letter-spacing:-0.01em">-</div>
<div class="mono" id="loaded-meta" style="font-size:11px; color:var(--ink-3); margin-top:2px">select an episode below</div>
<div id="loaded-objects" style="margin-top: 14px;"></div>
</div>
</div>
<div class="side-block side-block-list">
<div class="panel-label-light">clips</div>
<div class="side-cliplist" id="side-cliplist"></div>
</div>
</aside>
</div>
<!-- Robot-embodiment retargets, 4-column row below the viser stage.
Per-clip robot_sim.mp4 is swapped in by app.js when a clip is picked.
Clips without retarget (per index.json `has_retarget=false`) get
a fallback empty-state instead. -->
<div class="viewer-retargets" id="viewer-retargets">
<div class="retarget-row" id="retarget-row" hidden>
<div class="retarget-cell" data-robot="franka">
<div class="retarget-label">Franka</div>
<video id="retarget-franka" src="" muted playsinline autoplay loop preload="metadata"></video>
</div>
<div class="retarget-cell" data-robot="g1">
<div class="retarget-label">Unitree G1</div>
<video id="retarget-g1" src="" muted playsinline autoplay loop preload="metadata"></video>
</div>
<div class="retarget-cell" data-robot="robonaut2">
<div class="retarget-label">Robonaut2</div>
<video id="retarget-robonaut2" src="" muted playsinline autoplay loop preload="metadata"></video>
</div>
<div class="retarget-cell" data-robot="xlerobot">
<div class="retarget-label">XLeRobot</div>
<video id="retarget-xlerobot" src="" muted playsinline autoplay loop preload="metadata"></video>
</div>
</div>
<div class="retarget-empty" id="retarget-empty" hidden>
<svg viewBox="0 0 64 64" aria-hidden="true">
<path d="M22 18 L46 32 L22 46 Z"/>
</svg>
<div class="retarget-empty-label">No robot-embodiment retarget available for this clip yet.</div>
</div>
<div class="retarget-idle" id="retarget-idle">
<svg viewBox="0 0 64 64" aria-hidden="true">
<path d="M22 18 L46 32 L22 46 Z"/>
</svg>
<div class="retarget-idle-label">Pick a clip below to view its robot-embodiment retargets.</div>
</div>
</div>
</section>
<!-- INSPECT -->
<section class="section" id="inspect">
<div class="section-head">
<div>
<div class="section-num">003 / Inspect</div>
<h2 class="section-title">Episode detail.</h2>
</div>
<p class="section-note"><strong>Click any clip in the Browse section below to populate these panels.</strong> Annotated stream (hand skeleton), raw clip, MoGe-2 depth, MEMFOF flow, plus per-frame contact / grasp / motion / trust signals from the 6-DoF tracker.</p>
</div>
<div class="detail">
<div>
<div class="detail-subs">
<div class="sub-frame">
<iframe id="yt-iframe" src="about:blank" allow="autoplay; encrypted-media; picture-in-picture" allowfullscreen referrerpolicy="origin-when-cross-origin"></iframe>
<span class="sub-label">raw · YouTube</span>
</div>
<div class="sub-frame">
<video id="detail-mask" src="" muted playsinline preload="metadata" autoplay loop></video>
<canvas id="detail-skeleton" class="overlay-skeleton"></canvas>
<span class="sub-label">mask · sam-tracked · skeleton overlay</span>
</div>
<div class="sub-frame">
<video id="detail-depth" src="" controls muted playsinline preload="metadata" autoplay loop></video>
<span class="sub-label">depth · moge2</span>
</div>
<div class="sub-frame">
<video id="detail-flow" src="" muted playsinline preload="metadata" autoplay loop></video>
<span class="sub-label">flow · memfof</span>
</div>
</div>
<div class="signal-panel" id="signal-panel">
<div class="panel-label-light">signals (per-frame)</div>
<div class="signal-row">
<div class="signal-label">contact_l</div>
<svg id="sig-contact-l" preserveAspectRatio="none" viewBox="0 0 200 18"></svg>
<div class="signal-value" id="sig-val-contact-l">-</div>
</div>
<div class="signal-row">
<div class="signal-label">contact_r</div>
<svg id="sig-contact-r" preserveAspectRatio="none" viewBox="0 0 200 18"></svg>
<div class="signal-value" id="sig-val-contact-r">-</div>
</div>
<div class="signal-row">
<div class="signal-label">grasp</div>
<svg id="sig-grasp" preserveAspectRatio="none" viewBox="0 0 200 18"></svg>
<div class="signal-value" id="sig-val-grasp">-</div>
</div>
<div class="signal-row">
<div class="signal-label">motion (px)</div>
<svg id="sig-motion" preserveAspectRatio="none" viewBox="0 0 200 18"></svg>
<div class="signal-value" id="sig-val-motion">-</div>
</div>
<div class="signal-row">
<div class="signal-label">trust (any)</div>
<svg id="sig-trust" preserveAspectRatio="none" viewBox="0 0 200 18"></svg>
<div class="signal-value" id="sig-val-trust">-</div>
</div>
</div>
<!-- Per-object state timeline (static / grasped-L/R/both / moving) -->
<div class="signal-panel" id="state-timeline-panel" style="margin-top: 12px;">
<div class="panel-label-light">object state · <span class="state-legend">
<span class="state-chip state-static"></span>static
<span class="state-chip state-grasped-l"></span>grasp&nbsp;L
<span class="state-chip state-grasped-r"></span>grasp&nbsp;R
<span class="state-chip state-grasped-both"></span>both
<span class="state-chip state-moving"></span>moving
</span></div>
<div id="state-timeline-rows"></div>
</div>
</div>
<div class="detail-meta">
<h3 id="d-title">-</h3>
<div class="detail-id mono" id="d-id">-</div>
<div class="detail-source-title" id="d-source-title"></div>
<dl class="detail-grid" id="d-grid">
<div><dt>duration</dt><dd id="d-dur">-</dd></div>
<div><dt>frames</dt><dd id="d-frames">-</dd></div>
<div><dt>fps</dt><dd id="d-fps">-</dd></div>
<div><dt>video uid</dt><dd id="d-uid">-</dd></div>
<div><dt>start</dt><dd id="d-start">-</dd></div>
<div><dt>end</dt><dd id="d-end">-</dd></div>
</dl>
<div class="detail-desc-label">description</div>
<p class="detail-desc" style="padding-top: 0; border-top: none;" id="d-desc">-</p>
<div class="detail-desc-label" id="d-summary-label" style="margin-top: 14px; display: none;">full summary</div>
<p class="detail-desc" style="padding-top: 0; border-top: none; display: none;" id="d-summary"></p>
<div class="detail-desc-label" style="margin-top: 14px;">objects in scene</div>
<div class="object-list" id="d-objects"></div>
<div class="detail-desc-label" style="margin-top: 18px;">tracking summary</div>
<div id="d-tracking" class="mono" style="font-size:12px; color:var(--ink-2)"></div>
</div>
</div>
</section>
<!-- BROWSE (combined showcase + explorer) -->
<section class="section" id="browse">
<div class="section-head">
<div>
<div class="section-num">004 / Browse</div>
<h2 class="section-title">Episode-level dataset preview.</h2>
</div>
<p class="section-note">Search, filter, and sort all favorites. Switch between thumbnail and table view. <strong>Click any clip to load it into the inspect and viser panels above.</strong></p>
</div>
<div class="stats">
<div class="stat">
<div class="stat-value" id="stat-eps">-<sub>ep</sub></div>
<div class="stat-label">Filtered episodes</div>
</div>
<div class="stat">
<div class="stat-value" id="stat-dur">-<sub>s</sub></div>
<div class="stat-label">Filtered duration</div>
</div>
<div class="stat">
<div class="stat-value" id="stat-objs">-<sub>obj</sub></div>
<div class="stat-label">SAM3D objects</div>
</div>
<div class="stat">
<div class="stat-value" id="stat-grasp">-<sub>%</sub></div>
<div class="stat-label">With grasp</div>
</div>
</div>
<div class="browse-toolbar">
<div class="browse-search">
<input id="f-search" type="text" placeholder="search action, actor, object, source…" />
</div>
<div class="browse-toolbar-right">
<select id="f-sort" class="browse-select" title="sort">
<option value="default:asc">default (shuffled)</option>
<option value="favorited_at:desc">favorited ↓</option>
<option value="favorited_at:asc">favorited ↑</option>
<option value="duration_sec:desc">duration ↓</option>
<option value="duration_sec:asc">duration ↑</option>
<option value="n_frames:desc">frames ↓</option>
<option value="n_objects:desc">objects ↓</option>
<option value="mean_trust:desc">hand quality ↓ (trust)</option>
<option value="mean_iou:desc">mask iou ↓</option>
<option value="action_brief:asc">action A→Z</option>
</select>
<div class="view-toggle" role="tablist" aria-label="view mode">
<button id="view-grid" class="vt-btn" aria-pressed="true" title="grid view"><span class="vt-icon"></span><span class="vt-label">grid</span></button>
<button id="view-list" class="vt-btn" aria-pressed="false" title="list view"><span class="vt-icon"></span><span class="vt-label">list</span></button>
</div>
</div>
</div>
<div class="browse-filters">
<select id="f-source" class="browse-select" title="source video">
<option value="">All sources</option>
</select>
<label class="chip-toggle"><input type="checkbox" id="f-has-grasp"><span>has grasp</span></label>
<label class="chip-toggle"><input type="checkbox" id="f-has-tracking"><span>has tracking</span></label>
<label class="chip-toggle"><input type="checkbox" id="f-multi-obj"><span>multi-object</span></label>
<span class="browse-count" id="visible-count">-</span>
</div>
<div class="browse-content" id="browse-content" data-view="grid">
<div class="showcase" id="showcase">
<div class="loading" style="grid-column:1/-1; padding:40px; text-align:center">loading clips…</div>
</div>
<div class="table-wrap" id="browse-table-wrap">
<table class="episodes" id="episodes-table">
<thead>
<tr>
<th style="width: 28%">Clip</th>
<th>Actor</th>
<th>Source</th>
<th>Objects</th>
<th style="text-align: right;">Frames</th>
<th style="text-align: right;">Duration</th>
<th>Grasp</th>
</tr>
</thead>
<tbody id="episodes-body"></tbody>
</table>
</div>
</div>
<div class="pagination" id="pagination">
<button class="pg-btn" id="pg-prev" title="previous page">‹ prev</button>
<div class="pg-pages" id="pg-pages"></div>
<button class="pg-btn" id="pg-next" title="next page">next ›</button>
<span class="pg-info" id="pg-info">-</span>
</div>
</section>
<!-- STATISTICS -->
<section class="section" id="stats">
<div class="section-head">
<div>
<div class="section-num">005 / Statistics</div>
<h2 class="section-title">Inside the preview corpus.</h2>
</div>
<p class="section-note">Statistics from <a href="https://arxiv.org/abs/2601.10592" target="_blank" rel="noopener" class="mono" style="color:var(--ink)">Action100M</a> annotations.</p>
</div>
<!-- Row 1: word cloud, full width -->
<figure class="stats-card stats-card-wide">
<img src="stats/word_cloud.png" alt="Word cloud of Action100M task titles and action labels"
loading="lazy" decoding="async">
<figcaption>
<span class="stats-tag">01 · word cloud</span>
<h3>Action &amp; task vocabulary at corpus scale.</h3>
</figcaption>
</figure>
<!-- Row 2: sunburst pies, full width -->
<figure class="stats-card stats-card-wide">
<img src="stats/sunburst_categories.png" alt="Sunburst breakdowns of the four most-common verbs (add / stir / demonstrate / place) with their inner-ring objects and outer-ring qualifiers"
loading="lazy" decoding="async">
<figcaption>
<span class="stats-tag">02 · category sunbursts</span>
<h3>Top-verb co-occurrence rings.</h3>
</figcaption>
</figure>
<!-- Row 3: n-grams (33%) + description / source (67%) -->
<div class="stats-row-split">
<figure class="stats-card stats-card-split">
<img src="stats/ngrams.png" alt="Three-column frequency chart: unigrams, bigrams, and trigrams in the Action100M annotation text"
loading="lazy" decoding="async">
<figcaption>
<span class="stats-tag">03 · n-grams</span>
<h3>Unigram / bigram / trigram frequency.</h3>
</figcaption>
</figure>
<div class="stats-side-note">
<span class="stats-tag">Source</span>
<h3>Action100M annotations.</h3>
<p>The vocabulary, sunburst rings, and n-gram frequencies above are from <a href="https://arxiv.org/abs/2601.10592" target="_blank" rel="noopener">Action100M</a>'s human-written action labels and detailed descriptions. Each EgoInfinity clip carries its source <span class="mono">action_brief</span> + <span class="mono">action_detailed</span> + <span class="mono">summary</span> verbatim in <span class="mono">scene.json.action100m_metadata</span>.</p>
<p class="stats-citation-lead">Please cite Action100M alongside EgoInfinity if you use these statistics:</p>
<pre class="stats-bibtex">@article{chen2026action100m,
title = {Action100M: A Large-scale Video Action Dataset},
author = {Chen, Delong and Kasarla, Tejaswi and Bang, Yejin
and Shukor, Mustafa and Chung, Willy and Yu, Jade
and Bolourchi, Allen and Moutakanni, Th&eacute;o
and Fung, Pascale},
journal = {arXiv preprint arXiv:2601.10592},
year = {2026}
}</pre>
</div>
</div>
</section>
<!-- ROADMAP -->
<section class="section" id="roadmap">
<div class="section-head">
<div>
<div class="section-num">006 / Roadmap</div>
<h2 class="section-title">What we're working on <span style="color:var(--accent-ink)">next</span>.</h2>
</div>
<p class="section-note">Public-facing milestones for the EgoInfinity dataset and pipeline. Status: <span class="mono">shipped</span> · <span class="mono">active</span> · <span class="mono">queued</span>.</p>
</div>
<ol class="roadmap-list">
<li class="roadmap-item" data-status="shipped">
<span class="roadmap-dot"></span>
<div class="roadmap-quarter">Shipped</div>
<div class="roadmap-body">
<h3>Preview release v1.0 <span class="roadmap-status">· shipped</span></h3>
<ul class="roadmap-sublist">
<li><strong>106-clip demo:</strong> public HF Dataset of 106 curated Action100M clips with full 4D HOI scenes; browsable via the viewer Space you're on.</li>
<li><strong>Embodiment retargeting:</strong> each clip ships with Shadow / dexterous-hand retargets so downstream policies can train on any-embodiment trajectories.</li>
<li><strong>Open-source pipeline code:</strong> full pipeline on GitHub; modular stages (filter / depth / hands / flow / segmentation / 3D mesh / tracking) swappable stage-by-stage.</li>
</ul>
<ul class="roadmap-artifacts">
<li>HF dataset</li><li>viewer space</li><li>shadow retarget</li><li>pipeline code</li>
</ul>
</div>
</li>
<li class="roadmap-item" data-status="active">
<span class="roadmap-dot"></span>
<div class="roadmap-quarter">Now</div>
<div class="roadmap-body">
<h3>Action100M-scale processing <span class="roadmap-status">· active</span></h3>
<p>Run the pipeline across the full Action100M corpus, growing the curated subset from 106 clips toward the 100M-clip headline number.</p>
<ul class="roadmap-artifacts">
<li>batch scale-up</li><li>v0.2 release</li>
</ul>
</div>
</li>
<li class="roadmap-item" data-status="queued">
<span class="roadmap-dot"></span>
<div class="roadmap-quarter">Future</div>
<div class="roadmap-body">
<h3>Beyond v1.0 <span class="roadmap-status">· queued</span></h3>
<ul class="roadmap-sublist">
<li><strong>Dynamic-camera support:</strong> adopt <span class="mono">Depth Anything V3</span> for depth and switch to a <span class="mono">V-SLAM</span> based scene reconstruction, unlocking all clips with moving cameras, including egocentric capture.</li>
<li><strong>Component refinement:</strong> iterate on individual modules (filter, curation, contact / grasp signals, hand smoothing) to lift quality and recall across the whole corpus.</li>
</ul>
<ul class="roadmap-artifacts">
<li>depth-anything v3</li><li>v-slam</li><li>ego-centric</li><li>filter</li><li>curation</li>
</ul>
</div>
</li>
</ol>
</section>
<!-- WAITLIST -->
<section class="section" id="waitlist">
<div class="section-head">
<div>
<div class="section-num">007 / Waitlist</div>
<h2 class="section-title">Get the next dataset drop <span style="color:var(--accent-ink)">before the public mirror</span>.</h2>
</div>
<p class="section-note">We'll email you when there's an update. Unsubscribe anytime.</p>
</div>
<div class="waitlist-grid">
<ul class="waitlist-bullets">
<li>New EgoInfinity releases delivered directly to your inbox.</li>
</ul>
<div class="waitlist-card">
<div class="waitlist-card-head">
<h3>Request early access</h3>
<p>We usually respond within a few business days.</p>
</div>
<a class="btn waitlist-cta" href="https://tally.so/r/jaJPvR" target="_blank" rel="noopener">
Open the waitlist form <span class="mono"></span>
</a>
</div>
</div>
</section>
<!-- TEAM -->
<section class="section" id="team">
<div class="section-head">
<div>
<div class="section-num">008 / Team</div>
<h2 class="section-title">Authors.</h2>
</div>
<p class="section-note">Built by the <span class="mono" style="color:var(--ink)">Rice RobotPI Lab</span> together with collaborators at the Robotics and AI Institute.</p>
</div>
<div class="team-grid">
<div class="team-author">
<div class="team-name">Gaotian Wang</div>
<div class="team-affil mono">Rice University</div>
</div>
<div class="team-author">
<div class="team-name">Kejia Ren</div>
<div class="team-affil mono">Rice University</div>
</div>
<div class="team-author">
<div class="team-name">Howard Qian</div>
<div class="team-affil mono">Rice University</div>
</div>
<div class="team-author">
<div class="team-name">Andrew S. Morgan</div>
<div class="team-affil mono">Robotics and AI Institute</div>
</div>
<div class="team-author">
<div class="team-name">Yiting Chen</div>
<div class="team-affil mono">Rice University</div>
</div>
<div class="team-author">
<div class="team-name">Podshara Chanrungmaneekul</div>
<div class="team-affil mono">Rice University</div>
</div>
<div class="team-author">
<div class="team-name">Kaiyu Hang</div>
<div class="team-affil mono">Rice University</div>
</div>
</div>
</section>
<section class="release-info">
<div class="release-info-grid">
<dl class="hero-meta" id="hero-meta">
<dt>release</dt><dd>v0.1 · favorites</dd>
<dt>license</dt><dd>CC BY-SA 4.0</dd>
<dt>source</dt><dd>action100m · curated</dd>
<dt>episodes</dt><dd id="hm-eps">-</dd>
<dt>frames</dt><dd id="hm-frames">-</dd>
<dt>duration</dt><dd id="hm-dur">-</dd>
<dt>retargeting</dt><dd style="color:var(--accent-ink)">planned</dd>
</dl>
<div>
<div class="eyebrow" style="margin-bottom: 10px;">pipeline stages</div>
<div class="hero-partners">
<span class="partner">moge2_depth</span>
<span class="partner">geocalib</span>
<span class="partner">wilor_hand</span>
<span class="partner">memfof_flow</span>
<span class="partner">sam3_track</span>
<span class="partner">sam3d_mesh</span>
</div>
</div>
</div>
</section>
<footer>
<span>EGOINFINITY · dataset viewer · 2026</span>
<span id="footer-counts">-</span>
</footer>
<script type="module" src="js/timeseries.js"></script>
<script type="module" src="js/app.js"></script>
</body>
</html>