Sinew — Knowledge Base
"Deepgram for touch" — recovering contact force from ordinary manipulation video.
Consolidated from internal memory, docs, decks & internal reports · no new claims invented · figures reused from existing decks/reports.
1 Idea & high-level description
Sinew is a software-only force-data layer for physical AI — a foundation model that recovers contact force (contact on/off · contact direction · force magnitude) from ordinary RGB manipulation video, served as a per-frame API. Tagline: "Deepgram for touch" — decode a missing signal from an existing stream, billed per unit.
The problem. Robot manipulation keeps getting more capable but is data-bound, and almost all existing robot data (Open X-Embodiment, DROID, BridgeData) is vision + actions only — force is never recorded and can't be added back later. Vision tells you where; force tells you what happens at the instant of contact, exactly when cameras occlude.
The insight (the missing modality). Force/contact is the modality vision-only data can never supply, yet it is required for contact-rich tasks (assembly, insertion, dexterous grasping). Sinew recovers it from pixels companies already have — no sensor, no special gripper, no re-collection. "Companies bring the video. We add the force."
The end goal — dexterous manipulation. Where contact matters most is dexterous, multi-finger manipulation: the fingertips do the work, contact is the whole task, and the camera can't see the points that matter. Sinew's ultimate aim is to restore per-finger contact force on dexterous-manipulation video — turning the world's vision-only dexterous footage (teleop, egocentric human hands) into contact-rich training data. The insertion/assembly results below are the feasibility proof on the way there.
The corpus. Built on the largest paired video+force corpus we know of (~6.4M frames · 16,772 recordings · 178 h) — every customer's video grows it (the data flywheel).
Status one-liner: feasibility validated — contact accuracy ≈ 87%, generalizes across camera / lab / robot.

Read more: 3-minute pitch · D2SF technical report · consolidated "start here" deck · business deck
2 Technical progress
The video→force (v2f) program: predict contact force from RGB video. Below — the datasets, the metrics, and the supervised & self-supervised approaches we tried, with what helped and what did not. A consolidated honest summary closes the section.
2.1 Approaches, results & generalization
Predict contact force from RGB video: a frozen video encoder (1024-d/cam) → trainable dilated-TCN 3-head, later with encoder unfreeze.
2.1.1 Datasets
| Dataset / cfg | Robot | Task | Cameras | Force frame / quat / τ | Quality | #eps | Role |
|---|---|---|---|---|---|---|---|
FMB (+fmb_multi) | Franka Panda | peg-in-hole (6 shapes) | 4@256px (2 side+2 wrist); side_1+wrist_1 used | base→EE, quat wxyz; τ=10 N | POOR — libfranka observer, σ≈2 N | ~1,844 | TRAIN (contact+dir) |
| REASSEMBLE | Franka FR3 | connector insert/remove (NIST, 17 obj) | hand+hama1/hama2(+event); 2- & 4-cam cached | base→EE, ×[1,−1,−1], quat wxyz; τ=2 N | CLEANEST — AIDIN 6-axis, grav+payload comp, rest≈0.4 N | 2,262 | TRAIN (strongest: real dir) |
| RH20T cfg1 flexiv | flexiv | diverse manip | 8–11/cfg @256px | base(ATI)→EE, ×(−1), xyzw→wxyz; τ≈1.5 N | MEDIOCRE — unfiltered, low-force | (of 12,676) | TRAIN contact only |
| RH20T cfg3/4 ur5 | ur5 | diverse manip | as above | base(ATI)→EE, ×(−1); τ=1.8 N | MEDIOCRE — <1 N, dir dead | ↑ | TRAIN contact only |
| RH20T cfg6/7 kuka | kuka | diverse manip (cfg7≈dup) | as above | base(ATI)→EE, ×(−1); τ=3.0 N | best RH20T (in-dist dir ~0.76) | ↑ | TRAIN contact (dir excluded) |
| RH20T cfg5 franka | Franka Panda | diverse manip | as above | robot_ft[:3] base; dir INVALID; τ=5.5 N | contact+mag valid (r=0.985 vs ATI) | ↑ | TRAIN contact+mag only |
| crisp_ws peg | Franka (crisp) | peg insert | front+wrist | server netft TCP/EE (clean); wxyz; τ≈1.15 N | CLEAN (server bias-removed+rotated) | 91 | OOD-EVAL |
| crisp_ws ethernet | Franka (crisp) | ethernet | front+wrist | as crisp; τ≈1.76 N | CLEAN | 93 | OOD-EVAL |
| crisp_ws box_flip | Franka (crisp) | flip box (lateral) | wrist only | as crisp; τ≈2.09 N | CLEAN; per-frame 6-D only | 102 | OOD-EVAL (hard cross-task dir) |
Canonical force frame = EE (end-effector / tool): direction labels are F_EE = R(ee_quat)ᵀ·F_world. world/base yaw is per-lab arbitrary → base-frame direction does NOT transfer cross-lab; EE is mount-relative & lab-invariant → THE lever for cross-lab/OOD direction. Contact gate + magnitude are frame-invariant (use ‖F‖); frame/quat/sign poison direction only — the #1 silent bug. Per-config sign fixes: REASS ×[1,−1,−1]; RH20T ×(−1) global (confirmed sinew-335); FMB treated as base then →EE; cfg5 franka dir unusable. Full ground-truth table: docs/datasets_index.md → ⚓ FORCE FRAME section.
Sample frames per dataset







2.1.2 Predicted metrics & evaluation
One video clip in, three predictions out — a tiered "pyramid of touch", each with its own honest metric.
cos-lift = cos − costrivial
Contact-masked evaluation: direction (and magnitude) are scored only on contact frames (GT mag > 1 N) — direction is gated on contact, with no direction loss in free space.
Contact τ per dataset (never reuse): FMB 10 · REASS 2 · RH20T flexiv 1.5 / ur5 1.8 / kuka 3.0 / franka 5.5 · crisp peg 1.15 / eth 1.76 / box 2.09.
Trivial baselines (crisp OOD target): contact all-positive floor peg 0.76 / eth 0.68; direction trivial-R (best-constant mean-dir) peg 0.81–0.83 / eth 0.88.
Why cos-LIFT, not raw cos: a constant [0,0,+1] predictor already scores cos≈0.89 on FMB; FMB best 0.965 = true lift only +0.015 (≈trivial), whereas REASSEMBLE 0.906 = lift +0.34 (real per-frame direction). Always report the lift.
2.1.3 Supervised (SL) approaches
2.1.3.1 — What we tried
- Frozen video features + TCN 3-head — the baseline; caps contact F1 ≈ 0.78.
- Encoder unfreeze / E2E (LP-FT) — unfreeze last-8 V-JEPA blocks, probe-then-finetune, LLRD 0.7, EMA 0.999, bf16 (fp16 silently flat-lines loss). THE in-dist lever: 0.78 → 0.92–0.97.
- Encoder ablation — DINOv2-B 0.52 < ViT-B 0.64 < ViT-L 0.76 ≈ ViT-g(1B) 0.764; video ≫ image; size saturates past ViT-B.
- Head ablation — TCN 0.768 > BiGRU 0.723 > Transformer 0.689 (receptive field is the head lever).
- Multi-task 3-head — contact+dir+mag (0.779) beats mag+dir (0.768) / contact-only (0.68); raw 3D-force regression collapses (0.51).
- Contact-gate rebalance ("c9": neg-keep 0.5, gate-pos-weight 5, w-contact 30) for sparse-positive OOD; in-dist uses neg-keep 1.0 instead.
- Frame-unification (EE frame) — decisive cross-lab direction enabler (a supervised lever, not SSL): REASS flip (x,−y,−z), FMB stays base, RH20T sign-inverted.
- Force-richness curation — label-free pre-train screen: contact = SNR (peak/free-baseline); direction = dchg (temporal dir change), dchg<0.2 = coherent.
- Per-source τ + force-norm, robot-AGNOSTIC (robot-ID was harmful).
- Two-head split — contact from UNFROZEN encoder, direction from FROZEN encoder (frozen ≫ unfrozen for OOD direction).
2.1.3.2 — Results (in-distribution)
Frozen V-JEPA-L ceilings (in-dist):
| Dataset | Contact F1 | Dir cos (lift) | MAE (N) |
|---|---|---|---|
| FMB | 0.779 | 0.965 (+0.015, ≈trivial) | 1.06 |
| REASSEMBLE | 0.874 | 0.906 (+0.34, REAL) | 0.74 |
| RH20T | 0.71 | (+0.39 in-dist) | 0.27 |
Encoder-unfreeze (E2E) ceilings (in-dist):
| Group (sensor) | Contact F1 | Dir cos (lift) | Verdict |
|---|---|---|---|
| REASSEMBLE (dedicated F/T) | 0.92 | 0.93 (+0.37) | PASS both — flagship |
| RH20T kuka (ext ATI) | 0.92 | 0.80 (+0.21) | contact PASS; dir soft ceiling |
| FMB (observer σ~2N) | 0.69–0.72 | 0.91 (+0.20) | contact data-bound; dir PASS |
| RH20T flexiv | 0.47 → 0.785 (rich-curated) | 0.38 (−0.13) | dilution-bound; curation recovers |
| RH20T ur5 | 0.64 | 0.24 (−0.23) | <1N force, dir noise |
| RH20T franka (robot_ft) | 0.57 | N/A | contact+mag only |
Headline: frozen ceiling ~0.78 → E2E unfreeze 0.92 on clean force; dedicated in-dist contact reached ~0.97. The win: force-richness curation lifts flexiv 0.47→0.785 (+0.31) ⇒ dilution, not encoder capacity, was dominant; residual ~0.78 ceiling on observer-class force is a sensor wall. Caveat: contact-F1 is NOT cross-dataset comparable (base rates differ); MAE is per-source scale.
Contact-prediction overlays (in-dist)
Side video + on-frame contact-probability bar (0.5 threshold); red border = GT contact; live GT/pred |F|.
Best validation episodes (in-dist) — 3-panel: contact · magnitude · direction






