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.

Recover the missing modality. Robot data is vision + actions only; force is never recorded and can't be added back. Sinew predicts contact / direction / magnitude from RGB video companies already have — software-only, no sensor. Feasibility validated at ~87% contact accuracy, generalizing across camera, lab and robot. The end goal: restore contact force on dexterous, multi-finger manipulation video, where contact is the whole task and the fingers occlude the camera.
· click any image to zoom

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.

Three levels of touch sold: is it touching? · which way? · how hard?
Corpus scale — the largest paired video+force dataset we know of
Ego4D — typical vision-only manipulation data (egocentric human hands): rich video, zero recorded force. This is exactly the dexterous footage Sinew exists to unlock. (clip 3:03–3:59, looped)
Predicted contact overlaid on a real insertion (FMB)

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 / cfgRobotTaskCamerasForce frame / quat / τQuality#epsRole
FMB (+fmb_multi)Franka Pandapeg-in-hole (6 shapes)4@256px (2 side+2 wrist); side_1+wrist_1 usedbase→EE, quat wxyz; τ=10 NPOOR — libfranka observer, σ≈2 N~1,844TRAIN (contact+dir)
REASSEMBLEFranka FR3connector insert/remove (NIST, 17 obj)hand+hama1/hama2(+event); 2- & 4-cam cachedbase→EE, ×[1,−1,−1], quat wxyz; τ=2 NCLEANEST — AIDIN 6-axis, grav+payload comp, rest≈0.4 N2,262TRAIN (strongest: real dir)
RH20T cfg1 flexivflexivdiverse manip8–11/cfg @256pxbase(ATI)→EE, ×(−1), xyzw→wxyz; τ≈1.5 NMEDIOCRE — unfiltered, low-force(of 12,676)TRAIN contact only
RH20T cfg3/4 ur5ur5diverse manipas abovebase(ATI)→EE, ×(−1); τ=1.8 NMEDIOCRE — <1 N, dir deadTRAIN contact only
RH20T cfg6/7 kukakukadiverse manip (cfg7≈dup)as abovebase(ATI)→EE, ×(−1); τ=3.0 Nbest RH20T (in-dist dir ~0.76)TRAIN contact (dir excluded)
RH20T cfg5 frankaFranka Pandadiverse manipas aboverobot_ft[:3] base; dir INVALID; τ=5.5 Ncontact+mag valid (r=0.985 vs ATI)TRAIN contact+mag only
crisp_ws pegFranka (crisp)peg insertfront+wristserver netft TCP/EE (clean); wxyz; τ≈1.15 NCLEAN (server bias-removed+rotated)91OOD-EVAL
crisp_ws ethernetFranka (crisp)ethernetfront+wristas crisp; τ≈1.76 NCLEAN93OOD-EVAL
crisp_ws box_flipFranka (crisp)flip box (lateral)wrist onlyas crisp; τ≈2.09 NCLEAN; per-frame 6-D only102OOD-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.

FMB peg-insertion rollout
REASSEMBLE NIST connector insert/remove
RH20T multi-robot rollout (heterogeneous embodiment)

Sample frames per dataset

FMB — Franka peg-insertion (side + wrist, 6 frames; |F| per frame)
REASSEMBLE — multi-part NIST assembly
RH20T — KUKA (cfg6)
RH20T — Flexiv (cfg1)
RH20T — UR5 (cfg3)
crisp_ws — peg insert (OOD)
crisp_ws — ethernet insert (OOD)

2.1.2 Predicted metrics & evaluation

One video clip in, three predictions out — a tiered "pyramid of touch", each with its own honest metric.

① Contact gate
Is it touching?
F1 = 2·P·R / (P + R)
binary in-contact probability, thresholded at a per-dataset τ. Frame-invariant. Report against the trivial all-positive floor.
② Direction
Which way?
cos = (f̂ · f) / (‖f̂‖ ‖f‖)
cos-lift = cos − costrivial
3D unit force direction in the EE frame. Always report the lift over the best-constant mean direction — raw cosine is inflated by the −Z insertion prior.
③ Magnitude
How hard?
MAE = (1/N) Σ |‖f̂‖ − ‖f‖|  (N)
scalar force magnitude in newtons. Frame-invariant. Not comparable across sources — force scales span an order of magnitude.

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.

Dilated-TCN 3-head architecture (gate / direction / magnitude)

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):

DatasetContact F1Dir cos (lift)MAE (N)
FMB0.7790.965 (+0.015, ≈trivial)1.06
REASSEMBLE0.8740.906 (+0.34, REAL)0.74
RH20T0.71(+0.39 in-dist)0.27

