Artificial IntelligenceTechnology

Dyna Robotics Introduces Dyna-2: A World-Action Model Pre-Trained on 1 Million Hours of Human Video

Dyna Robotics has released Dyna-2, a world-action model for robot manipulation. It was pre-trained on more than one million hours of egocentric human video. That is roughly 170 years of continuous waking experience. Robot learning has been bottlenecked by action-labelled data, which teleoperation must deliberately produce. Dyna-2 tests whether ordinary human video can substitute. The research team trained a data ladder from 1,000 to 1,000,000 hours and measured what scales. Three results follow: a scaling law on human data, the first transfer of that law to unseen robot data, and evidence that video prediction drives the transfer.

Is it deployable?

Yes, but as a vendor-operated system, not as downloadable weights. Dyna Robotics has announced no public checkpoint, API, or license for Dyna-2. Deployment today means buying a Dyna robot cell, not self-hosting a model.

  • Which companies: Dyna-1 robots already run in production in hotels, restaurants, and laundromats, per the company’s August 10, 2026 announcement. That points at mid-market service operators and multi-site enterprises with repetitive, stationary manipulation work. It is not a fit for solo builders or research labs wanting local inference.
  • Industries: Hospitality, commercial laundry, food service, light assembly and kitting, and facilities cleaning.
  • Applications: The 14 post-training tasks map cleanly to real work: trash tray clearing, first-aid kitting, tote construction, food scooping, rope tying, hanger preparation, and targeted drink retrieval from a fridge.

What is Dyna-2

Dyna-2 is a world-action model (WAM): one generative model that denoises future video and a future action chunk, jointly or separately, on a video-diffusion backbone. It was pre-trained on more than one million hours of egocentric human video, roughly 170 years of continuous waking experience.

Architecturally it is a mixture of transformers. Video and action are tokenized separately and get distinct DiT layer stacks that attend to each other. Proprioception feeds directly into the action transformer. Video tokens use causal masking; action tokens use bidirectional self-attention and attend to context video tokens. Video tokens cross-attend to text, but text does not directly influence action tokens.

Training uses flow matching. A video loss and an action loss share a trunk as two separate marginal velocity fields. Because the action network never takes the noised video latent as an argument, the policy stays reactive at inference — it neither generates nor attends to predicted future video. The action transformer is deliberately shallower and joins the video stream early, which the team says improves real-time latency without costing performance.

The three scaling results

Dyna Robotics cut nested subsets of exactly 1,000, 10,000, 100,000, and 1,000,000 hours, keeping identical proportions from each source. A larger budget only adds data, so curve differences cannot be attributed to distribution shift. A fixed, disjoint 100-hour validation set scores every rung.

  1. A scaling law holds on human data to one million hours: All four metrics improve monotonically and fit power laws: held-out MSE = 0.0691·D^-0.0184 (R²=0.919), accuracy@0.5 = 0.357·D^+0.0203 (R²=0.865). Across the ladder, accuracy@0.1 rises 51% against 12% for MSE.
  2. That law transfers to robot data the model never saw: The same checkpoints were scored zero-shot on 39 tasks across two stationary bimanual YAM platforms — 12 internal, 27 from xdof ABC. Zero-shot action MSE = 0.306·D^-0.0713 (R²=0.884). The team reports an inflection between 10k and 100k hours.
  3. The objective matters, and video is a separate axis: Joint denoising beat action-only on 39 of 39 tasks at every action scale. Holding action-labelled data fixed at 50,000 hours and adding video-only hours drops zero-shot robot MSE from 0.340 to 0.120. Notably, held-out human error does not improve — the benefit of video is specifically cross-embodiment generalization.

On-robot results

Each rung was post-trained on 14 tasks, at most 10 hours of robot data each, across three embodiments: 6-DOF YAM arms with parallel-jaw grippers, the same arms with WUJI-2 20-DOF dexterous hands, and a semi-humanoid prototype. Post-training used robot data only — no human-robot alignment, no co-training.

Mean normalized score rose 20% → 28% → 45% → 53% across the ladder, best on 9 of 14 tasks at one million hours. Lockbox Key Turning is the threshold case: 0% up to 100,000 hours, then 90%. Bottle Cap Untwisting was post-trained on roughly 10 minutes of demonstrations and still climbed to 50%.

