{"id":103701,"date":"2026-07-12T19:14:11","date_gmt":"2026-07-12T19:14:11","guid":{"rendered":"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/"},"modified":"2026-07-12T19:14:11","modified_gmt":"2026-07-12T19:14:11","slug":"kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi","status":"publish","type":"post","link":"https:\/\/youzum.net\/es\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/","title":{"rendered":"Kyutai Releases MuScriptor: An Open-Weight Decoder-Only Transformer for Multi-Instrument Music Transcription to MIDI"},"content":{"rendered":"<p class=\"wp-block-paragraph\">Automatic Music Transcription (AMT) converts an audio recording into symbolic notes, usually MIDI. Single-instrument transcription already works reasonably well. However, transcribing a full multi-instrument mix stays difficult. Kyutai and Mirelo team now release <strong><a href=\"https:\/\/huggingface.co\/MuScriptor\" target=\"_blank\" rel=\"noreferrer noopener\">MuScriptor<\/a><\/strong> to close that gap. It is an open-weight model trained on real, multi-instrument recordings across many genres.<\/p>\n<p class=\"wp-block-paragraph\"><strong>This article explains how MuScriptor works, what the benchmarks show, and how to run it.<\/strong><\/p>\n<h2 class=\"wp-block-heading\"><strong>What is MuScriptor?<\/strong><\/h2>\n<p class=\"wp-block-paragraph\">At its core, MuScriptor is a decoder-only Transformer for music transcription. First, it reads a mel-spectrogram of a short audio segment. Then it autoregressively predicts MIDI-like tokens for pitch, timing, and instrument. In effect, transcription becomes a language-modeling task, following the MT3 tokenization scheme.<\/p>\n<p class=\"wp-block-paragraph\">The release ships three weight variants on Hugging Face. Their sizes are <code>small<\/code> (103M), <code>medium<\/code> (307M, default), and <code>large<\/code> (1.4B). The inference code uses the MIT license. The weights use CC BY-NC 4.0, so commercial use is restricted.<\/p>\n<h2 class=\"wp-block-heading\"><strong>How the Three-Stage Pipeline Works<\/strong><\/h2>\n<p class=\"wp-block-paragraph\">MuScriptor\u2019s main idea is data, not architecture. Accordingly, training moves through three stages, and each builds on the last.<\/p>\n<ol class=\"wp-block-list\">\n<li>Pre-training uses <strong>D&lt;sub&gt;Synth&lt;\/sub&gt;<\/strong>, roughly 1.45M MIDI files. An on-the-fly pipeline synthesizes them during training. Augmentations include pitch shifting, tempo changes, velocity adjustment, and instrument randomization. Over 250 soundfonts plus random detuning yield near-infinite audio realizations.<\/li>\n<li>Fine-tuning uses <strong>D&lt;sub&gt;Real&lt;\/sub&gt;<\/strong>, an internal set of 170,000 recordings. Together they total more than 11,000 hours with aligned note annotations. Most alignments come from audio-symbolic synchronization using interpolation and dynamic time warping. Poor pairs are filtered by warping distance and a maximum time-dilation factor.<\/li>\n<li>Reinforcement learning post-training uses <strong>D&lt;sub&gt;RL&lt;\/sub&gt;<\/strong>, 300 manually verified tracks. The team applies a GRPO-like method combining REINFORCE with group-relative advantage normalization. The reward sums three F-scores: onset, frame, and offset. As a result, the model learns to favor cleaner transcriptions.<\/li>\n<\/ol>\n<p><!-- MuScriptor interactive explainer \u2014 paste into a WordPress Custom HTML block --><br \/>\n Transcribe&lt;\/button&gt;<br \/>\n      &lt;\/div&gt;<br \/>\n    &lt;\/div&gt;<\/p>\n<p>    &lt;div class=&quot;&rdquo;rollwrap&rdquo;&quot;&gt;<br \/>\n      &lt;svg class=&#8221;roll&#8221; id=&#8221;roll&#8221; viewBox=&#8221;0 0 720 300&#8243; preserveAspectRatio=&#8221;xMidYMid meet&#8221; role=&#8221;img&#8221; aria-label=&#8221;Piano roll transcription&#8221;&gt;&lt;\/svg&gt;<br \/>\n    &lt;\/div&gt;<br \/>\n    &lt;div class=&quot;&rdquo;legend&rdquo;&quot;&gt;<br \/>\n      &lt;span&gt;&lt;i style=&quot;&rdquo;background:#2563EB&rdquo;&quot;&gt;&lt;\/i&gt;True positive (detected)&lt;\/span&gt;<br \/>\n      &lt;span&gt;&lt;i style=&quot;&rdquo;background:#16A34A&rdquo;&quot;&gt;&lt;\/i&gt;False negative (missed)&lt;\/span&gt;<br \/>\n      &lt;span&gt;&lt;i style=&quot;&rdquo;background:#DC2626&Prime;&quot;&gt;&lt;\/i&gt;False positive (wrong)&lt;\/span&gt;<br \/>\n    &lt;\/div&gt;<\/p>\n<p>    &lt;div class=&quot;&rdquo;grid&rdquo;&quot;&gt;<br \/>\n      &lt;div class=&quot;&rdquo;metrics&rdquo;&quot;&gt;<br \/>\n        &lt;div class=&quot;&rdquo;metric&rdquo;&quot;&gt;<br \/>\n          &lt;small&gt;Onset F1&lt;\/small&gt;<br \/>\n          &lt;div class=&quot;&rdquo;val&rdquo;&quot; id=&quot;&rdquo;mOnset&rdquo;&quot;&gt;&mdash;&lt;\/div&gt;<br \/>\n          &lt;div class=&quot;&rdquo;baseline&rdquo;&quot; id=&quot;&rdquo;bOnset&rdquo;&quot;&gt;&lt;\/div&gt;<br \/>\n          &lt;div class=&quot;&rdquo;metricbar&rdquo;&quot;&gt;&lt;i id=&quot;&rdquo;barOnset&rdquo;&quot;&gt;&lt;\/i&gt;&lt;\/div&gt;<br \/>\n        &lt;\/div&gt;<br \/>\n        &lt;div class=&quot;&rdquo;metric&rdquo;&quot;&gt;<br \/>\n          &lt;small&gt;Multi F1&lt;\/small&gt;<br \/>\n          &lt;div class=&quot;&rdquo;val&rdquo;&quot; id=&quot;&rdquo;mMulti&rdquo;&quot;&gt;&mdash;&lt;\/div&gt;<br \/>\n          &lt;div class=&quot;&rdquo;baseline&rdquo;&quot; id=&quot;&rdquo;bMulti&rdquo;&quot;&gt;&lt;\/div&gt;<br \/>\n          &lt;div class=&quot;&rdquo;metricbar&rdquo;&quot;&gt;&lt;i id=&quot;&rdquo;barMulti&rdquo;&quot;&gt;&lt;\/i&gt;&lt;\/div&gt;<br \/>\n        &lt;\/div&gt;<br \/>\n      &lt;\/div&gt;<br \/>\n      &lt;div class=&quot;&rdquo;stream&rdquo;&quot; id=&quot;&rdquo;stream&rdquo;&quot;&gt;<br \/>\n        &lt;div class=&quot;&rdquo;h&rdquo;&quot;&gt;Event stream &middot; model.transcribe()&lt;\/div&gt;<br \/>\n        &lt;div class=&quot;&rdquo;ln&rdquo;&quot; style=&quot;&rdquo;opacity:.6&Prime;&quot;&gt;Press Transcribe to stream note events&hellip;&lt;\/div&gt;<br \/>\n      &lt;\/div&gt;<br \/>\n    &lt;\/div&gt;<\/p>\n<p>    &lt;p class=&quot;&rdquo;note&rdquo;&quot; id=&quot;&rdquo;stageNote&rdquo;&quot;&gt;&lt;\/p&gt;<br \/>\n  &lt;\/div&gt;<\/p>\n<p>  &lt;div class=&quot;&rdquo;foot&rdquo;&quot;&gt;<br \/>\n    &lt;span&gt;Note pattern is illustrative. F1 scores are real, from the MuScriptor paper (1.3B model on D&lt;sub&gt;Test&lt;\/sub&gt;).&lt;\/span&gt;<br \/>\n    &lt;span&gt;Built by &lt;b&gt;Marktechpost&lt;\/b&gt;&lt;\/span&gt;<br \/>\n  &lt;\/div&gt;<br \/>\n&lt;\/div&gt;<\/p>\n<p>&lt;script&gt;<br \/>\n(function(){<br \/>\n  var SVG=&#8221;http:\/\/www.w3.org\/2000\/svg&#8221;;<br \/>\n  var roll=document.getElementById(&#8220;roll&#8221;);<br \/>\n  var W=720,H=300,PADL=64,PADR=14,PADT=14,PADB=26;<br \/>\n  var DUR=10; \/\/ seconds shown<br \/>\n  var rows=[<br \/>\n    {name:&#8221;Drums&#8221;,inst:&#8221;drums&#8221;,y:0},<br \/>\n    {name:&#8221;E-Bass&#8221;,inst:&#8221;e_bass&#8221;,y:1},<br \/>\n    {name:&#8221;Dist. E-Gtr&#8221;,inst:&#8221;distorted_e_guitar&#8221;,y:2},<br \/>\n    {name:&#8221;Ac. Piano&#8221;,inst:&#8221;acoustic_piano&#8221;,y:3},<br \/>\n    {name:&#8221;Voice&#8221;,inst:&#8221;voice&#8221;,y:4},<br \/>\n    {name:&#8221;Strings&#8221;,inst:&#8221;string_ensemble&#8221;,y:5}<br \/>\n  ];<br \/>\n  var NR=rows.length;<br \/>\n  var rowH=(H-PADT-PADB)\/NR;<br \/>\n  function tx(t){return PADL+(t\/DUR)*(W-PADL-PADR);}<br \/>\n  function ry(r){return PADT+r*rowH;}<\/p>\n<p>  \/\/ Illustrative ground-truth notes: [row, start, dur, rank(0=easy..1=hard)]<br \/>\n  var GT=[<br \/>\n    [0,0.3,0.18,0.1],[0,0.8,0.18,0.15],[0,1.3,0.18,0.2],[0,1.8,0.18,0.1],[0,2.4,0.18,0.25],[0,3.0,0.18,0.2],[0,3.6,0.18,0.3],[0,4.2,0.18,0.2],[0,4.9,0.18,0.4],[0,5.5,0.18,0.3],[0,6.2,0.18,0.5],[0,6.9,0.18,0.4],[0,7.6,0.18,0.6],[0,8.3,0.18,0.5],[0,9.0,0.18,0.7],<br \/>\n    [1,0.4,0.8,0.2],[1,1.6,0.8,0.25],[1,3.0,0.9,0.35],[1,4.4,0.8,0.4],[1,5.8,0.9,0.5],[1,7.2,0.9,0.6],[1,8.6,0.9,0.7],<br \/>\n    [2,1.0,1.1,0.45],[2,2.6,1.0,0.55],[2,4.2,1.2,0.6],[2,6.0,1.1,0.7],[2,7.8,1.1,0.8],<br \/>\n    [3,0.6,0.7,0.3],[3,1.7,0.6,0.35],[3,2.9,0.7,0.4],[3,4.1,0.6,0.5],[3,5.3,0.7,0.55],[3,6.6,0.6,0.65],[3,8.0,0.8,0.75],<br \/>\n    [4,2.0,1.4,0.5],[4,4.0,1.5,0.6],[4,6.3,1.4,0.72],[4,8.4,1.2,0.85],<br \/>\n    [5,1.2,1.8,0.55],[5,3.6,1.9,0.68],[5,6.0,1.9,0.8],[5,8.2,1.6,0.9]<br \/>\n  ];<br \/>\n  \/\/ Illustrative false positives available: [row,start,dur,rank]<br \/>\n  var FPS=[<br \/>\n    [0,2.1,0.16,0.9],[0,5.9,0.16,0.7],[0,7.9,0.16,0.85],<br \/>\n    [1,2.4,0.6,0.8],[1,6.6,0.7,0.9],<br \/>\n    [2,3.7,0.9,0.85],[2,8.9,0.9,0.95],<br \/>\n    [3,3.5,0.5,0.9],[3,7.3,0.6,0.8],<br \/>\n    [4,3.5,0.9,0.9],[4,7.7,0.8,0.95],<br \/>\n    [5,5.1,1.2,0.88],[5,9.2,0.9,0.97]<br \/>\n  ];<\/p>\n<p>  \/\/ Real numbers from the paper (1.3B, DTest). recall\/fpRate are illustrative thresholds.<br \/>\n  var STAGES={<br \/>\n    synth:{onset:34.5,multi:16.2,onBase:26.1,recall:0.42,fp:0.85,<br \/>\n      note:&#8221;Trained only on synthetic MIDI. It finds coarse pitch activity, but misses many onsets and mislabels instruments.&#8221;},<br \/>\n    real:{onset:54.4,multi:41.6,onBase:52.5,recall:0.78,fp:0.35,<br \/>\n      note:&#8221;Fine-tuning on 170k real recordings lifts every metric by roughly 20 points over synthetic-only training.&#8221;},<br \/>\n    rl:{onset:60.4,multi:48.2,onBase:60.4,recall:0.90,fp:0.12,<br \/>\n      note:&#8221;GRPO-style RL post-training on 300 verified tracks reduces false negatives and sharpens onset timing.&#8221;}<br \/>\n  };<br \/>\n  var current=&#8221;rl&#8221;, cond=true, playing=false, playhead=0, raf=null, streamed={};<\/p>\n<p>  function selectedRows(){<br \/>\n    if(!cond) return rows.map(function(r){return r.y;});<br \/>\n    \/\/ conditioning example: focus on the core rhythm section + piano<br \/>\n    return [0,1,2,3];<br \/>\n  }<\/p>\n<p>  function classify(stage){<br \/>\n    var s=STAGES[stage];<br \/>\n    var tp=[],fn=[],fp=[];<br \/>\n    var sel=selectedRows();<br \/>\n    GT.forEach(function(n){<br \/>\n      if(cond &amp;&amp; sel.indexOf(n[0])===-1) return; \/\/ hidden by conditioning<br \/>\n      var boost=cond?0.08:0; \/\/ conditioning nudges recall up (illustrative)<br \/>\n      if(n[3] &lt;= s.recall+boost) tp.push(n); else fn.push(n);<br \/>\n    });<br \/>\n    FPS.forEach(function(n){<br \/>\n      if(cond &amp;&amp; sel.indexOf(n[0])===-1) return;<br \/>\n      var fpr=cond?s.fp*0.7:s.fp; \/\/ conditioning trims spurious notes<br \/>\n      if(n[3] &gt; (1-fpr)) fp.push(n);<br \/>\n    });<br \/>\n    return {tp:tp,fn:fn,fp:fp};<br \/>\n  }<\/p>\n<p>  function el(tag,attrs){var e=document.createElementNS(SVG,tag);for(var k in attrs)e.setAttribute(k,attrs[k]);return e;}<\/p>\n<p>  function drawGrid(){<br \/>\n    while(roll.firstChild) roll.removeChild(roll.firstChild);<br \/>\n    var sel=selectedRows();<br \/>\n    for(var r=0;r&lt;NR;r++){<br \/>\n      var active=sel.indexOf(r)!==-1;<br \/>\n      roll.appendChild(el(&#8220;rect&#8221;,{x:PADL,y:ry(r),width:W-PADL-PADR,height:rowH,<br \/>\n        fill:(r%2? &#8220;#FAFBFD&#8221;:&#8221;#FFFFFF&#8221;),opacity:active?1:0.4}));<br \/>\n      roll.appendChild(el(&#8220;line&#8221;,{x1:PADL,y1:ry(r),x2:W-PADR,y2:ry(r),stroke:&#8221;#EFF1F5&#8243;,&#8221;stroke-width&#8221;:1}));<br \/>\n      var lbl=el(&#8220;text&#8221;,{x:PADL-8,y:ry(r)+rowH\/2+4,&#8221;text-anchor&#8221;:&#8221;end&#8221;,&#8221;font-size&#8221;:11,<br \/>\n        fill:active?&#8221;#14161C&#8221;:&#8221;#B6BCC7&#8243;,&#8221;font-weight&#8221;:active?600:500,&#8221;font-family&#8221;:&#8221;Inter,sans-serif&#8221;});<br \/>\n      lbl.textContent=rows[r].name; roll.appendChild(lbl);<br \/>\n    }<br \/>\n    \/\/ time gridlines every 2s (segment markers)<br \/>\n    for(var t=0;t&lt;=DUR;t+=2){<br \/>\n      roll.appendChild(el(&#8220;line&#8221;,{x1:tx(t),y1:PADT,x2:tx(t),y2:H-PADB,stroke:&#8221;#E7E9EE&#8221;,&#8221;stroke-width&#8221;:1,&#8221;stroke-dasharray&#8221;:&#8221;2 4&#8243;}));<br \/>\n      var tl=el(&#8220;text&#8221;,{x:tx(t),y:H-9,&#8221;text-anchor&#8221;:&#8221;middle&#8221;,&#8221;font-size&#8221;:10,fill:&#8221;#9AA1AE&#8221;,&#8221;font-family&#8221;:&#8221;Inter,sans-serif&#8221;});<br \/>\n      tl.textContent=t+&#8221;s&#8221;; roll.appendChild(tl);<br \/>\n    }<br \/>\n    roll.appendChild(el(&#8220;line&#8221;,{x1:PADL,y1:H-PADB,x2:W-PADR,y2:H-PADB,stroke:&#8221;#E7E9EE&#8221;,&#8221;stroke-width&#8221;:1}));<br \/>\n  }<\/p>\n<p>  var noteLayer,headLine;<br \/>\n  function render(reveal){<br \/>\n    drawGrid();<br \/>\n    var c=classify(current);<br \/>\n    noteLayer=el(&#8220;g&#8221;,{}); roll.appendChild(noteLayer);<br \/>\n    function bar(n,color,opacity){<br \/>\n      var x=tx(n[1]),w=Math.max(6,tx(n[1]+n[2])-tx(n[1]));<br \/>\n      var y=ry(n[0])+rowH*0.28,h=rowH*0.44;<br \/>\n      var vis=(!reveal)|| (n[1]&lt;=playhead);<br \/>\n      var rect=el(&#8220;rect&#8221;,{x:x,y:y,width:w,height:h,rx:3,fill:color,opacity:vis?opacity:0});<br \/>\n      rect.style.transition=&#8221;opacity .18s&#8221;;<br \/>\n      noteLayer.appendChild(rect);<br \/>\n    }<br \/>\n    c.fn.forEach(function(n){bar(n,&#8221;#16A34A&#8221;,0.55);});<br \/>\n    c.fp.forEach(function(n){bar(n,&#8221;#DC2626&#8243;,0.8);});<br \/>\n    c.tp.forEach(function(n){bar(n,&#8221;#2563EB&#8221;,0.95);});<br \/>\n    headLine=el(&#8220;line&#8221;,{x1:tx(playhead),y1:PADT,x2:tx(playhead),y2:H-PADB,stroke:&#8221;#5B9A00&#8243;,&#8221;stroke-width&#8221;:2,opacity:reveal?0.9:0});<br \/>\n    roll.appendChild(headLine);<br \/>\n    postSize();<br \/>\n  }<\/p>\n<p>  function setMetrics(){<br \/>\n    var s=STAGES[current];<br \/>\n    animateNum(&#8220;mOnset&#8221;,s.onset); animateNum(&#8220;mMulti&#8221;,s.multi);<br \/>\n    document.getElementById(&#8220;bOnset&#8221;).textContent=&#8221;baseline YourMT3+ 32.5&#8243;;<br \/>\n    document.getElementById(&#8220;bMulti&#8221;).textContent=&#8221;baseline YourMT3+ 21.9&#8243;;<br \/>\n    document.getElementById(&#8220;barOnset&#8221;).style.width=s.onset+&#8221;%&#8221;;<br \/>\n    document.getElementById(&#8220;barMulti&#8221;).style.width=(s.multi\/60*100)+&#8221;%&#8221;;<br \/>\n    document.getElementById(&#8220;stageNote&#8221;).textContent=s.note;<br \/>\n  }<br \/>\n  function animateNum(id,to){<br \/>\n    var e=document.getElementById(id),from=parseFloat(e.textContent)||0,st=null,dur=550;<br \/>\n    function step(ts){if(!st)st=ts;var p=Math.min(1,(ts-st)\/dur);<br \/>\n      e.textContent=(from+(to-from)*(1-Math.pow(1-p,3))).toFixed(1);<br \/>\n      if(p&lt;1)requestAnimationFrame(step);}<br \/>\n    requestAnimationFrame(step);<br \/>\n  }<\/p>\n<p>  \/\/ event stream<br \/>\n  var stream=document.getElementById(&#8220;stream&#8221;);<br \/>\n  function resetStream(){stream.innerHTML=&#039;&lt;div class=&quot;&rdquo;h&rdquo;&quot;&gt;Event stream &middot; model.transcribe()&lt;\/div&gt;&rsquo;;streamed={};}<br \/>\n  function pushEvent(n,kind){<br \/>\n    var pitchNames=[&#8220;C2&#8243;,&#8221;G2&#8243;,&#8221;E3&#8243;,&#8221;C4&#8243;,&#8221;A4&#8243;,&#8221;D5&#8221;];<br \/>\n    var line=document.createElement(&#8220;div&#8221;);line.className=&#8221;ln&#8221;;<br \/>\n    var p=pitchNames[n[0]]||&#8221;C4&#8243;;var inst=rows[n[0]].inst;<br \/>\n    if(kind===&#8221;start&#8221;){<br \/>\n      line.innerHTML=&#039;&lt;span class=&quot;&rdquo;st&rdquo;&quot;&gt;NoteStart&lt;\/span&gt;  t=&lt;span class=&quot;&rdquo;pi&rdquo;&quot;&gt;&rsquo;+n[1].toFixed(2)+&rsquo;s&lt;\/span&gt;  pitch=&lt;span class=&quot;&rdquo;pi&rdquo;&quot;&gt;&rsquo;+p+&#039;&lt;\/span&gt;  inst=&lt;span class=&quot;&rdquo;in&rdquo;&quot;&gt;&rsquo;+inst+&#039;&lt;\/span&gt;&rsquo;;<br \/>\n    }else{<br \/>\n      line.innerHTML=&#039;&lt;span class=&quot;&rdquo;en&rdquo;&quot;&gt;NoteEnd&lt;\/span&gt;    t=&lt;span class=&quot;&rdquo;pi&rdquo;&quot;&gt;&rsquo;+(n[1]+n[2]).toFixed(2)+&rsquo;s&lt;\/span&gt;  (&lsquo;+inst+&rsquo;)&rsquo;;<br \/>\n    }<br \/>\n    stream.appendChild(line);stream.scrollTop=stream.scrollHeight;<br \/>\n  }<\/p>\n<p>  function play(){<br \/>\n    if(playing)return; playing=true;<br \/>\n    var btn=document.getElementById(&#8220;playBtn&#8221;);btn.disabled=true;btn.textContent=&#8221;\u25cf Transcribing\u2026&#8221;;<br \/>\n    playhead=0; resetStream();<br \/>\n    var c=classify(current);<br \/>\n    var visible=c.tp.concat(c.fp).sort(function(a,b){return a[1]-b[1];});<br \/>\n    render(true);<br \/>\n    var t0=null,SPEED=DUR\/4200; \/\/ ms mapping<br \/>\n    function frame(ts){<br \/>\n      if(!t0)t0=ts;<br \/>\n      playhead=Math.min(DUR,(ts-t0)*SPEED);<br \/>\n      \/\/ reveal notes + emit events<br \/>\n      visible.forEach(function(n,i){<br \/>\n        var key=&#8221;s&#8221;+i;<br \/>\n        if(n[1]&lt;=playhead &amp;&amp; !streamed[key]){streamed[key]=1;<br \/>\n          var rects=noteLayer.querySelectorAll(&#8220;rect&#8221;);<br \/>\n          pushEvent(n,&#8221;start&#8221;);<br \/>\n          setTimeout((function(nn){return function(){pushEvent(nn,&#8221;end&#8221;);};})(n),120);<br \/>\n        }<br \/>\n      });<br \/>\n      \/\/ update opacities<br \/>\n      Array.prototype.forEach.call(noteLayer.querySelectorAll(&#8220;rect&#8221;),function(r){});<br \/>\n      render(true);<br \/>\n      if(playhead&lt;DUR){raf=requestAnimationFrame(frame);}<br \/>\n      else{playing=false;btn.disabled=false;btn.textContent=&#8221;<img decoding=\"async\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/25b6.png\" alt=\"\u25b6\" class=\"wp-smiley\" \/> Transcribe again&#8221;;<br \/>\n        headLine.setAttribute(&#8220;opacity&#8221;,&#8221;0&#8243;);postSize();}<br \/>\n    }<br \/>\n    raf=requestAnimationFrame(frame);<br \/>\n  }<\/p>\n<p>  \/\/ controls<br \/>\n  document.getElementById(&#8220;stages&#8221;).addEventListener(&#8220;click&#8221;,function(e){<br \/>\n    var b=e.target.closest(&#8220;button&#8221;);if(!b)return;<br \/>\n    Array.prototype.forEach.call(this.children,function(c){c.classList.remove(&#8220;on&#8221;);});<br \/>\n    b.classList.add(&#8220;on&#8221;);current=b.getAttribute(&#8220;data-s&#8221;);<br \/>\n    playhead=DUR;render(false);setMetrics();postSize();<br \/>\n  });<br \/>\n  document.getElementById(&#8220;condToggle&#8221;).addEventListener(&#8220;click&#8221;,function(){<br \/>\n    cond=!cond;this.classList.toggle(&#8220;on&#8221;,cond);<br \/>\n    playhead=DUR;render(false);postSize();<br \/>\n  });<br \/>\n  document.getElementById(&#8220;playBtn&#8221;).addEventListener(&#8220;click&#8221;,play);<\/p>\n<p>  \/\/ pipeline shimmer<br \/>\n  var pnodes=document.querySelectorAll(&#8220;#pipe .node&#8221;),pi=0;<br \/>\n  setInterval(function(){<br \/>\n    pnodes.forEach(function(n){n.classList.remove(&#8220;hot&#8221;);});<br \/>\n    pnodes[pi].classList.add(&#8220;hot&#8221;);pi=(pi+1)%pnodes.length;<br \/>\n  },900);<\/p>\n<p>  \/\/ resize to parent (WordPress embed)<br \/>\n  function postSize(){<br \/>\n    try{var h=document.body.offsetHeight+40;<br \/>\n      window.parent.postMessage({muscriptorHeight:h},&#8221;*&#8221;);}catch(e){}<br \/>\n  }<br \/>\n  window.addEventListener(&#8220;resize&#8221;,function(){render(false);postSize();});<\/p>\n<p>  \/\/ init<br \/>\n  playhead=DUR;render(false);setMetrics();setTimeout(postSize,60);setTimeout(postSize,400);<br \/>\n})();<br \/>\n&lt;\/script&gt;<br \/>\n&lt;\/body&gt;<br \/>\n&lt;\/html&gt;<br \/>\n&#8220;&gt;<\/p>\n<p class=\"wp-block-paragraph\">\n<h2 class=\"wp-block-heading\"><strong>Performance<\/strong><\/h2>\n<\/p><p class=\"wp-block-paragraph\">For evaluation, the research team use <strong>D&lt;sub&gt;Test&lt;\/sub&gt;<\/strong>, 372 held-out tracks with accurate annotations. They report instrument-agnostic metrics from the <code>mir_eval<\/code> library. Among them, Multi F1 is strictest, since it also requires the correct instrument.<\/p>\n<p class=\"wp-block-paragraph\">The table below traces each training stage against the YourMT3+ baseline, using the large (~1.3B) model.<\/p>\n<figure class=\"wp-block-table is-style-stripes\">\n<table class=\"has-fixed-layout\">\n<thead>\n<tr>\n<th>Model (D&lt;sub&gt;Test&lt;\/sub&gt;)<\/th>\n<th>Onset F1<\/th>\n<th>Frame F1<\/th>\n<th>Offset F1<\/th>\n<th>Drums F1<\/th>\n<th>Multi F1<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>YourMT3+ (baseline)<\/td>\n<td>32.5<\/td>\n<td>45.5<\/td>\n<td>17.8<\/td>\n<td>41.4<\/td>\n<td>21.9<\/td>\n<\/tr>\n<tr>\n<td>MuScriptor \u00b7 D&lt;sub&gt;Synth&lt;\/sub&gt;<\/td>\n<td>34.5<\/td>\n<td>48.9<\/td>\n<td>16.1<\/td>\n<td>21.0<\/td>\n<td>16.2<\/td>\n<\/tr>\n<tr>\n<td>MuScriptor \u00b7 D&lt;sub&gt;Synth&lt;\/sub&gt; + D&lt;sub&gt;Real&lt;\/sub&gt;<\/td>\n<td>54.4<\/td>\n<td>69.3<\/td>\n<td>42.3<\/td>\n<td>43.3<\/td>\n<td>41.6<\/td>\n<\/tr>\n<tr>\n<td>MuScriptor \u00b7 D&lt;sub&gt;Synth&lt;\/sub&gt; + D&lt;sub&gt;Real&lt;\/sub&gt; + D&lt;sub&gt;RL&lt;\/sub&gt;<\/td>\n<td><strong>60.4<\/strong><\/td>\n<td><strong>73.3<\/strong><\/td>\n<td><strong>49.0<\/strong><\/td>\n<td><strong>50.2<\/strong><\/td>\n<td><strong>48.2<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p class=\"wp-block-paragraph\">Clearly, every stage improves results, and real data matters most. Synthetic-only training reaches competitive frame F1 but weak onset and multi scores. Adding D&lt;sub&gt;Real&lt;\/sub&gt; then lifts all metrics by roughly 20 points. Finally, RL post-training reduces false negatives and sharpens onset timing.<\/p>\n<p class=\"wp-block-paragraph\">Cross-dataset tests point the same way. For example, frame F1 on Dagstuhl ChoirSet rises from 51.0 to 80.7. Even so, onset and offset stay lower on hard styles like chorals.<\/p>\n<h2 class=\"wp-block-heading\"><strong>Getting Started<\/strong><\/h2>\n<p class=\"wp-block-paragraph\">Installation takes one command, and inference streams note events directly.<\/p>\n<div class=\"dm-code-snippet dark dm-normal-version default no-background-mobile\">\n<div class=\"control-language\">\n<div class=\"dm-buttons\">\n<div class=\"dm-buttons-left\">\n<div class=\"dm-button-snippet red-button\"><\/div>\n<div class=\"dm-button-snippet orange-button\"><\/div>\n<div class=\"dm-button-snippet green-button\"><\/div>\n<\/div>\n<div class=\"dm-buttons-right\"><a><span class=\"dm-copy-text\">Copy Code<\/span><span class=\"dm-copy-confirmed\">Copied<\/span><span class=\"dm-error-message\">Use a different Browser<\/span><\/a><\/div>\n<\/div>\n<pre class=\"no-line-numbers\"><code class=\"no-wrap language-php\"># pip install muscriptor   (or: uv add muscriptor)\nfrom pathlib import Path\nfrom muscriptor import TranscriptionModel\n\n# Downloads the default \"medium\" variant (also accepts \"small\" \/ \"large\")\nmodel = TranscriptionModel.load_model()\n\n# Stream note events; optionally condition on known instruments\nfor event in model.transcribe(\"audio.wav\", instruments=[\"acoustic_piano\", \"drums\"]):\n    print(event)   # NoteStartEvent \/ NoteEndEvent \/ ProgressEvent\n\n# Or write a MIDI file directly\nPath(\"out.mid\").write_bytes(model.transcribe_to_midi(\"audio.wav\"))<\/code><\/pre>\n<\/div>\n<\/div>\n<p class=\"wp-block-paragraph\">For the released models, keep <code>cfg_coef<\/code> at 1, since they are already RL post-trained. Additionally, <code>uvx muscriptor serve<\/code> launches a browser web UI with a live piano roll.<\/p>\n<h2 class=\"wp-block-heading\"><strong>Use Cases with Examples<\/strong><\/h2>\n<p class=\"wp-block-paragraph\">Because the output is standard MIDI, many workflows open up:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Producers<\/strong> can extract a MIDI bassline from a mix, then re-voice it in a DAW.<\/li>\n<li><strong>Musicologists<\/strong> can convert historical recordings into editable scores for analysis.<\/li>\n<li><strong>MIR researchers<\/strong> can feed transcriptions into chord or key recognition systems.<\/li>\n<li><strong>Educators<\/strong> can build practice tools showing a live piano roll during playback.<\/li>\n<li><strong>Developers<\/strong> can transcribe only drums by passing instrument conditioning.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\"><strong>Strengths and Weaknesses<\/strong><\/h2>\n<p class=\"wp-block-paragraph\"><strong>Strengths:<\/strong><\/p>\n<ul class=\"wp-block-list\">\n<li>Trained on 170k real recordings spanning classical to heavy metal.<\/li>\n<li>Open weights plus MIT-licensed inference code, in three size variants.<\/li>\n<li>Multi F1 of 48.2 versus 21.9 for the YourMT3+ baseline on D&lt;sub&gt;Test&lt;\/sub&gt;.<\/li>\n<li>Instrument conditioning customizes output and stabilizes cross-segment predictions.<\/li>\n<li>A streaming API emits note events and MIDI, alongside a browser web UI.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\"><strong>Weaknesses:<\/strong><\/p>\n<ul class=\"wp-block-list\">\n<li>Weights are CC BY-NC 4.0, so commercial deployment is restricted.<\/li>\n<li>The tokenizer drops velocity and cannot represent overlapping same-pitch, same-instrument notes.<\/li>\n<li>Onset and offset accuracy stay lower on chorals and similar styles.<\/li>\n<li>The large model wants a GPU for practical speed.<\/li>\n<li>The 5-second segment size limits long-range context and inference speed.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<\/p><p class=\"wp-block-paragraph\">\n<\/p><p class=\"wp-block-paragraph\">Check out the\u00a0<strong><a href=\"https:\/\/arxiv.org\/pdf\/2607.08168\" target=\"_blank\" rel=\"noreferrer noopener\">Paper<\/a>, <a href=\"https:\/\/github.com\/muscriptor\/muscriptor\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub Repo<\/a> <\/strong>and <strong><a href=\"https:\/\/huggingface.co\/MuScriptor\" target=\"_blank\" rel=\"noreferrer noopener\">Model Weights<\/a><\/strong>.<strong>\u00a0<\/strong>Also,\u00a0feel free to follow us on\u00a0<strong><a href=\"https:\/\/x.com\/intent\/follow?screen_name=marktechpost\" target=\"_blank\" rel=\"noreferrer noopener\"><mark>Twitter<\/mark><\/a><\/strong>\u00a0and don\u2019t forget to join our\u00a0<strong><a href=\"https:\/\/www.reddit.com\/r\/machinelearningnews\/\" target=\"_blank\" rel=\"noreferrer noopener\">150k+ML SubReddit<\/a><\/strong>\u00a0and Subscribe to\u00a0<strong><a href=\"https:\/\/www.aidevsignals.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">our Newsletter<\/a><\/strong>. Wait! are you on telegram?\u00a0<strong><a href=\"https:\/\/t.me\/machinelearningresearchnews\" target=\"_blank\" rel=\"noreferrer noopener\">now you can join us on telegram as well.<\/a><\/strong><\/p>\n<p class=\"wp-block-paragraph\">Need to partner with us for promoting your GitHub Repo OR Hugging Face Page OR Product Release OR Webinar etc.?\u00a0<strong><a href=\"https:\/\/forms.gle\/wbash1wF6efRj8G58\" target=\"_blank\" rel=\"noreferrer noopener\"><mark>Connect with us<\/mark><\/a><\/strong><\/p>\n<p>The post <a href=\"https:\/\/www.marktechpost.com\/2026\/07\/10\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/\">Kyutai Releases MuScriptor: An Open-Weight Decoder-Only Transformer for Multi-Instrument Music Transcription to MIDI<\/a> appeared first on <a href=\"https:\/\/www.marktechpost.com\/\">MarkTechPost<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Automatic Music Transcription (AMT) converts an audio recording into symbolic notes, usually MIDI. Single-instrument transcription already works reasonably well. However, transcribing a full multi-instrument mix stays difficult. Kyutai and Mirelo team now release MuScriptor to close that gap. It is an open-weight model trained on real, multi-instrument recordings across many genres. This article explains how MuScriptor works, what the benchmarks show, and how to run it. What is MuScriptor? At its core, MuScriptor is a decoder-only Transformer for music transcription. First, it reads a mel-spectrogram of a short audio segment. Then it autoregressively predicts MIDI-like tokens for pitch, timing, and instrument. In effect, transcription becomes a language-modeling task, following the MT3 tokenization scheme. The release ships three weight variants on Hugging Face. Their sizes are small (103M), medium (307M, default), and large (1.4B). The inference code uses the MIT license. The weights use CC BY-NC 4.0, so commercial use is restricted. How the Three-Stage Pipeline Works MuScriptor\u2019s main idea is data, not architecture. Accordingly, training moves through three stages, and each builds on the last. Pre-training uses D&lt;sub&gt;Synth&lt;\/sub&gt;, roughly 1.45M MIDI files. An on-the-fly pipeline synthesizes them during training. Augmentations include pitch shifting, tempo changes, velocity adjustment, and instrument randomization. Over 250 soundfonts plus random detuning yield near-infinite audio realizations. Fine-tuning uses D&lt;sub&gt;Real&lt;\/sub&gt;, an internal set of 170,000 recordings. Together they total more than 11,000 hours with aligned note annotations. Most alignments come from audio-symbolic synchronization using interpolation and dynamic time warping. Poor pairs are filtered by warping distance and a maximum time-dilation factor. Reinforcement learning post-training uses D&lt;sub&gt;RL&lt;\/sub&gt;, 300 manually verified tracks. The team applies a GRPO-like method combining REINFORCE with group-relative advantage normalization. The reward sums three F-scores: onset, frame, and offset. As a result, the model learns to favor cleaner transcriptions. Transcribe&lt;\/button&gt; &lt;\/div&gt; &lt;\/div&gt; &lt;div class=&#8221;rollwrap&#8221;&gt; &lt;svg class=&#8221;roll&#8221; id=&#8221;roll&#8221; viewBox=&#8221;0 0 720 300&#8243; preserveAspectRatio=&#8221;xMidYMid meet&#8221; role=&#8221;img&#8221; aria-label=&#8221;Piano roll transcription&#8221;&gt;&lt;\/svg&gt; &lt;\/div&gt; &lt;div class=&#8221;legend&#8221;&gt; &lt;span&gt;&lt;i style=&#8221;background:#2563EB&#8221;&gt;&lt;\/i&gt;True positive (detected)&lt;\/span&gt; &lt;span&gt;&lt;i style=&#8221;background:#16A34A&#8221;&gt;&lt;\/i&gt;False negative (missed)&lt;\/span&gt; &lt;span&gt;&lt;i style=&#8221;background:#DC2626&#8243;&gt;&lt;\/i&gt;False positive (wrong)&lt;\/span&gt; &lt;\/div&gt; &lt;div class=&#8221;grid&#8221;&gt; &lt;div class=&#8221;metrics&#8221;&gt; &lt;div class=&#8221;metric&#8221;&gt; &lt;small&gt;Onset F1&lt;\/small&gt; &lt;div class=&#8221;val&#8221; id=&#8221;mOnset&#8221;&gt;\u2014&lt;\/div&gt; &lt;div class=&#8221;baseline&#8221; id=&#8221;bOnset&#8221;&gt;&lt;\/div&gt; &lt;div class=&#8221;metricbar&#8221;&gt;&lt;i id=&#8221;barOnset&#8221;&gt;&lt;\/i&gt;&lt;\/div&gt; &lt;\/div&gt; &lt;div class=&#8221;metric&#8221;&gt; &lt;small&gt;Multi F1&lt;\/small&gt; &lt;div class=&#8221;val&#8221; id=&#8221;mMulti&#8221;&gt;\u2014&lt;\/div&gt; &lt;div class=&#8221;baseline&#8221; id=&#8221;bMulti&#8221;&gt;&lt;\/div&gt; &lt;div class=&#8221;metricbar&#8221;&gt;&lt;i id=&#8221;barMulti&#8221;&gt;&lt;\/i&gt;&lt;\/div&gt; &lt;\/div&gt; &lt;\/div&gt; &lt;div class=&#8221;stream&#8221; id=&#8221;stream&#8221;&gt; &lt;div class=&#8221;h&#8221;&gt;Event stream \u00b7 model.transcribe()&lt;\/div&gt; &lt;div class=&#8221;ln&#8221; style=&#8221;opacity:.6&#8243;&gt;Press Transcribe to stream note events\u2026&lt;\/div&gt; &lt;\/div&gt; &lt;\/div&gt; &lt;p class=&#8221;note&#8221; id=&#8221;stageNote&#8221;&gt;&lt;\/p&gt; &lt;\/div&gt; &lt;div class=&#8221;foot&#8221;&gt; &lt;span&gt;Note pattern is illustrative. F1 scores are real, from the MuScriptor paper (1.3B model on D&lt;sub&gt;Test&lt;\/sub&gt;).&lt;\/span&gt; &lt;span&gt;Built by &lt;b&gt;Marktechpost&lt;\/b&gt;&lt;\/span&gt; &lt;\/div&gt; &lt;\/div&gt; &lt;script&gt; (function(){ var SVG=&#8221;http:\/\/www.w3.org\/2000\/svg&#8221;; var roll=document.getElementById(&#8220;roll&#8221;); var W=720,H=300,PADL=64,PADR=14,PADT=14,PADB=26; var DUR=10; \/\/ seconds shown var rows=[ {name:&#8221;Drums&#8221;,inst:&#8221;drums&#8221;,y:0}, {name:&#8221;E-Bass&#8221;,inst:&#8221;e_bass&#8221;,y:1}, {name:&#8221;Dist. E-Gtr&#8221;,inst:&#8221;distorted_e_guitar&#8221;,y:2}, {name:&#8221;Ac. Piano&#8221;,inst:&#8221;acoustic_piano&#8221;,y:3}, {name:&#8221;Voice&#8221;,inst:&#8221;voice&#8221;,y:4}, {name:&#8221;Strings&#8221;,inst:&#8221;string_ensemble&#8221;,y:5} ]; var NR=rows.length; var rowH=(H-PADT-PADB)\/NR; function tx(t){return PADL+(t\/DUR)*(W-PADL-PADR);} function ry(r){return PADT+r*rowH;} \/\/ Illustrative ground-truth notes: [row, start, dur, rank(0=easy..1=hard)] var GT=[ [0,0.3,0.18,0.1],[0,0.8,0.18,0.15],[0,1.3,0.18,0.2],[0,1.8,0.18,0.1],[0,2.4,0.18,0.25],[0,3.0,0.18,0.2],[0,3.6,0.18,0.3],[0,4.2,0.18,0.2],[0,4.9,0.18,0.4],[0,5.5,0.18,0.3],[0,6.2,0.18,0.5],[0,6.9,0.18,0.4],[0,7.6,0.18,0.6],[0,8.3,0.18,0.5],[0,9.0,0.18,0.7], [1,0.4,0.8,0.2],[1,1.6,0.8,0.25],[1,3.0,0.9,0.35],[1,4.4,0.8,0.4],[1,5.8,0.9,0.5],[1,7.2,0.9,0.6],[1,8.6,0.9,0.7], [2,1.0,1.1,0.45],[2,2.6,1.0,0.55],[2,4.2,1.2,0.6],[2,6.0,1.1,0.7],[2,7.8,1.1,0.8], [3,0.6,0.7,0.3],[3,1.7,0.6,0.35],[3,2.9,0.7,0.4],[3,4.1,0.6,0.5],[3,5.3,0.7,0.55],[3,6.6,0.6,0.65],[3,8.0,0.8,0.75], [4,2.0,1.4,0.5],[4,4.0,1.5,0.6],[4,6.3,1.4,0.72],[4,8.4,1.2,0.85], [5,1.2,1.8,0.55],[5,3.6,1.9,0.68],[5,6.0,1.9,0.8],[5,8.2,1.6,0.9] ]; \/\/ Illustrative false positives available: [row,start,dur,rank] var FPS=[ [0,2.1,0.16,0.9],[0,5.9,0.16,0.7],[0,7.9,0.16,0.85], [1,2.4,0.6,0.8],[1,6.6,0.7,0.9], [2,3.7,0.9,0.85],[2,8.9,0.9,0.95], [3,3.5,0.5,0.9],[3,7.3,0.6,0.8], [4,3.5,0.9,0.9],[4,7.7,0.8,0.95], [5,5.1,1.2,0.88],[5,9.2,0.9,0.97] ]; \/\/ Real numbers from the paper (1.3B, DTest). recall\/fpRate are illustrative thresholds. var STAGES={ synth:{onset:34.5,multi:16.2,onBase:26.1,recall:0.42,fp:0.85, note:&#8221;Trained only on synthetic MIDI. It finds coarse pitch activity, but misses many onsets and mislabels instruments.&#8221;}, real:{onset:54.4,multi:41.6,onBase:52.5,recall:0.78,fp:0.35, note:&#8221;Fine-tuning on 170k real recordings lifts every metric by roughly 20 points over synthetic-only training.&#8221;}, rl:{onset:60.4,multi:48.2,onBase:60.4,recall:0.90,fp:0.12, note:&#8221;GRPO-style RL post-training on 300 verified tracks reduces false negatives and sharpens onset timing.&#8221;} }; var current=&#8221;rl&#8221;, cond=true, playing=false, playhead=0, raf=null, streamed={}; function selectedRows(){ if(!cond) return rows.map(function(r){return r.y;}); \/\/ conditioning example: focus on the core rhythm section + piano return [0,1,2,3]; } function classify(stage){ var s=STAGES[stage]; var tp=[],fn=[],fp=[]; var sel=selectedRows(); GT.forEach(function(n){ if(cond &amp;&amp; sel.indexOf(n[0])===-1) return; \/\/ hidden by conditioning var boost=cond?0.08:0; \/\/ conditioning nudges recall up (illustrative) if(n[3] &lt;= s.recall+boost) tp.push(n); else fn.push(n); }); FPS.forEach(function(n){ if(cond &amp;&amp; sel.indexOf(n[0])===-1) return; var fpr=cond?s.fp*0.7:s.fp; \/\/ conditioning trims spurious notes if(n[3] &gt; (1-fpr)) fp.push(n); }); return {tp:tp,fn:fn,fp:fp}; } function el(tag,attrs){var e=document.createElementNS(SVG,tag);for(var k in attrs)e.setAttribute(k,attrs[k]);return e;} function drawGrid(){ while(roll.firstChild) roll.removeChild(roll.firstChild); var sel=selectedRows(); for(var r=0;r&lt;NR;r++){ var active=sel.indexOf(r)!==-1; roll.appendChild(el(&#8220;rect&#8221;,{x:PADL,y:ry(r),width:W-PADL-PADR,height:rowH, fill:(r%2? &#8220;#FAFBFD&#8221;:&#8221;#FFFFFF&#8221;),opacity:active?1:0.4})); roll.appendChild(el(&#8220;line&#8221;,{x1:PADL,y1:ry(r),x2:W-PADR,y2:ry(r),stroke:&#8221;#EFF1F5&#8243;,&#8221;stroke-width&#8221;:1})); var lbl=el(&#8220;text&#8221;,{x:PADL-8,y:ry(r)+rowH\/2+4,&#8221;text-anchor&#8221;:&#8221;end&#8221;,&#8221;font-size&#8221;:11, fill:active?&#8221;#14161C&#8221;:&#8221;#B6BCC7&#8243;,&#8221;font-weight&#8221;:active?600:500,&#8221;font-family&#8221;:&#8221;Inter,sans-serif&#8221;}); lbl.textContent=rows[r].name; roll.appendChild(lbl); } \/\/ time gridlines every 2s (segment markers) for(var t=0;t&lt;=DUR;t+=2){ roll.appendChild(el(&#8220;line&#8221;,{x1:tx(t),y1:PADT,x2:tx(t),y2:H-PADB,stroke:&#8221;#E7E9EE&#8221;,&#8221;stroke-width&#8221;:1,&#8221;stroke-dasharray&#8221;:&#8221;2 4&#8243;})); var tl=el(&#8220;text&#8221;,{x:tx(t),y:H-9,&#8221;text-anchor&#8221;:&#8221;middle&#8221;,&#8221;font-size&#8221;:10,fill:&#8221;#9AA1AE&#8221;,&#8221;font-family&#8221;:&#8221;Inter,sans-serif&#8221;}); tl.textContent=t+&#8221;s&#8221;; roll.appendChild(tl); } roll.appendChild(el(&#8220;line&#8221;,{x1:PADL,y1:H-PADB,x2:W-PADR,y2:H-PADB,stroke:&#8221;#E7E9EE&#8221;,&#8221;stroke-width&#8221;:1})); } var noteLayer,headLine; function render(reveal){ drawGrid(); var c=classify(current); noteLayer=el(&#8220;g&#8221;,{}); roll.appendChild(noteLayer); function bar(n,color,opacity){ var x=tx(n[1]),w=Math.max(6,tx(n[1]+n[2])-tx(n[1])); var y=ry(n[0])+rowH*0.28,h=rowH*0.44; var vis=(!reveal)|| (n[1]&lt;=playhead); var rect=el(&#8220;rect&#8221;,{x:x,y:y,width:w,height:h,rx:3,fill:color,opacity:vis?opacity:0}); rect.style.transition=&#8221;opacity .18s&#8221;; noteLayer.appendChild(rect); } c.fn.forEach(function(n){bar(n,&#8221;#16A34A&#8221;,0.55);}); c.fp.forEach(function(n){bar(n,&#8221;#DC2626&#8243;,0.8);}); c.tp.forEach(function(n){bar(n,&#8221;#2563EB&#8221;,0.95);}); headLine=el(&#8220;line&#8221;,{x1:tx(playhead),y1:PADT,x2:tx(playhead),y2:H-PADB,stroke:&#8221;#5B9A00&#8243;,&#8221;stroke-width&#8221;:2,opacity:reveal?0.9:0}); roll.appendChild(headLine); postSize(); } function setMetrics(){ var s=STAGES[current]; animateNum(&#8220;mOnset&#8221;,s.onset); animateNum(&#8220;mMulti&#8221;,s.multi); document.getElementById(&#8220;bOnset&#8221;).textContent=&#8221;baseline YourMT3+ 32.5&#8243;; document.getElementById(&#8220;bMulti&#8221;).textContent=&#8221;baseline YourMT3+ 21.9&#8243;; document.getElementById(&#8220;barOnset&#8221;).style.width=s.onset+&#8221;%&#8221;; document.getElementById(&#8220;barMulti&#8221;).style.width=(s.multi\/60*100)+&#8221;%&#8221;; document.getElementById(&#8220;stageNote&#8221;).textContent=s.note; } function animateNum(id,to){ var e=document.getElementById(id),from=parseFloat(e.textContent)||0,st=null,dur=550; function step(ts){if(!st)st=ts;var p=Math.min(1,(ts-st)\/dur); e.textContent=(from+(to-from)*(1-Math.pow(1-p,3))).toFixed(1); if(p&lt;1)requestAnimationFrame(step);} requestAnimationFrame(step); } \/\/ event stream var stream=document.getElementById(&#8220;stream&#8221;); function resetStream(){stream.innerHTML='&lt;div class=&#8221;h&#8221;&gt;Event stream \u00b7 model.transcribe()&lt;\/div&gt;&#8217;;streamed={};} function pushEvent(n,kind){ var pitchNames=[&#8220;C2&#8243;,&#8221;G2&#8243;,&#8221;E3&#8243;,&#8221;C4&#8243;,&#8221;A4&#8243;,&#8221;D5&#8221;]; var line=document.createElement(&#8220;div&#8221;);line.className=&#8221;ln&#8221;; var p=pitchNames[n[0]]||&#8221;C4&#8243;;var inst=rows[n[0]].inst; if(kind===&#8221;start&#8221;){ line.innerHTML='&lt;span class=&#8221;st&#8221;&gt;NoteStart&lt;\/span&gt; t=&lt;span class=&#8221;pi&#8221;&gt;&#8217;+n[1].toFixed(2)+&#8217;s&lt;\/span&gt; pitch=&lt;span class=&#8221;pi&#8221;&gt;&#8217;+p+'&lt;\/span&gt; inst=&lt;span class=&#8221;in&#8221;&gt;&#8217;+inst+'&lt;\/span&gt;&#8217;; }else{ line.innerHTML='&lt;span class=&#8221;en&#8221;&gt;NoteEnd&lt;\/span&gt; t=&lt;span class=&#8221;pi&#8221;&gt;&#8217;+(n[1]+n[2]).toFixed(2)+&#8217;s&lt;\/span&gt; (&#8216;+inst+&#8217;)&#8217;; } stream.appendChild(line);stream.scrollTop=stream.scrollHeight; } function play(){ if(playing)return; playing=true; var btn=document.getElementById(&#8220;playBtn&#8221;);btn.disabled=true;btn.textContent=&#8221;\u25cf Transcribing\u2026&#8221;; playhead=0; resetStream(); var c=classify(current); var visible=c.tp.concat(c.fp).sort(function(a,b){return a[1]-b[1];}); render(true); var t0=null,SPEED=DUR\/4200; \/\/ ms mapping function frame(ts){ if(!t0)t0=ts; playhead=Math.min(DUR,(ts-t0)*SPEED); \/\/ reveal notes + emit events visible.forEach(function(n,i){ var key=&#8221;s&#8221;+i; if(n[1]&lt;=playhead &amp;&amp; !streamed[key]){streamed[key]=1; var rects=noteLayer.querySelectorAll(&#8220;rect&#8221;); pushEvent(n,&#8221;start&#8221;); setTimeout((function(nn){return function(){pushEvent(nn,&#8221;end&#8221;);};})(n),120); } }); \/\/ update opacities Array.prototype.forEach.call(noteLayer.querySelectorAll(&#8220;rect&#8221;),function(r){}); render(true); if(playhead&lt;DUR){raf=requestAnimationFrame(frame);} else{playing=false;btn.disabled=false;btn.textContent=&#8221; Transcribe again&#8221;; headLine.setAttribute(&#8220;opacity&#8221;,&#8221;0&#8243;);postSize();} } raf=requestAnimationFrame(frame); } \/\/ controls document.getElementById(&#8220;stages&#8221;).addEventListener(&#8220;click&#8221;,function(e){ var b=e.target.closest(&#8220;button&#8221;);if(!b)return; Array.prototype.forEach.call(this.children,function(c){c.classList.remove(&#8220;on&#8221;);}); b.classList.add(&#8220;on&#8221;);current=b.getAttribute(&#8220;data-s&#8221;); playhead=DUR;render(false);setMetrics();postSize(); }); document.getElementById(&#8220;condToggle&#8221;).addEventListener(&#8220;click&#8221;,function(){ cond=!cond;this.classList.toggle(&#8220;on&#8221;,cond); playhead=DUR;render(false);postSize(); }); document.getElementById(&#8220;playBtn&#8221;).addEventListener(&#8220;click&#8221;,play); \/\/ pipeline shimmer var pnodes=document.querySelectorAll(&#8220;#pipe .node&#8221;),pi=0; setInterval(function(){ pnodes.forEach(function(n){n.classList.remove(&#8220;hot&#8221;);}); pnodes[pi].classList.add(&#8220;hot&#8221;);pi=(pi+1)%pnodes.length; },900); \/\/ resize to parent (WordPress embed) function postSize(){ try{var h=document.body.offsetHeight+40; window.parent.postMessage({muscriptorHeight:h},&#8221;*&#8221;);}catch(e){} } window.addEventListener(&#8220;resize&#8221;,function(){render(false);postSize();}); \/\/ init playhead=DUR;render(false);setMetrics();setTimeout(postSize,60);setTimeout(postSize,400); })(); &lt;\/script&gt; &lt;\/body&gt; &lt;\/html&gt; &#8220;&gt; Performance For evaluation, the research team use D&lt;sub&gt;Test&lt;\/sub&gt;, 372 held-out tracks with accurate annotations. They report instrument-agnostic metrics from the mir_eval library. Among them, Multi F1 is strictest, since it also requires the correct instrument. The table below traces each training stage against the YourMT3+ baseline, using the large (~1.3B) model. Model (D&lt;sub&gt;Test&lt;\/sub&gt;) Onset F1 Frame F1 Offset F1 Drums F1 Multi F1 YourMT3+ (baseline) 32.5 45.5 17.8 41.4 21.9 MuScriptor \u00b7 D&lt;sub&gt;Synth&lt;\/sub&gt; 34.5 48.9 16.1 21.0 16.2 MuScriptor \u00b7 D&lt;sub&gt;Synth&lt;\/sub&gt; + D&lt;sub&gt;Real&lt;\/sub&gt; 54.4 69.3 42.3 43.3 41.6 MuScriptor \u00b7 D&lt;sub&gt;Synth&lt;\/sub&gt; + D&lt;sub&gt;Real&lt;\/sub&gt; + D&lt;sub&gt;RL&lt;\/sub&gt; 60.4 73.3 49.0 50.2 48.2 Clearly, every stage improves results, and real data matters most. Synthetic-only training reaches competitive frame F1 but weak onset and multi scores. Adding D&lt;sub&gt;Real&lt;\/sub&gt; then lifts all metrics by roughly 20 points. Finally, RL post-training reduces false negatives and sharpens onset timing.<\/p>","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"pmpro_default_level":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_pvb_checkbox_block_on_post":false,"footnotes":""},"categories":[52,5,7,1],"tags":[],"class_list":["post-103701","post","type-post","status-publish","format-standard","hentry","category-ai-club","category-committee","category-news","category-uncategorized","pmpro-has-access"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kyutai Releases MuScriptor: An Open-Weight Decoder-Only Transformer for Multi-Instrument Music Transcription to MIDI - YouZum<\/title>\n<meta name=\"description\" content=\"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e42\u0e14\u0e23\u0e19\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/youzum.net\/es\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kyutai Releases MuScriptor: An Open-Weight Decoder-Only Transformer for Multi-Instrument Music Transcription to MIDI - YouZum\" \/>\n<meta property=\"og:description\" content=\"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e42\u0e14\u0e23\u0e19\" \/>\n<meta property=\"og:url\" content=\"https:\/\/youzum.net\/es\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/\" \/>\n<meta property=\"og:site_name\" content=\"YouZum\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DroneAssociationTH\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-12T19:14:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/25b6.png\" \/>\n<meta name=\"author\" content=\"admin NU\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin NU\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/\"},\"author\":{\"name\":\"admin NU\",\"@id\":\"https:\/\/yousum.gpucore.co\/#\/schema\/person\/97fa48242daf3908e4d9a5f26f4a059c\"},\"headline\":\"Kyutai Releases MuScriptor: An Open-Weight Decoder-Only Transformer for Multi-Instrument Music Transcription to MIDI\",\"datePublished\":\"2026-07-12T19:14:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/\"},\"wordCount\":2290,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/yousum.gpucore.co\/#organization\"},\"image\":{\"@id\":\"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/25b6.png\",\"articleSection\":[\"AI\",\"Committee\",\"News\",\"Uncategorized\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/\",\"url\":\"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/\",\"name\":\"Kyutai Releases MuScriptor: An Open-Weight Decoder-Only Transformer for Multi-Instrument Music Transcription to MIDI - YouZum\",\"isPartOf\":{\"@id\":\"https:\/\/yousum.gpucore.co\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/25b6.png\",\"datePublished\":\"2026-07-12T19:14:11+00:00\",\"description\":\"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e42\u0e14\u0e23\u0e19\",\"breadcrumb\":{\"@id\":\"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/#primaryimage\",\"url\":\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/25b6.png\",\"contentUrl\":\"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/25b6.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/youzum.net\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kyutai Releases MuScriptor: An Open-Weight Decoder-Only Transformer for Multi-Instrument Music Transcription to MIDI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/yousum.gpucore.co\/#website\",\"url\":\"https:\/\/yousum.gpucore.co\/\",\"name\":\"YouSum\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/yousum.gpucore.co\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/yousum.gpucore.co\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/yousum.gpucore.co\/#organization\",\"name\":\"Drone Association Thailand\",\"url\":\"https:\/\/yousum.gpucore.co\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/yousum.gpucore.co\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/youzum.net\/wp-content\/uploads\/2024\/11\/tranparent-logo.png\",\"contentUrl\":\"https:\/\/youzum.net\/wp-content\/uploads\/2024\/11\/tranparent-logo.png\",\"width\":300,\"height\":300,\"caption\":\"Drone Association Thailand\"},\"image\":{\"@id\":\"https:\/\/yousum.gpucore.co\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/DroneAssociationTH\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/yousum.gpucore.co\/#\/schema\/person\/97fa48242daf3908e4d9a5f26f4a059c\",\"name\":\"admin NU\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/yousum.gpucore.co\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/youzum.net\/wp-content\/uploads\/avatars\/2\/1746849356-bpfull.png\",\"contentUrl\":\"https:\/\/youzum.net\/wp-content\/uploads\/avatars\/2\/1746849356-bpfull.png\",\"caption\":\"admin NU\"},\"url\":\"https:\/\/youzum.net\/es\/members\/adminnu\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Kyutai Releases MuScriptor: An Open-Weight Decoder-Only Transformer for Multi-Instrument Music Transcription to MIDI - YouZum","description":"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e42\u0e14\u0e23\u0e19","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/youzum.net\/es\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/","og_locale":"es_ES","og_type":"article","og_title":"Kyutai Releases MuScriptor: An Open-Weight Decoder-Only Transformer for Multi-Instrument Music Transcription to MIDI - YouZum","og_description":"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e42\u0e14\u0e23\u0e19","og_url":"https:\/\/youzum.net\/es\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/","og_site_name":"YouZum","article_publisher":"https:\/\/www.facebook.com\/DroneAssociationTH\/","article_published_time":"2026-07-12T19:14:11+00:00","og_image":[{"url":"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/25b6.png","type":"","width":"","height":""}],"author":"admin NU","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"admin NU","Tiempo de lectura":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/#article","isPartOf":{"@id":"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/"},"author":{"name":"admin NU","@id":"https:\/\/yousum.gpucore.co\/#\/schema\/person\/97fa48242daf3908e4d9a5f26f4a059c"},"headline":"Kyutai Releases MuScriptor: An Open-Weight Decoder-Only Transformer for Multi-Instrument Music Transcription to MIDI","datePublished":"2026-07-12T19:14:11+00:00","mainEntityOfPage":{"@id":"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/"},"wordCount":2290,"commentCount":0,"publisher":{"@id":"https:\/\/yousum.gpucore.co\/#organization"},"image":{"@id":"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/#primaryimage"},"thumbnailUrl":"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/25b6.png","articleSection":["AI","Committee","News","Uncategorized"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/","url":"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/","name":"Kyutai Releases MuScriptor: An Open-Weight Decoder-Only Transformer for Multi-Instrument Music Transcription to MIDI - YouZum","isPartOf":{"@id":"https:\/\/yousum.gpucore.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/#primaryimage"},"image":{"@id":"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/#primaryimage"},"thumbnailUrl":"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/25b6.png","datePublished":"2026-07-12T19:14:11+00:00","description":"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e42\u0e14\u0e23\u0e19","breadcrumb":{"@id":"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/#primaryimage","url":"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/25b6.png","contentUrl":"https:\/\/s.w.org\/images\/core\/emoji\/17.0.2\/72x72\/25b6.png"},{"@type":"BreadcrumbList","@id":"https:\/\/youzum.net\/kyutai-releases-muscriptor-an-open-weight-decoder-only-transformer-for-multi-instrument-music-transcription-to-midi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/youzum.net\/"},{"@type":"ListItem","position":2,"name":"Kyutai Releases MuScriptor: An Open-Weight Decoder-Only Transformer for Multi-Instrument Music Transcription to MIDI"}]},{"@type":"WebSite","@id":"https:\/\/yousum.gpucore.co\/#website","url":"https:\/\/yousum.gpucore.co\/","name":"YouSum","description":"","publisher":{"@id":"https:\/\/yousum.gpucore.co\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/yousum.gpucore.co\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/yousum.gpucore.co\/#organization","name":"Drone Association Thailand","url":"https:\/\/yousum.gpucore.co\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/yousum.gpucore.co\/#\/schema\/logo\/image\/","url":"https:\/\/youzum.net\/wp-content\/uploads\/2024\/11\/tranparent-logo.png","contentUrl":"https:\/\/youzum.net\/wp-content\/uploads\/2024\/11\/tranparent-logo.png","width":300,"height":300,"caption":"Drone Association Thailand"},"image":{"@id":"https:\/\/yousum.gpucore.co\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DroneAssociationTH\/"]},{"@type":"Person","@id":"https:\/\/yousum.gpucore.co\/#\/schema\/person\/97fa48242daf3908e4d9a5f26f4a059c","name":"admin NU","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/yousum.gpucore.co\/#\/schema\/person\/image\/","url":"https:\/\/youzum.net\/wp-content\/uploads\/avatars\/2\/1746849356-bpfull.png","contentUrl":"https:\/\/youzum.net\/wp-content\/uploads\/avatars\/2\/1746849356-bpfull.png","caption":"admin NU"},"url":"https:\/\/youzum.net\/es\/members\/adminnu\/"}]}},"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"admin NU","author_link":"https:\/\/youzum.net\/es\/members\/adminnu\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/youzum.net\/es\/category\/ai-club\/\" rel=\"category tag\">AI<\/a> <a href=\"https:\/\/youzum.net\/es\/category\/committee\/\" rel=\"category tag\">Committee<\/a> <a href=\"https:\/\/youzum.net\/es\/category\/news\/\" rel=\"category tag\">News<\/a> <a href=\"https:\/\/youzum.net\/es\/category\/uncategorized\/\" rel=\"category tag\">Uncategorized<\/a>","rttpg_excerpt":"Automatic Music Transcription (AMT) converts an audio recording into symbolic notes, usually MIDI. Single-instrument transcription already works reasonably well. However, transcribing a full multi-instrument mix stays difficult. Kyutai and Mirelo team now release MuScriptor to close that gap. It is an open-weight model trained on real, multi-instrument recordings across many genres. This article explains how&hellip;","_links":{"self":[{"href":"https:\/\/youzum.net\/es\/wp-json\/wp\/v2\/posts\/103701","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/youzum.net\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/youzum.net\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/youzum.net\/es\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/youzum.net\/es\/wp-json\/wp\/v2\/comments?post=103701"}],"version-history":[{"count":0,"href":"https:\/\/youzum.net\/es\/wp-json\/wp\/v2\/posts\/103701\/revisions"}],"wp:attachment":[{"href":"https:\/\/youzum.net\/es\/wp-json\/wp\/v2\/media?parent=103701"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/youzum.net\/es\/wp-json\/wp\/v2\/categories?post=103701"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/youzum.net\/es\/wp-json\/wp\/v2\/tags?post=103701"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}