Encoder-unfreeze (E2E) ceilings (in-dist):

Group (sensor)Contact F1Dir cos (lift)Verdict
REASSEMBLE (dedicated F/T)0.920.93 (+0.37)PASS both — flagship
RH20T kuka (ext ATI)0.920.80 (+0.21)contact PASS; dir soft ceiling
FMB (observer σ~2N)0.69–0.720.91 (+0.20)contact data-bound; dir PASS
RH20T flexiv0.47 → 0.785 (rich-curated)0.38 (−0.13)dilution-bound; curation recovers
RH20T ur50.640.24 (−0.23)<1N force, dir noise
RH20T franka (robot_ft)0.57N/Acontact+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|.

REASSEMBLE — contact F1 0.975
RH20T KUKA — F1 0.976
FMB — F1 0.736
RH20T Flexiv — F1 0.760
RH20T UR5 — F1 0.670

Best validation episodes (in-dist) — 3-panel: contact · magnitude · direction

Best contact — FMB ep110, F1 1.000
Best contact — RH20T KUKA ep70, F1 0.976
Best magnitude — RH20T Flexiv ep50, MAE 0.71 N
Best magnitude — RH20T UR5 ep50, MAE 0.71 N
Best direction — REASSEMBLE ep20, cos 0.995 (≥20% contact)
Best direction — REASSEMBLE ep90, cos 0.983
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.

MetricOOD crisp (best)trivialverdict
Contact F1peg 0.82 / eth 0.860.76 / 0.68✅ clears trivial, ≈in-domain — REAL win
Direction cospeg 0.76 / eth 0.74trivial-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 Nimproves 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)

crisp peg (OOD) — contact F1 0.946
crisp ethernet (OOD) — contact F1 1.000

Best validation episodes (OOD crisp) — 3-panel: contact · magnitude · direction

Best contact — crisp ethernet ep5, F1 1.000
Best contact — crisp ethernet ep17, F1 1.000
Best magnitude — crisp peg ep14, MAE 2.37 N
Best magnitude — crisp peg ep8, MAE 2.37 N
Best direction — crisp ethernet ep10, cos 0.656 (≥20% contact)
Best direction — crisp ethernet ep7, cos 0.642

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).
Cross-modal JEPA panel
Joint-embedding alignment (DINO) panel
Predictive/generative SSL panel
x-modal force AUGMENT: concat raw ‖ g(video)
2.1.4.2 — Results

Where SSL WON (severe-gap regime):

WinmetricSSL vs baseline
AUGMENT, OOD held-out camera (REASS)contact F10.28 → 0.70
AUGMENT, OOD held-out cameradirection0.41 → 0.78
AUGMENT, cross-dataset dir (UDA)REASS→FMB0.41 → 0.87
AUGMENT, cross-dataset dir (UDA)FMB→REASS0.40 → 0.83
Force-only SSL, cross-robotcontact AUC0.94 vs raw 0.80
Sinkhorn-OT binding, contact swapswap acc0.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:

Resultnumbers
Force-JEPA (cross-modal) vs supervisedbest = 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 contactSSL matches supervised ~0.845 vs 0.848 — does NOT beat
Frozen SSL embed, downstreamSSL ≤ raw features for v2f and BC; task-swap ≈ chance
Overall SSL audit4 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.
REASS UMAP by camera — raw features cluster by viewpoint (camera-NMI 1.00)
REASS UMAP by task — task structure absent in raw features (task-NMI 0.00)
RH20T UMAP by robot — scale separation that force-SSL collapses cross-robot
Dataset latent UMAP — datasets intermix after SSL alignment
Joint video↔force latent UMAP — the two modalities brought together
OOD latent UMAP — held-out data placement
Viewpoint UMAP — camera/viewpoint structure in the embedding
Force-embedding latent — structured (not collapsed)
Latent before/after the collapse fix (effective rank 9.8→130)
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). Teacher fssl_v1/best.pt reused 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