2.1.3.3 — Generalization (OOD)
Zero-shot to crisp_ws (held-out lab). Trivial contact F1 peg 0.76 / eth 0.68; in-domain ceiling ≈ 0.90.
| Metric | OOD crisp (best) | trivial | verdict |
|---|---|---|---|
| Contact F1 | peg 0.82 / eth 0.86 | 0.76 / 0.68 | ✅ clears trivial, ≈in-domain — REAL win |
| Direction cos | peg 0.76 / eth 0.74 | trivial-R 0.81 / 0.88 | ⚠ cos-lift −0.05 / −0.14 — reaches but does NOT beat the −Z prior |
| Magnitude MAE | ~3.5 / 4.1 N | — | improves with FT |
Few-shot target adaptation breaks the OOD ceiling: 0 eps F1 0.42 → 15 eps 0.53 → 30 eps 0.79 (dir 0.74) → 60 eps 0.90 (peg 0.91/dir 0.88, eth 0.89/dir 0.84).
Walls (honest): cross-lab direction beyond the prior is unsolved (prior-bound; insertion is +Z-degenerate even in-domain, lift +0.01–0.02); cross-lab direction = camera-viewpoint extrapolation (lever is viewpoint coverage, not encoder); RH20T hurts the direction corpus (raw −0.72 sign-inverted; sign-fixed +0.2 off-target) → keep RH20T for contact only.
Contact-prediction overlays (OOD — crisp held-out lab)
Best validation episodes (OOD crisp) — 3-panel: contact · magnitude · direction






Detailed reports: supervised ceilings + force-richness · encoder-unfreeze + few-shot · OOD via target fine-tune · feasibility
Implementation: stream_v2f_data.py · train_vjepa2_stream.py · train_vjepa2_e2e.py · eval_crisp_cached.py
2.1.4 Self-supervised (SSL) approaches
2.1.4.1 — What we tried
- Cross-modal video↔force JEPA — predict masked force latent from frozen-video context (EMA target, latent L1, VICReg anti-collapse).
- Force-JEPA (force-only SSL, "ForceTok") — masked-latent SSL on 125 Hz force alone → robot-agnostic force embedding.
- DINO-JEA alignment — trainable video tower distilled to a frozen, scene-blind Force-JEPA teacher (no-negative self-distill).
- cosine / CORAL / InfoNCE alignment — close modality gap on raw V-JEPA (InfoNCE floors at ln(batch): force autocorrelation false-negatives).
- x-modal force AUGMENT — concat[ raw frozen V-JEPA ‖ g(video) ] → same TCN head; augment-NOT-replace, so SSL can only add.
- Sinkhorn-OT binding to a frozen teacher — force student bound to the frozen video encoder via entropic-OT contrastive + MoCo queue + contact-weight.
- VICReg / covariance collapse fix (decorrelation off-diagonal = master fix); DARE-GRAM/RSD for force regression DA (classification-DA DANN/CORAL HURTS regression).




2.1.4.2 — Results
Where SSL WON (severe-gap regime):
| Win | metric | SSL vs baseline |
|---|---|---|
| AUGMENT, OOD held-out camera (REASS) | contact F1 | 0.28 → 0.70 |
| AUGMENT, OOD held-out camera | direction | 0.41 → 0.78 |
| AUGMENT, cross-dataset dir (UDA) | REASS→FMB | 0.41 → 0.87 |
| AUGMENT, cross-dataset dir (UDA) | FMB→REASS | 0.40 → 0.83 |
| Force-only SSL, cross-robot | contact AUC | 0.94 vs raw 0.80 |
| Sinkhorn-OT binding, contact swap | swap acc | 0.831 ≈ teacher ceiling 0.847 |
Caveat: camera/cross-dataset wins are UDA, not strict zero-shot — needs unlabeled target video (strict zero-shot is worse than baseline).
Where SSL was NEUTRAL / NEGATIVE:
| Result | numbers |
|---|---|
| Force-JEPA (cross-modal) vs supervised | best = supervised TCN 0.568; JEPA-aux 0.553 (neutral) |
| Joint REASS+FMB (both present) | SSL ties baseline (REASS F1 .876, FMB dir .955) |
| Multi-robot + SSL, OOD crisp contact | SSL matches supervised ~0.845 vs 0.848 — does NOT beat |
| Frozen SSL embed, downstream | SSL ≤ raw features for v2f and BC; task-swap ≈ chance |
| Overall SSL audit | 4 SSL classes exhausted on frozen features; only ceiling-breaker = supervised E2E unfreeze |
2.1.4.3 — Generalization (the unified law)
The unified law: SSL/JEA helps only when the gap is severe enough that raw frozen V-JEPA fails to transfer (unfamiliar camera / unlabeled new dataset / cross-robot). Otherwise neutral.
- RH20T cross-robot: raw ≈ chance (0.13) → aligned wins even with less capacity.
- FMB-multipeg + REASS cross-object: raw already transfers → raw+TCN beats aligned+TCN (linear-probe "wins" reverse under capacity-matched readout — an artifact).
- When both datasets are present → just train jointly (reaches native ceilings).
- In-dist cost: REPLACE is lossy in-domain (collapse); concat-AUGMENT is zero-cost → clean OOD win.
- Geometry ≠ transfer: minimizing modality gap (CKA 0.07→0.51) didn't fix swap; the best-swap arm has the largest gap.
- Binding ceiling (confirmed 5×): no frozen-feature SSL trick beats frozen-video information; only lever = supervised E2E unfreeze.
2.1.4.4 — Embedding visualization
- Raw V-JEPA = pure camera encoder: camera kmeans-NMI 1.00, task 0.00, eff-rank 396 → clusters by viewpoint → negative transfer.
- Force-JEPA (winner) = view-invariant WITHOUT collapse: camera NMI 1.00→0.009, cross-view 0.962, eff-rank 61, task purity 0.71, orthogonal to raw (CKA 0.014).
- DINO-JEA (multi-view) = COLLAPSED: eff-rank 33, per-dim std 0.0004; cross-view 1.0 is the "collapse-lie" (still leaks camera NMI 0.79).
- Collapse fix: RankMe 9.8 → 138.9; dataset silhouette 0.66 → 0.06. Intermix: MMD 1.25 → 0.21.
- The wall: local dataset-kNN floors ~0.93 (target 0.41) on frozen feats — high-rank embed must retain dataset-specific appearance until encoder unfreeze.
- Metric canon: RankMe/eff-rank + uniformity (collapse guards), cross-view cosine, silhouette/NMI/kNN-purity, CKA; align-uniformity plane = headline; UMAP not t-SNE.