Against Dyna-1 — the company’s production VLA initialized from Qwen3-VL-4B — an early Dyna-2 reached 1.55× success rate and 1.12× grade, pooled over 7 tasks and 3 checkpoints. At unseen customer sites, Dyna-2 passed production criteria 87% versus Dyna-1’s 46%, though both pass near 100% in house. A distillation pipeline also cuts video sampling from 10,203 ms to 110 ms on one H100.

Interactive explainer

ANIMATE THE LADDER</button>
<div class=”card” style=”margin-top:14px”>
<div class=”cardhd”>Held-out human data · rung <span id=”r1lbl”>1k</span> hours</div>
<div class=”mgrid”>
<div class=”metric”><div class=”mlab”>Held-out MSE ↓</div><div class=”mval” id=”m1a”>0.062</div><div class=”mbar”><div class=”mfill” id=”f1a”></div></div><div class=”mnote”>D<sup>-0.0184</sup> · R²=0.919</div></div>
<div class=”metric”><div class=”mlab”>Held-out L1 ↓</div><div class=”mval” id=”m1b”>0.140</div><div class=”mbar”><div class=”mfill” id=”f1b”></div></div><div class=”mnote”>D<sup>-0.0132</sup> · R²=0.879</div></div>
<div class=”metric”><div class=”mlab”>Accuracy @0.1 ↑</div><div class=”mval” id=”m1c”>0.017</div><div class=”mbar”><div class=”mfill” id=”f1c”></div></div><div class=”mnote”>D<sup>+0.0606</sup> · R²=0.926</div></div>
<div class=”metric”><div class=”mlab”>Accuracy @0.5 ↑</div><div class=”mval” id=”m1d”>0.40</div><div class=”mbar”><div class=”mfill” id=”f1d”></div></div><div class=”mnote”>D<sup>+0.0203</sup> · R²=0.865</div></div>
</div>
<div class=”callout”>Across the full ladder <b>accuracy@0.1 rises 51%</b> while MSE improves 12%. Tight-threshold accuracy — a proxy for movement precision — is where scale pays most.</div>
</div>
</div>

<!– 03 HUMAN TO ROBOT –>
<div class=”panel” id=”p2″>
<p class=”lead”>The same checkpoints were scored on <b>39 robot tasks</b> across two stationary bimanual YAM platforms — 12 internal, 27 from xdof ABC — with <b>zero robot trajectories in pre-training</b>. Then each rung was post-trained on 14 tasks, at most 10 hours of robot data each, robot data only, no human–robot alignment.</p>
<div class=”ladder” id=”lad2″></div>
<button class=”play” id=”play2″>▶ ANIMATE THE LADDER</button>
<div class=”card” style=”margin-top:14px”>
<div class=”cardhd”>Zero-shot on unseen robot data · rung <span id=”r2lbl”>1k</span> hours</div>
<div class=”mgrid” style=”grid-template-columns:repeat(2,1fr)”>
<div class=”metric”><div class=”mlab”>Zero-shot action MSE ↓</div><div class=”mval” id=”m2a”>0.180</div><div class=”mbar”><div class=”mfill” id=”f2a”></div></div><div class=”mnote”>D<sup>-0.0713</sup> · R²=0.884</div></div>
<div class=”metric”><div class=”mlab”>Zero-shot accuracy@0.5 ↑</div><div class=”mval” id=”m2b”>0.067</div><div class=”mbar”><div class=”mfill” id=”f2b”></div></div><div class=”mnote”>D<sup>+0.139</sup> · R²=0.918</div></div>
</div>
</div>
<div class=”card”>
<div class=”cardhd”>Post-trained on the physical robot · 14 tasks, 3 embodiments</div>
<div class=”brow”><div class=”blab”>Mean normalized</div><div class=”btrack”><div class=”bfill” id=”b2m” style=”background:#E8B84B”></div></div><div class=”bnum” id=”n2m”>20%</div></div>
<div class=”brow”><div class=”blab”>Lockbox key turn</div><div class=”btrack”><div class=”bfill” id=”b2l” style=”background:#8A8F94″></div></div><div class=”bnum” id=”n2l”>0%</div></div>
<div class=”brow”><div class=”blab”>Bottle cap untwist</div><div class=”btrack”><div class=”bfill” id=”b2b” style=”background:#8A8F94″></div></div><div class=”bnum” id=”n2b”>10%</div></div>
<div class=”brow”><div class=”blab”>Drink retrieval</div><div class=”btrack”><div class=”bfill” id=”b2d” style=”background:#8A8F94″></div></div><div class=”bnum” id=”n2d”>58%</div></div>
<div class=”callout”><b>Lockbox Key Turning</b> is the threshold case: no checkpoint up to 100,000 hours ever turned the key. At one million hours it turned 90% of the time. <b>Bottle Cap Untwisting</b> was post-trained on roughly 10 minutes of robot demonstrations, on two 20-DOF dexterous hands.</div>
</div>
</div>

