Spaces:
Running
Running
| <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 & 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 L | |
| <span class="state-chip state-grasped-r"></span>grasp 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 & 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é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> | |