2.1.4.5 — Force embeddings pretraining
- Force-JEPA / "ForceTok": masked-latent SSL on 100–125 Hz force (corpus
rh20t_hifreq), trains clean (no collapse). Teacherfssl_v1/best.ptreused as the force tower in alignment. - Force as a view/domain-invariant physical anchor (ImageBind-style): scene-blind → forces the aligned video tower to drop appearance, killing the camera shortcut.
- Cross-robot WIN + limits: raw force carries robot SCALE (~4× span) → fails cross-robot; SSL embedding is robot-agnostic → contact AUC 0.94 vs 0.80, weak-robot direction ~2× (ur5 0.10→0.21). Frozen-bound, no in-dist edge, no edge on non-circular task classification (≈ chance).
- Force embeddings are non-trivial: per-dim R² mean .45, 0% dims > .9, 52% residual variance beyond 181 hand-crafted features.
Detailed reports: latent health · SSL embeddings · modality gap · do embeddings earn their keep? · frozen-teacher binding
Implementation: train_vjepa2_ssl.py · train_jf_bind.py · ssl_props.py
2.1.5 Summary — what helped, what didn't
What helped (the real levers)
- Encoder unfreeze (end-to-end fine-tune) — broke the long-standing frozen-feature contact ceiling 0.78 → ~0.97 in-dist (clean before/after on the same model; direction 0.71→0.96). The single biggest win.
- Frame-unification (EE frame + per-dataset sign) — the decisive cross-lab direction lever; a clean, replicated, falsifiable fix (sign conventions pinned three times with mirror-image evidence).
- Few-shot target adaptation (~30–60 target episodes) — reliably breaks the OOD ceiling (contact 0.42→0.90), scaling monotonically with target data.
- Latent-collapse fix (missing VICReg covariance term) — clean A/B; effective rank 9.8→130.
- Force-richness data curation (SNR→contact, dchg→direction) — rescued dilution-bound datasets (flexiv 0.47→0.785).
- Cross-modal SSL AUGMENT under a severe gap — held-out camera contact 0.28→0.70, cross-dataset direction 0.41→0.87 — but only with unlabeled target video (domain adaptation, not zero-shot).
What did NOT help (walls)
- SSL as a general value-add — NEUTRAL vs supervised across ~4 SSL families; pays off only in the severe-gap adaptation regime, and strict zero-shot SSL is worse than baseline.
- Bigger encoders / fancier temporal heads — a tie (ViT-L ≈ ViT-g; mean ≈ attentive pooling).
- Zero-shot cross-lab direction — prior-bound; never beats the trivial best-constant on insertion (the −Z approach prior dominates).
- Off-domain multi-robot data in the direction corpus — off-distribution and sign-inverted; it hurts direction (kept for contact only).
- Sensor-bound datasets (observer-noise or sub-1 N force) — data-quality walls no recipe crosses.
- Magnitude — sits ~0.5 N short of the true in-domain ceiling.
Honest scorecard
| Area | Status | Honest reading |
|---|---|---|
| In-dist contact (encoder unfreeze) | SOLID | strongest result; clean before/after 0.26→0.935 (single-run, no per-source breakdown) |
| OOD contact transfer | PARTIAL | real & above trivial (0.82–0.86) but mostly frame-unify + frozen feats + few-shot; base-rate-confounded |
| OOD direction (cos-lift) | OPEN | best on record still below the trivial best-constant on insertion; a genuine win only with target fine-tune |
| Magnitude (MAE) | PARTIAL | at the vision/few-shot floor; not comparable across sources |
| SSL value | MOSTLY NEUTRAL | only AUGMENT under a severe gap, and it needs unlabeled target video |
| Force-richness metric | PARTIAL | promising screen, but in-sample fit on ~6 dataset cells |
| Frame-unification | SOLID | cleanest cross-cutting finding; replicated, falsifiable |
| Cross-lab direction wall | OPEN | the blocker is camera viewpoint (extrapolation), not coordinate frame |
Genuinely solved vs still open
- Solved: in-distribution contact (encoder unfreeze) · latent collapse · the force-frame ground truth · the transfer-gap diagnosis (in-domain hits ~0.90 on every cell → OOD collapse is a transfer problem, not a feature-information ceiling) · SSL-is-neutral, stated with pre-registered kill-rules · few-shot adaptation as a reliable lever.
- Open / shaky: a single shippable zero-shot cross-lab model (contact & direction champions are different encoders and corpora — never trained as one) · zero-shot direction · magnitude at the true ceiling · statistical reliability (single-seed throughout) · off-domain multi-robot contribution · numeric provenance.
Methodological lessons (carried forward)
- Report cos-lift over the trivial best-constant, never raw cosine — half the "direction wins" evaporate against it.
- Contact-masked, base-rate-aware evaluation; read gate-AUC (not F1) cross-lab; always show the trivial floor.
- Equal-capacity, same-data, same-recipe comparisons; provide a random-feature / equal-capacity floor.
- Force scales span an order of magnitude → never rank raw MAE across sources.
- A frozen-probe result is not a trained-model result.
- Single-seed ⇒ humility: deltas <~0.02 are not interpretable; best-epoch selection on the OOD target is selection-on-test.
Detailed internal assessment (full, for the record)
# Technical Progress — Summary & Critique (video→force, "v2f")
Internal honest assessment. Not marketing. Numbers are exact; where a claim is single-seed, best-epoch, or otherwise fragile, it is flagged. "Lift" = margin over a trivial baseline (best-constant direction, or all-positive contact), which is the only honest framing for our metrics.
(1) TL;DR — where v2f stands
We have a real, working in-distribution video→force model: encoder-unfreeze (E2E fine-tune of V-JEPA2 ViT-L, last-8 blocks, LP-FT) broke the long-standing frozen-feature contact ceiling from ~0.78 to ~0.97 in-dist (clean before/after on the same model: contact-F1 0.26→0.935 run1, dir cos 0.71→0.96), which validated the "encoder-unfreeze is the next lever" theme that recurred unbroken through Stages 1–5. Cross-lab transfer is the unsolved core: pure zero-shot contact plateaus at ~0.47 (below the trivial all-positive 0.76) and is only rescued to ~0.82–0.86 by a combination of frame-unification + frozen feats (encoder-unfreeze adds only ~+0.05) and/or few-shot target adaptation (~30–60 crisp episodes); zero-shot direction never beats the trivial best-constant on the two insertion tasks (peg/eth) — frozen-encoder + dchg-curation reaches cos-lift +0.76/+0.74 but that is still below best-const 0.82/0.90, is a still-rising cherry-picked epoch, and comes from a different (RH20T-dropped) corpus than the contact champion. SSL is exhausted as a value-add: across ~four SSL classes and multiple stages it is NEUTRAL (ties supervised) except in severe-gap UDA regimes, and even there it needs unlabeled target video (not zero-shot). The honest one-liner: in-dist is solved, contact transfer is mostly solved via frame-unify + few-shot, direction transfer and a single shippable cross-lab model remain open, and almost every headline number is single-seed.
(2) Stage-by-stage arc
- Stage-1 — feasibility / frozen SL ceilings. Asked: establish per-dataset frozen V-JEPA-L→TCN ceilings and whether any model-side lever moves them; later, close the crisp_ws OOD gap. Result: contact-F1 FMB 0.779 / REASSEMBLE 0.874 / RH20T ~0.71; direction real only on REASSEMBLE (cos-lift +0.34), near-trivial on FMB (+0.015); encoder size/head/pooling all tie (mean-pool 0.873 ≈ attn 0.869); the sinew-250 in-domain control (front-cam 0.000→0.912) proved the OOD collapse is a transfer gap, not a feature ceiling. Caveat: single-seed throughout; memory says "E2E→0.9" but ablations say 0.90 was never reached; the "OOD=in-dist" Stage-1 epic win is few-shot (K=60 labels), not zero-shot.
- Stage-2 — latent health / intermix. Asked: heal the joint latent (collapse-free, datasets+modalities intermixed) on a frozen encoder without regressing downstream. Result: collapse solved (RankMe_v 9.79→130, root-caused to a missing VICReg covariance term — a clean A/B, the strongest claim in the program); global dataset silhouette 0.66→0.085. Caveat: the goal metric (local dataset kNN-5) only moved 1.0→0.886, missing both the 0.50 target and the 0.70 hard floor; "intermix WON" rests on the global metric the recipe optimizes by construction; log and memory disagree on every champion number (130/40.6/0.085/0.886 vs 138.9/49.4/0.062/0.93); no random-feature baseline.
- Stage-3 — OOD=in-dist via target FT. Asked: match the crisp in-domain ceiling on held-out crisp with video-only inference. Result: contact reached ceiling (K=60 fused: peg 0.900 / eth 0.939 / box 0.906, all ≥0.90); airtight A/B shows pretrained-OOD ≥ scratch-in-domain on every cell; box_flip direction -0.740→0.973 (a genuine per-frame win, with target FT). Caveat: magnitude never reached the true full-crisp ceiling (peg 2.94 vs 2.40 N); A/B margins are ~0.01 F1 / ~0.1–0.3 N on n=31–42, single-seed — the log itself calls comparable deltas "eval-noise"; peg/eth direction is +Z-degenerate so the "win" is a tie dressed as a pass; zero-shot direction explicitly prior-bound (ITER-10: nothing beats best-const).
- Stage-4 — SSL embeddings. Asked: one frozen-trunk SSL embedding scored on four intrinsic axes (multi-cam, FMB intermix, per-cam closeness, force meaningfulness). Result: global intermix win (fmb_mmd 1.254→0.206); force tower activated (contact-AUC 0.885→0.977); anti-collapse verified (rankme_v 11.7→115). Caveat: the local FMB-vs-rest kNN-5 stayed 1.0 across all 5 recipes (a real frozen wall, but a failure on that sub-target); vp_minus_ds never crossed zero (its actual target); xview_cos was near-saturated at baseline (0.986→0.998); the "+0.07 multi-cam" is a linear-probe proxy — the spec-defined gate-F1 metric moved only +0.026; scoring harness absent from disk; FMB 2-cam (spec prerequisite unmet); intended DARE-GRAM/RSD never run.
- Stage-5 / 5.5 / 5.6 — cross-modal video↔force alignment. Asked: close the latent geometry gap and make it transfer task semantics. Result: geometry gap decisively closed (CKA 0.07→0.51; exposed the Stage-4 0.998 "alignment" as a common-mode cosine collapse — paired_cos_centered 0.014); A1→A6 self-correction proved the SSL embed reproduces Stage-3 OOD under a fair recipe; A5b showed every SSL embed is a deterministic function of frozen V-JEPA. Caveat: geometry buys nothing downstream — swap-at-chance under the symmetric recipe; the headline Stage-5.6 "contact swap solved (0.831)" is unverifiable on disk (local doc stops at a 1-epoch smoke of 0.72); OOD dirCos peg 0.765 / eth 0.828 sit below their trivial best-const (0.82 / 0.88); single-seed; no prevalence baseline.
- Stage-6 — E2E encoder-unfreeze + few-shot. Asked: finally unfreeze the encoder (long-deferred). Result: the decisive in-dist win — contact-F1 0.26→0.935 (run1) / ~0.97 (run2/3), dir 0.71→0.96; few-shot crisp scales 15ep 0.53 → 30ep 0.79 → 60ep 0.90 (peg F1 0.91/dir 0.88, eth 0.89/0.84). Caveat: "0.97" has no per-task/per-source breakdown and is single-run; pure zero-shot caps at 0.47 (< trivial 0.76); few-shot only matches (not beats) the prior frozen-adapted 0.90 contact ceiling — the real new win is direction; direction recovery is raw-cos with no trivial baseline and is retroactively tainted by a later-found FMB frame double-rotation bug; box_flip excluded; no MAE/AUC reported; numbers live only in 8-day-old memory.
- Stage-7 / 7-redo — frame-unify + force-richness + direction. Asked: per-dataset SL ceilings + visual-only/cross-modal SSL until OOD crisp matches SL in-dist on contact+direction. Result: first zero-shot crisp contact clearing trivial (peg 0.826 / eth 0.870 vs trivial 0.76/0.68); frame-unification is the decisive direction lever (REASS flip [1,-1,-1]; FMB must stay base-frame — tool-frame flips all arms to ~-0.6; RH20T base-frame is antipodal, dir_rh20t -0.66/-0.72 ≈ mirror of champion +0.76/+0.74); SL E2E REASS F1 0.92/dir 0.93 passes both bars; force-richness metric (SNR→contact, dchg→direction) predicts learnability; SSL declared NEUTRAL (kill-rule 2/2). Caveat: the contact "win" is ~90% frame-unify + frozen feats (ep0 frozen probe already clears trivial at 0.815/0.760; unfreeze adds ~+0.05); direction +0.76/+0.74 is a still-rising cherry-picked ep17, from a different corpus, and still below best-const 0.82/0.90; the "two-head production split" (unfrozen-contact + frozen-direction) was never trained/evaluated as one model — the headline is a best-of-each-arm composite; epoch selected on the OOD eval itself.
- Stage-8 — RH20T supervised-vs-SSL. Asked: does multi-robot RH20T + SSL match/beat supervised on OOD crisp? Result: SSL matches supervised on OOD contact (0.845 vs 0.848, all arms within 0.01, all beat trivial) — user goal met (tie, not beat); RH20T did not lift contact but lifted frozen ep0-probe direction (0.71–0.73 vs control 0.63). Caveat: iter-1 used only 2 of 7 RH20T configs (~2275 of ~10000+ eps, flexiv absent); all verdicts rest on sub-0.01, single-seed, best-epoch gaps; the direction "win" is a frozen ep0-probe raw cosine with no direction baseline and no deployed checkpoint (fine-tuned ep11 gives only 0.47/0.37); iter-2 (full RH20T) is paused on a loader bug.
- Cross-cutting laws. SSL-exhausted (frozen-SSL can't beat supervised; only escape is supervised E2E unfreeze, which still needs labels); gap-floor (joint training hits each domain's native ceiling — REASS 0.876≈ceiling 0.874, FMB 0.768≈0.779 — but the absolute 9.5% gap was called "irreducible," a word the later Stage-6 0.97 unfreeze contradicts, since 0.779 was a frozen ceiling); camera-direction (single-view direction collapses, random-cam interpolates [+0.13/+0.24] but does not extrapolate [hama1 -0.53], lever = viewpoint coverage); force-frame (EE/tool frame is canonical, contact+magnitude are frame-invariant ‖F‖, frame/quat/sign poison direction only — the #1 silent bug).
(3) Honest scorecard
| Claim / Area | Status | Honest reading |
|---|---|---|
| In-dist contact (E2E unfreeze) | SOLID | The strongest result in the program. Clean before/after on the same model (0.26→0.935 run1; dir 0.71→0.96), corroborated in 2 later docs, and the direction lift is credible because frozen-dir collapse was a hard repeated wall. Weakness: "0.97" is single-run with no per-task/per-source breakdown and can be carried by the easy source (REASS). |
| OOD contact transfer | PARTIAL | Real and above trivial (peg 0.826/0.870 zero-shot; 0.85–0.90 few-shot). But it is mostly frame-unify + frozen feats (ep0 frozen probe already at 0.815/0.760; unfreeze ~+0.05), and few-shot only matches the prior 0.90 frozen-adapted ceiling. Cross-dataset F1 base-rate differs ~6× (crisp pos ~0.61 vs FMB/REASS ~0.10) so "matches in-dist" is base-rate-confounded. |
| OOD direction (cos-lift) | OVERCLAIMED / OPEN | Best on record is frozen-enc + dchg-curation +0.76/+0.74, but that is below best-const 0.82/0.90 on peg/eth, is a still-rising cherry-picked ep17, and is from a different (RH20T-dropped) corpus than the contact champion. Only box_flip is a genuine per-frame win and only with target FT. Pure zero-shot direction is prior-bound — nothing beats best-const. |
| Magnitude (MAE) | PARTIAL | Few-shot mag is at its vision/few-shot floor (peg 2.94 vs full-crisp ceiling 2.40 N; box 2.29 vs 1.94); mag-push was neutral (floored, not under-optimized — a correct falsification). MAE is not comparable across sources (RH20T 0.08–0.33 N vs FMB 1.06 vs REASS 0.74 vs crisp ~4 vs kuka ~11.5 N); never report cross-source MAE as a ranking. |
| SSL value | OPEN (mostly NEUTRAL) | Honestly concluded NEUTRAL across stages (Stage-7 kill-rule 2/2; Stage-8 +0.03 stop-rule did not fire). The one real exception is AUGMENT-UDA under severe gap (held-out cam 0.280→0.701; cross-dataset dir 0.413→0.865) — but that needs unlabeled target video; strict zero-shot SSL is worse than baseline (dir 0.311). Collapse-fix (Stage-2 covariance) is the one airtight SSL-adjacent win. |
| Force-richness metric | PARTIAL | Promising screening heuristic (SNR→contact-F1; dchg<0.2→positive dir-lift; "zero false splits"), and it surfaced real structure (flexiv 0.47→0.785 under rich-curation). But it is fit and tested on the same ~5–6 dataset cells with empirically-tuned thresholds (SNR 8/10, dchg 0.2) — in-sample fit, not validated prediction. Rich-curation rescues dilution, not the sensor gap; eval-full under curation deferred. |
| Frame-unification | SOLID | The cleanest cross-cutting finding. Sign convention replicated 3× with mirror-image evidence (REASS [1,-1,-1]; FMB base not tool; RH20T antipodal mirror -0.66/-0.72). The FMB tool→base bug had a clean A/B (+0.48/+0.54 vs old champ +0.34/+0.49). Caveat: validated mainly on FMB/REASS/crisp (similar Franka-ish labs); RH20T even sign-corrected only reaches ~0.2. |
| Cross-lab direction wall | OPEN | Real and well-characterized: world-frame harmonization NEGATIVE (blocker is camera viewpoint, not coordinate frame); random-cam interpolates but does not extrapolate; cross-LAB = extrapolation. No single model meets both contact and direction bars zero-shot. box_flip remains the accepted zero-shot-bounded wall (no off-target source carries crisp-box's lateral flip). |
| RH20T direction | OVERCLAIMED / PROVISIONAL | "RH20T lifts direction to ~0.72" is a frozen ep0-probe raw cosine (same trunk for all arms — only the readout differs) with no trivial/persistence baseline and no deployed checkpoint (ft ep11 = 0.47/0.37). RH20T base-frame EE-dir is sign-inverted and, even corrected, ~0.2 << 0.76 — so RH20T is excluded from the direction corpus (kept for contact). cfg5 franka direction is physically invalid. |
(4) Genuinely solved vs still open / shaky
Genuinely solved
- In-distribution contact via encoder-unfreeze. 0.26→0.935 (run1), ~0.97 (run2/3), dir 0.71→0.96 — the frozen ceiling is broken, doc-corroborated, the central success of the program.
- Latent collapse (Stage-2). Root-caused to the missing VICReg covariance term; clean A/B; RankMe_v 9.79→130; anti-sphere-artifact control (PR persists 1.45 on L2-norm) actually run.
- Frame-unification / force-frame ground truth. EE-frame canonical; contact+magnitude frame-invariant; per-dataset sign conventions empirically pinned and replicated; the FMB base-vs-tool fix is a real, falsifiable bug with a clean A/B.
- The transfer-gap diagnosis (sinew-250). In-domain crisp hits ~0.90 on every cell (incl. front-cam 0.000→0.912) — proves OOD collapse is transfer/calibration, not a feature-information ceiling.
- SSL-is-neutral, stated honestly. Pre-registered kill-rules, no-SSL control arms, numerically-identical results — disciplined negative results, not spin.
- Few-shot target adaptation as a reliable lever. Scales monotonically with target data (0.42→0.53→0.79→0.90) and breaks the OOD ceiling — when ~30–60 labeled crisp episodes are available.
Still open / shaky
- A single shippable zero-shot cross-lab model. Contact and direction champions come from different encoders (unfrozen) and different corpora (RH20T-dropped for dir). The "two-head production split" was never trained or evaluated end-to-end — current cross-lab headlines are a best-of-each-arm composite.
- Zero-shot OOD direction. Prior-bound; +0.76/+0.74 still below best-const 0.82/0.90; box_flip only solved with target FT. This is the hardest remaining wall.
- Magnitude at the true ceiling. Persistent ~0.5 N gap to full-crisp; "data-quantity not transfer" asserted but never proven with a learning-curve control.
- Statistical reliability. Single-seed everywhere; "within noise" claims rest on an unmeasured noise floor; multiple headline orderings hang on 0.003–0.01 deltas.
- RH20T's contribution. Provisional — 2 of 7 configs, flexiv absent, direction "win" is a frozen-probe artifact with no baseline. iter-2 paused.
- Numeric provenance. Stage-5.6 "contact swap solved (0.831)" and the gap-floor "irreducible" framing are unverifiable / contradicted on disk; log-vs-memory champion numbers disagree (Stage-2). Several stages live only in stale memory with no dedicated doc.
- Sensor-bound datasets. flexiv/ur5/FMB fail the SL bars regardless of recipe (sigma~2N observer noise, uncalibrated robot_ft); these are data-quality walls, not model walls.
(5) Top methodological lessons (recurring critique themes)
1. Report cos-LIFT over best-constant, never raw cosine. Half the "direction wins" evaporate against the trivial baseline: FMB dir 0.965 is +0.015 lift; peg/eth are +Z-degenerate so a high cosine is structural; the +0.76/+0.74 frozen-dir headline still sits below best-const 0.82/0.90. Any raw dir-cos quoted bare is a red flag. Also prefer margin-over-persistence (direction cosine is autocorrelation-inflated and frame/viewpoint-locked).
2. Contact-masked, base-rate-aware evaluation. Cross-dataset contact-F1 is not comparable — crisp pos ~0.61 vs FMB/REASS ~0.10 (~6×). Read gate-AUC not gate-F1 for OOD (F1 zeros on peg/eth are a compressed-sigmoid threshold artifact). Always carry the trivial all-positive floor next to the number. Direction must be evaluated on contact frames only, ideally on direction-CHANGE / high-|dF/dt| frames.
3. Equal-capacity, same-data, same-recipe comparisons. "Encoder not the lever," "TCN > Transformer," "intermix WON," and the in-dist DINO bars all suffer from cross-dataset/cross-arm or capacity confounds (head-arch run on different datasets; tau 8-vs-10 mixed within the encoder ladder; champion bundles raw+anchor+bs+cov changes at once). Isolate one variable; provide a random-feature / equal-capacity supervised readout floor.
4. Non-comparable scales (MAE, base rate). Per-source force scales span an order of magnitude (RH20T 0.08–0.33 N … kuka ~11.5 N); raw MAE is not aggregable or rankable across sources — normalize or report per-source. F1 is prevalence-dependent; never read "OOD ≈ in-dist F1" without prevalence-matching.
5. ep0-probe and frozen-probe artifacts. Stage-8's "RH20T lifts direction" lives entirely on the ep0 frozen probe (same trunk for all arms; only the readout differs) with no deployed checkpoint behind it. A frozen-probe result is not a trained-model result; attribute it to the readout, not the data, until isolated with a matched-readout control.
6. Single-seed discipline ⇒ humility, not false precision. Project policy is single-seed (and that's fine), but that makes every "within noise," "every cell," and "robust floor" claim an assertion, not a measurement. Lever deltas of +0.05–0.06 are within observed epoch-to-epoch swings (champ_fmbbase swung -0.11 across epochs). Best-epoch selection on the OOD eval target is selection-on-test — needs a held-out crisp split. When the delta is <~0.02, do not interpret the ordering.
7. Provenance hygiene. Pin a single source of truth and reconcile log-vs-memory disagreements before declaring "converged" (Stage-2 numbers disagree on every digit; Stage-5.6 champion exists only in memory). "Irreducible" / "solved" should never be written for a result that is single-seed, frozen-bound, or unverifiable on disk.
2.1.6 Proprioception — do joints help?
The question
Does adding the robot's joint angles to the video encoder improve force prediction — i.e. video + joints → force? Franka-only, in-distribution and across an OOD ladder (same robot, different task → different lab). The deployable model stays video-only at inference; joints are tested both as an inference input and as a training-only signal. Full review & design: <code>docs/v2f_joints_litreview.md</code>, <code>docs/v2f_joints_design.md</code>.
Physics & literature first
On a stiff, position-controlled Franka, bare joint angles carry almost no external-force information — force lives in joint torque / motor current, not kinematics (FACTR2; momentum observers). Angles supply contact phase / geometry, and in fixed-layout demos joint-config is autocorrelated with contact → a proprioception shortcut that inflates in-distribution scores and collapses cross-lab. Honest prior: joints help in-distribution, risk hurting OOD.
Result — controlled A/B (frozen vision held fixed) · contact-F1 / direction-cos
| model | in-dist (triv F1 .10) | OOD task (same lab) | OOD lab+task (crisp peg) | OOD lab+task (crisp eth) | OOD lab (cfg5, triv .53) |
|---|---|---|---|---|---|
| vision | 0.69 / +0.90 | 0.43 / +0.86 | 0.75 / −0.70 | 0.71 / −0.65 | 0.50 |
| joints only | 0.64 / +0.88 | 0.32 / +0.85 | 0.57 / −0.69 | 0.39 / −0.56 | 0.16 |
| vision + joints | 0.71 / +0.91 | 0.49 / +0.84 | 0.65 / −0.73 | 0.64 / −0.68 | 0.44 |
| vision + joints, joint-dropout | 0.70 / +0.90 | 0.44 / +0.87 | 0.77 / −0.75 | 0.74 / −0.71 | 0.43 |
- vision+joints ≥ vision in-distribution (0.71 vs 0.69) and same-lab (0.49 vs 0.43) — joints help when the robot-configuration distribution matches.
- vision+joints falls below vision cross-lab (crisp, cfg5) — the proprioception shortcut, exactly as predicted.
- joint-dropout removes the penalty — recovers cross-lab to vision level (crisp 0.77 / 0.74) while keeping the in-distribution gain.
- joints-alone collapse cross-lab (cfg5 0.16) — bare angles do not transfer force.
- Cross-lab direction is negative for every model here — the known frozen-encoder appearance ceiling, not a joint effect.
Training-only joint↔video alignment (SSL; inference video-only)
A video adapter aligned to a joint encoder via contact-pooled InfoNCE, joints dropped at inference:
| align | in-dist | OOD task | crisp peg | crisp eth | cfg5 |
|---|---|---|---|---|---|
| none (video adapter) | 0.69 | 0.45 | 0.40 | 0.47 | 0.53 |
| joint-aligned | 0.70 | 0.43 | 0.64 | 0.69 | 0.30 |
→ mixed: helps crisp contact, hurts cfg5, in-distribution neutral — not a decisive generalization lever (the same "SSL pays only under a severe gap" law as elsewhere).
Strong-vision confirm (end-to-end unfreeze, in-dist)
At a matched epoch with the encoder unfrozen (last-8-block LP-FT), vision+joints still edges vision in-distribution on every metric — contact-F1 0.614 vs 0.605, direction-cos 0.859 vs 0.819, MAE 1.21 vs 1.30 N. The in-distribution joint benefit persists with a strong encoder (it is not a frozen-feature artifact); the cross-lab shortcut liability is unchanged.
Verdict
Video stays the force source. Joints are a double-edged contact-phase context: a small in-distribution / same-lab gain, a cross-lab liability unless joint-dropout is applied, and no standalone generalization power. A clean, literature-consistent characterization of when proprioception helps and when it shortcuts.
Implementation: stream_v2f_data.py · extract_feats_joints.py · train_jf.py · train_jf_ssl.py · train_vjepa2_stream.py · eval_crisp_joints.py
2.1.7 Emergent properties of the video↔joint space
A separate question from "do joints help force F1": what curious generalization properties EMERGE in a shared video↔joint embedding? We bind a video adapter (on frozen feats) to a joint encoder with per-frame time-contrastive InfoNCE (video[t]↔joint[t] positive; all other frames negative), label-free, and probe the space with retrieval / probe-swap, not cosine (the modality-gap trap). Full review: <code>docs/v2f_joints_emergence_litreview.md</code>; results: <code>docs/v2f_joints_emergence.md</code>.
The headline — cross-modal zero-shot probe-swap
Fit a contact probe on JOINT embeddings, then apply it unchanged to VIDEO embeddings (a clean proof the space is genuinely shared, not merely correlated):
- in-lab AUC 0.89–0.91 on every dataset (FMB, fmb_multi, crisp, cfg5);
- cross-lab + cross-modal: a probe trained on fmb_multi joints reaches **AUC 0.77–0.82 on a
held-out lab's VIDEO (crisp) — with zero crisp force labels**.
So a contact detector built from one robot dataset's joints runs on a new lab's video.
Two more emergent properties
- Modality gap closes across labs. Binding the held-out lab's unlabeled video+joints flips its paired
video↔joint alignment from −0.09 → +0.82 — the shared space spans a lab it was never labeled on.
- A force/phase coordinate emerges. The bound video embedding's leading principal axis tracks force
magnitude over time more than raw features (|Spearman| FMB 0.39→0.42, cfg5 0.20→0.38) — an unlabeled, partial contact-phase coordinate.
Honest caveats
Cross-lab swap is transductive (the held-out lab's unlabeled video+joints are in the binding pool; strict-inductive swap is weaker, ~0.65). Cross-lab retrieval match-rate is base-rate-confounded → the probe-swap AUC is the trustworthy number. The phase coordinate is modest (~0.4, not a clean 1-D manifold), and binding does not improve a video-only contact linear probe over raw features. The defensible result: a shared video↔joint space in which a joint-trained contact probe transfers to video — strongly in-lab and, transductively, across labs.
Implementation: train_jf_bind.py · ssl_props.py
3 Business plan
Pre-revenue deep-tech. Strategy recentered (2026-06-29): the missing force modality for force-blind real dexterous-manipulation data — egocentric human video, teleop logs, and legacy vision-only corpora where force is exactly zero (simulators already compute it). Honesty tags: [EVIDENCED] cited · [EST] triangulated · [GAP] known hole. Working docs: docs/market_business_updated.md, docs/customer_targeting_analysis.md.
3.1 Market analysis
Thesis (updated). Supply the missing force modality for force-blind real data — egocentric human video, teleop logs, and legacy vision-only corpora where force is exactly zero (simulators already compute it, so they are partners, not the buyer). Input = pixels; output = contact / direction / magnitude. End goal = restoring force on dexterous, multi-finger video.
TAM — host markets we attach a force layer onto (no published "force-data" line item — [EST])
| host market | now | forecast | CAGR |
|---|---|---|---|
| Synthetic data generation | $0.58B (2025) | $10.78B (2035) | 33.8% |
| Dataset licensing for AI training | $4.8B (2025) | $22.6B (2034) | 18.8% |
| Embodied AI (system-level) | $4.4B (2025) | $23.1B (2030) | 39.7% |
| Robotics manipulation training data (our category) | ~$0.5B (2025) | ~$13.5B (2033) | ~40% [EST] |
| Tactile-sensor market (demand substrate) | $4–5.4B (2024) | $8.4–9.8B (2030) | 10–16% |
Demand anchor [EVIDENCED]: Bessemer — robotics will spend >$3B on training data in 2026–2027; "robot data … has to be generated, task by task." Scarcity: ~300k hrs robot-manipulation data vs ~1B hrs internet video. Existing corpora are force-blind (Open X-Embodiment = 7-D pose, no force; DROID = zero F/T).
SAM [EST]: the contact-rich slice where force is decisive ≈ $0.6–1.0B over 2026–2027 (~20–35% of the >$3B). SOM [EST]: Year-1 ≈ $0.5–3M (2–5 paid pilots + 1 corpus-augmentation license) — the real Year-1 goal is to set the per-contact-second reference price.
Why now [EVIDENCED]
- Synthetic data needs real contact grounding: NVIDIA GR00T-Dreams / Cosmos — synthetic+real together = +40% policy boost over real-only.
- Sim-to-real collapses on contact: peg-in-hole 90% sim → 30–50% real; "contact dynamics not accurately modeled in any current simulator."
- Force recovers from vision & lifts policies: FD-VLA (force distilled from vision, no sensor at inference) 61.1% vs 46.7% π0-no-force; ForceVLA +23.2 pts; Sparsh +95.1% on TacBench.
Competition & moat — mostly customers / tailwinds, not rivals
- Human-egocentric / real-data factories (Lightwheel EgoSuite >CNY 2B H1-2026; Mecka; EgoVerse/Scale) = PRIMARY CUSTOMERS — real human-hand video with zero force; they buy + resell a force layer.
- Synthetic-data producers = partner / tailwind, NOT primary — physics sims already compute force (direction transfers; only magnitude is weak); neural renders (Cosmos) are force-blind but gated on the unmeasured visual gap.
- Tactile HW (GelSight, Meta DIGIT 360, DAIMON) = tailwind — bolt a sensor onto new hardware; can't label existing video.
- Force-from-vision academia = our whitespace — all hardware-coupled (compliant gripper / wearable rig); no one ships a hardware-free per-frame force-from-RGB product.
- Data-factory incumbents (Scale $29B, Mercor ~$1.5B ARR, Encord) = channel / acquirers — force is their open vertical.
- Moat: software-only force-from-RGB · multi-dataset harmonization (16,772 rollouts · 7 embodiments · 4 frame conventions) · proven cross-robot/lab/camera generalization (cross-robot contact AUC 0.79–0.81 vs raw ~0.5; cross-dataset direction 0.40→0.85; best contact F1 0.874) · data flywheel.
- Honest gaps [GAP]: we supply predicted (not measured) force; cross-lab direction is extrapolation-hard; magnitude sensor-bound; force TAM unquantified + WTP unproven; sim2real visual gap unmeasured.
Market at a glance — hover bars/tiers for detail
3.2 Business model
Two tracks, one engine (hybrid base + usage is the 2026 default):
- Track 2 — Force-augmented dataset / DaaS (LEAD). Take a force-blind real corpus (egocentric human video, teleop logs, legacy vision-only data) → return it with a recovered force modality in native format (RLDS / HDF5 / ZARR). Per-recovered-hour subscription + lumpy enterprise corpus-augmentation licenses. This is how real-data factories buy.
- Track 1 — Force-Recovery API. Send RGB video → per-timestep contact / direction / magnitude. Deepgram-style ladder (free credit → PAYG → Growth → Enterprise); direction & magnitude as paid add-ons on the contact base.
Pricing — value metric = per CONTACT-SECOND, not per raw frame (~78% of frames are no-contact). Comps: Deepgram $0.0043–0.0077/min; ElevenLabs usage API >$330M ARR / $11B val; Scale enterprise ~$93K/yr (corpus-license shape). Triangulate between floor = GPU inference COGS and ceiling = cost-to-instrument we replace (~$118/hr teleop; $40K+ F/T rigs that can't retrofit). Do NOT anchor to $/labeled-hour (collapsed $340→$118) — force can't be hand-labeled from RGB at all. [GAP] Margin is NOT ~90% by default — model COGS explicitly.
Customers — lead with force-blind REAL-data owners (ordered by where force is genuinely zero × who actually buys/resells data; see the targeting analysis below): 1. Human-egocentric / real-data factories (PRIMARY) — Lightwheel EgoSuite (300k+ hrs), Mecka, EgoVerse/Scale. Real human hands, no force sensor → maximally force-blind; human-hand video = the dexterous end goal; and they are data businesses that buy + resell a force layer ($100M+ quarterly orders). 2. Frontier VLA / robot-FM labs (lighthouse secondary) — Physical Intelligence, Figure, Skild, 1X: deepest pain + biggest budget, but build data in-house → paid design-partner / reference-logo, not volume. Land one. 3. Legacy vision-only corpora + open seeding — Open X-Embodiment (sparse force), DROID (zero F/T): un-re-instrumentable → the cleanest "only-we-can-do-this" demo + sets the reference price. 4. Data-labeling / infra incumbents (channel / acquirer) — Encord, Mecka, Scale: sell hours not force (no labor substitute) → distribution arm / likely acquirer. 5. Synthetic-data producers (conditional / partner, NOT primary) — physics sims (Isaac, Lightwheel SimReady) already compute force (direction transfers; only magnitude is weak) → tailwind. Neural renders (Cosmos) are force-blind but recovering force on synthetic pixels depends on the still-unmeasured visual gap → pursue only after de-risking. 6. Tactile-hardware ecosystem (tailwind) — every sensorized hand shipped raises appetite for contact-rich data; never a buyer of recovered force.
[GAP] WTP for force-as-a-product is implied, not proven — Year-1 GTM converts it via one egocentric/real-data-factory pilot + one frontier-lab lighthouse.
Customer-targeting analysis — why real-data factories, not synthetic producers (2026-06-29)
Verdict. The pivot away from "synthetic-data producers as primary" is correct — but the best primary is human-egocentric / real-data factories, not frontier labs. A physics simulator is a force estimate (force is a computed state); the part that's unreliable is magnitude (also Sinew's weakest, sensor-bound), while direction transfers across sim2real — so sim shops read direction from the sim and fix magnitude by improving the sim, not by buying recovered force. Genuine, irreplaceable need lives where force is exactly zero: real teleop, egocentric human video, legacy vision-only corpora.
Why not synthetic producers: they already have force; the one force-blind sub-case (neural renders / Cosmos pixels) triggers Sinew's own unmeasured visual gap → leading with it is backwards.
**Why not frontier labs as primary: deepest pain + biggest budget, but they build data in-house** (NIH, few logos, slow sales) → lighthouse/design-partner, not the volume engine.
Why human-egocentric / real-data factories win: maximally force-blind (real hands, no sensor), they sell data for a living (budget + buyer + resale channel), and human-hand video is the closest match to the dexterous end goal — best on all three of the founder's own criteria.
| segment | force need | buys external? | dexterous fit | verdict |
|---|---|---|---|---|
| Synthetic — physics sim | low (force is an output) | fixes in-house | own worst axis | tailwind / partner |
| Synthetic — neural render (Cosmos) | high (no readout) | via GPUs | triggers visual gap | conditional channel |
| Frontier VLA labs (PI, Figure, Skild, 1X) | high | builds in-house | high | lighthouse secondary |
| Human-egocentric / real-data factories | maximal | sells data ($100M+/Q) | maximal | PRIMARY |
| Legacy vision-only corpora (OXE, DROID) | maximal, un-re-instrumentable | open | mixed | category-seeding wedge |
| Data-labeling incumbents (Encord, Scale) | sell hours not force | yes | indirect | channel / acquirer |
| Tactile-hardware ecosystem | they make force | hardware budgets | high | tailwind |
Full write-up: docs/customer_targeting_analysis.md. Fresh sources incl. Direction Matters (arXiv:2602.14174), Lightwheel EgoSuite + $100M Q1 orders, TechCrunch/PI (build-in-house), OpenTouch/FreeTacMan.
3.3 Implementation plan
Treat 0–12 mo as price-and-demand discovery, not scaling.
- Phase 0 (0–3 mo): lock the sellable signal hierarchy (contact F1 + direction; magnitude best-effort); instrument GPU COGS per contact-second; build the "augment-your-dataset" demo (public force-free slice → recovered force channel in RLDS).
- Phase 1 (3–9 mo): one paid pilot with an egocentric / real-data factory (primary) + one frontier-lab lighthouse (reference logo), leading Track 2 → set the reference price; seed an open "force-recovered" sample; pre-empt the sim2real visual gap in every conversation.
- Phase 2 (9–18 mo): productize both tracks; land the first lumpy corpus-augmentation license; stand up the data flywheel.
- Phase 3 (18–24 mo): fundraise on proof + flywheel (deep-tech is funded on proof, not ARR).
Tailwind: EU AI Act / GDPR + China export limits penalize NEW egocentric capture → position Sinew as the privacy-clean, no-new-capture force-label source.
What changed vs the prior plan
- Thesis recentered: per-frame API → force-augmentation layer for the dexterous synthetic-data market (dataset/DaaS is now the lead, API is Track 1).
- Lead customer flipped to synthetic-data producers (they generate the force-free corpora we augment, at volume).
- TAM re-anchored to synthetic-data ($0.58B→$10.78B) + dataset-licensing ($4.8B→$22.6B); added explicit SAM (~$0.6–1.0B) + SOM (~$0.5–3M Yr-1) (both were gaps).
- New why-now: NVIDIA synthetic+real +40%; FD-VLA force-from-vision 61.1 vs 46.7.
- Numbers refreshed: Mercor ~$1.5B ARR · Physical Intelligence ~$11B talks · Skild $14B (SoftBank) · Lightwheel >CNY 2B H1-2026 · teleop $118/hr.
- Pricing sharpened: per-contact-second value metric; margin not 90% by default.
4 Venues to apply to
Two concrete application targets (NAVER D2SF, GRAVITY 2026). The remaining rows are funding/template reference comps from the biz docs — included for transparency, not confirmed targets.
| venue | type | funding size | fit / notes | status |
|---|---|---|---|---|
| NAVER D2SF | Korean startup accelerator (interview) | ₩10M product/tech + ₩5M GPU/cloud; + Naver tech-leader feedback, investment linkage, free office (Bundang/Gangnam) | GPU credits de-risk the cross-domain gap + scale the model; Gangnam base moves team into the room for follow-on capital; possible Naver collaboration | Active pitch target (advised by Prof. Jee-Hwan Ryu, KAIST IRiS) |
| GRAVITY 2026 (4-institute deep-tech league: KAIST · GIST · DGIST · UNIST) | Non-dilutive student deep-tech competition + accelerator (grant, no equity) | Up to ₩200M top prize (grad track) / ₩150M (undergrad) + staged activity funds; top-10 get a global-VC overseas accelerator | Strong fit — explicitly targets robotics + AI; KAIST IRiS team is eligible (≥1 KAIST-affiliated member, within 5 yr); software-only deep-tech is capital-efficient + non-dilutive (ideal pre-seed runway) | Application target — 2026 cohort deadline (Jun 10 / DGIST Jun 15) passed; target next annual cohort (confirm dates via KAIST 창업원) |
| Sequoia Capital | VC / pitch template | — | Used only as the canonical business-plan/pitch-deck template; also ElevenLabs' lead investor (comp) | Reference only |
| Y Combinator | accelerator / template | — | Canonical seed-deck template; YC firms cited as competitors | Reference only |
| a16z | VC / criteria reference | — | Used for deck metrics & deep-tech investor criteria | Reference only |
GRAVITY 2026 — application details. Multi-stage IR/pitch league (~140 teams → 40 → 20 → 10), separate undergrad/grad tracks, run across the four institutes. Apply with: participation form + business plan (HWP/Word), proof of enrollment/graduation (within 5 yr), data-consent form, via institution Google Form (KAIST: forms.gle/u5kbeQyhWgituEnE6). Judged on: technical strength · execution feasibility · market viability ("the direction of potential over the size of the idea"). Emphasize for Sinew: KAIST-IRiS affiliation (eligibility + grad track ₩200M); robotics + AI deep-tech fit ("software-only touch sensing for dexterous manipulation"); capital-efficient no-hardware moat with validated cross-dataset force-prediction results; global ambition (aligns with the top-10 overseas-accelerator track); non-dilutive runway at pre-seed.
Note: the evidence-backed market analysis & business plan in §3 were refreshed (2026-06-28) around the dexterous-synthetic-data + force-augmentation thesis — use those when applying.
5 Team & collaborators
- Ivan Domrachev — CEO (ivan@sinewcore.com · @dom_iva).
- Igor Alentev — CTO.
- Lev Kozlov — Head of Research.
- All three KAIST IRiS, robotics MSc engineers; backgrounds span Hyundai, LG, Sber (humanoid "Green"). Advisor: Prof. Jee-Hwan Ryu (KAIST IRiS).
Who we've worked with: SBER (humanoid "Green") · Hyundai (assembly peg-in-hole) · LG (CLOiD bimanual humanoid haptics) · OpenDroids (VR haptics <50ms) · KAIST×BONN (4K haptics stream) · OOJU (VR robot learning) · Rubitek (line automation RL) · Flexam (multi-axis additive) · KASA / Korea Aerospace (under NDA).











6 Appendix — glossary of terms
Business & market acronyms used in §3 (and a couple of technical ones). Each term links to where it is used / explained.
- TAM
- Total Addressable Market — total revenue if you captured 100% of every host market you attach to.
- SAM
- Serviceable Addressable Market — the slice your product can actually serve (here: the contact-rich / force-decisive portion).
- SOM
- Serviceable Obtainable Market — what you can realistically win near-term (Year-1 pilots + a license).
- CAGR
- Compound Annual Growth Rate — the smoothed annual % growth between two years.
- WTP
- Willingness To Pay — what a customer will actually pay; here still implied, not proven.
- DaaS
- Data-as-a-Service — selling an enriched dataset (force-augmented corpus) rather than only an API.
- PAYG
- Pay-As-You-Go — usage-metered billing with no commitment, a rung on the pricing ladder.
- ARR
- Annual Recurring Revenue — annualised value of recurring subscriptions; the metric investors underwrite.
- NRR
- Net Revenue Retention — revenue kept + expanded from existing customers (expansion minus churn).
- COGS
- Cost Of Goods Sold — here the GPU inference cost per contact-second; the gross-margin denominator.
- GTM
- Go-To-Market — the motion for reaching and converting customers (land → expand → compound).
- Reference price
- The first publicly-anchored unit price you establish (here per contact-second), since no comparable exists.
- VLA
- Vision-Language-Action model — the robot-policy class that force measurably improves (e.g. ForceVLA +23 pts).
- OOD
- Out-Of-Distribution — evaluation on a held-out lab/robot/camera not seen in training.