<!– 04 VIDEO AXIS –>
<div class=”panel” id=”p3″>
<p class=”lead”>Hold action-labelled human data <b>fixed at 50,000 hours</b> and add only video-prediction data with no action labels. Zero-shot robot error keeps falling. Held-out <i>human</i> error does not improve — the gain from video is specifically <b>cross-embodiment generalization</b>.</p>
<div class=”ladder” id=”lad3″></div>
<button class=”play” id=”play3″>▶ ANIMATE THE VIDEO AXIS</button>
<div class=”card” style=”margin-top:14px”>
<div class=”cardhd”>Video-only hours added · action data fixed at 50k hr</div>
<div class=”metric” style=”margin-bottom:14px”><div class=”mlab”>Zero-shot robot action MSE ↓</div><div class=”mval” id=”m3a”>0.340</div><div class=”mbar”><div class=”mfill” id=”f3a”></div></div><div class=”mnote”>0 → 50k video hours drives 0.340 → 0.120</div></div>
<div class=”brow”><div class=”blab”>Robot (unseen)</div><div class=”btrack”><div class=”bfill” id=”b3r” style=”background:#E8B84B”></div></div><div class=”bnum” id=”n3r”>100%</div></div>
<div class=”brow”><div class=”blab”>Human (in-domain)</div><div class=”btrack”><div class=”bfill” id=”b3h” style=”background:#8A8F94″></div></div><div class=”bnum” id=”n3h”>100%</div></div>
<div class=”legend”><span><span class=”dot” style=”background:#E8B84B”></span>Robot error, % of each domain’s own 0-video arm (lower = better)</span><span><span class=”dot” style=”background:#8A8F94″></span>Human error, same normalization</span></div>
<div class=”callout”>At 50k video hours the robot arm falls to <b>34%</b> of its no-video baseline while the human arm sits at <b>104%</b> — slightly worse. Repeating the experiment at 250k action hours with 0 → 750k video hours moves MSE from 0.10 to 0.084.</div>
</div>
<div class=”card”>
<div class=”cardhd”>Objective ablation · zero-shot on all 39 robot tasks</div>
<p class=”lead” style=”margin-bottom:12px;font-size:11.5px”>Joint denoising beat action-only on <b>39 of 39 tasks at every action scale</b>. Action-only overfits badly as data grows. Only the video co-training recipe keeps improving as action data scales.</p>
</div>
</div>