AreaStatusHonest reading
In-dist contact (encoder unfreeze)SOLIDstrongest result; clean before/after 0.26→0.935 (single-run, no per-source breakdown)
OOD contact transferPARTIALreal &amp; above trivial (0.82–0.86) but mostly frame-unify + frozen feats + few-shot; base-rate-confounded
OOD direction (cos-lift)OPENbest on record still below the trivial best-constant on insertion; a genuine win only with target fine-tune
Magnitude (MAE)PARTIALat the vision/few-shot floor; not comparable across sources
SSL valueMOSTLY NEUTRALonly AUGMENT under a severe gap, and it needs unlabeled target video
Force-richness metricPARTIALpromising screen, but in-sample fit on ~6 dataset cells
Frame-unificationSOLIDcleanest cross-cutting finding; replicated, falsifiable
Cross-lab direction wallOPENthe 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 &amp; 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 / AreaStatusHonest reading
In-dist contact (E2E unfreeze)SOLIDThe 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 transferPARTIALReal 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 / OPENBest 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)PARTIALFew-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 valueOPEN (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 metricPARTIALPromising 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-unificationSOLIDThe 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 wallOPENReal 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 directionOVERCLAIMED / 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 &amp; design: <code>docs/v2f_joints_litreview.md</code>, <code>docs/v2f_joints_design.md</code>.

Physics &amp; 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

modelin-dist (triv F1 .10)OOD task (same lab)OOD lab+task (crisp peg)OOD lab+task (crisp eth)OOD lab (cfg5, triv .53)
vision0.69 / +0.900.43 / +0.860.75 / −0.700.71 / −0.650.50
joints only0.64 / +0.880.32 / +0.850.57 / −0.690.39 / −0.560.16
vision + joints0.71 / +0.910.49 / +0.840.65 / −0.730.64 / −0.680.44
vision + joints, joint-dropout0.70 / +0.900.44 / +0.870.77 / −0.750.74 / −0.710.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:

alignin-distOOD taskcrisp pegcrisp ethcfg5
none (video adapter)0.690.450.400.470.53
joint-aligned0.700.430.640.690.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 marketnowforecastCAGR
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

TAM — host markets we attach totens of $Bsynthetic-data + dataset-licensing + embodied-AI
SAM — contact-rich slice$0.6–1.0Bforce-decisive demand, 2026–27
SOM — Year-1 obtainable$0.5–3M2–5 pilots + 1 corpus license
Host markets — now → forecast (CAGR)
Synthetic data gen$0.58B→$10.8B 33.8%
Dataset licensing (AI)$4.80B→$22.6B 18.8%
Embodied AI (system)$4.40B→$23.1B 39.7%
Robotics manip. data$0.50B→$13.5B ~40% [EST]
Tactile sensors$5.40B→$9.80B 10–16%
Sources: Precedence, Grand View, MarketsandMarkets, dataintelo, Mordor + internal triangulation [EST].
2024–25forecast growth
Why now — force lifts policy success (measured force)
FD-VLA (force-from-vision)61.1% vs 46.7% π0-no-force (force distilled from vision, no sensor at inference)
ForceVLA+23.2 pts → 60.5% vs 37.3% π0-base across 5 contact-rich tasks
Sparsh (Meta)+95.1% over task-specific training on TacBench
NVIDIA synthetic+real+40% policy boost (synthetic+real) over real-only — synthetic data needs real contact grounding
Lifts use MEASURED force; Sinew supplies PREDICTED-from-video force — a quality step down [GAP].
Corpus scale — 16,772 recordings · 178 h · ~6.4M frames

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.

Candidate buyers have budget — valuation / ARR ($B), hover for detail
Scale AI$29B
Skild AI$14B
Physical Intelligence$11B
Mercor$10B
Lightwheel$3B
Budget is not the constraint; targeting + proven WTP are. See the customer-targeting analysis below.
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.

segmentforce needbuys external?dexterous fitverdict
Synthetic — physics simlow (force is an output)fixes in-houseown worst axistailwind / partner
Synthetic — neural render (Cosmos)high (no readout)via GPUstriggers visual gapconditional channel
Frontier VLA labs (PI, Figure, Skild, 1X)highbuilds in-househighlighthouse secondary
Human-egocentric / real-data factoriesmaximalsells data ($100M+/Q)maximalPRIMARY
Legacy vision-only corpora (OXE, DROID)maximal, un-re-instrumentableopenmixedcategory-seeding wedge
Data-labeling incumbents (Encord, Scale)sell hours not forceyesindirectchannel / acquirer
Tactile-hardware ecosystemthey make forcehardware budgetshightailwind

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.

venuetypefunding sizefit / notesstatus
NAVER D2SFKorean 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 collaborationActive 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 acceleratorStrong 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 CapitalVC / pitch templateUsed only as the canonical business-plan/pitch-deck template; also ElevenLabs' lead investor (comp)Reference only
Y Combinatoraccelerator / templateCanonical seed-deck template; YC firms cited as competitorsReference only
a16zVC / criteria referenceUsed for deck metrics & deep-tech investor criteriaReference 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 &amp; 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).

Ivan Domrachev — CEO
Igor Alentev — CTO
Lev Kozlov — Head of Research
Hyundai
LG
SBER
KAIST×BONN
OpenDroids
OOJU
Rubitek
Flexam

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.