<!– 05 WAM VS VLA –>
<div class=”panel” id=”p4″>
<p class=”lead”>An early Dyna-2 was compared against <b>Dyna-1</b>, Dyna’s production VLA initialized from Qwen3-VL-4B, under matched pre-training data, post-training data and hyperparameters, from three distinct pre-training checkpoints each. Dyna Robotics frames this as a <b>lower bound</b> for the WAM: the pipeline was tuned for the VLA.</p>
<button class=”play” id=”play4″>▶ RUN THE COMPARISON</button>
<div class=”card” style=”margin-top:14px”>
<div class=”cardhd”>Pooled over 7 tasks × 3 checkpoints · VLA normalized to 1.00×</div>
<div class=”brow”><div class=”blab”>VLA success</div><div class=”btrack”><div class=”bfill” id=”b4a” style=”background:#4A4F54″></div></div><div class=”bnum” id=”n4a”>1.00×</div></div>
<div class=”brow”><div class=”blab”>WAM success</div><div class=”btrack”><div class=”bfill” id=”b4b” style=”background:#E8B84B”></div></div><div class=”bnum” id=”n4b”>1.55×</div></div>
<div class=”brow”><div class=”blab”>VLA grade</div><div class=”btrack”><div class=”bfill” id=”b4c” style=”background:#4A4F54″></div></div><div class=”bnum” id=”n4c”>1.00×</div></div>
<div class=”brow”><div class=”blab”>WAM grade</div><div class=”btrack”><div class=”bfill” id=”b4d” style=”background:#E8B84B”></div></div><div class=”bnum” id=”n4d”>1.12×</div></div>
<div class=”callout”>Head-to-head, fixing checkpoint step and task, the early Dyna-2 won <b>65%</b>, Dyna-1 won 29%, 6% tied.</div>
</div>
<div class=”card”>
<div class=”cardhd”>Zero-shot at real customer sites · production pass criteria</div>
<div class=”brow”><div class=”blab”>Dyna-1 in-house</div><div class=”btrack”><div class=”bfill” id=”b5a” style=”background:#4A4F54″></div></div><div class=”bnum” id=”n5a”>100%</div></div>
<div class=”brow”><div class=”blab”>Dyna-2 in-house</div><div class=”btrack”><div class=”bfill” id=”b5b” style=”background:#4A4F54″></div></div><div class=”bnum” id=”n5b”>100%</div></div>
<div class=”brow”><div class=”blab”>Dyna-1 on site</div><div class=”btrack”><div class=”bfill” id=”b5c” style=”background:#8A8F94″></div></div><div class=”bnum” id=”n5c”>46%</div></div>
<div class=”brow”><div class=”blab”>Dyna-2 on site</div><div class=”btrack”><div class=”bfill” id=”b5d” style=”background:#E8B84B”></div></div><div class=”bnum” id=”n5d”>87%</div></div>
<div class=”callout”>Both models pass near 100% in house. At customer sites neither had seen, the gap is <b>41 points</b> at identical post-training budget. Graded by on-site operators not involved in model development.</div>
</div>
<div class=”card”>
<div class=”cardhd”>One-step video generation · single H100</div>
<div class=”brow”><div class=”blab”>Teacher, 100 NFE</div><div class=”btrack”><div class=”bfill” id=”b6a” style=”background:#4A4F54″></div></div><div class=”bnum” id=”n6a”>10203ms</div></div>
<div class=”brow”><div class=”blab”>Distilled, 1 NFE</div><div class=”btrack”><div class=”bfill” id=”b6b” style=”background:#E8B84B”></div></div><div class=”bnum” id=”n6b”>110ms</div></div>
<div class=”callout”>About <b>90× faster</b> for a three-second, three-view manipulation video. The one-step student holds FVD at 121 and flicker at 1.94 against 2.37 for real recorded footage; motion sits at 75% of real, where it still trails the full teacher.</div>
</div>
</div>

<div class=”src”>
Every figure above is read from the Dyna Robotics technical report, <a href=”https://www.dyna.co/dyna-2″ target=”_blank” rel=”noopener”>Dyna-2: A 1-Million-Hour Scaling Law for World-Action Models</a> (August 2026). Interactive explainer built by <a href=”https://www.marktechpost.com” target=”_blank” rel=”noopener”>Marktechpost</a>. No values are estimated or interpolated.
</div>
</div>

<script>
(function(){
var LAD=[‘1k’,’10k’,’100k’,’1M’];
var D={
h:{mse:[0.062,0.057,0.056,0.054],l1:[0.140,0.131,0.129,0.127],a1:[0.017,0.021,0.024,0.026],a5:[0.40,0.44,0.45,0.47]},
r:{mse:[0.180,0.174,0.124,0.117],a5:[0.067,0.074,0.136,0.159]},
p:{mean:[20,28,45,53],lock:[0,0,0,90],cap:[10,10,40,50],drink:[58,75,83,83]}
};
var VID=[‘0′,’1k’,’10k’,’50k’];
var V={mse:[0.340,0.245,0.170,0.120],robot:[100,72,50,34],human:[100,101,103,104]};

function $(id){return document.getElementById(id);}
function pct(v,lo,hi){var p=(v-lo)/(hi-lo)*100;return Math.max(3,Math.min(100,p));}
function inv(v,lo,hi){return pct(hi-v+lo,lo,hi);}

// tabs
var tabs=document.querySelectorAll(‘.tab’);
for(var i=0;i<tabs.length;i++){
tabs[i].addEventListener(‘click’,function(){
for(var j=0;j<tabs.length;j++){tabs[j].classList.remove(‘on’);document.getElementById(‘p’+j).classList.remove(‘on’);}
this.classList.add(‘on’);$(‘p’+this.getAttribute(‘data-p’)).classList.add(‘on’);
setTimeout(resize,60);
});
}

// architecture toggle
var vidIds=[‘gVidT’,’gVidIn’,’gVidArrow’,’gVidOut’,’gTrunk’];
function setArch(train){
for(var i=0;i<vidIds.length;i++){
var el=$(vidIds[i]); if(!el) continue;
el.setAttribute(‘class’, train?’lit’:’dim’);
}
$(‘tTrain’).classList.toggle(‘on’,train);
$(‘tInfer’).classList.toggle(‘on’,!train);
$(‘archHd’).textContent = train ? ‘Training — joint video + action denoising’ : ‘Inference — reactive policy, video branch unused’;
$(‘outNote’).textContent = train ? ‘flow matching · velocity prediction’ : ‘no future video generated or attended’;
$(‘archNote’).innerHTML = train
? ‘<b>Training.</b> A video loss and an action loss share one trunk, fit as two separate marginal velocity fields under flow matching.’
: ‘<b>Inference.</b> The action network never takes the noised video latent as an argument. It still attends to <b>context</b> video tokens, so the policy stays reactive and real-time.’;
setTimeout(resize,60);
}
$(‘tTrain’).addEventListener(‘click’,function(){setArch(true);});
$(‘tInfer’).addEventListener(‘click’,function(){setArch(false);});

// ladder builders
function buildLadder(host,labels,onPick){
var h=$(host); h.innerHTML=”;
labels.forEach(function(l,i){
var b=document.createElement(‘button’);
b.className=’rung’+(i===0?’ on’:”); b.textContent=l;
b.addEventListener(‘click’,function(){
var kids=h.querySelectorAll(‘.rung’);
for(var k=0;k<kids.length;k++)kids[k].classList.remove(‘on’);
b.classList.add(‘on’); onPick(i);
});
h.appendChild(b);
});
}
function selectRung(host,i){
var kids=$(host).querySelectorAll(‘.rung’);
for(var k=0;k<kids.length;k++)kids[k].classList.toggle(‘on’,k===i);
}

// panel 1
function render1(i){
$(‘r1lbl’).textContent=LAD[i];
$(‘m1a’).textContent=D.h.mse[i].toFixed(3); $(‘f1a’).style.width=inv(D.h.mse[i],0.050,0.064)+’%’;
$(‘m1b’).textContent=D.h.l1[i].toFixed(3); $(‘f1b’).style.width=inv(D.h.l1[i],0.124,0.142)+’%’;
$(‘m1c’).textContent=D.h.a1[i].toFixed(3); $(‘f1c’).style.width=pct(D.h.a1[i],0.014,0.028)+’%’;
$(‘m1d’).textContent=D.h.a5[i].toFixed(2); $(‘f1d’).style.width=pct(D.h.a5[i],0.38,0.48)+’%’;
[‘m1a’,’m1b’,’m1c’,’m1d’].forEach(function(id){$(id).classList.toggle(‘good’,i===3);});
}
buildLadder(‘lad1’,LAD,render1); render1(0);

// panel 2
function render2(i){
$(‘r2lbl’).textContent=LAD[i];
$(‘m2a’).textContent=D.r.mse[i].toFixed(3); $(‘f2a’).style.width=inv(D.r.mse[i],0.110,0.190)+’%’;
$(‘m2b’).textContent=D.r.a5[i].toFixed(3); $(‘f2b’).style.width=pct(D.r.a5[i],0.050,0.170)+’%’;
[‘m2a’,’m2b’].forEach(function(id){$(id).classList.toggle(‘good’,i===3);});
$(‘b2m’).style.width=D.p.mean[i]+’%’; $(‘n2m’).textContent=D.p.mean[i]+’%’;
$(‘b2l’).style.width=Math.max(1,D.p.lock[i])+’%’; $(‘n2l’).textContent=D.p.lock[i]+’%’;
$(‘b2b’).style.width=D.p.cap[i]+’%’; $(‘n2b’).textContent=D.p.cap[i]+’%’;
$(‘b2d’).style.width=D.p.drink[i]+’%’; $(‘n2d’).textContent=D.p.drink[i]+’%’;
var hot=(i===3)?’#E8B84B’:’#8A8F94′;
$(‘b2l’).style.background=hot; $(‘b2b’).style.background=(i>=2)?’#E8B84B’:’#8A8F94′;
$(‘b2d’).style.background=(i>=2)?’#E8B84B’:’#8A8F94′;
}
buildLadder(‘lad2’,LAD,render2); render2(0);

// panel 3
function render3(i){
$(‘m3a’).textContent=V.mse[i].toFixed(3); $(‘f3a’).style.width=inv(V.mse[i],0.100,0.350)+’%’;
$(‘m3a’).classList.toggle(‘good’,i===3);
$(‘b3r’).style.width=V.robot[i]+’%’; $(‘n3r’).textContent=V.robot[i]+’%’;
$(‘b3h’).style.width=V.human[i]+’%’; $(‘n3h’).textContent=V.human[i]+’%’;
}
buildLadder(‘lad3’,VID,render3); render3(0);

// panel 4/5 comparison
function render4(on){
$(‘b4a’).style.width=on?’50%’:’0′; $(‘b4b’).style.width=on?’77.5%’:’0′;
$(‘b4c’).style.width=on?’50%’:’0′; $(‘b4d’).style.width=on?’56%’:’0′;
$(‘b5a’).style.width=on?’100%’:’0′; $(‘b5b’).style.width=on?’100%’:’0′;
$(‘b5c’).style.width=on?’46%’:’0′; $(‘b5d’).style.width=on?’87%’:’0′;
$(‘b6a’).style.width=on?’100%’:’0′; $(‘b6b’).style.width=on?’1.1%’:’0′;
}
render4(true);

// autoplay helpers
function autoplay(host,render,btn,n){
var busy=false;
$(btn).addEventListener(‘click’,function(){
if(busy)return; busy=true; var i=0;
selectRung(host,0); render(0);
var t=setInterval(function(){
i++; if(i>=n){clearInterval(t);busy=false;return;}
selectRung(host,i); render(i);
},900);
});
}
autoplay(‘lad1′,render1,’play1’,4);
autoplay(‘lad2′,render2,’play2’,4);
autoplay(‘lad3′,render3,’play3’,4);
$(‘play4’).addEventListener(‘click’,function(){render4(false);setTimeout(function(){render4(true);},260);});

// resize
function resize(){
try{
var h=document.body.offsetHeight+40;
if(window.parent&&window.parent!==window){
window.parent.postMessage({mtpFrame:’dyna2′,height:h},’*’);
}
}catch(e){}
}
window.addEventListener(‘load’,function(){resize();setTimeout(resize,400);});
window.addEventListener(‘resize’,resize);
setTimeout(resize,120);
})();
</script>
</body>
</html>
“>

Key Takeaways

  • Dyna-2 is a world-action model pre-trained on 1M+ hours of egocentric human video.
  • Scaling laws hold on held-out human data across four orders of magnitude.
  • For the first time, that law transfers zero-shot to robot data never seen in pre-training.
  • Video co-training — not action data — is what drives cross-embodiment generalization.
  • No weights, no API: deployment today means a vendor-operated Dyna robot cell.


Read the full technical report: Dyna-2: A 1-Million-Hour Scaling Law for World-Action Models and Announcement. Also, feel free to follow us on Twitter and don’t forget to join our 150k+ML SubReddit and Subscribe to our Newsletter. Wait! are you on telegram? now you can join us on telegram as well.

Need to partner with us for promoting your GitHub Repo OR Hugging Face Page OR Product Release OR Webinar etc.? Connect with us

The post Dyna Robotics Introduces Dyna-2: A World-Action Model Pre-Trained on 1 Million Hours of Human Video appeared first on MarkTechPost.

Show More

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button

Adblock Detected

Please consider supporting us by disabling your ad blocker