<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Magenta</title>
    <description>A research project exploring the role of machine learning in the process of creating art and music.</description>
    <link>https://magenta.withgoogle.com/</link>
    <atom:link href="https://magenta.withgoogle.com/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Thu, 04 Jun 2026 16:30:40 -0700</pubDate>
    <lastBuildDate>Thu, 04 Jun 2026 16:30:40 -0700</lastBuildDate>
    <generator>Jekyll v4.4.1</generator>
    
      <item>
        <title>Magenta RealTime 2: Open &amp; Local Live Music Models</title>
        <description>&lt;!-- disableFinding(LINE_OVER_80) --&gt;
&lt;!-- disableFinding(G3DOC_ATTRIBUTE) --&gt;
&lt;!-- disableFinding(G3DOC_JINJA) --&gt;
&lt;!-- disableFinding(LIST_NO_LINE) --&gt;
&lt;!-- disableFinding(WHITESPACE_LINES) --&gt;
&lt;!-- disableFinding(LINK_ID) --&gt;
&lt;!-- disableFinding(SPACES) --&gt;
&lt;!-- disableFinding(IMAGE_ALT_TEXT_INACCESSIBLE) --&gt;
&lt;p&gt;We’re excited to share Magenta RealTime 2 (MRT2), a state-of-the-art open model and efficient real-time inference engine that enables you to build and play AI musical instruments on your laptop!&lt;/p&gt;

&lt;p&gt;To get started, &lt;a href=&quot;/mrt2&quot;&gt;download the apps&lt;/a&gt; on your MacBook (requires Apple Silicon).&lt;/p&gt;

&lt;div align=&quot;center&quot; class=&quot;action-container&quot; style=&quot;margin-bottom: 32px&quot;&gt;
  &lt;a class=&quot;action grey&quot; href=&quot;/mrt2&quot;&gt;
    &lt;span class=&quot;studio-icon&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot;?&gt;
&lt;!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  --&gt;
&lt;svg version=&quot;1.1&quot; id=&quot;Capa_1&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; x=&quot;0px&quot; y=&quot;0px&quot; viewBox=&quot;0 0 24.637 24.637&quot; style=&quot;enable-background:new 0 0 24.637 24.637;&quot; xml:space=&quot;preserve&quot;&gt;
&lt;g&gt;
     &lt;path d=&quot;M18.537,6.945H1.432C0.641,6.945,0,7.582,0,8.369v14.262c0,0.785,0.641,1.426,1.432,1.426h17.105
          c0.785,0,1.426-0.641,1.426-1.426V8.369C19.963,7.582,19.322,6.945,18.537,6.945z M6.817,8.016c0.395,0,0.712,0.318,0.712,0.713
          c0,0.393-0.317,0.713-0.712,0.713c-0.392,0-0.71-0.32-0.71-0.713C6.107,8.334,6.426,8.016,6.817,8.016z M4.639,8.016
          c0.391,0,0.71,0.318,0.71,0.713c0,0.393-0.319,0.713-0.71,0.713c-0.397,0-0.717-0.32-0.717-0.713
          C3.922,8.334,4.241,8.016,4.639,8.016z M2.494,8.016c0.396,0,0.715,0.318,0.715,0.713c0,0.393-0.318,0.713-0.715,0.713
          c-0.39,0-0.709-0.32-0.709-0.713C1.785,8.334,2.104,8.016,2.494,8.016z M18.537,22.631H1.432V10.527h17.105
          C18.537,10.527,18.537,22.631,18.537,22.631z M18.537,9.101H8.559V8.387h9.979L18.537,9.101L18.537,9.101z&quot; /&gt;
     &lt;path d=&quot;M23.209,0.58H6.102c-0.79,0-1.426,0.637-1.426,1.426v4.133h1.426V4.162h17.107v12.104h-2.483v1.426h2.483
          c0.786,0,1.428-0.641,1.428-1.426V2.006C24.637,1.217,23.995,0.58,23.209,0.58z M7.17,3.076c-0.394,0-0.711-0.316-0.711-0.711
          c0-0.398,0.317-0.713,0.711-0.713c0.393,0,0.713,0.314,0.713,0.713C7.883,2.76,7.562,3.076,7.17,3.076z M9.309,3.076
          c-0.396,0-0.713-0.316-0.713-0.711c0-0.398,0.316-0.713,0.713-0.713c0.394,0,0.714,0.314,0.714,0.713
          C10.022,2.76,9.702,3.076,9.309,3.076z M11.494,3.076c-0.396,0-0.717-0.316-0.717-0.711c0-0.398,0.32-0.713,0.717-0.713
          c0.389,0,0.707,0.314,0.707,0.713C12.201,2.76,11.883,3.076,11.494,3.076z M23.209,2.734h-9.98V2.019h9.98V2.734z&quot; /&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/span&gt;
    Plugin Bundle (MacOS)&lt;/a&gt;
  &lt;a class=&quot;action grey&quot; href=&quot;https://github.com/magenta/magenta-realtime&quot; target=&quot;_blank&quot;&gt;
    &lt;span class=&quot;studio-icon&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot;&gt;&lt;path d=&quot;M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z&quot; /&gt;&lt;/svg&gt;
&lt;/span&gt;
    View on GitHub&lt;/a&gt;
  &lt;a class=&quot;action grey&quot; href=&quot;https://huggingface.co/google/magenta-realtime-2&quot; target=&quot;_blank&quot;&gt;
    &lt;span class=&quot;studio-icon&quot;&gt;&lt;svg width=&quot;1500&quot; height=&quot;1500&quot; viewBox=&quot;0 0 1500 1500&quot; fill=&quot;none&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
&lt;path fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; d=&quot;M1348.72 1168.37C1360.03 1142.67 1361.13 1113.74 1351.94 1087.55C1361.08 1064.58 1362.52 1038.87 1356.33 1014.97C1353.1 1002.63 1347.95 991.175 1341.12 980.965C1342.52 976.029 1343.6 970.929 1344.36 965.659C1349.44 930.378 1337.38 896.408 1313.59 870.403C1302.83 858.64 1289.91 849.894 1275.97 844.105C1284.44 805.888 1288.9 766.185 1288.9 725.475C1288.9 425.12 1046.33 181.36 746.772 181.36C447.213 181.36 204.644 425.12 204.644 725.475C204.644 767.136 209.317 807.743 218.176 846.781C206.46 852.482 195.618 860.354 186.431 870.403C162.65 896.406 150.585 930.384 155.658 965.659C156.415 970.926 157.505 976.031 158.904 980.965C152.074 991.175 146.922 1002.63 143.692 1014.97C137.445 1038.82 138.958 1064.63 148.078 1087.54C138.888 1113.74 139.992 1142.68 151.301 1168.37C171.605 1214.49 218.813 1243.21 283.614 1269C355.654 1297.68 435.229 1318.64 516.715 1318.64C582.532 1318.64 639.737 1302.62 681.509 1265.68C702.919 1268.26 724.699 1269.59 746.772 1269.59C770.797 1269.59 794.475 1268.02 817.706 1264.97C859.527 1302.39 917.048 1318.64 983.305 1318.64C1065.11 1318.64 1144.1 1297.79 1216.41 1269C1281.21 1243.21 1328.42 1214.49 1348.72 1168.37ZM1201.48 1231.5C1265.52 1206.01 1298.5 1182.26 1311.77 1152.11C1321.11 1130.89 1319.46 1106.41 1307.02 1086.84C1323.52 1061.54 1320.36 1036.98 1317.28 1025.19C1313.34 1010.15 1305.2 997.644 1294.14 988.661C1299.38 979.912 1302.89 970.461 1304.41 959.918C1307.59 937.779 1300.28 915.653 1283.81 897.648C1278.56 891.903 1272.36 887.26 1265.59 883.763C1253.45 877.49 1239.44 874.904 1225.67 876.26C1229.83 862.94 1233.45 849.38 1236.51 835.609C1244.38 800.161 1248.53 763.306 1248.53 725.476C1248.53 447.262 1023.89 221.726 746.772 221.726C469.656 221.726 245.01 447.262 245.01 725.476C245.01 763.44 249.193 800.424 257.122 835.988C260.135 849.506 263.69 862.818 267.762 875.901C254.074 875.791 240.392 879.604 228.93 886.961C224.276 889.948 219.988 893.519 216.214 897.648C199.743 915.653 192.427 937.779 195.613 959.918C197.128 970.461 200.637 979.912 205.881 988.661C194.823 997.644 186.678 1010.15 182.742 1025.19C179.66 1036.98 176.501 1061.54 192.997 1086.84C180.564 1106.41 178.908 1130.89 188.245 1152.11C201.517 1182.26 234.498 1206.01 298.542 1231.5C367.636 1259 441.978 1278.27 516.715 1278.27C584.432 1278.27 634.963 1259.67 667.239 1222.93C693.142 1227.07 719.707 1229.23 746.772 1229.23C775.811 1229.23 804.275 1226.75 831.964 1221.99C864.201 1259.36 915.014 1278.28 983.305 1278.28C1058.36 1278.28 1132.11 1259.11 1201.48 1231.5Z&quot; fill=&quot;black&quot; /&gt;
&lt;path d=&quot;M635.221 1179.69C670.856 1127.23 668.331 1087.85 619.437 1038.79C570.542 989.739 542.081 917.979 542.081 917.979C542.081 917.979 531.45 876.301 507.236 880.136C483.022 883.971 465.244 946.254 515.964 984.357C566.684 1022.45 505.864 1048.33 486.35 1012.55C466.836 976.778 413.552 884.803 385.92 867.214C358.3 849.625 338.851 859.479 345.365 895.736C351.878 931.993 467.393 1019.87 456.154 1038.89C444.914 1057.9 405.304 1016.55 405.304 1016.55C405.304 1016.55 281.359 903.302 254.374 932.812C227.389 962.322 274.846 987.048 342.477 1028.15C410.121 1069.25 415.365 1080.1 405.77 1095.65C396.162 1111.2 246.864 984.825 232.84 1038.4C218.83 1091.97 385.208 1107.52 374.939 1144.5C364.671 1181.5 257.741 1074.5 235.87 1116.19C213.987 1157.89 386.762 1206.89 388.16 1207.25C443.969 1221.79 585.705 1252.59 635.221 1179.69Z&quot; fill=&quot;black&quot; /&gt;
&lt;path d=&quot;M864.806 1179.69C829.171 1127.23 831.696 1087.85 880.591 1038.79C929.485 989.739 957.946 917.979 957.946 917.979C957.946 917.979 968.577 876.301 992.791 880.136C1017.01 883.971 1034.78 946.254 984.064 984.357C933.344 1022.45 994.164 1048.33 1013.68 1012.55C1033.19 976.778 1086.47 884.803 1114.11 867.214C1141.73 849.625 1161.18 859.479 1154.66 895.736C1148.15 931.993 1032.63 1019.87 1043.87 1038.89C1055.11 1057.9 1094.72 1016.55 1094.72 1016.55C1094.72 1016.55 1218.67 903.302 1245.65 932.812C1272.64 962.322 1225.18 987.048 1157.55 1028.15C1089.91 1069.25 1084.66 1080.1 1094.26 1095.65C1103.87 1111.2 1253.16 984.825 1267.19 1038.4C1281.2 1091.97 1114.82 1107.52 1125.09 1144.5C1135.36 1181.5 1242.29 1074.5 1264.16 1116.19C1286.04 1157.89 1113.27 1206.89 1111.87 1207.25C1056.06 1221.79 914.322 1252.59 864.806 1179.69Z&quot; fill=&quot;black&quot; /&gt;
&lt;path d=&quot;M675.913 853.201C679.674 855.39 683.766 857.524 688.891 860.001C705.59 868.074 725.878 873.106 750.564 873.106C777.366 873.106 799.015 867.175 816.53 857.819C821.193 855.328 825.305 852.779 828.701 850.52C818.286 841.142 806.116 833.688 792.747 828.717C791.172 828.131 789.58 827.58 787.973 827.064C782.46 825.295 776.761 834.148 770.915 843.232C765.317 851.929 759.582 860.838 753.744 860.838C748.268 860.838 742.882 851.802 737.615 842.964C732.157 833.804 726.824 824.857 721.649 826.403C704.266 831.599 688.648 840.906 675.913 853.201Z&quot; fill=&quot;black&quot; /&gt;
&lt;path fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; d=&quot;M849.695 285.599C816.641 277.833 782.184 273.727 746.772 273.727C684.644 273.727 625.458 286.368 571.624 309.227C448.998 361.299 354.15 466.394 315.593 595.883C303.37 636.933 296.805 680.435 296.805 725.476C296.805 761.974 301.116 797.461 309.255 831.452C309.366 831.317 309.477 831.183 309.587 831.05C322.652 815.372 341.389 806.727 362.353 806.727C379.135 806.727 396.395 812.304 413.669 823.302C425.128 830.608 437.792 843.556 450.832 859.832C462.913 843.01 479.824 831.83 499.169 828.775C502.872 828.19 506.628 827.891 510.344 827.891H510.357C554.525 827.891 581.096 866.358 591.144 900.964C596.129 912.651 620.058 965.899 656.056 1002.01C710.873 1057.01 724.595 1113.75 697.461 1174.54C713.655 1176.32 730.108 1177.23 746.772 1177.23C747.445 1177.23 748.117 1177.22 748.789 1177.22L749.307 1177.22L750.29 1177.21C767.865 1177.08 785.2 1175.93 802.241 1173.83C775.534 1113.31 789.363 1056.8 843.964 1002.01C879.962 965.899 903.891 912.651 908.876 900.964C918.924 866.358 945.495 827.891 989.663 827.891H989.676C993.392 827.891 997.147 828.19 1000.85 828.775C1020.2 831.83 1037.11 843.01 1049.19 859.832C1062.23 843.556 1074.89 830.608 1086.35 823.302C1103.62 812.304 1120.89 806.727 1137.67 806.727C1156.17 806.727 1172.94 813.46 1185.6 825.819C1192.89 793.547 1196.74 759.963 1196.74 725.476C1196.74 709.883 1195.95 694.474 1194.42 679.288C1174.88 486.115 1034.11 328.922 849.695 285.599ZM652.93 884.744C603.394 843.337 581.677 781.979 581.677 742.068C581.677 711.101 602.797 721.605 636.467 738.35C666.402 753.238 706.256 773.059 750.01 773.059C793.763 773.059 833.618 753.238 863.553 738.35C897.223 721.605 918.343 711.101 918.343 742.068C918.343 780.4 900.71 842.529 852.745 880.809C827.567 900.728 794.093 914.485 750.509 914.485C709.56 914.485 677.534 902.691 652.93 884.744ZM919.726 619.809C914.761 612.591 909.541 605.002 902.523 602.514C896.04 600.216 887.549 603.626 879.395 606.901C868.994 611.078 859.142 615.035 854.701 606.649C837.914 574.953 849.899 535.595 881.471 518.742C913.042 501.889 952.244 513.922 969.031 545.618C985.818 577.315 973.833 616.672 942.261 633.525C932.68 638.64 926.437 629.564 919.726 619.809ZM597.494 602.514C590.477 605.002 585.256 612.591 580.291 619.809C573.581 629.564 567.337 638.64 557.756 633.525C526.185 616.672 514.2 577.315 530.986 545.618C547.773 513.922 586.975 501.889 618.547 518.742C650.118 535.595 662.103 574.953 645.317 606.649C640.876 615.035 631.023 611.078 620.623 606.901C612.468 603.626 603.977 600.216 597.494 602.514ZM1093.15 621.477C1093.15 644.811 1074.31 663.727 1051.07 663.727C1027.83 663.727 1008.98 644.811 1008.98 621.477C1008.98 598.143 1027.83 579.227 1051.07 579.227C1074.31 579.227 1093.15 598.143 1093.15 621.477ZM448.95 663.727C472.192 663.727 491.033 644.811 491.033 621.477C491.033 598.143 472.192 579.227 448.95 579.227C425.708 579.227 406.866 598.143 406.866 621.477C406.866 644.811 425.708 663.727 448.95 663.727Z&quot; fill=&quot;black&quot; /&gt;
&lt;/svg&gt;
&lt;/span&gt;
    Models&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Unlike other large generative music models that work offline to turn a prompt into a track, MRT2 is a live, interactive model that you can control with MIDI and audio, in addition to text. It performs low-latency on-device inference to respond to your inputs instantly. You can run it as a standalone app, drop it into your DAW, or integrate it into other music software.&lt;/p&gt;

&lt;p&gt;In addition to the open-weights model, we are releasing a collection of playable instruments and experiences built with MRT2. Experiment with cloning sounds, blending styles, and creating live accompaniment with this low-latency music model.&lt;/p&gt;

&lt;div class=&quot;image-container&quot; style=&quot;margin-bottom: 32px;&quot;&gt;
  &lt;video playsinline=&quot;&quot; controls=&quot;&quot; poster=&quot;/assets/magenta_realtime_2/hero-thumbnail.jpg&quot;&gt;
    &lt;source src=&quot;https://storage.googleapis.com/magenta-rt-public/magenta-rt-2/media/hero.mp4&quot; type=&quot;video/mp4&quot; /&gt;
  &lt;/video&gt;
&lt;/div&gt;

&lt;p&gt;To explore the potential of live music models as instruments, today we are releasing:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Magenta RealTime 2, an &lt;a href=&quot;https://huggingface.co/google/magenta-realtime-2&quot; target=&quot;_blank&quot;&gt;open-weights model&lt;/a&gt; (2.4B parameters) capable of high-quality real-time music synthesis with low-latency &lt;strong&gt;real-time controls via MIDI, text, and audio&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Alongside our model, we release an &lt;strong&gt;&lt;a href=&quot;https://github.com/magenta/magenta-realtime&quot;&gt;open source Python library&lt;/a&gt;&lt;/strong&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pip install magenta-rt&lt;/code&gt;) offering inference via &lt;a href=&quot;https://github.com/jax-ml/jax&quot; target=&quot;_blank&quot;&gt;JAX&lt;/a&gt;/&lt;a href=&quot;https://github.com/ml-explore/mlx&quot; target=&quot;_blank&quot;&gt;MLX&lt;/a&gt; using &lt;a href=&quot;https://github.com/google/sequence-layers&quot; target=&quot;_blank&quot;&gt;SequenceLayers&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;An &lt;a href=&quot;https://github.com/magenta/magenta-realtime/tree/main/core&quot; target=&quot;_blank&quot;&gt;inference engine&lt;/a&gt; written in C++, enabling efficient streaming audio generation on a MacBook GPU via &lt;a href=&quot;https://github.com/ml-explore/mlx&quot; target=&quot;_blank&quot;&gt;MLX&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;A suite of &lt;a href=&quot;https://github.com/magenta/magenta-realtime/tree/main/examples&quot; target=&quot;_blank&quot;&gt;example applications&lt;/a&gt; built on the inference engine. These offer a glimpse into the creative potential of Magenta RealTime 2, and serve as references to help you get started building new instruments and software integrations.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;image-container&quot;&gt;
  &lt;img src=&quot;/assets/magenta_realtime_2/blog-1.png&quot; alt=&quot;diagram of model, inference engine, and apps&quot; style=&quot;margin-bottom: 32px&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;For a decade, the Magenta team has championed a vision of AI as a tool for musicians, never a replacement. We released our first neural synthesizer, &lt;a href=&quot;https://magenta.withgoogle.com/nsynth&quot; target=&quot;_blank&quot;&gt;NSynth&lt;/a&gt;, back in 2017 which put machine learning into &lt;a href=&quot;https://experiments.withgoogle.com/nsynth-super&quot; target=&quot;_blank&quot;&gt;playable hardware&lt;/a&gt;. We continued creating AI Instruments with projects such as &lt;a href=&quot;https://magenta.withgoogle.com/ddsp-vst&quot; target=&quot;_blank&quot;&gt;DDSP&lt;/a&gt;, &lt;a href=&quot;https://magenta.withgoogle.com/pianogenie&quot; target=&quot;_blank&quot;&gt;Piano Genie&lt;/a&gt;, and the first version of &lt;a href=&quot;https://magenta.withgoogle.com/magenta-realtime&quot; target=&quot;_blank&quot;&gt;Magenta RealTime&lt;/a&gt;, our debut &lt;a href=&quot;https://arxiv.org/abs/2508.04651&quot; target=&quot;_blank&quot;&gt;live music model&lt;/a&gt; capable of generating and blending a wide range of musical styles. MRT2 achieves ~15x lower latency than version one, works on standard hardware and integrates directly into DAWs, making this live model a true musical instrument.&lt;/p&gt;

&lt;h2 id=&quot;a-live-music-model-with-lower-latency-and-expanded-control&quot;&gt;A live music model with lower latency and expanded control&lt;/h2&gt;

&lt;table&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;
   &lt;/td&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;&lt;strong&gt;Magenta RealTime&lt;/strong&gt;

   &lt;/td&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;&lt;strong&gt;Magenta RealTime 2&lt;/strong&gt;

   &lt;/td&gt;
  &lt;tr&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;Live music generation

   &lt;/td&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;✅

   &lt;/td&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;✅

   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;Hardware required

   &lt;/td&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;TPU/GPU

   &lt;/td&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;&lt;span class=&quot;blue-emphasis&quot;&gt;MacBook&lt;/span&gt;

   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;Frame size

   &lt;/td&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;2s

   &lt;/td&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;&lt;span class=&quot;blue-emphasis&quot;&gt;40ms&lt;/span&gt;

   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;
    &lt;a href=&quot;#real-world-control-latency&quot;&gt;Control latency&lt;/a&gt;

   &lt;/td&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;~3s

   &lt;/td&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;&lt;span class=&quot;blue-emphasis&quot;&gt;~200ms&lt;/span&gt;

   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;Control modalities

   &lt;/td&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;Text, Audio

   &lt;/td&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;Text, Audio, &lt;span class=&quot;blue-emphasis&quot;&gt;MIDI&lt;/span&gt;

   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;Model sizes

   &lt;/td&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;760M / 220M

   &lt;/td&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;2.4B / 230M

   &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;Both MRT and MRT2 are &lt;a href=&quot;#low-latency-streaming-generation&quot;&gt;codec language models&lt;/a&gt; operating on sequences of audio tokens from the &lt;a href=&quot;https://arxiv.org/abs/2508.05207&quot; target=&quot;_blank&quot;&gt;SpectroStream&lt;/a&gt; codec, but MRT2 achieves lower latency by performing frame-level autoregression with frame-aligned conditioning. To enable expressive musical control, MRT2 is designed to model audio that continuously follows MIDI inputs, alongside style prompts which can be either audio or text; prompts are embedded via &lt;a href=&quot;https://arxiv.org/abs/2508.04651&quot; target=&quot;_blank&quot;&gt;MusicCoCa&lt;/a&gt;. For minimal interaction lag, both signals are injected as frame-aligned conditioning at every generation step, allowing the model to react to changes in the signal within a single frame (40 ms, plus additional sources of empirical latency, see &lt;a href=&quot;#real-world-control-latency&quot;&gt;below&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Key to this approach is the use of a causal sliding window attention mechanism to enable continuous streaming generation while bounding memory requirements. Alongside this, learnable attention embeddings are also incorporated to improve generalization to arbitrary durations and context eviction artifacts (e.g., ringing and feedback) during long-context generation.&lt;/p&gt;

&lt;h2 id=&quot;fast-c-inference-engine-via-mlx&quot;&gt;Fast C++ inference engine via MLX&lt;/h2&gt;

&lt;div class=&quot;image-container&quot;&gt;
  &lt;img src=&quot;/assets/magenta_realtime_2/blog-2.png&quot; alt=&quot;inference tooling and flow&quot; style=&quot;margin-bottom: 32px&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;While the original Magenta RealTime required a high-power GPU or TPU, Magenta RealTime 2 brings live generation to the hardware musicians actually use. To achieve this, we built a &lt;strong&gt;C++ inference engine powered by MLX that allows MRT2 to run natively on Apple Silicon&lt;/strong&gt;. Apple’s &lt;a href=&quot;https://github.com/ml-explore/mlx&quot; target=&quot;_blank&quot;&gt;MLX framework&lt;/a&gt; provides the link between Python and C++. More specifically, we use MLX to compile the MRT2 model, implemented using the &lt;a href=&quot;https://arxiv.org/pdf/2507.23292&quot; target=&quot;_blank&quot;&gt;SequenceLayers library&lt;/a&gt;, into an .mlxfn file which is a model container that bundles the weights and computational graph. Our C++ inference engine loads that file and uses the MLX runtime to efficiently execute it on Apple Silicon GPUs. The inference engine handles other necessary infrastructure (model state, audio buffering / resampling, MIDI input) and can be embedded into many music application frameworks where C++ supported.&lt;/p&gt;

&lt;p&gt;MLX allows MRT2 to run on Apple Silicon (M-series): both model sizes can run offline (non-real-time) inference on any Apple Silicon Mac, while real-time streaming (generating audio faster than playback) is supported on the following devices:&lt;/p&gt;

&lt;table&gt;
  &lt;tr&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;Model

   &lt;/td&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;Platform

   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;Base (2.4B)

   &lt;/td&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;&lt;strong&gt;MacBook M3 Pro&lt;/strong&gt; (or higher)

&lt;strong&gt;MacBook M2 Max&lt;/strong&gt; (or higher)

   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;Small (230M)

   &lt;/td&gt;
   &lt;td style=&quot;background-color: null&quot;&gt;&lt;strong&gt;Any Apple Silicon MacBook&lt;/strong&gt;, including MacBook Air

   &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;h2 id=&quot;a-suite-of-example-applications-for-musicians-and-developers&quot;&gt;A suite of example applications for musicians and developers&lt;/h2&gt;

&lt;p&gt;A key goal of Magenta RealTime 2 is to allow musicians to integrate live music models within existing software, and help developers build custom applications. To help you get started, our codebase provides &lt;a href=&quot;/mrt2&quot;&gt;several examples&lt;/a&gt;, including standalone apps, plugins and extensions.&lt;/p&gt;

&lt;div class=&quot;image-container&quot;&gt;
  &lt;video autoplay=&quot;&quot; loop=&quot;&quot; muted=&quot;&quot; playsinline=&quot;&quot;&gt;
    &lt;source src=&quot;/assets/magenta_realtime_2/blog-hero.mp4&quot; type=&quot;video/mp4&quot; /&gt;
  &lt;/video&gt;
&lt;/div&gt;

&lt;h2 id=&quot;whats-next&quot;&gt;What’s Next?&lt;/h2&gt;

&lt;p&gt;Our team members have been building new instruments with machine learning for &lt;a href=&quot;https://magenta.withgoogle.com/nsynth&quot; target=&quot;_blank&quot;&gt;nearly 10 years&lt;/a&gt;, excitedly making unique and quirky sounds from statistical knowledge of music. With Magenta RealTime 2, AI instruments are finally starting to gain the controllability and immediacy we expect from music creation tools, but plenty remains to be explored. From even more interaction and lower control latency, to audio streaming inputs that can enable jamming and real-time audio control, we look forward to expanding the capabilities of live music models further. Stay tuned for future updates!&lt;/p&gt;

&lt;p&gt;And in the meantime, we are also excited to bring more features and example applications to MRT2 soon, including:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Finetuning&lt;/strong&gt;, allowing anyone to customize the model by directly training on their own data.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Example performance tools&lt;/strong&gt; created in collaboration with &lt;a href=&quot;https://manaswimishra.com/&quot; target=&quot;_blank&quot;&gt;Manaswi Mishra&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the next few days, we will also be at the &lt;a href=&quot;https://musichackspace.org/events/hackathon-boston-june-2026&quot; target=&quot;_blank&quot;&gt;Music Technology Hackathon in Boston&lt;/a&gt;, where we are presenting a challenge centered around Magenta RealTime 2. We look forward to seeing what everyone will come up with!&lt;/p&gt;

&lt;h2 id=&quot;citation&quot;&gt;Citation&lt;/h2&gt;

&lt;p&gt;Please cite our work as:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Magenta Team. “Magenta RealTime 2: Open &amp;amp; Local Live Music Models”. https://magenta.withgoogle.com/magenta-realtime-2. June 2026&lt;/em&gt;&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;@article{mrt2,
  title  = {Magenta RealTime 2: Open &amp;amp; Local Live Music Models},
  author = {Magenta Team},
  year   = {2026},
  note   = {https://magenta.withgoogle.com/magenta-realtime-2}
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;details class=&quot;accordion&quot;&gt;
&lt;summary&gt;
  &lt;span&gt;Appendix: Technical Details&lt;/span&gt;
  &lt;span class=&quot;arrow-icon arrow-down&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; height=&quot;24px&quot; viewBox=&quot;0 -960 960 960&quot; width=&quot;24px&quot; fill=&quot;#1f1f1f&quot;&gt;&lt;path d=&quot;M480-344 240-584l56-56 184 184 184-184 56 56-240 240Z&quot; /&gt;&lt;/svg&gt;&lt;/span&gt;
  &lt;span class=&quot;arrow-icon arrow-up&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; height=&quot;24px&quot; viewBox=&quot;0 -960 960 960&quot; width=&quot;24px&quot; fill=&quot;#1f1f1f&quot;&gt;&lt;path d=&quot;M480-528 296-344l-56-56 240-240 240 240-56 56-184-184Z&quot; /&gt;&lt;/svg&gt;&lt;/span&gt;
&lt;/summary&gt;
&lt;div class=&quot;accordion-content&quot;&gt;

    &lt;h3 id=&quot;low-latency-streaming-generation&quot;&gt;Low-latency streaming generation&lt;/h3&gt;
    &lt;p&gt;&lt;strong&gt;Some background on Codec Language Modeling.&lt;/strong&gt; A codec language model (LM) operates on discrete sequences of tokens from a neural audio codec.  Here a codec refers to a pair of functions, an encoder and decoder, that convert audio to and from a discrete, compressed representation while minimizing distortion.&lt;/p&gt;

    &lt;p&gt;More formally, the encoder is a function mapping raw stereo audio waveforms \(\textbf{a} \in \mathbb{R}^{T f_s \times 2}\) into matrices of discrete tokens \(\mathbf{x} \in \mathbb{V}_c^{Tf_k \times d_c}\) where \(T\) is the duration in seconds, \(f_s\) the audio sampling rate, \(f_k\) the token frame rate, \(\mathbb{V}_c\) the codec vocabulary, and \(d_c\) is the number of tokens per frame. In this case, \(d_c\) refers to the “depth” of the residual vector quantization algorithm, referring to the iterative quantization of continuous embeddings of each audio frame.&lt;/p&gt;

    &lt;p&gt;The goal of the codec LM is to model these token matrices. For efficiency, an increasingly common approach is to adopt a &lt;a href=&quot;https://arxiv.org/abs/2508.04651&quot; target=&quot;_blank&quot;&gt;hierarchical autoregressive framework&lt;/a&gt; using a pair of Transformers: one which compresses temporal history into fixed-length embedding vectors (\(\texttt{Temporal}_\theta\)), and another which iteratively decodes tokens depth-wise given the current frame embedding (\(\texttt{Depth}_\phi\)). Assuming \(\mathbf{x_i}\) refers to the \(i\)-th frame of \(\mathbf{x}\), and \(x_i^j\) refers to its \(j\)-th token, the joint distribution over \(x\) is modeled autoregressively as:
\[
  P_{\theta,\phi}(\mathbf{x}) = \prod_{i=1}^{Tf_k} \prod_{j=1}^{d_c} P_\phi(x_i^j | \mathbf{x_i^{&amp;lt;j}}, \texttt{Temporal}_{\theta}(\mathbf{x_{&amp;lt;i}})),
\]
where \(P_\phi(x_i^j \mid \cdot) = \texttt{SoftMax}(\texttt{Depth}_\phi(\cdot))\).&lt;/p&gt;

    &lt;div class=&quot;image-container&quot;&gt;
  &lt;img src=&quot;/assets/magenta_realtime_2/blog-3.gif&quot; alt=&quot;animation of codec tokens&quot; style=&quot;max-width: 100%; margin: -32px 0&quot; /&gt;
&lt;/div&gt;

    &lt;p&gt;At inference time, we generate audio by first sampling a token sequence \(\mathbf{x’} \sim P_{\theta,\phi}(\mathbf{x})\) and then outputting \(\mathbf{a}’ = \texttt{Dec}(\mathbf{x}’)\), where \(\texttt{Dec}\) is the codec decoder. This describes our base modeling approach, shared with Magenta RealTime. For our codec, we use SpectroStream to compress high fidelity (\(f_s = 48\) kHz) stereo audio into tokens at \(3\) kbps (\(f_k = 25\) Hz, \(d_c = 12\), \(|\mathbb{V}_c| = 2^{10}\)).&lt;/p&gt;

    &lt;p&gt;&lt;strong&gt;Lowering autoregression granularity: from chunk to frame.&lt;/strong&gt; To achieve streaming audio generation, we need to enforce two constraints:&lt;/p&gt;

    &lt;ol&gt;
      &lt;li&gt;The system must generate at least \(f_k \cdot d_c\) tokens per second&lt;/li&gt;
      &lt;li&gt;The decoder must be &lt;em&gt;causal&lt;/em&gt;, meaning its output audio for frame \(i\) only depends on \(\mathbf{x_{\leq i}}\)&lt;/li&gt;
    &lt;/ol&gt;

    &lt;p&gt;In the original Magenta RealTime, we satisfied requirement (1) by performing autoregression on &lt;em&gt;chunks&lt;/em&gt; of frames, where each chunk is 2 seconds in duration. This design was chosen to amortize model runtime over chunk length to achieve real-time streaming.  However, because the system must wait until the next chunk to inject any new user control information, the chunk duration creates a lower bound on control delay, resulting in a response time of 2 seconds at a minimum.  Instead, Magenta RealTime 2 models individual frames, allowing us to reduce model response time significantly. To ensure continuous streaming generation while operating on single frames, we adopt a decoder-only architecture, using a local sliding window attention (&lt;a href=&quot;https://arxiv.org/abs/2004.05150&quot; target=&quot;_blank&quot;&gt;SWA&lt;/a&gt;) in the temporal Transformer.&lt;/p&gt;

    &lt;div class=&quot;image-container&quot;&gt;
  &lt;img src=&quot;/assets/magenta_realtime_2/blog-4.png&quot; alt=&quot;decoder architecture with rolling attention&quot; style=&quot;max-width: 700px; margin-bottom: 32px&quot; /&gt;
&lt;/div&gt;

    &lt;p&gt;This has two key advantages: (1) the decoder-only architecture allows us to remove the sequential bottleneck introduced by the bidirectional encoder in Magenta RealTime, where the full encoder output has to be materialized before decoding can begin; (2) the rolling attention mechanism allows us to extend the context length while keeping the KV cache size fixed. At each step of the autoregressive generation, key-value entries for new tokens are written into the cache, and entries older than the window size &lt;em&gt;w&lt;/em&gt; are evicted:&lt;/p&gt;

    &lt;div class=&quot;image-container&quot;&gt;
  &lt;img src=&quot;/assets/magenta_realtime_2/blog-5.png&quot; alt=&quot;tokens data structure&quot; style=&quot;max-width: 500px; margin-bottom: 32px&quot; /&gt;
&lt;/div&gt;

    &lt;p&gt;Similarly to &lt;a href=&quot;https://arxiv.org/abs/2309.17453&quot; target=&quot;_blank&quot;&gt;previous work&lt;/a&gt;, we find that using a sliding window attention causes the model to significantly deteriorate when initial tokens are evicted from the cache. To remediate this, we make use of a learnable attention sink embedding. In order to reconcile the finite training length with the receptive field induced by the SWA mechanism, we also take care to set the attention window size such that this effective receptive field does not exceed the training crop length. Finally, we further reduce train/test mismatch and achieve better length generalization by dropping learnable positional embeddings (&lt;a href=&quot;https://arxiv.org/abs/2305.19466&quot; target=&quot;_blank&quot;&gt;NoPE&lt;/a&gt;), after observing that &lt;a href=&quot;https://arxiv.org/abs/2104.09864&quot; target=&quot;_blank&quot;&gt;RoPE&lt;/a&gt; hinders generalization beyond the training length. Instead, the model implicitly learns positional information by relying on causal masking and SWA, which naturally extend to arbitrary-length sequences without extrapolation issues.&lt;/p&gt;

    &lt;p&gt;Putting all this together, our model presents significant architectural differences compared to the previous version:&lt;/p&gt;

    &lt;table class=&quot;shrink&quot;&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;strong&gt;Model&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;&lt;strong&gt;Magenta RealTime&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;&lt;strong&gt;Magenta RealTime 2&lt;/strong&gt;
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;strong&gt;Autoregressive unit&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;2-second &lt;em&gt;chunks&lt;/em&gt; (25 frames × 16 RVQ = 400 tokens)
   &lt;/td&gt;
   &lt;td&gt;Individual &lt;em&gt;frames&lt;/em&gt; (12 RVQ tokens at 25 Hz = 40 ms)
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;strong&gt;Architecture&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;T5-style bidirectional encoder + causal decoder; encoder processes the full chunk of conditioning before decoding begins
   &lt;/td&gt;
   &lt;td&gt;Decoder-only; conditioning is injected at every frame, with no encoder forward pass as a sequential bottleneck
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;&lt;strong&gt;Minimum control delay&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;≥ 2 s (next chunk boundary)
   &lt;/td&gt;
   &lt;td&gt;
          &lt;p&gt;~0.2 s (frame processing + depth decode + codec decode). &lt;a href=&quot;#real-world-control-latency&quot;&gt;See full latency diagram&lt;/a&gt;&lt;/p&gt;
        &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

    &lt;h3 id=&quot;precise-control-through-frame-by-frame-conditioning&quot;&gt;Precise control through frame-by-frame conditioning&lt;/h3&gt;
    &lt;p&gt;A central feature of MRT2 is responsive, multi-signal control: in addition to style control expressed through audio or text, MRT2 also supports note and drums on/off control. This is achieved by modeling the conditional distribution \(P_{\theta,\phi}(\mathbf{x} | \mathbf{c})\), where \(\mathbf{c} = (\mathbf{c}_{style}, \mathbf{c}_{notes}, \mathbf{c}_{drums})\) is formed by tokenized representations of all conditioning signals at the audio frame rate (25 Hz), concatenated together into a single conditioning vector per frame. This vector is then mapped to a multi-channel embedding and injected into the temporal decoder through streaming cross-attention, enabling the model to react to changes in any signal within a single frame (~40 ms).&lt;/p&gt;

    &lt;p&gt;At inference we enable flexible joint guidance by extending the classifier-free guidance (CFG) approach in Magenta RealTime to multiple signals. This allows us to balance the contribution of each conditioning signal separately and according to the desired level of adherence, while also supporting unconditional generation for any subset of controls.&lt;/p&gt;

    &lt;p&gt;&lt;strong&gt;Style control through audio and text.&lt;/strong&gt; Similarly to Magenta RealTime, MRT2 can also be steered through audio and text via quantized &lt;a href=&quot;https://arxiv.org/abs/2508.04651&quot; target=&quot;_blank&quot;&gt;MusicCoCa&lt;/a&gt; embeddings. During training, we freeze the embeddings associated with the MusicCoCa tokens instead of learning them from scratch. The goal is to leverage the rich, pre-trained semantic representations coming from the Residual Vector Quantizer (RVQ). By keeping these embeddings frozen, we ensure the generative model receives stable semantic embeddings, which significantly improves prompt adherence at inference time. While MusicCoCa provides a joint embedding space between text and audio, the underlying distributions associated with both modalities do not match exactly. This creates a train-test mismatch during inference, as the model has only been trained on audio embeddings, but receives text embeddings during inference. To bridge this gap, we train a generative model from which we can sample diverse audio embeddings given an input text embedding, learning the one-to-many relationship between a single text prompt and multiple valid audio signals. To ensure high performance, we employ a pixel Mean Flow (&lt;a href=&quot;https://arxiv.org/abs/2601.22158&quot; target=&quot;_blank&quot;&gt;pMF&lt;/a&gt;) formulation, enabling high-quality one-step inference. Finally, training this mapper module on a mix of short tags and long-form captions provides flexible style control, ranging from simple tag-style inputs to highly detailed text descriptions.&lt;/p&gt;

    &lt;p&gt;&lt;span id=&quot;note-control&quot;&gt;&lt;strong&gt;Note control.&lt;/strong&gt;&lt;/span&gt; We enable note control by training on (audio, MIDI) pairs. Note activity is encoded as a 128-channel pianoroll – one channel per MIDI pitch – at the audio frame rate (25 Hz). The model is trained on around 71k hours of mostly instrumental stock music from a variety of sources, with MIDI labels inferred by the &lt;a href=&quot;https://github.com/magenta/mt3&quot; target=&quot;_blank&quot;&gt;MT3&lt;/a&gt; transcription model. We structure the per-pitch token vocabulary to support two control modes at inference. In &lt;em&gt;Auto-Strum&lt;/em&gt; mode, the user specifies only which pitches are active at each frame, and the model determines where to place note onsets. In &lt;em&gt;Auto-Strum OFF&lt;/em&gt; mode, the user can additionally specify the exact timing of each note onset, giving precise attack-level control. This is achieved through a 4-token vocabulary that distinguishes between &lt;em&gt;note off&lt;/em&gt;, generic &lt;em&gt;note on&lt;/em&gt;, note &lt;em&gt;onset&lt;/em&gt;, and note &lt;em&gt;continuation&lt;/em&gt;. When Auto-Strum is off, the model receives onset and continuation tokens directly, and respects the specified attack timing. When Auto-Strum is on, onset information is replaced with an onset mask token, and the model freely chooses when to place attacks based on the active pitch information alone. To support both modes with a single model, we employ &lt;em&gt;onset masking&lt;/em&gt;, a training-time augmentation that stochastically replaces the onset and continuation tokens of randomly selected notes with the onset mask token. This trains the model to generate musically plausible attacks when no explicit onset information is present, while faithfully following onset cues when they are provided.&lt;/p&gt;

    &lt;p&gt;&lt;strong&gt;Drums on/off control.&lt;/strong&gt; The note conditioning described so far gives us control over the melodic and harmonic content of the generated audio, but leaves us with no mechanism to control the presence of percussive elements. As a result, the model can arbitrarily include drums as part of the generated audio whenever this is admissible by the style conditioning (e.g. “jazz”). This can often be undesirable if, for example, the model is &lt;em&gt;played&lt;/em&gt; alongside other instruments or as part of a multi-track session (e.g. in a DAW). For this reason, it’s useful to optionally switch off drum generation through an explicit control. We enable this through an additional conditioning signal: at training time, we pass a frame-wise sequence of drum hits obtained by transcribing drum stems from each training example using &lt;a href=&quot;https://magenta.withgoogle.com/oaf-drums&quot; target=&quot;_blank&quot;&gt;OaF Drums&lt;/a&gt;. While this trains the model to respond to drum hits, we find that direct drum control is infeasible in practice, given the end-to-end response time. Instead, we leverage this control purely for switching between drum-unconditional and &lt;em&gt;drumless&lt;/em&gt; generation, using the same multi-guidance CFG as the other signals.&lt;/p&gt;

    &lt;p&gt;&lt;strong&gt;Inference-time masking as creative control.&lt;/strong&gt; Beyond providing a set of control signals to guide generation, it is crucial to have a way to compose and modulate them. We accomplish this through selective input masking coupled with CFG scales, a technique that allows us to flexibly define playing modes at inference. More specifically, we introduce a masking scheme designed to accomplish two complementary goals: (1) strengthen the model’s ability to follow the controls while remaining robust to noisy or missing inputs, (2) enable partially unconditional generation as a form of creative control. During training, we stochastically mask contiguous regions of each conditioning signal independently, varying both the masking probability and spatial scale. We find that this results in better adherence to the inputs when they are specified. Importantly, this augmentation implicitly trains the model to interpret masked regions as unspecified, opening up a new dimension of creative interaction at inference. The Auto-Strum mode described above in the &lt;a href=&quot;#note-control&quot;&gt;Note Control section&lt;/a&gt; is one such example. Similarly, we employ masking over the pitch dimension of the pianoroll to give the model more or less “creative freedom” over which pitches can be active. For example, masking all pianoroll pitches except those currently pressed allows the model to freely add harmonies or embellishments, while explicitly setting neighboring pitches to “off” (silent) constrains it to play only the input notes.&lt;/p&gt;

    &lt;div class=&quot;image-container&quot;&gt;
  &lt;img src=&quot;/assets/magenta_realtime_2/blog-6.png&quot; alt=&quot;pianorolls with different masked regions &quot; style=&quot;margin-bottom: 32px&quot; /&gt;
&lt;/div&gt;

    &lt;p&gt;&lt;span id=&quot;real-world-control-latency&quot;&gt;&lt;strong&gt;Real-world control latency.&lt;/strong&gt;&lt;/span&gt; While we have significantly reduced the model frame size (from 2s to 40ms) compared to the previous generation, inference time isn’t the only source of latency. Below we give a sketch of end-to-end reaction time, taking into account input and output buffers, alongside additional sources of latency introduced by external components.&lt;/p&gt;

    &lt;div class=&quot;image-container&quot;&gt;
  &lt;img src=&quot;/assets/magenta_realtime_2/blog-7.png&quot; alt=&quot;inference latency time&quot; style=&quot;max-width: 100%;margin-bottom: 32px&quot; /&gt;
&lt;/div&gt;

  &lt;/div&gt;
&lt;/details&gt;

&lt;script type=&quot;text/x-mathjax-config&quot;&gt;
MathJax.Hub.Config({
  CommonHTML: { linebreaks: { automatic: true } },
  &quot;HTML-CSS&quot;: { linebreaks: { automatic: true } },
         SVG: { linebreaks: { automatic: true } }
});
&lt;/script&gt;

&lt;script type=&quot;text/javascript&quot; src=&quot;/mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML&quot;&gt;&lt;/script&gt;

</description>
        <pubDate>Thu, 04 Jun 2026 06:00:00 -0700</pubDate>
        <link>https://magenta.withgoogle.com/magenta-realtime-2</link>
        <guid isPermaLink="true">https://magenta.withgoogle.com/magenta-realtime-2</guid>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Open-sourcing The Infinite Crate DAW plugin</title>
        <description>&lt;!-- disableFinding(G3DOC_JINJA) --&gt;
&lt;div align=&quot;center&quot; class=&quot;action-container&quot;&gt;
  &lt;a class=&quot;action grey&quot; href=&quot;https://github.com/magenta/the-infinite-crate&quot;&gt;
    &lt;span class=&quot;studio-icon&quot;&gt;&lt;svg viewBox=&quot;0 0 16 16&quot;&gt;&lt;path d=&quot;M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z&quot; /&gt;&lt;/svg&gt;
&lt;/span&gt;
    View on GitHub&lt;/a&gt;
  &lt;a class=&quot;action grey&quot; href=&quot;https://g.co/magenta/discord&quot;&gt;
    &lt;span class=&quot;studio-icon&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;svg id=&quot;Discord-Logo&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0 0 126.644 96&quot;&gt;&lt;defs&gt;&lt;style&gt;.cls-1{fill:#fff;}&lt;/style&gt;&lt;/defs&gt;&lt;path id=&quot;Discord-Symbol-White&quot; class=&quot;cls-1&quot; d=&quot;M81.15,0c-1.2376,2.1973-2.3489,4.4704-3.3591,6.794-9.5975-1.4396-19.3718-1.4396-28.9945,0-.985-2.3236-2.1216-4.5967-3.3591-6.794-9.0166,1.5407-17.8059,4.2431-26.1405,8.0568C2.779,32.5304-1.6914,56.3725.5312,79.8863c9.6732,7.1476,20.5083,12.603,32.0505,16.0884,2.6014-3.4854,4.8998-7.1981,6.8698-11.0623-3.738-1.3891-7.3497-3.1318-10.8098-5.1523.9092-.6567,1.7932-1.3386,2.6519-1.9953,20.281,9.547,43.7696,9.547,64.0758,0,.8587.7072,1.7427,1.3891,2.6519,1.9953-3.4601,2.0457-7.0718,3.7632-10.835,5.1776,1.97,3.8642,4.2683,7.5769,6.8698,11.0623,11.5419-3.4854,22.3769-8.9156,32.0509-16.0631,2.626-27.2771-4.496-50.9172-18.817-71.8548C98.9811,4.2684,90.1918,1.5659,81.1752.0505l-.0252-.0505ZM42.2802,65.4144c-6.2383,0-11.4159-5.6575-11.4159-12.6535s4.9755-12.6788,11.3907-12.6788,11.5169,5.708,11.4159,12.6788c-.101,6.9708-5.026,12.6535-11.3907,12.6535ZM84.3576,65.4144c-6.2637,0-11.3907-5.6575-11.3907-12.6535s4.9755-12.6788,11.3907-12.6788,11.4917,5.708,11.3906,12.6788c-.101,6.9708-5.026,12.6535-11.3906,12.6535Z&quot; /&gt;&lt;/svg&gt;&lt;/span&gt;
    Discuss on Discord&lt;/a&gt;
  &lt;a class=&quot;action grey&quot; href=&quot;https://magenta.withgoogle.com/infinite-crate&quot;&gt;
    &lt;span class=&quot;studio-icon&quot;&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot;?&gt;
&lt;!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  --&gt;
&lt;svg version=&quot;1.1&quot; id=&quot;Capa_1&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; x=&quot;0px&quot; y=&quot;0px&quot; viewBox=&quot;0 0 24.637 24.637&quot; style=&quot;enable-background:new 0 0 24.637 24.637;&quot; xml:space=&quot;preserve&quot;&gt;
&lt;g&gt;
     &lt;path d=&quot;M18.537,6.945H1.432C0.641,6.945,0,7.582,0,8.369v14.262c0,0.785,0.641,1.426,1.432,1.426h17.105
          c0.785,0,1.426-0.641,1.426-1.426V8.369C19.963,7.582,19.322,6.945,18.537,6.945z M6.817,8.016c0.395,0,0.712,0.318,0.712,0.713
          c0,0.393-0.317,0.713-0.712,0.713c-0.392,0-0.71-0.32-0.71-0.713C6.107,8.334,6.426,8.016,6.817,8.016z M4.639,8.016
          c0.391,0,0.71,0.318,0.71,0.713c0,0.393-0.319,0.713-0.71,0.713c-0.397,0-0.717-0.32-0.717-0.713
          C3.922,8.334,4.241,8.016,4.639,8.016z M2.494,8.016c0.396,0,0.715,0.318,0.715,0.713c0,0.393-0.318,0.713-0.715,0.713
          c-0.39,0-0.709-0.32-0.709-0.713C1.785,8.334,2.104,8.016,2.494,8.016z M18.537,22.631H1.432V10.527h17.105
          C18.537,10.527,18.537,22.631,18.537,22.631z M18.537,9.101H8.559V8.387h9.979L18.537,9.101L18.537,9.101z&quot; /&gt;
     &lt;path d=&quot;M23.209,0.58H6.102c-0.79,0-1.426,0.637-1.426,1.426v4.133h1.426V4.162h17.107v12.104h-2.483v1.426h2.483
          c0.786,0,1.428-0.641,1.428-1.426V2.006C24.637,1.217,23.995,0.58,23.209,0.58z M7.17,3.076c-0.394,0-0.711-0.316-0.711-0.711
          c0-0.398,0.317-0.713,0.711-0.713c0.393,0,0.713,0.314,0.713,0.713C7.883,2.76,7.562,3.076,7.17,3.076z M9.309,3.076
          c-0.396,0-0.713-0.316-0.713-0.711c0-0.398,0.316-0.713,0.713-0.713c0.394,0,0.714,0.314,0.714,0.713
          C10.022,2.76,9.702,3.076,9.309,3.076z M11.494,3.076c-0.396,0-0.717-0.316-0.717-0.711c0-0.398,0.32-0.713,0.717-0.713
          c0.389,0,0.707,0.314,0.707,0.713C12.201,2.76,11.883,3.076,11.494,3.076z M23.209,2.734h-9.98V2.019h9.98V2.734z&quot; /&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
     &lt;g&gt;
     &lt;/g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;g&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/span&gt;
    Get the plugin&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Six months ago we released
&lt;a href=&quot;https://magenta.withgoogle.com/infinite-crate&quot;&gt;The Infinite Crate&lt;/a&gt;, a DAW
plugin that brings the
&lt;a href=&quot;https://magenta.withgoogle.com/lyria-realtime&quot;&gt;Lyria RealTime&lt;/a&gt; music model
into Digital Audio Workstations (DAWs) to improve the sampling workflow for
producers. Since its release it’s been used by some of our favorite artists —
including a wonderful showcase with
&lt;a href=&quot;https://daito.ws/en/&quot;&gt;Daito Manabe&lt;/a&gt; in Tokyo — and was featured as
&lt;a href=&quot;https://www.youtube.com/watch?v=BHY15gnMwtc&amp;amp;t=841s&quot;&gt;an exciting new music tool&lt;/a&gt;
at &lt;a href=&quot;https://www.namm.org/&quot;&gt;NAMM&lt;/a&gt; 2026.&lt;/p&gt;

&lt;p&gt;Today we’re fully open sourcing the DAW plugin for developers to fork, modify,
and make their own under the permissive
&lt;a href=&quot;https://www.apache.org/licenses/LICENSE-2.0&quot;&gt;Apache 2.0 license&lt;/a&gt;.&lt;/p&gt;

&lt;p align=&quot;center&quot;&gt;
  &lt;img src=&quot;/assets/oss-infinite-crate/oss_infinite_crate.png&quot; alt=&quot;Plugin interface&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;The VST was born out of discussions and studio collaborations with musicians
and producers from around the world. Many were intrigued by music models as a
creative partner but needed deeper integration into the tools they know and
trust — Ableton, Logic, and other DAWs that support VST3/AU plugins. Bridging
this gap simplifies audio routing and MIDI-mapping for studio recording and
live performance, allowing musicians to focus on what matters: the music.&lt;/p&gt;

&lt;p&gt;We architected the plugin using React/TypeScript for the UI layer and JUCE/C++
for DAW connection, audio processing, and websocket audio streaming from the
Gemini/Lyria API. This allowed us to rapidly iterate on the frontend using
hot-reload (Shadcn/Tailwind), while ensuring latency sensitive operations
(audio streaming and playback) happen in a compiled and unmanaged language with
a tight clock. State is synced between TypeScript and C++ using Zustand’s
state management and nlohmann json.&lt;/p&gt;

&lt;p align=&quot;center&quot;&gt;
  &lt;img src=&quot;/assets/oss-infinite-crate/plugin_architecture.png&quot; alt=&quot;Plugin architecture&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;The plugin is a functional interface that exposes most of the controls
available on the Lyria RealTime API to the React frontend and feeds the
resulting audio stream into the DAW. Developers can fork the plugin and build
creative interfaces and visualizations for the API (like
&lt;a href=&quot;https://magenta.withgoogle.com/spacedj-announce&quot;&gt;Space DJ&lt;/a&gt;,
&lt;a href=&quot;https://mididj-dot-envisioning-studio.appspot.com/&quot;&gt;MIDI DJ&lt;/a&gt;, or
&lt;a href=&quot;https://x.com/poetengineer__/status/1944812105699356984?s=20&quot;&gt;creative controls&lt;/a&gt;)
directly in the DAW by spinning up the Vite server. Because
the frontend uses a standard set of web frameworks it’s easy to explore new
interfaces using AI-assisted coding tools like Gemini and
&lt;a href=&quot;https://antigravity.google/&quot;&gt;Antigravity&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;looking-ahead&quot;&gt;Looking ahead&lt;/h2&gt;

&lt;p&gt;In the near term, we hope to update the plugin to support on-device inference
of the &lt;a href=&quot;https://magenta.withgoogle.com/magenta-realtime&quot;&gt;Magenta RealTime&lt;/a&gt;
open-weights model for offline use. In the long term, we hope to support
future music models with improved controls, such as audio and MIDI input.&lt;/p&gt;

&lt;p&gt;We hope this open source plugin can support and be built with the growing
community of music makers using machine learning as part of their creative
process.&lt;/p&gt;

&lt;p&gt;Join the discussion on our
&lt;a href=&quot;https://g.co/magenta/discord&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;

&lt;h1 id=&quot;acknowledgments&quot;&gt;Acknowledgments&lt;/h1&gt;
&lt;p&gt;We thank: Spencer Salazar for his talk on prototyping DAW plugins in web
technologies at ADC 2020, JUCE for implementing a C++ to Web/JS bridge in
JUCE 8,
Tommy Cappel for rigorous testing,
Alberto Lalama and Joyce Xie for their work on the API,
Nikhil Bhanu for his work on the windows build,
and the DeepMind research team that contributed to Lyria RealTime.&lt;/p&gt;
</description>
        <pubDate>Mon, 09 Mar 2026 12:00:00 -0700</pubDate>
        <link>https://magenta.withgoogle.com/oss-infinite-crate</link>
        <guid isPermaLink="true">https://magenta.withgoogle.com/oss-infinite-crate</guid>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Lyria Camera: Soundtrack your life</title>
        <description>&lt;p&gt;Today we’re launching &lt;strong&gt;Lyria Camera&lt;/strong&gt;, an app that uses
&lt;a href=&quot;https://deepmind.google/models/lyria/lyria-realtime/&quot;&gt;Lyria RealTime&lt;/a&gt; to make
music with your camera. By combining Gemini’s image understanding and the
&lt;a href=&quot;https://ai.google.dev/gemini-api/docs/music-generation&quot;&gt;Lyria RealTime API&lt;/a&gt;,
Lyria Camera generates a musical score that adapts to your environment on the
fly.&lt;/p&gt;

&lt;p&gt;It works by translating the visual scene into &lt;strong&gt;musical descriptors via
Gemini&lt;/strong&gt;, producing prompts like &lt;em&gt;Reflective piano, cityscape calm&lt;/em&gt;. The Lyria
RealTime API uses these terms as prompts to create a continuous stream of music
that’s generated on the fly. As you move about your world, the prompts and the
music they create will evolve over time.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://aistudio.google.com/apps/bundled/lyria_camera?fullscreenApplet=true&amp;amp;showPreview=true&amp;amp;showAssistant=true&quot;&gt;Try Lyria Camera now&lt;/a&gt;
or remix it on
&lt;a href=&quot;https://aistudio.google.com/apps/bundled/lyria_camera?showPreview=true&amp;amp;showAssistant=true&quot;&gt;AI Studio&lt;/a&gt;.&lt;/p&gt;

&lt;!-- disableFinding(G3DOC_JINJA) --&gt;
&lt;style&gt;
  /* fallback */
  @font-face {
    font-family: &quot;Material Symbols Outlined&quot;;
    font-style: normal;
    font-weight: 400;
    src: url(https://fonts.gstatic.com/s/materialsymbolsoutlined/v250/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOejbd5zrDAt.woff2)
      format(&quot;woff2&quot;);
  }
  .material-symbols-outlined {
    font-family: &quot;Material Symbols Outlined&quot;;
    font-weight: normal;
    font-style: normal;
    font-size: 36px;
    line-height: 1;
    letter-spacing: normal;
    text-transform: none;
    display: inline-block;
    white-space: nowrap;
    word-wrap: normal;
    direction: ltr;
    -webkit-font-feature-settings: &quot;liga&quot;;
    -webkit-font-smoothing: antialiased;
    color: black;
    border-radius: 100%;
    padding: 0.2em;
    background-color: rgb(241, 241, 241);
    transition: 0.1s;
  }
  .material-symbols-outlined:hover {
    background-color: rgb(160, 160, 160);
    color: white;
    transition: 0.1s;
    cursor: pointer;
  }
  .control-overlay {
    position: absolute;
    display: flex;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0);
    /* Align items to the end of the flex container (right) */
    justify-content: flex-end;
    /* Align items to the end of the cross axis (bottom) */
    align-items: flex-end;
    font-family: sans-serif;
    font-size: 1.2rem;
  }
  .video-container {
    position: relative;
    display: flex;
    justify-content: center;
  }
&lt;/style&gt;

&lt;div class=&quot;video-container&quot; id=&quot;video-container-lyria_camera_video&quot; style=&quot;width:100%;&quot;&gt;
  &lt;video height=&quot;100%&quot; src=&quot;/assets/lyria_camera/lyria_camera_video.mp4&quot; id=&quot;video-lyria_camera_video&quot; muted=&quot;&quot; loop=&quot;&quot; autoplay=&quot;&quot;&gt;&lt;/video&gt;
  &lt;div class=&quot;control-overlay&quot;&gt;
    &lt;span class=&quot;material-symbols-outlined&quot; id=&quot;unmute-button-lyria_camera_video&quot;&gt;volume_off&lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
  document.addEventListener(&quot;DOMContentLoaded&quot;, () =&gt; {
    let videoContainer = document.getElementById(
      &quot;video-container-lyria_camera_video&quot;
    );
    let unmuteButton = document.getElementById(
      &quot;unmute-button-lyria_camera_video&quot;
    );
    let video = document.getElementById(&quot;video-lyria_camera_video&quot;);

    unmuteButton.addEventListener(&quot;click&quot;, function () {
      video.muted = !video.muted;
      if (video.muted) {
        unmuteButton.textContent = &quot;volume_off&quot;;
      } else {
        unmuteButton.textContent = &quot;volume_up&quot;;
      }
    });

    if (&quot;IntersectionObserver&quot; in window) {
      const observer = new IntersectionObserver(
        (entries) =&gt; {
          entries.forEach((entry) =&gt; {
            if (entry.isIntersecting) {
              if (unmuteButton.textContent == &quot;volume_up&quot;) {
                video.muted = false;
              }
            } else {
              video.muted = true;
            }
          });
        },
        {
          root: null,
          rootMargin: &quot;0px&quot;,
          threshold: 0.1,
        }
      );

      observer.observe(videoContainer);
    }
  });
&lt;/script&gt;

&lt;h2 id=&quot;the-world-is-your-instrument&quot;&gt;The world is your instrument&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Reward your curiosity:&lt;/strong&gt; When you’re using Lyria Camera, every image is a
new instrument. You can find songs in your sketchbook, at the laundromat or
in your breakfast cereal. Film around and see what you can find.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;DJ your commute:&lt;/strong&gt; Point your camera out the train window or mount it on
your dashboard. Lyria Camera responds to the shifting scenery—the rhythm of
passing streetlights or the calm of an open road—creating a drive-time score
that matches your journey beat for beat.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Score your screen:&lt;/strong&gt; On desktop, try the “Share Screen” feature to use a
browser tab instead of your camera. Actually, any app on your computer can
be used as a video feed. Try it while you’re working or gaming for a
tailor-made soundtrack.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;how-it-works&quot;&gt;How it Works&lt;/h2&gt;

&lt;p&gt;Lyria Camera brings together several AI capabilities to create a seamless
audiovisual feedback loop.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Multimodal Prompting.&lt;/strong&gt; This is the bridge between sight and sound. We use
Gemini to analyze your camera feed, translating visual cues into rich
textual descriptions. These descriptions act as musical instructions,
telling Lyria exactly how to interpret and ”play” what you’re seeing.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Continuous &amp;amp; Steerable Generation:&lt;/strong&gt; The Lyria RealTime API is designed
for continuous music generation. Instead of generating a static song, it
creates an endless stream of audio that you can “steer” in different
directions. This allows the music to morph smoothly from one mood to another
without ever stopping or skipping a beat.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;what-will-you-build&quot;&gt;What will you build?&lt;/h2&gt;

&lt;p&gt;Lyria Camera is a great companion for a walk or a drive, and it’s just one thing
you can do with the
&lt;a href=&quot;https://ai.google.dev/gemini-api/docs/music-generation&quot;&gt;Lyria RealTime API&lt;/a&gt;. We
built this app to demonstrate the possibilities of continuous, steerable music
generation, but the real potential lies in what comes next.&lt;/p&gt;

&lt;p&gt;You can
&lt;a href=&quot;https://aistudio.google.com/apps/bundled/lyria_camera?fullscreenApplet=true&amp;amp;showPreview=true&amp;amp;showAssistant=true&quot;&gt;try Lyria Camera&lt;/a&gt;
on your phone or desktop today. For developers ready to push the boundaries
further, the Lyria RealTime API can help you build the next generation of music
experiences.&lt;/p&gt;
</description>
        <pubDate>Wed, 03 Dec 2025 12:00:00 -0800</pubDate>
        <link>https://magenta.withgoogle.com/lyria-camera-announce</link>
        <guid isPermaLink="true">https://magenta.withgoogle.com/lyria-camera-announce</guid>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Space DJ: Navigating a Musical Universe</title>
        <description>&lt;p&gt;Today, we’re excited to launch Space DJ, a web application from Magenta that
turns music exploration into an interactive journey through a constellation of
sounds. You pilot a spaceship through a galaxy where each star represents a
musical genre. As you navigate this universe, Space DJ uses the
&lt;a href=&quot;https://magenta.withgoogle.com/lyria-realtime&quot;&gt;Lyria RealTime API&lt;/a&gt; to generate
a continuous stream of music that reflects your position and selections in
real-time.&lt;/p&gt;

&lt;p&gt;We used the &lt;a href=&quot;https://cloud.google.com/blog/products/ai-machine-learning/ai-studio-to-cloud-run-and-cloud-run-mcp-server&quot;&gt;deploy app feature&lt;/a&gt; in AI Studio to make this available to everyone!&lt;br /&gt;
&lt;strong&gt;&lt;a href=&quot;https://spacedj-363947264390.us-west1.run.app&quot;&gt;Try Space DJ now&lt;/a&gt;&lt;/strong&gt;, or
&lt;strong&gt;view and fork the source code in &lt;a href=&quot;https://aistudio.google.com/apps/bundled/spacedj&quot;&gt;AI Studio&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;!-- disableFinding(G3DOC_JINJA) --&gt;
&lt;style&gt;
  /* fallback */
  @font-face {
    font-family: &quot;Material Symbols Outlined&quot;;
    font-style: normal;
    font-weight: 400;
    src: url(https://fonts.gstatic.com/s/materialsymbolsoutlined/v250/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOejbd5zrDAt.woff2)
      format(&quot;woff2&quot;);
  }
  .material-symbols-outlined {
    font-family: &quot;Material Symbols Outlined&quot;;
    font-weight: normal;
    font-style: normal;
    font-size: 36px;
    line-height: 1;
    letter-spacing: normal;
    text-transform: none;
    display: inline-block;
    white-space: nowrap;
    word-wrap: normal;
    direction: ltr;
    -webkit-font-feature-settings: &quot;liga&quot;;
    -webkit-font-smoothing: antialiased;
    color: black;
    border-radius: 100%;
    padding: 0.2em;
    background-color: rgb(241, 241, 241);
    transition: 0.1s;
  }
  .material-symbols-outlined:hover {
    background-color: rgb(160, 160, 160);
    color: white;
    transition: 0.1s;
    cursor: pointer;
  }
  .control-overlay {
    position: absolute;
    display: flex;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0);
    /* Align items to the end of the flex container (right) */
    justify-content: flex-end;
    /* Align items to the end of the cross axis (bottom) */
    align-items: flex-end;
    font-family: sans-serif;
    font-size: 1.2rem;
  }
  .video-container {
    position: relative;
    display: flex;
    justify-content: center;
  }
&lt;/style&gt;

&lt;div class=&quot;video-container&quot; id=&quot;video-container-spacedj&quot; style=&quot;width:100%;&quot;&gt;
  &lt;video height=&quot;100%&quot; src=&quot;/assets/spacedj/spacedj-video.mp4&quot; id=&quot;video-spacedj&quot; muted=&quot;&quot; loop=&quot;&quot; autoplay=&quot;&quot;&gt;&lt;/video&gt;
  &lt;div class=&quot;control-overlay&quot;&gt;
    &lt;span class=&quot;material-symbols-outlined&quot; id=&quot;unmute-button-spacedj&quot;&gt;volume_off&lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
  document.addEventListener(&quot;DOMContentLoaded&quot;, () =&gt; {
    let videoContainer = document.getElementById(
      &quot;video-container-spacedj&quot;
    );
    let unmuteButton = document.getElementById(
      &quot;unmute-button-spacedj&quot;
    );
    let video = document.getElementById(&quot;video-spacedj&quot;);

    unmuteButton.addEventListener(&quot;click&quot;, function () {
      video.muted = !video.muted;
      if (video.muted) {
        unmuteButton.textContent = &quot;volume_off&quot;;
      } else {
        unmuteButton.textContent = &quot;volume_up&quot;;
      }
    });

    if (&quot;IntersectionObserver&quot; in window) {
      const observer = new IntersectionObserver(
        (entries) =&gt; {
          entries.forEach((entry) =&gt; {
            if (entry.isIntersecting) {
              if (unmuteButton.textContent == &quot;volume_up&quot;) {
                video.muted = false;
              }
            } else {
              video.muted = true;
            }
          });
        },
        {
          root: null,
          rootMargin: &quot;0px&quot;,
          threshold: 0.1,
        }
      );

      observer.observe(videoContainer);
    }
  });
&lt;/script&gt;

&lt;h2 id=&quot;fly-through-music&quot;&gt;Fly Through Music&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Explore a Musical Universe:&lt;/strong&gt; Fly through a star constellation where each
star is labeled with a music genre. This galaxy is a 3D projection of genre
embeddings.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Generate Music in Real-Time:&lt;/strong&gt; As you fly, the stars close to the
spaceship light up and influence the music. Clicking on a star or a point in
space anchors your selection. The Lyria Realtime model blends the prompts of
nearby genres into a unique musical mashup that evolves dynamically as you
move.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Uncover Hidden Connections:&lt;/strong&gt; Similar genres appear close together in the
3D space. You can also enable “High-Dimensional Neighbors” to find genres
that are semantically similar in the original high-dimensional embedding
space, even if they aren’t visual neighbors in the projection.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Engage Auto-Pilot:&lt;/strong&gt; Randomly drift through space for an ever-changing,
generative soundscape.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;how-it-works&quot;&gt;How it Works&lt;/h2&gt;

&lt;p&gt;Space DJ combines several technologies to create an immersive experience:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Genre Embeddings:&lt;/strong&gt; We start with text prompts for 300 musical genres out
of a 1000 genre dataset. The text is converted into a rich numerical
representation (embedding) using the open-source
&lt;a href=&quot;https://colab.sandbox.google.com/github/magenta/magenta-realtime/blob/main/notebooks/Magenta_RT_Demo.ipynb&quot;&gt;MagentaRT&lt;/a&gt;
model’s MusicCoca embedder. These 768-dimensional embeddings are then
reduced to 128 dimensions using
&lt;a href=&quot;https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html&quot;&gt;Principal Component Analysis&lt;/a&gt;
for efficiency.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;3D Projection:&lt;/strong&gt; To render the embeddings in 3D, we use Uniform Manifold
Approximation and Projection
(&lt;a href=&quot;https://pair-code.github.io/understanding-umap/&quot;&gt;UMAP&lt;/a&gt;), an algorithm that
projects the data into 3D space while trying to preserve its
high-dimensional structure. You can tweak UMAP parameters in the settings
for different constellation shapes.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Interactive Rendering:&lt;/strong&gt; The 3D space, spaceship, and stars are rendered
in your browser using &lt;a href=&quot;http://three.js&quot;&gt;three.js&lt;/a&gt;. You can select how many
stars to create and whether to randomize the selection.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Real-Time Audio Synthesis:&lt;/strong&gt; Your interactions within the 3D space are
translated into a set of weighted text prompts (i.e. Deep House: 0.7,
Ambient Techno: 0.3) based on proximity. These prompts are sent to the
&lt;a href=&quot;https://ai.google.dev/gemini-api/docs/music-generation&quot;&gt;Lyria RealTime API&lt;/a&gt;,
which synthesizes the music you hear, responding instantly to the
spaceship’s position.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Development and Deployment:&lt;/strong&gt; We used AI Studio to develop the applet
through its interactive code editor. We leveraged AI Studio’s Cloud Run
integration to deploy the application. This approach simplifies the
deployment process and helps protect the Gemini API key by securely proxying
requests to the Lyria RealTime API.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;a-new-frontier-for-musical-interaction&quot;&gt;A New Frontier for Musical Interaction&lt;/h2&gt;

&lt;p&gt;Space DJ is an exploration into new ways of interacting with generative AI
models for music. We hope to inspire new forms of musical expression and
discovery.&lt;/p&gt;

&lt;p&gt;Ready to take flight?
&lt;strong&gt;&lt;a href=&quot;https://spacedj-363947264390.us-west1.run.app&quot;&gt;Try Space DJ Now!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 03 Nov 2025 12:00:00 -0800</pubDate>
        <link>https://magenta.withgoogle.com/spacedj-announce</link>
        <guid isPermaLink="true">https://magenta.withgoogle.com/spacedj-announce</guid>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Lyria RealTime VST: The Infinite Crate</title>
        <description>&lt;style&gt;
  .crate-cover-container p {
    display: flex;
    justify-content: center;
    align-items: center;
  }
&lt;/style&gt;

&lt;table align=&quot;center&quot; class=&quot;overview&quot;&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;td&gt;🎵&lt;a href=&quot;https://magenta.withgoogle.com/infinite-crate&quot;&gt;Get the plugin&lt;/a&gt;&lt;/td&gt;
    &lt;td&gt;📖 &lt;a href=&quot;https://g.co/magenta/lyria-realtime&quot;&gt;Learn more&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Live Generative Music in your DAW&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today, we’re happy to share &lt;a href=&quot;https://magenta.withgoogle.com/infinite-crate&quot;&gt;&lt;em&gt;The Infinite Crate&lt;/em&gt;&lt;/a&gt;, a DAW plugin prototype that integrates the &lt;a href=&quot;https://g.co/magenta/lyria-realtime&quot;&gt;Lyria RealTime API&lt;/a&gt; directly into your favorite music software. Use text prompts to steer a continuously evolving stream of music and feed the audio directly into your DAW for sampling, live performance, or a backing track to jam with.&lt;/p&gt;

&lt;!-- disableFinding(G3DOC_JINJA) --&gt;
&lt;style&gt;
  /* fallback */
  @font-face {
    font-family: &quot;Material Symbols Outlined&quot;;
    font-style: normal;
    font-weight: 400;
    src: url(https://fonts.gstatic.com/s/materialsymbolsoutlined/v250/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOejbd5zrDAt.woff2)
      format(&quot;woff2&quot;);
  }
  .material-symbols-outlined {
    font-family: &quot;Material Symbols Outlined&quot;;
    font-weight: normal;
    font-style: normal;
    font-size: 36px;
    line-height: 1;
    letter-spacing: normal;
    text-transform: none;
    display: inline-block;
    white-space: nowrap;
    word-wrap: normal;
    direction: ltr;
    -webkit-font-feature-settings: &quot;liga&quot;;
    -webkit-font-smoothing: antialiased;
    color: black;
    border-radius: 100%;
    padding: 0.2em;
    background-color: rgb(241, 241, 241);
    transition: 0.1s;
  }
  .material-symbols-outlined:hover {
    background-color: rgb(160, 160, 160);
    color: white;
    transition: 0.1s;
    cursor: pointer;
  }
  .control-overlay {
    position: absolute;
    display: flex;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0);
    /* Align items to the end of the flex container (right) */
    justify-content: flex-end;
    /* Align items to the end of the cross axis (bottom) */
    align-items: flex-end;
    font-family: sans-serif;
    font-size: 1.2rem;
  }
  .video-container {
    position: relative;
    display: flex;
    justify-content: center;
  }
&lt;/style&gt;

&lt;div class=&quot;video-container&quot; id=&quot;video-container-infinitecrate&quot; style=&quot;width:100%;&quot;&gt;
  &lt;video height=&quot;100%&quot; src=&quot;/assets/infinite-crate/hero_loop.mp4&quot; id=&quot;video-infinitecrate&quot; muted=&quot;&quot; loop=&quot;&quot; autoplay=&quot;&quot;&gt;&lt;/video&gt;
  &lt;div class=&quot;control-overlay&quot;&gt;
    &lt;span class=&quot;material-symbols-outlined&quot; id=&quot;unmute-button-infinitecrate&quot;&gt;volume_off&lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
  document.addEventListener(&quot;DOMContentLoaded&quot;, () =&gt; {
    let videoContainer = document.getElementById(
      &quot;video-container-infinitecrate&quot;
    );
    let unmuteButton = document.getElementById(
      &quot;unmute-button-infinitecrate&quot;
    );
    let video = document.getElementById(&quot;video-infinitecrate&quot;);

    unmuteButton.addEventListener(&quot;click&quot;, function () {
      video.muted = !video.muted;
      if (video.muted) {
        unmuteButton.textContent = &quot;volume_off&quot;;
      } else {
        unmuteButton.textContent = &quot;volume_up&quot;;
      }
    });

    if (&quot;IntersectionObserver&quot; in window) {
      const observer = new IntersectionObserver(
        (entries) =&gt; {
          entries.forEach((entry) =&gt; {
            if (entry.isIntersecting) {
              if (unmuteButton.textContent == &quot;volume_up&quot;) {
                video.muted = false;
              }
            } else {
              video.muted = true;
            }
          });
        },
        {
          root: null,
          rootMargin: &quot;0px&quot;,
          threshold: 0.1,
        }
      );

      observer.observe(videoContainer);
    }
  });
&lt;/script&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Integrating generative models with existing creative workflows has always been
an important part of Magenta’s mission, as it allows people more control and
agency in how they use these models in their own practice.
Our previous experiments with plugins, including
&lt;a href=&quot;https://g.co/magenta/studio&quot;&gt;Magenta Studio&lt;/a&gt; for manipulating MIDI clips and
&lt;a href=&quot;https://g.co/magenta/ddsp-vst&quot;&gt;DDSP VST&lt;/a&gt; for realtime audio-to-audio
transformations, have over a million downloads combined and have validated for
us the value of making these tools creatively accessible.&lt;/p&gt;

&lt;p&gt;We hope The Infinite Crate will be a welcome addition to this lineup.
We were inspired to create it though our collaborations with musicians such as
&lt;a href=&quot;https://www.youtube.com/watch?v=IUQW5LgBZvQ&quot;&gt;Jacob Collier&lt;/a&gt; and
&lt;a href=&quot;https://www.youtube.com/watch?v=thAhd82XnMc&quot;&gt;Toro y Moi&lt;/a&gt;, where we saw the
potential for integrating capabilities similar to
&lt;a href=&quot;https://labs.google/fx/tools/music-fx-dj&quot;&gt;MusicFX DJ&lt;/a&gt; more directly into studio and live
performance workflows.&lt;/p&gt;

&lt;p&gt;The Infinite Crate is cross-platform, available for both Mac and Windows, as a
VST3 plugin, an AU component, and a standalone app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Looking ahead&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lyria RealTime is not capable of running locally on consumer hardware, so thus the plugin requires an &lt;a href=&quot;https://aistudio.google.com/apikey&quot;&gt;API key (free for Lyria RealTime)&lt;/a&gt; and internet access.
We’re excited to explore complementing this approach with more efficient variants that can run locally on consumer hardware such as our recently released open model &lt;a href=&quot;https://magenta.withgoogle.com/magenta-realtime&quot;&gt;Magenta RealTime&lt;/a&gt;, so stay tuned!&lt;/p&gt;
</description>
        <pubDate>Wed, 09 Jul 2025 07:00:01 -0700</pubDate>
        <link>https://magenta.withgoogle.com/infinite-crate-announce</link>
        <guid isPermaLink="true">https://magenta.withgoogle.com/infinite-crate-announce</guid>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Magenta RealTime: An Open-Weights Live Music Model</title>
        <description>&lt;style&gt;
  table tr.wrap {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
  }
  table tr.wrap &gt; td {
    display: block;
    flex: 1;
  }
  td {text-align: center !important}
  .from {background-color: #d3d3d3;}
  img.inline {
    vertical-align: middle;
    display: inline-block;
    max-height: 16px;
    width: auto !important;
    margin-right: 6px;
  }
  img.centered {
    max-width: 90%;
    margin: auto;
  }
  video {
    max-width: 100% !important;
  }
&lt;/style&gt;

&lt;h1 id=&quot;magenta-realtime&quot;&gt;Magenta RealTime&lt;/h1&gt;

&lt;p&gt;Today, we’re happy to share a research preview of Magenta RealTime (Magenta RT), an open-weights live music model that allows you to interactively create, control and perform music in the moment.&lt;/p&gt;

&lt;table align=&quot;center&quot; class=&quot;overview&quot;&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;td&gt;&lt;img alt=&quot;&quot; src=&quot;/assets/magenta_realtime/colab.jpg&quot; class=&quot;inline&quot; /&gt;&lt;a href=&quot;https://colab.sandbox.google.com/github/magenta/magenta-realtime/blob/v1_legacy/notebooks/Magenta_RT_Demo.ipynb&quot;&gt;Colab Demo&lt;/a&gt;&lt;/td&gt;
    &lt;td&gt;📝&lt;a href=&quot;https://arxiv.org/abs/2508.04651&quot;&gt;Paper&lt;/a&gt;&lt;/td&gt;
    &lt;td&gt;&lt;img alt=&quot;&quot; src=&quot;/assets/magenta_realtime/github.png&quot; class=&quot;inline&quot; /&gt;&lt;a href=&quot;https://github.com/magenta/magenta-realtime/tree/v1_legacy&quot;&gt;GitHub Code&lt;/a&gt;&lt;/td&gt;
    &lt;td&gt;&lt;img alt=&quot;&quot; src=&quot;/assets/magenta_realtime/hf-logo.png&quot; class=&quot;inline&quot; /&gt;&lt;a href=&quot;https://huggingface.co/google/magenta-realtime&quot;&gt;Model Card&lt;/a&gt;&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Magenta RT is the latest in a series of models and applications developed as part of the Magenta Project. It is the open-weights cousin of &lt;a href=&quot;http://g.co/magenta/lyria-realtime&quot;&gt;Lyria RealTime&lt;/a&gt;, the real-time generative music model powering &lt;a href=&quot;https://labs.google/fx/tools/music-fx-dj&quot;&gt;Music FX DJ&lt;/a&gt; and the &lt;a href=&quot;https://magenta.withgoogle.com/lyria-realtime&quot;&gt;real-time music API&lt;/a&gt; in &lt;a href=&quot;https://aistudio.google.com/app/apps/bundled/promptdj-midi?showPreview=true%3Futm_source%3Ddeepmind.google&amp;amp;utm_medium=referral&amp;amp;utm_campaign=gdm&amp;amp;utm_content=&quot;&gt;Google AI Studio&lt;/a&gt;, developed by Google DeepMind. Real-time music generation models open up unique opportunities for live music exploration and performance, and we’re excited to see what new tools, experiences, and art you create with them.&lt;/p&gt;

&lt;p&gt;As an open-weights model, Magenta RT is targeted towards eventually running locally on consumer hardware (currently runs on free-tier Colab TPUs). It is an 800 million parameter autoregressive transformer model trained on ~190k hours of stock music from multiple sources, mostly instrumental. The model code is &lt;a href=&quot;https://github.com/magenta/magenta-realtime&quot;&gt;available on Github&lt;/a&gt; and the weights are available on Google Cloud Storage and &lt;a href=&quot;https://huggingface.co/google/magenta-realtime&quot;&gt;Hugging Face&lt;/a&gt; under permissive licenses with some additional bespoke terms. To see how to run inference with the model and try it yourself, check out our &lt;a href=&quot;https://colab.research.google.com/github/magenta/magenta-realtime/blob/main/notebooks/Magenta_RT_Demo.ipynb&quot;&gt;Colab Demo&lt;/a&gt;. You may also &lt;a href=&quot;https://colab.research.google.com/github/magenta/magenta-realtime/blob/main/notebooks/Magenta_RT_Finetune.ipynb&quot;&gt;customize MagentaRT on your own audio&lt;/a&gt; or explore &lt;a href=&quot;https://colab.research.google.com/github/magenta/magenta-realtime/blob/main/notebooks/Magenta_RT_Audio_Injection.ipynb&quot;&gt;live audio input&lt;/a&gt; Options for local, on device inference are coming soon.&lt;/p&gt;

&lt;figure&gt;
  &lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/Ae1Kz2zmh9M&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;!-- disableFinding(FIGURE_NO_CAPTION) --&gt;&lt;/p&gt;

&lt;h2 id=&quot;how-it-works&quot;&gt;How it Works&lt;/h2&gt;

&lt;p&gt;Live generative music is particularly difficult because it requires both
real-time generation (i.e. real-time factor &amp;gt; 1, generating X seconds of audio
in less than X seconds), causal streaming (i.e. online generation), and
low-latency controllability.&lt;/p&gt;

&lt;figure&gt;
  &lt;video width=&quot;100%&quot; src=&quot;/assets/lyria_realtime/lyria_realtime_diagram.mp4&quot; autoplay=&quot;&quot; muted=&quot;&quot; loop=&quot;&quot;&gt;&lt;/video&gt;
&lt;/figure&gt;

&lt;p&gt;Magenta RT overcomes these challenges by adapting the &lt;a href=&quot;https://research.google/pubs/musiclm-generating-music-from-text/&quot;&gt;MusicLM&lt;/a&gt; architecture to perform block autoregression. The model generates a continuous stream of music in sequential chunks, each conditioned on the previous audio output (10s of coarse audio tokens) and a style embedding to produce the next audio chunk (2s of fine audio tokens). By manipulating the style embedding (weighted average of &lt;a href=&quot;https://www.youtube.com/watch?v=Ae1Kz2zmh9M&quot;&gt;text&lt;/a&gt; or &lt;a href=&quot;https://www.youtube.com/watch?v=vHIf2UKXmp4&quot;&gt;audio&lt;/a&gt; prompt embeddings), players can shape and morph the music in real-time, mixing together different styles, instruments, and musical attributes.&lt;/p&gt;

&lt;p&gt;The latency of controls is set by the chunk size, which has a maximum output
size of two seconds but can be reduced to increase reactivity. On a Colab
free-tier TPU (v2-8 TPU), these two seconds of audio are generated in 1.25
seconds, giving a real-time factor of 1.6.&lt;/p&gt;

&lt;p&gt;Compared to the original MusicLM, we’ve upgraded our representations to SpectroStream for high-fidelity (48kHz stereo) audio, which is a successor to SoundStream (&lt;a href=&quot;https://arxiv.org/abs/2107.03312&quot;&gt;Zeghidour+ 21&lt;/a&gt;). We also trained a new joint music+text embedding model called MusicCoCa that is influenced by both MuLan (&lt;a href=&quot;https://arxiv.org/abs/2208.12415&quot;&gt;Huang+ 22&lt;/a&gt;) and the CoCa models (&lt;a href=&quot;https://arxiv.org/abs/2205.01917&quot;&gt;Yu+ 22&lt;/a&gt;). Additional details are provided in the &lt;a href=&quot;https://huggingface.co/google/magenta-realtime&quot;&gt;model card&lt;/a&gt; and deeper technical descriptions are available in our &lt;a href=&quot;https://arxiv.org/abs/2508.04651&quot;&gt;paper&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;latent-space-exploration-in-real-time&quot;&gt;Latent Space Exploration… In Real Time&lt;/h2&gt;

&lt;p&gt;Magenta’s earlier work in latent music models for MIDI clips (&lt;a href=&quot;https://magenta.withgoogle.com/music-vae&quot;&gt;MusicVAE&lt;/a&gt;, &lt;a href=&quot;https://magenta.withgoogle.com/groovae&quot;&gt;GrooVAE&lt;/a&gt;) and instrumental timbre (&lt;a href=&quot;https://magenta.withgoogle.com/nsynth&quot;&gt;NSynth&lt;/a&gt;), &lt;a href=&quot;https://vibertthio.com/runn/&quot;&gt;offered&lt;/a&gt; &lt;a href=&quot;https://vibertthio.com/sornting/&quot;&gt;a&lt;/a&gt; &lt;a href=&quot;https://experiments.withgoogle.com/nsynth-super&quot;&gt;wide&lt;/a&gt; &lt;a href=&quot;https://experiments.withgoogle.com/ai/beat-blender/view/&quot;&gt;range&lt;/a&gt; &lt;a href=&quot;https://experiments.withgoogle.com/sound-maker&quot;&gt;of&lt;/a&gt; &lt;a href=&quot;https://teampieshop.github.io/latent-loops/&quot;&gt;possible&lt;/a&gt; &lt;a href=&quot;https://experiments.withgoogle.com/ai/melody-mixer/view/&quot;&gt;interfaces&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;With Magenta RT, it is now possible to traverse the space of multi-instrumental
audio: explore the never-before-heard music between genres, unusual instrument
combinations, or &lt;a href=&quot;https://www.youtube.com/watch?v=vHIf2UKXmp4&quot;&gt;your own audio samples&lt;/a&gt;.&lt;/p&gt;

&lt;figure&gt;
  &lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/vHIf2UKXmp4&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;!-- disableFinding(FIGURE_NO_CAPTION) --&gt;&lt;/p&gt;

&lt;p&gt;The ability to adjust prompt mixtures in real-time allows you to efficiently
explore the sonic landscape and find novel textures and loops to use as part of
a larger piece of music.&lt;/p&gt;

&lt;p&gt;Real-time interactivity also provides the possibility of this latent exploration being its own type of musical performance, the interpolation through space combined with anchoring of the audio context producing a structure similar to a &lt;a href=&quot;https://www.youtube.com/watch?v=thAhd82XnMc&quot;&gt;DJ set&lt;/a&gt; or improvisation session. Beyond performance, it can also be used to provide interactive soundscapes for physical spaces like artist installations or virtual spaces like video games.&lt;/p&gt;

&lt;p&gt;This opens up a world of possibilities to build new tools and interfaces, and below you can see three example applications built on the &lt;a href=&quot;http://g.co/magenta/lyria-realtime&quot;&gt;Lyria RealTime API&lt;/a&gt; in AI Studio. Over time, Magenta RT will open up similar opportunities for on-device applications.&lt;/p&gt;

&lt;table align=&quot;center&quot;&gt; &lt;tr&gt;
&lt;td&gt; &lt;video src=&quot;/assets/lyria_realtime/image2.gif.mp4&quot; muted=&quot;&quot; autoplay=&quot;&quot; loop=&quot;&quot; class=&quot;centered&quot;&gt;&lt;/video&gt; &lt;a href=&quot;https://aistudio.google.com/apps/bundled/promptdj?showPreview=true&quot;&gt;&lt;b&gt;PromptDJ&lt;/b&gt;&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; &lt;video src=&quot;/assets/lyria_realtime/image4.gif.mp4&quot; muted=&quot;&quot; autoplay=&quot;&quot; loop=&quot;&quot; class=&quot;centered&quot;&gt;&lt;/video&gt; &lt;a href=&quot;https://aistudio.google.com/apps/bundled/promptdj-midi?showPreview=true&quot;&gt;&lt;b&gt;PromptDJ MIDI&lt;/b&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt; &lt;video src=&quot;/assets/lyria_realtime/image1.gif.mp4&quot; muted=&quot;&quot; autoplay=&quot;&quot; loop=&quot;&quot; class=&quot;centered&quot;&gt;&lt;/video&gt;&lt;a href=&quot;https://aistudio.google.com/app/prompts?state=%7B%22ids%22:%5B%221_pYvZFu7gFns_0w21GsW55moNR0gNmbS%22%5D,%22action%22:%22open%22,%22userId%22:%22103620588905886731599%22,%22resourceKeys%22:%7B%7D%7D&amp;amp;usp=sharing&quot;&gt; &lt;b&gt;PromptDJ Pad&lt;/b&gt; &lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt; &lt;/table&gt;

&lt;h2 id=&quot;why-magenta-realtime&quot;&gt;Why Magenta RealTime?&lt;/h2&gt;

&lt;p&gt;Enhancing human creativity (not replacing it) has always been at the core of Magenta’s mission. AI, however, can be a double-edged sword for creative agency. It offers new opportunities for accessibility and expression, but it can also create a deluge of more passive creation and consumption compared to traditional methods. With this in mind, we have always strived to build tools that help close the skill gap to make creation more accessible, while also valuing existing musical practices and encouraging people to dig deeper in their own creative journeys. In this regard, real-time interactive music models offer several important advantages that have motivated our research over the years (&lt;a href=&quot;https://magenta.withgoogle.com/pianogenie&quot;&gt;Piano Genie&lt;/a&gt;, &lt;a href=&quot;https://magenta.withgoogle.com/ddsp&quot;&gt;DDSP&lt;/a&gt;, &lt;a href=&quot;https://magenta.withgoogle.com/nsynth&quot;&gt;NSynth&lt;/a&gt;, &lt;a href=&quot;https://experiments.withgoogle.com/ai/ai-duet/view/&quot;&gt;AI Duet,&lt;/a&gt; and more).&lt;/p&gt;

&lt;p&gt;Live interaction demands more from the player but can offer more in return. The continuous perception-action loop between the human and the model provides access to a creative flow state, centering the experience on the joy of the process over the final product. The higher bandwidth channel of communication and control often results in outputs that are more unique and personal, as every action the player takes (or doesn’t) has an effect.&lt;/p&gt;

&lt;p&gt;Finally, live models naturally avoid creating a deluge of passive content,
because they intrinsically balance listening with generation in a 1:1 ratio.
They create a unique moment in time, shared by the player, the model, and
listeners.&lt;/p&gt;

&lt;p&gt;While &lt;a href=&quot;http://g.co/magenta/lyria-realtime&quot;&gt;Lyria RealTime&lt;/a&gt; provides access to
state-of-the-art live music generation to developers and users around the globe,
the Magenta Project remains committed to providing more direct access to code
and models to enable researchers, artists, and creative coders to further build
upon and adapt to achieve their creative goals.&lt;/p&gt;

&lt;h2 id=&quot;known-limitations&quot;&gt;Known Limitations&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Coverage of broad musical styles&lt;/strong&gt;. Magenta RT’s training data primarily consists of Western instrumental music. As a consequence, Magenta RT has incomplete coverage of both vocal performance and the broader landscape of rich musical traditions worldwide. For real-time generation with broader style coverage, we refer users to our &lt;a href=&quot;http://g.co/magenta/lyria-realtime&quot;&gt;Lyria RealTime API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vocals&lt;/strong&gt;. While the model is capable of generating non-lexical vocalizations
and humming, it is not conditioned on lyrics and is unlikely to generate actual
words. However, there remains some risk of generating explicit or
culturally-insensitive lyrical content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Latency&lt;/strong&gt;. Because the Magenta RT LLM operates on two second chunks, user
inputs for the style prompt may take two or more seconds to influence the
musical output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limited context&lt;/strong&gt;. Because the Magenta RT encoder has a maximum audio context
window of ten seconds, the model is unable to directly reference music that has
been output earlier than that. While the context is sufficient to enable the
model to create melodies, rhythms, and chord progressions, the model is not
capable of automatically creating longer-term song structures.&lt;/p&gt;

&lt;h2 id=&quot;future-work&quot;&gt;Future Work&lt;/h2&gt;

&lt;p&gt;Magenta RT and Lyria RT are pushing the boundaries of live generative music, and
we are happy that Magenta RT marks a return of open releases from Magenta.&lt;/p&gt;

&lt;p&gt;We are hard at work at making MagentaRT run locally on your own device - stay
tuned for more info!&lt;/p&gt;

&lt;p&gt;We are also working on the next generation of real-time models with higher
quality, lower latency, and more interactivity, to create truly playable
instruments and live accompaniment.&lt;/p&gt;

&lt;h2 id=&quot;how-to-cite&quot;&gt;How to cite&lt;/h2&gt;

&lt;p&gt;Please cite our technical report:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BibTeX:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;@article{gdmlyria2025live,
    title={Live Music Models},
    author={Caillon, Antoine and McWilliams, Brian and Tarakajian, Cassie and Simon, Ian and Manco, Ilaria and Engel, Jesse and Constant, Noah and Li, Pen and Denk, Timo I. and Lalama, Alberto and Agostinelli, Andrea and Huang, Anna and Manilow, Ethan and Brower, George and Erdogan, Hakan and Lei, Heidi and Rolnick, Itai and Grishchenko, Ivan and Orsini, Manu and Kastelic, Matej and Zuluaga, Mauricio and Verzetti, Mauro and Dooley, Michael and Skopek, Ondrej and Ferrer, Rafael and Borsos, Zal{\&apos;a}n and van den Oord, {\&quot;A}aron and Eck, Douglas and Collins, Eli and Baldridge, Jason and Hume, Tom and Donahue, Chris and Han, Kehang and Roberts, Adam},
    journal={arXiv:2508.04651},
    year={2025}
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Fri, 20 Jun 2025 07:00:01 -0700</pubDate>
        <link>https://magenta.withgoogle.com/magenta-realtime</link>
        <guid isPermaLink="true">https://magenta.withgoogle.com/magenta-realtime</guid>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Introducing Lyria RealTime API</title>
        <description>&lt;!-- disableFinding(LINE_OVER_80) --&gt;
&lt;!-- disableFinding(G3DOC_JINJA) --&gt;

&lt;h1 id=&quot;lyria-realtime-api&quot;&gt;Lyria RealTime API&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Lyria team&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For the last few years, we have continued to explore how different ways of interacting with generative AI technologies for music can lead to new creative possibilities. A primary focus has been on what we refer to as “&lt;a href=&quot;https://arxiv.org/abs/2508.04651&quot;&gt;live music models&lt;/a&gt;”, which can be controlled by a user in real-time.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://goo.gle/lyria-realtime&quot;&gt;Lyria RealTime&lt;/a&gt; is Google DeepMind’s latest model developed for this purpose, and we are excited to share an experimental API that &lt;strong&gt;anyone&lt;/strong&gt; can use to explore the technology, create some jams, develop an app, or build their own musical instruments. You can try a demo app now in &lt;a href=&quot;https://aistudio.google.com/app/apps/bundled/promptdj-midi?showPreview=true%3Futm_source%3Ddeepmind.google&amp;amp;utm_medium=referral&amp;amp;utm_campaign=gdm&amp;amp;utm_content=&quot;&gt;Google AI Studio&lt;/a&gt;, fork it to build your own, or have a look at the &lt;a href=&quot;https://ai.google.dev/gemini-api/docs/music-generation&quot;&gt;API documentation&lt;/a&gt;. For more details on how Lyria RealTime works, see our &lt;a href=&quot;https://arxiv.org/abs/2508.04651&quot;&gt;technical report&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here are a few interfaces we have open sourced in Google AI Studio for inspiration that you can easily fork and make your own:&lt;/p&gt;

&lt;style&gt;
  /* Style the tab */
  .tab {
    overflow: hidden;
    border: 1px solid #ccc;
    background-color: #f1f1f1;
  }

  /* Style the buttons that are used to open the tab content */
  .tab button {
    background-color: inherit;
    float: left;
    border: none;
    outline: none;
    cursor: pointer;
    padding: 14px 16px;
    transition: 0.3s;
    font-size: revert;
  }

  /* Change background color of buttons on hover */
  .tab button:hover {
    background-color: #ddd;
  }

  /* Create an active/current tablink class */
  .tab button.active {
    background-color: #ccc;
  }

  /* Style the tab content */
  .tabcontent_demos {
    display: none;
    padding: 6px 12px;
    border: 1px solid #ccc;
    border-top: none;
    justify-content: center;
    align-items: center;
    flex-direction: row;
    height: 20em;
  }

  .tabcontent_demos.active {
    display: flex;
  }

  @media screen and (max-width: 700px) {
    .tabcontent_demos {
      height: initial;
      flex-direction: column;
    }
  }

  @media screen and (max-width: 400px) {
    .tab button {
      font-size: 0.68em;
    }
  }
&lt;/style&gt;

&lt;script&gt;
  function openTab(events, tabName) {
    // Declare all variables
    var i;
    var tabcontent;
    var tablinks;

    // Get all elements with class=&quot;tabcontent&quot; and hide them
    tabcontent = document.getElementsByClassName(&quot;tabcontent_demos&quot;);
    for (i = 0; i &lt; tabcontent.length; i++) {
      tabcontent[i].style.display = &quot;none&quot;;
    }

    // Get all elements with class=&quot;tablinks&quot; and remove the class &quot;active&quot;
    tablinks = document.getElementsByClassName(&quot;tablinks_demos&quot;);
    for (i = 0; i &lt; tablinks.length; i++) {
      tablinks[i].className = tablinks[i].className.replace(&quot; active&quot;, &quot;&quot;);
    }

    // Show the current tab, and add an &quot;active&quot; class to the button that opened the tab
    document.getElementById(tabName).style.display = &quot;flex&quot;;
    events.currentTarget.className += &quot; active&quot;;
  }
&lt;/script&gt;

&lt;div class=&quot;tab&quot;&gt;
  &lt;button class=&quot;tablinks_demos&quot; onclick=&quot;openTab(event, &apos;pdj&apos;)&quot;&gt;
    PromptDJ
  &lt;/button&gt;
  &lt;button class=&quot;tablinks_demos&quot; onclick=&quot;openTab(event, &apos;pdjmidi&apos;)&quot;&gt;
    PromptDJ MIDI
  &lt;/button&gt;
  &lt;button class=&quot;tablinks_demos&quot; onclick=&quot;openTab(event, &apos;pdjpad&apos;)&quot;&gt;
    PromptDJ Pad
  &lt;/button&gt;
&lt;/div&gt;

&lt;div id=&quot;pdj&quot; class=&quot;tabcontent_demos active&quot;&gt;
  &lt;div style=&quot;flex: 1&quot;&gt;
    &lt;a href=&quot;https://aistudio.google.com/apps/bundled/promptdj?showPreview=true&quot;&gt;&lt;h3&gt;PromptDJ&lt;/h3&gt;&lt;/a&gt;
    &lt;p&gt;
      Our most fully-featured demo allows you to add prompts and use sliders to
      control their relative impact on the music. Advanced Settings let you try
      out manual overrides for different musical aspects like note density,
      tempo, and key.
    &lt;/p&gt;
    &lt;a href=&quot;https://aistudio.google.com/apps/bundled/promptdj?showPreview=true&quot;&gt;&lt;b&gt;Try it now !&lt;/b&gt;&lt;/a&gt;
  &lt;/div&gt;
  &lt;div style=&quot;flex: 1; display: flex; justify-content: flex-end&quot;&gt;
    &lt;video src=&quot;/assets/lyria_realtime/image2.gif.mp4&quot; muted=&quot;&quot; autoplay=&quot;&quot; loop=&quot;&quot;&gt;&lt;/video&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;pdjmidi&quot; class=&quot;tabcontent_demos&quot;&gt;
  &lt;div style=&quot;flex: 1&quot;&gt;
    &lt;a href=&quot;https://aistudio.google.com/apps/bundled/promptdj-midi?showPreview=true&quot;&gt;&lt;h3&gt;PromptDJ MIDI&lt;/h3&gt;&lt;/a&gt;
    &lt;p&gt;
      With PromptDJ MIDI, you can use a virtual MIDI controller to mix together
      text descriptors (that you can edit) and produce a single stream of music.
      You can even map the knobs to a physical MIDI controller via WebMIDI like Toro y Moi
      used during the &lt;a href=&quot;https://www.youtube.com/watch?v=thAhd82XnMc&quot;&gt;I/O preshow&lt;/a&gt;.
    &lt;/p&gt;
    &lt;a href=&quot;https://aistudio.google.com/apps/bundled/promptdj-midi?showPreview=true&quot;&gt;&lt;b&gt;Try it now !&lt;/b&gt;&lt;/a&gt;
  &lt;/div&gt;
  &lt;div style=&quot;flex: 1; display: flex; justify-content: flex-end&quot;&gt;
    &lt;video src=&quot;/assets/lyria_realtime/image4.gif.mp4&quot; muted=&quot;&quot; autoplay=&quot;&quot; loop=&quot;&quot;&gt;&lt;/video&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;pdjpad&quot; class=&quot;tabcontent_demos&quot;&gt;
  &lt;div style=&quot;flex: 1&quot;&gt;
    &lt;a href=&quot;https://aistudio.google.com/app/prompts?state=%7B%22ids%22:%5B%221_pYvZFu7gFns_0w21GsW55moNR0gNmbS%22%5D,%22action%22:%22open%22,%22userId%22:%22103620588905886731599%22,%22resourceKeys%22:%7B%7D%7D&amp;amp;usp=sharing&quot;&gt;&lt;h3&gt;PromptDJ Pad&lt;/h3&gt;&lt;/a&gt;
    &lt;p&gt;
      PromptDJ Pad harkens back to our earlier experiments with latent space
      interfaces
      &lt;a href=&quot;https://nsynthsuper.withgoogle.com/&quot;&gt;NSynth Super&lt;/a&gt; and
      &lt;a href=&quot;https://experiments.withgoogle.com/ai/beat-blender/view/&quot;&gt;MusicVAE Beat Blender&lt;/a&gt;, allowing you to easily explore the space between four editable prompts.
    &lt;/p&gt;
    &lt;a href=&quot;https://aistudio.google.com/app/prompts?state=%7B%22ids%22:%5B%221_pYvZFu7gFns_0w21GsW55moNR0gNmbS%22%5D,%22action%22:%22open%22,%22userId%22:%22103620588905886731599%22,%22resourceKeys%22:%7B%7D%7D&amp;amp;usp=sharing&quot;&gt;&lt;b&gt;Try it now !&lt;/b&gt;&lt;/a&gt;
  &lt;/div&gt;
  &lt;div style=&quot;flex: 1; display: flex; justify-content: flex-end&quot;&gt;
    &lt;video src=&quot;/assets/lyria_realtime/image1.gif.mp4&quot; muted=&quot;&quot; autoplay=&quot;&quot; loop=&quot;&quot;&gt;&lt;/video&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;A key advantage of the API is its versatility, allowing it to be called from various platforms, not just web apps. For instance, we’ve developed a VST plugin called &lt;a href=&quot;https://magenta.withgoogle.com/infinite-crate-announce&quot;&gt;The Infinite Crate&lt;/a&gt;, which enables a seamless interaction between Lyria RealTime and the digital audio workstation of your choice!&lt;/p&gt;

&lt;style&gt;
  /* fallback */
  @font-face {
    font-family: &quot;Material Symbols Outlined&quot;;
    font-style: normal;
    font-weight: 400;
    src: url(https://fonts.gstatic.com/s/materialsymbolsoutlined/v250/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOejbd5zrDAt.woff2)
      format(&quot;woff2&quot;);
  }
  .material-symbols-outlined {
    font-family: &quot;Material Symbols Outlined&quot;;
    font-weight: normal;
    font-style: normal;
    font-size: 36px;
    line-height: 1;
    letter-spacing: normal;
    text-transform: none;
    display: inline-block;
    white-space: nowrap;
    word-wrap: normal;
    direction: ltr;
    -webkit-font-feature-settings: &quot;liga&quot;;
    -webkit-font-smoothing: antialiased;
    color: black;
    border-radius: 100%;
    padding: 0.2em;
    background-color: rgb(241, 241, 241);
    transition: 0.1s;
  }
  .material-symbols-outlined:hover {
    background-color: rgb(160, 160, 160);
    color: white;
    transition: 0.1s;
    cursor: pointer;
  }
  .control-overlay {
    position: absolute;
    display: flex;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0);
    /* Align items to the end of the flex container (right) */
    justify-content: flex-end;
    /* Align items to the end of the cross axis (bottom) */
    align-items: flex-end;
    font-family: sans-serif;
    font-size: 1.2rem;
  }
  .video-container {
    position: relative;
    display: flex;
    justify-content: center;
  }
&lt;/style&gt;

&lt;div class=&quot;video-container&quot; id=&quot;video-container-infinitecrate&quot; style=&quot;width:100%;&quot;&gt;
  &lt;video height=&quot;100%&quot; src=&quot;/assets/infinite-crate/hero_loop.mp4&quot; id=&quot;video-infinitecrate&quot; muted=&quot;&quot; loop=&quot;&quot; autoplay=&quot;&quot;&gt;&lt;/video&gt;
  &lt;div class=&quot;control-overlay&quot;&gt;
    &lt;span class=&quot;material-symbols-outlined&quot; id=&quot;unmute-button-infinitecrate&quot;&gt;volume_off&lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
  document.addEventListener(&quot;DOMContentLoaded&quot;, () =&gt; {
    let videoContainer = document.getElementById(
      &quot;video-container-infinitecrate&quot;
    );
    let unmuteButton = document.getElementById(
      &quot;unmute-button-infinitecrate&quot;
    );
    let video = document.getElementById(&quot;video-infinitecrate&quot;);

    unmuteButton.addEventListener(&quot;click&quot;, function () {
      video.muted = !video.muted;
      if (video.muted) {
        unmuteButton.textContent = &quot;volume_off&quot;;
      } else {
        unmuteButton.textContent = &quot;volume_up&quot;;
      }
    });

    if (&quot;IntersectionObserver&quot; in window) {
      const observer = new IntersectionObserver(
        (entries) =&gt; {
          entries.forEach((entry) =&gt; {
            if (entry.isIntersecting) {
              if (unmuteButton.textContent == &quot;volume_up&quot;) {
                video.muted = false;
              }
            } else {
              video.muted = true;
            }
          });
        },
        {
          root: null,
          rootMargin: &quot;0px&quot;,
          threshold: 0.1,
        }
      );

      observer.observe(videoContainer);
    }
  });
&lt;/script&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 id=&quot;capabilities&quot;&gt;Capabilities&lt;/h2&gt;

&lt;p&gt;With &lt;strong&gt;Lyria RealTime&lt;/strong&gt;, it is possible to traverse the space of multi-instrumental audio: explore the never-before-heard music between genres, unusual instrument combinations, or abstract concepts.&lt;/p&gt;

&lt;style&gt;
  /* fallback */
  @font-face {
    font-family: &quot;Material Symbols Outlined&quot;;
    font-style: normal;
    font-weight: 400;
    src: url(https://fonts.gstatic.com/s/materialsymbolsoutlined/v250/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOejbd5zrDAt.woff2)
      format(&quot;woff2&quot;);
  }
  .material-symbols-outlined {
    font-family: &quot;Material Symbols Outlined&quot;;
    font-weight: normal;
    font-style: normal;
    font-size: 36px;
    line-height: 1;
    letter-spacing: normal;
    text-transform: none;
    display: inline-block;
    white-space: nowrap;
    word-wrap: normal;
    direction: ltr;
    -webkit-font-feature-settings: &quot;liga&quot;;
    -webkit-font-smoothing: antialiased;
    color: black;
    border-radius: 100%;
    padding: 0.2em;
    background-color: rgb(241, 241, 241);
    transition: 0.1s;
  }
  .material-symbols-outlined:hover {
    background-color: rgb(160, 160, 160);
    color: white;
    transition: 0.1s;
    cursor: pointer;
  }
  .control-overlay {
    position: absolute;
    display: flex;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0);
    /* Align items to the end of the flex container (right) */
    justify-content: flex-end;
    /* Align items to the end of the cross axis (bottom) */
    align-items: flex-end;
    font-family: sans-serif;
    font-size: 1.2rem;
  }
  .video-container {
    position: relative;
    display: flex;
    justify-content: center;
  }
&lt;/style&gt;

&lt;div class=&quot;video-container&quot; id=&quot;video-container-musicfxdj&quot; style=&quot;width:100%;&quot;&gt;
  &lt;video height=&quot;100%&quot; src=&quot;/assets/lyria_realtime/mixing_cropped.mp4&quot; id=&quot;video-musicfxdj&quot; muted=&quot;&quot; loop=&quot;&quot; autoplay=&quot;&quot;&gt;&lt;/video&gt;
  &lt;div class=&quot;control-overlay&quot;&gt;
    &lt;span class=&quot;material-symbols-outlined&quot; id=&quot;unmute-button-musicfxdj&quot;&gt;volume_off&lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
  document.addEventListener(&quot;DOMContentLoaded&quot;, () =&gt; {
    let videoContainer = document.getElementById(
      &quot;video-container-musicfxdj&quot;
    );
    let unmuteButton = document.getElementById(
      &quot;unmute-button-musicfxdj&quot;
    );
    let video = document.getElementById(&quot;video-musicfxdj&quot;);

    unmuteButton.addEventListener(&quot;click&quot;, function () {
      video.muted = !video.muted;
      if (video.muted) {
        unmuteButton.textContent = &quot;volume_off&quot;;
      } else {
        unmuteButton.textContent = &quot;volume_up&quot;;
      }
    });

    if (&quot;IntersectionObserver&quot; in window) {
      const observer = new IntersectionObserver(
        (entries) =&gt; {
          entries.forEach((entry) =&gt; {
            if (entry.isIntersecting) {
              if (unmuteButton.textContent == &quot;volume_up&quot;) {
                video.muted = false;
              }
            } else {
              video.muted = true;
            }
          });
        },
        {
          root: null,
          rootMargin: &quot;0px&quot;,
          threshold: 0.1,
        }
      );

      observer.observe(videoContainer);
    }
  });
&lt;/script&gt;

&lt;p&gt;The core capabilities of the model and API are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Generates a continuous stream of 48kHz stereo music.&lt;/li&gt;
  &lt;li&gt;Low latency – maximum of 2 seconds between control change and effect.&lt;/li&gt;
  &lt;li&gt;Latent space steering based on a mixture of text descriptors.&lt;/li&gt;
  &lt;li&gt;Manual control over music features
    &lt;ul&gt;
      &lt;li&gt;Tempo, key.&lt;/li&gt;
      &lt;li&gt;Options to reduce or silence particular instrument groups (drums, bass, other).&lt;/li&gt;
      &lt;li&gt;Control for density of note onsets.&lt;/li&gt;
      &lt;li&gt;Control for spectral brightness.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Sampling temperature and top-k settings (“chaos” control).&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;carousel__holder&quot; style=&quot;padding-bottom:50%;&quot;&gt;
  &lt;div id=&quot;carousel0&quot; class=&quot;carousel&quot;&gt;
    
    &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;slide-0-0&quot; checked=&quot;checked&quot; /&gt;
    
    &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;slide-0-1&quot; /&gt;
    
    &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;slide-0-2&quot; /&gt;
    
    &lt;input class=&quot;carousel__activator&quot; type=&quot;radio&quot; name=&quot;carousel0&quot; id=&quot;slide-0-3&quot; /&gt;
         

    &lt;div class=&quot;carousel__controls&quot; style=&quot;&quot;&gt;
      &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;slide-0-3&quot;&gt;&lt;/label&gt;
      &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;slide-0-1&quot;&gt;&lt;/label&gt;
    &lt;/div&gt;
       

    &lt;div class=&quot;carousel__controls&quot; style=&quot;&quot;&gt;
      &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;slide-0-0&quot;&gt;&lt;/label&gt;
      &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;slide-0-2&quot;&gt;&lt;/label&gt;
    &lt;/div&gt;
       

    &lt;div class=&quot;carousel__controls&quot; style=&quot;&quot;&gt;
      &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;slide-0-1&quot;&gt;&lt;/label&gt;
      &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;slide-0-3&quot;&gt;&lt;/label&gt;
    &lt;/div&gt;
       

    &lt;div class=&quot;carousel__controls&quot; style=&quot;&quot;&gt;
      &lt;label class=&quot;carousel__control carousel__control--backward&quot; for=&quot;slide-0-2&quot;&gt;&lt;/label&gt;
      &lt;label class=&quot;carousel__control carousel__control--forward&quot; for=&quot;slide-0-0&quot;&gt;&lt;/label&gt;
    &lt;/div&gt;
    

    &lt;div class=&quot;carousel__track&quot;&gt;
      &lt;ul&gt;
        
        &lt;li class=&quot;carousel__slide&quot;&gt;
          &lt;video id=&quot;video-0-0&quot; height=&quot;100%&quot; class=&quot;video-carousel-0&quot; src=&quot;https://deepmind.google/api/blob/website/media/Brightness.mp4&quot; loop=&quot;&quot; muted=&quot;&quot; autoplay=&quot;&quot;&gt;&lt;/video&gt;
        &lt;/li&gt;
        
        &lt;li class=&quot;carousel__slide&quot;&gt;
          &lt;video id=&quot;video-0-1&quot; height=&quot;100%&quot; class=&quot;video-carousel-0&quot; src=&quot;https://deepmind.google/api/blob/website/media/Chaos.mp4&quot; loop=&quot;&quot; muted=&quot;&quot; autoplay=&quot;&quot;&gt;&lt;/video&gt;
        &lt;/li&gt;
        
        &lt;li class=&quot;carousel__slide&quot;&gt;
          &lt;video id=&quot;video-0-2&quot; height=&quot;100%&quot; class=&quot;video-carousel-0&quot; src=&quot;https://deepmind.google/api/blob/website/media/Density.mp4&quot; loop=&quot;&quot; muted=&quot;&quot; autoplay=&quot;&quot;&gt;&lt;/video&gt;
        &lt;/li&gt;
        
        &lt;li class=&quot;carousel__slide&quot;&gt;
          &lt;video id=&quot;video-0-3&quot; height=&quot;100%&quot; class=&quot;video-carousel-0&quot; src=&quot;https://deepmind.google/api/blob/website/media/Instrumentation.mp4&quot; loop=&quot;&quot; muted=&quot;&quot; autoplay=&quot;&quot;&gt;&lt;/video&gt;
        &lt;/li&gt;
        
      &lt;/ul&gt;
    &lt;/div&gt;

    &lt;div class=&quot;carousel__indicators&quot; style=&quot;&quot;&gt;
      
      &lt;label class=&quot;carousel__indicator&quot; for=&quot;slide-0-0&quot;&gt;&lt;/label&gt;
      
      &lt;label class=&quot;carousel__indicator&quot; for=&quot;slide-0-1&quot;&gt;&lt;/label&gt;
      
      &lt;label class=&quot;carousel__indicator&quot; for=&quot;slide-0-2&quot;&gt;&lt;/label&gt;
      
      &lt;label class=&quot;carousel__indicator&quot; for=&quot;slide-0-3&quot;&gt;&lt;/label&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class=&quot;mute-overlay&quot;&gt;
    &lt;div id=&quot;mute-button-0&quot; class=&quot;mute-button&quot;&gt;
      &lt;span class=&quot;material-symbols-outlined&quot; id=&quot;mute-label-0&quot;&gt;volume_off&lt;/span&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;style&gt;
  /* fallback */
  @font-face {
    font-family: &quot;Material Symbols Outlined&quot;;
    font-style: normal;
    font-weight: 400;
    src: url(https://fonts.gstatic.com/s/materialsymbolsoutlined/v250/kJF1BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzByHX9rA6RzaxHMPdY43zj-jCxv3fzvRNU22ZXGJpEpjC_1v-p_4MrImHCIJIZrDCvHOejbd5zrDAt.woff2)
      format(&quot;woff2&quot;);
  }
  .material-symbols-outlined {
    font-family: &quot;Material Symbols Outlined&quot;;
    font-weight: normal;
    font-style: normal;
    font-size: 48px;
    line-height: 1;
    letter-spacing: normal;
    text-transform: none;
    display: inline-block;
    white-space: nowrap;
    word-wrap: normal;
    direction: ltr;
    -webkit-font-feature-settings: &quot;liga&quot;;
    -webkit-font-smoothing: antialiased;
    color: black;
    border-radius: 100%;
    padding: 0.2em;
    background-color: rgb(241, 241, 241);
    transition: 0.1s;
  }
  .material-symbols-outlined:hover {
    background-color: rgb(160, 160, 160);
    color: white;
    transition: 0.1s;
    cursor:pointer;
  }
  .mute-overlay {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0);
    display: flex;
    /* Align items to the end of the flex container (right) */
    justify-content: flex-end;
    /* Align items to the end of the cross axis (bottom) */
    align-items: flex-end;
    font-family: sans-serif;
    font-size: 1.2rem;
    transition: opacity 0.3s ease;
  }
  .carousel__holder {width: 100%; position: relative;  margin: 1rem 0 1rem;}
  .carousel {
    height: 100%;
    width: 100%;
    overflow: hidden;
    text-align: center;
    position: absolute;
    padding: 0;
  }
  .carousel__controls,
  .carousel__activator {
    display: none;
  }
  
  .carousel__activator:nth-of-type(1):checked ~ .carousel__track {
    -webkit-transform: translateX(-000%);
            transform: translateX(-000%);
  }
  .carousel__activator:nth-of-type(1):checked ~ .carousel__slide:nth-of-type(1) {
    transition: opacity 0.5s, -webkit-transform 0.5s;
    transition: opacity 0.5s, transform 0.5s;
    transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
    top: 0;
    left: 0;
    right: 0;
    opacity: 1;
    -webkit-transform: scale(1);
            transform: scale(1);
  }
  .carousel__activator:nth-of-type(1):checked ~ .carousel__controls:nth-of-type(1) {
    display: block;
    opacity: 1;
  }
  .carousel__activator:nth-of-type(1):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(1) {
    opacity: 1;
  }
  
  .carousel__activator:nth-of-type(2):checked ~ .carousel__track {
    -webkit-transform: translateX(-100%);
            transform: translateX(-100%);
  }
  .carousel__activator:nth-of-type(2):checked ~ .carousel__slide:nth-of-type(2) {
    transition: opacity 0.5s, -webkit-transform 0.5s;
    transition: opacity 0.5s, transform 0.5s;
    transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
    top: 0;
    left: 0;
    right: 0;
    opacity: 1;
    -webkit-transform: scale(1);
            transform: scale(1);
  }
  .carousel__activator:nth-of-type(2):checked ~ .carousel__controls:nth-of-type(2) {
    display: block;
    opacity: 1;
  }
  .carousel__activator:nth-of-type(2):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(2) {
    opacity: 1;
  }
  
  .carousel__activator:nth-of-type(3):checked ~ .carousel__track {
    -webkit-transform: translateX(-200%);
            transform: translateX(-200%);
  }
  .carousel__activator:nth-of-type(3):checked ~ .carousel__slide:nth-of-type(3) {
    transition: opacity 0.5s, -webkit-transform 0.5s;
    transition: opacity 0.5s, transform 0.5s;
    transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
    top: 0;
    left: 0;
    right: 0;
    opacity: 1;
    -webkit-transform: scale(1);
            transform: scale(1);
  }
  .carousel__activator:nth-of-type(3):checked ~ .carousel__controls:nth-of-type(3) {
    display: block;
    opacity: 1;
  }
  .carousel__activator:nth-of-type(3):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(3) {
    opacity: 1;
  }
  
  .carousel__activator:nth-of-type(4):checked ~ .carousel__track {
    -webkit-transform: translateX(-300%);
            transform: translateX(-300%);
  }
  .carousel__activator:nth-of-type(4):checked ~ .carousel__slide:nth-of-type(4) {
    transition: opacity 0.5s, -webkit-transform 0.5s;
    transition: opacity 0.5s, transform 0.5s;
    transition: opacity 0.5s, transform 0.5s, -webkit-transform 0.5s;
    top: 0;
    left: 0;
    right: 0;
    opacity: 1;
    -webkit-transform: scale(1);
            transform: scale(1);
  }
  .carousel__activator:nth-of-type(4):checked ~ .carousel__controls:nth-of-type(4) {
    display: block;
    opacity: 1;
  }
  .carousel__activator:nth-of-type(4):checked ~ .carousel__indicators .carousel__indicator:nth-of-type(4) {
    opacity: 1;
  }
  

  .carousel__control {
    height: 30px;
    width: 30px;
    margin-top: -15px;
    top: 50%;
    position: absolute;
    display: block;
    cursor: pointer;
    border-width: 5px 5px 0 0;
    border-style: solid;
    border-color:rgb(84, 84, 84);
    opacity: 0.35;
    opacity: 1;
    outline: 0;
    z-index: 3;
  }
  .carousel__control:hover {
    opacity: 1;
  }
  .carousel__control--backward {
    left: 20px;
    -webkit-transform: rotate(-135deg);
            transform: rotate(-135deg);
  }
  .carousel__control--forward {
    right: 20px;
    -webkit-transform: rotate(45deg);
            transform: rotate(45deg);
  }
  .carousel__indicators {
    position: absolute;
    bottom: 20px;
    width: 100%;
    text-align: center;
  }
  .carousel__indicator {
    height: 15px;
    width: 15px;
    border-radius: 100%;
    display: inline-block;
    z-index: 2;
    cursor: pointer;
    opacity: 0.35;
    margin: 0 2.5px 0 2.5px;
  }
  .carousel__indicator:hover {
    opacity: 0.75;
  }
  .carousel__track {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    padding: 0;
    margin: 0;
    transition: -webkit-transform 0.5s ease 0s;
    transition: transform 0.5s ease 0s;
    transition: transform 0.5s ease 0s, -webkit-transform 0.5s ease 0s;
  }
  .carousel__track .carousel__slide {
    display: block;
    top: 0;
    left: 0;
    right: 0;
    opacity: 1;
  }
  
  .carousel__track .carousel__slide:nth-of-type(1) {
    -webkit-transform: translateX(000%);
            transform: translateX(000%);
  }
  
  .carousel__track .carousel__slide:nth-of-type(2) {
    -webkit-transform: translateX(100%);
            transform: translateX(100%);
  }
  
  .carousel__track .carousel__slide:nth-of-type(3) {
    -webkit-transform: translateX(200%);
            transform: translateX(200%);
  }
  
  .carousel__track .carousel__slide:nth-of-type(4) {
    -webkit-transform: translateX(300%);
            transform: translateX(300%);
  }
  

  .carousel--scale .carousel__slide {
    -webkit-transform: scale(0);
            transform: scale(0);
  }
  .carousel__slide {
    height: 100%;
    position: absolute;
    opacity: 0;
    overflow: hidden;
  }
  .carousel__slide .overlay {height: 100%;}
  .carousel--thumb .carousel__indicator {
    height: 30px;
    width: 30px;
  }
  .carousel__indicator {
    background-color: rgb(84, 84, 84);
  }
  
  .carousel__slide:nth-of-type(1),
  .carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(1) {
    background-size: cover;
    background-position: center;
  }
  
  .carousel__slide:nth-of-type(2),
  .carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(2) {
    background-size: cover;
    background-position: center;
  }
  
  .carousel__slide:nth-of-type(3),
  .carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(3) {
    background-size: cover;
    background-position: center;
  }
  
  .carousel__slide:nth-of-type(4),
  .carousel--thumb .carousel__indicators .carousel__indicator:nth-of-type(4) {
    background-size: cover;
    background-position: center;
  }
  
&lt;/style&gt;

&lt;script&gt;
  document.addEventListener(&quot;DOMContentLoaded&quot;, () =&gt; {
    const carouselId = &quot;carousel0&quot;;
    const muteButtonId = &quot;mute-button-0&quot;;
    const muteLabelId = &quot;mute-label-0&quot;;
    const carouselNumber = &quot;0&quot;; // Capture the Liquid number for use in IDs

    const carouselEl = document.getElementById(carouselId);
    const muteButton = document.getElementById(muteButtonId);
    const muteLabel = document.getElementById(muteLabelId);

    if (!carouselEl) return;

    carouselEl.muted = true;

    // --- Mute/Unmute Button Logic ---
    muteButton.addEventListener(&quot;click&quot;, () =&gt; {
      // Toggle the mute state for the carousel
      carouselEl.muted = !carouselEl.muted;

      // Update the mute label to reflect the new state
      muteLabel.textContent = carouselEl.muted ? &quot;volume_off&quot; : &quot;volume_up&quot;;

      // Find the radio button for the currently visible slide
      const activeRadio = carouselEl.querySelector(
        &quot;.carousel__activator:checked&quot;
      );
      if (!activeRadio) return;

      // Extract the slide index from the active radio&apos;s ID
      const idParts = activeRadio.id.split(&quot;-&quot;);
      const videoIndex = idParts[idParts.length - 1];

      // Construct the corresponding video&apos;s ID and get the element
      const activeVideo = document.getElementById(
        `video-${carouselNumber}-${videoIndex}`
      );

      if (activeVideo) {
        // Set the muted property of the active video based on the new state
        activeVideo.muted = carouselEl.muted;
      }
    });

    // --- Slide Change and Intersection Observer Logic (Unchanged) ---
    const radios = carouselEl.querySelectorAll(&quot;.carousel__activator&quot;);
    const videos = carouselEl.querySelectorAll(&quot;.video-carousel-0&quot;);

    if (&quot;IntersectionObserver&quot; in window) {
      for (const video of videos) {
        const observer = new IntersectionObserver(
          (entries) =&gt; {
            entries.forEach((entry) =&gt; {
              if (entry.isIntersecting) {
                video.currently = 0;
                video.muted = carouselEl.muted;
              } else {
                video.muted = true;
              }
            });
          },
          {
            root: null,
            rootMargin: &quot;0px&quot;,
            threshold: 0.1,
          }
        );

        observer.observe(video);
      }
    }
  });
&lt;/script&gt;

&lt;h2 id=&quot;interfaces-for-live-music-models&quot;&gt;Interfaces for Live Music Models&lt;/h2&gt;

&lt;p&gt;One of the things we are most excited about with live music models is the number of novel interfaces they make possible by mapping human actions to musical controls. This harkens back to our earlier work with &lt;a href=&quot;http://g.co/magenta/js&quot;&gt;Magenta.js&lt;/a&gt; and the large number of &lt;a href=&quot;http://g.co/magenta/demos&quot;&gt;applications&lt;/a&gt; it and other earlier Magenta technologies spawned. We hope the Lyria RealTime API will empower even more creativity by developers.&lt;/p&gt;

&lt;p&gt;Live music models introduce a different interaction paradigm than text-to-song generators, which have impressive capabilities but lack the instantaneous feedback loops available to players of traditional instruments. The goal of models like Lyria RealTime is to put the human more deeply in the loop, centering the experience on the joy of the process over the final product. The higher bandwidth channel of communication and control often results in outputs that are more unique and personal, as every action the player takes (or doesn’t) has an effect.&lt;/p&gt;

&lt;p&gt;In Lyria RealTime, the ability to adjust prompt mixtures and quickly hear the results allows players to efficiently explore the sonic landscape to find novel textures and loops. Real-time interactivity also provides the possibility of this latent exploration being its own type of musical performance, the interpolation through space combined with anchoring of the audio context producing a structure similar to DJ set or improvisation session. Beyond performance, it can also be used to provide interactive soundscapes for physical spaces like artist installations or virtual spaces like video games.&lt;/p&gt;

&lt;p&gt;Our first public experiment with Lyria RealTime was &lt;a href=&quot;http://labs.google/musicfx&quot;&gt;MusicFX DJ&lt;/a&gt;, which we developed last year as a collaboration with Google Labs. MusicFX DJ allows you to create and conduct a continuous flow of music, and we worked with producers and artists to make the tool more inspiring and useful to musicians and amateurs alike.&lt;/p&gt;

&lt;p&gt;At this year’s I/O, &lt;a href=&quot;https://toroymoi.com/&quot;&gt;Toro y Moi&lt;/a&gt; (Chaz Bear) took Lyria RealTime for a spin &lt;a href=&quot;https://www.youtube.com/watch?v=thAhd82XnMc&quot;&gt;on stage before the keynote&lt;/a&gt;, using a &lt;a href=&quot;https://aistudio.google.com/app/apps/bundled/promptdj-midi&quot;&gt;different interface&lt;/a&gt; that he operated via a physical MIDI controller. Chaz’s performance leaned deeply into the live nature of the model, improvising with it to lead the crowd on a sonic journey full of surprises for himself and the audience.&lt;/p&gt;

&lt;figure&gt;
  &lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/thAhd82XnMc?si=8G1sl0tA90J4reFW&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
  &lt;figcaption&gt;Chaz Bear&apos;s performance at Google I/O 2025.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;how-it-works&quot;&gt;How it Works&lt;/h2&gt;

&lt;p&gt;Live generative music is particularly difficult because it requires both real-time generation (i.e. real-time factor &amp;gt; 1, generating 2 seconds of audio in less than 2 seconds), causal streaming (i.e. online generation), and low-latency controllability.&lt;/p&gt;

&lt;figure&gt;
  &lt;video width=&quot;100%&quot; src=&quot;/assets/lyria_realtime/lyria_realtime_diagram.mp4&quot; autoplay=&quot;&quot; muted=&quot;&quot; loop=&quot;&quot;&gt;&lt;/video&gt;
  &lt;figcaption&gt;Lyria RealTime diagram&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Lyria RealTime overcomes these challenges by adapting the &lt;a href=&quot;https://google-research.github.io/seanet/musiclm/examples/&quot;&gt;MusicLM&lt;/a&gt; architecture to perform block autoregression. The model generates a continuous stream of music in sequential chunks, each steered by the previous audio output and a style embedding for the next chunk. By manipulating the style embedding (weighted average of text or audio prompt embeddings), players can shape and morph the music in real-time, mixing together different styles, instruments, and musical attributes.&lt;/p&gt;

&lt;h2 id=&quot;future-work&quot;&gt;Future Work&lt;/h2&gt;

&lt;p&gt;We are currently working on the next generation of real-time models with higher quality, lower latency, more interactivity, and on-device operability, to create truly playable instruments and live accompaniment. Stay tuned as we continue working with communities of musicians and developers on these technologies.&lt;/p&gt;
</description>
        <pubDate>Thu, 12 Jun 2025 07:00:01 -0700</pubDate>
        <link>https://magenta.withgoogle.com/lyria-realtime</link>
        <guid isPermaLink="true">https://magenta.withgoogle.com/lyria-realtime</guid>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>Magenta Studio 2.0</title>
        <description>&lt;p&gt;TL;DR: &lt;a href=&quot;https://magenta.withgoogle.com/studio&quot;&gt;Magenta Studio&lt;/a&gt;, first released
in 2019, has been updated to more seamlessly integrate with Ableton Live. No
functionality has changed, there are only UI changes and internal fixes. Please
download and enjoy!&lt;/p&gt;

&lt;p&gt;If you’re new to Magenta Studio, please read our &lt;a href=&quot;https://magenta.withgoogle.com/studio-announce&quot;&gt;previous post&lt;/a&gt; about what it is and how it works.&lt;/p&gt;

&lt;h2 id=&quot;whats-new&quot;&gt;What’s New&lt;/h2&gt;

&lt;p&gt;In the previous version of Magenta Studio, the &lt;a href=&quot;https://www.ableton.com/en/live/max-for-live/&quot;&gt;Max for Live (M4L)&lt;/a&gt;
plugin would launch a separate application specific to your operating system for
each of the tools. Unfortunately, as operating systems were upgraded, sometimes
the applications stopped working. Therefore, we made the decision to integrate
the tools directly into the Max for Live environment to ensure longer-term
stability. The machine learning models are still directly integrated into the
M4L plugin and do not require access to the Internet to use.&lt;/p&gt;

&lt;h2 id=&quot;upgrading&quot;&gt;Upgrading&lt;/h2&gt;

&lt;p&gt;To upgrade from the &lt;a href=&quot;https://magenta.withgoogle.com/v1/studio&quot;&gt;previous version of Magenta Studio&lt;/a&gt;,
you can download the latest version and drop it into Live directly in the place
of the old plugin. The functionality has not been altered, only the interface
and integration, so it works in exactly the same way.&lt;/p&gt;

&lt;h2 id=&quot;documentation&quot;&gt;Documentation&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://magenta.withgoogle.com/studio&quot;&gt;The documentation&lt;/a&gt; has been updated to
reflect the new interface. The tool-specific videos have not been updated with
the new interface, but the functionality is identical.&lt;/p&gt;

&lt;h2 id=&quot;support&quot;&gt;Support&lt;/h2&gt;

&lt;p&gt;Please report any issues to the &lt;a href=&quot;https://github.com/magenta/magenta-studio&quot;&gt;GitHub repository&lt;/a&gt;. Thanks for using Magenta Studio!&lt;/p&gt;

&lt;h2 id=&quot;acknowledgements&quot;&gt;Acknowledgements&lt;/h2&gt;

&lt;p&gt;Magenta Studio is based on work by members of the Google DeepMind team’s Magenta project along with contributors to the Magenta and Magenta.js libraries. The plug-ins were implemented by &lt;a href=&quot;https://yotammann.info/&quot;&gt;Yotam Mann&lt;/a&gt; and extended by Cassie Tarakajian.&lt;/p&gt;
</description>
        <pubDate>Thu, 24 Aug 2023 07:00:01 -0700</pubDate>
        <link>https://magenta.withgoogle.com/studio-announce-2</link>
        <guid isPermaLink="true">https://magenta.withgoogle.com/studio-announce-2</guid>
        
        <category>studio</category>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>The 2023 I/O Preshow  – Composed by Dan Deacon (with some help from MusicLM)</title>
        <description>&lt;p&gt;Tl;dr: Dan Deacon worked with Google’s latest music AI models to compose the preshow music.
Check out the MusicLM demo in the &lt;a href=&quot;https://g.co/aitestkitchen&quot;&gt;AI Test Kitchen app&lt;/a&gt;.
Read on for more details about our collaboration with Dan Deacon.&lt;/p&gt;

&lt;h1 id=&quot;dan-deacons-io-performance&quot;&gt;Dan Deacon’s I/O Performance&lt;/h1&gt;

&lt;p&gt;On several occasions, we have had the pleasure of working with musicians that perform at Google I/O.
This is an opportunity for us to bring our latest creative machine learning tools out of the lab and into the hands of the musicians.
In previous years, we have worked with &lt;a href=&quot;https://magenta.withgoogle.com/chain-tripping&quot;&gt;YACHT&lt;/a&gt; and The &lt;a href=&quot;https://magenta.withgoogle.com/fruitgenie&quot;&gt;Flaming&lt;/a&gt; &lt;a href=&quot;https://blog.google/technology/ai/behind-magenta-tech-rocked-io/&quot;&gt;Lips&lt;/a&gt;.
With YACHT we explored custom symbolic music generation models tailored to the band, and with The Flaming Lips we explored an interaction to bridge the audience and performers.&lt;/p&gt;

&lt;p&gt;This year’s I/O pre-show was performed by electronic musician and composer Dan Deacon.
With Dan we explored how artists might interact with generative models of music audio and incorporate them into their artistic process.
Check out his performance in the video below and read on to learn more about his process using Google’s latest music AI tools:&lt;/p&gt;

&lt;figure&gt;
  &lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/K_8N8w5CaOs&quot; frameborder=&quot;0&quot; allow=&quot;autoplay; encrypted-media&quot; style=&quot;max-width:100%&quot; allowfullscreen=&quot;&quot;&gt;
  &lt;/iframe&gt;
  &lt;figcaption&gt;Dan Deacon&apos;s performance at Google I/O 2023.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Dan used two of our new generative models in his performance: &lt;a href=&quot;https://google-research.github.io/seanet/musiclm/examples/&quot;&gt;MusicLM&lt;/a&gt; (&lt;a href=&quot;https://arxiv.org/abs/2301.11325&quot;&gt;paper&lt;/a&gt;, &lt;a href=&quot;https://g.co/aitestkitchen&quot;&gt;demo&lt;/a&gt;), which produces music based on a text-based input prompt, and &lt;a href=&quot;https://g.co/magenta/singsong&quot;&gt;SingSong&lt;/a&gt; (&lt;a href=&quot;https://arxiv.org/abs/2301.12662&quot;&gt;paper&lt;/a&gt;), which will generate an accompaniment track for an audio-based singing input.
Both of these models are part of the &lt;a href=&quot;https://ai.googleblog.com/2022/10/audiolm-language-modeling-approach-to.html&quot;&gt;AudioLM&lt;/a&gt; (&lt;a href=&quot;https://arxiv.org/abs/2209.03143&quot;&gt;paper&lt;/a&gt;) family, and they directly produce audio based on the input conditioning (i.e., text or singing) by autoregressively predicting &lt;a href=&quot;https://ai.googleblog.com/2021/08/soundstream-end-to-end-neural-audio.html&quot;&gt;SoundStream&lt;/a&gt; (&lt;a href=&quot;https://arxiv.org/abs/2107.03312&quot;&gt;paper&lt;/a&gt;) tokens with one or more Transformer language models.
SoundStream tokens can then be converted back to raw audio that can be used in conjunction with other audio editing software.&lt;/p&gt;

&lt;p&gt;For his performance, Dan used MusicLM to create the chill, relaxing piano groove that’s heard behind his two meditations starring the Duck with Lips.
Additionaly, Dan used both MusicLM and SingSong to create the Chiptune song.
Most excitingly, Dan didn’t just &lt;em&gt;use&lt;/em&gt; both SingSong and MusicLM, but actually &lt;em&gt;extended&lt;/em&gt; their capabilities to put his performance together.
We’ll discuss more of how Dan shaped the tools–and why it’s important that he did so–in the next section.&lt;/p&gt;

&lt;h1 id=&quot;working-with-dan&quot;&gt;Working with Dan&lt;/h1&gt;

&lt;p&gt;As Dan discusses at around 7 minutes into his performance, he has always been excited by the promise that new technologies bring to the compositional process.
Technology has a long and intertwined history with the art of making music.
We might not think of things like flutes, violins, or trombones in the same way we think of computers now, but these were revolutionary new technologies when they were first introduced!
They can also often seem disruptive at first–at one point in history, &lt;a href=&quot;https://journals.sagepub.com/doi/abs/10.1177/016344386008003002?journalCode=mcsa.&quot;&gt;microphones caused quite a stir&lt;/a&gt; because they let vocalists sing much more softly (opposed to singing so loud they could be heard over the band).
Yet in retrospect, microphones changed our relationship to music in many positive ways, enabling us to create, represent, and distribute music in ways that would have been inconceivable beforehand.
Importantly, each new technological development expanded the creative palette of musicians, bringing with them new textures, new techniques, and sometimes new conceptions of music itself.&lt;/p&gt;

&lt;p&gt;We view our new models as a continuation of music technology’s evolution.
We’re incredibly inspired by the opportunity for these new tools to bring new creative capabilities to humanity, while remaining conscious of–and working hard to mitigate–their potential negative consequences.
Our goal is and always has been to empower artists and musicians; a crucial piece of empowering musicians is understanding now these new tools situate themselves in different artists’ creative processes.
With that in mind, collaborating with Dan was a great opportunity for us to work towards embodying our goals of empowering musicians in the era of generative modeling.&lt;/p&gt;

&lt;figure&gt;
  &lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/2yMBycveWHk&quot; frameborder=&quot;0&quot; allow=&quot;autoplay; encrypted-media&quot; style=&quot;max-width:100%&quot; allowfullscreen=&quot;&quot;&gt;
  &lt;/iframe&gt;
  &lt;figcaption&gt;A glimpse of our in-person workshop where we showed our new tools to Dan Deacon.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;About a month before I/O, we had a workshop with Dan where we introduced him to MusicLM and SingSong.
Initially, Dan found many interesting text prompts to our MusicLM such as “a 600ft trombone.”
He started to push the tools past their limit by, for example, playing his synthesizer into SingSong, ignoring that the system was trained on only singing inputs.
These initial experiments turned out to be really fun and promising!&lt;/p&gt;

&lt;p&gt;As we kept working with Dan, he surprised us by pushing these tools even further.
Inspired by “&lt;a href=&quot;https://en.wikipedia.org/wiki/I_Am_Sitting_in_a_Room&quot;&gt;I Am Sitting in a Room&lt;/a&gt;” (&lt;a href=&quot;https://www.youtube.com/watch?v=fAxHlLK3Oyk&quot;&gt;click here to listen&lt;/a&gt;), he fed the output of the SingSong model back into itself… over and over and over.
Again, Dan moved beyond the model’s design of accepting singing input; by feeding its own output back into itself, the input audio was out of the distribution that the model had seen during training and we weren’t sure if this would work at all.
Yet, not only did it work, but the feedback loop tended to produce music that still accompanies the input; it has the same key, tempo, and style.
This was the interaction that Dan designed to compose the Chiptune song, above.&lt;/p&gt;

&lt;p&gt;Dan began with a handful of text prompts to MusicLM, and then used the generated audio as input to SingSong and that output back through SingSong for numerous iterations.
He was able to create hundreds of audio clips that complemented each other.
From these, he handpicked his favorite clips, edited them slightly, and performed them.&lt;/p&gt;

&lt;p&gt;We’re very proud to have been a part of Dan’s amazing performance.
We’re extremely excited for the direction that this research is headed, and we’re always looking for ways to give musicians new tools to interact with.
Check out the &lt;a href=&quot;https://blog.google/technology/ai/musiclm-google-ai-test-kitchen/&quot;&gt;Google Keyword blog post&lt;/a&gt; to learn more about MusicLM and you can try it yourself by &lt;a href=&quot;https://g.co/aitestkitchen&quot;&gt;signing up via the AI Test Kitchen app&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;acknowledgements&quot;&gt;Acknowledgements&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;This year’s I/O pre-show was a huge collaborative effort. We would like to thank everyone involved in making the performance a success (in no particular order): Josh Christman, Daniel Chandler, Meghan Reinhardt, Carolyne De Bellefeuille,  Adi Goodrich, Jon Barron, Meghan Reinhardt, Carolyne De Bellefeuille, Irina Blok, Spencer Sterling, Ruben Beddeleem, Ben Poole, Cadie Desbiens-Desmeules, Chris Donahue, Jorge Gonzalez Mendez, Noah Constant, Jesse Engel, Timo Denk, Andrea Agostinelli, Neil Zeghidour, Christian Frank, Mauricio Zuluaga, Hema Manickavasagam, Tom Hume, and Lynn Cherry.&lt;/em&gt;&lt;/p&gt;

</description>
        <pubDate>Wed, 21 Jun 2023 13:00:00 -0700</pubDate>
        <link>https://magenta.withgoogle.com/dandeacon-io-preshow</link>
        <guid isPermaLink="true">https://magenta.withgoogle.com/dandeacon-io-preshow</guid>
        
        
        <category>blog</category>
        
      </item>
    
      <item>
        <title>The Wordcraft Writers Workshop: Creative Co-Writing with AI</title>
        <description>&lt;p&gt;A core piece of Magenta’s mission is to empower creativity using AI and machine learning. In order to evaluate how well this goal is being achieved, it is important to put tools in the hands of creators, encouraging them to share honest and critical feedback. This feedback can help researchers to thoughtfully develop the next generations of ML-powered creative tools. Most of our prior efforts to engage with creators have been in the domain of music (for example, &lt;a href=&quot;https://magenta.withgoogle.com/studio&quot;&gt;Magenta Studio&lt;/a&gt; and &lt;a href=&quot;https://nsynthsuper.withgoogle.com/&quot;&gt;NSynth&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;However, human creativity encompasses far more than just music: visual artists paint, draw, and sculpt, and writers craft stories and poetry. In recent years, we’ve seen huge advancements in machine learning techniques that can facilitate creativity in these other modalities. Creative writing is an especially interesting domain because it is so challenging for AI to get right. Even short stories commonly have narrative arcs that span paragraphs or longer, multiple characters with diverging points of view, and a careful balance of familiar archetypes and novel storytelling–all difficult traits for state-of-the-art AI to replicate. At the same time, the omnipresent writer’s block is not a problem at all for neural language models like &lt;a href=&quot;https://ai.googleblog.com/2022/01/lamda-towards-safe-grounded-and-high.html&quot;&gt;LaMDA&lt;/a&gt;, which can effortlessly generate as many words as you ask them for.&lt;/p&gt;

&lt;p&gt;Earlier this year, we invited a cohort of 13 professional creative writers to try their hands at writing stories using &lt;a href=&quot;https://g.co/research/wordcraft&quot;&gt;Wordcraft&lt;/a&gt;, an AI-augmented text editor with a wide range of generative capabilities targeted at creative writing assistance. Wordcraft can suggest story ideas, rewrite text according to user-provided instructions, and elaborate on what has already been written. It also has a chatbot interface where users can engage with LaMDA, Google’s dialog-based language model, about their stories.&lt;/p&gt;

&lt;figure&gt;
  &lt;a href=&quot;https://g.co/research/wordcraft&quot; target=&quot;_blank&quot;&gt;
    &lt;video src=&quot;/assets/wordcraft/wordcraft.webm&quot; autoplay=&quot;&quot; loop=&quot;&quot;&gt;&lt;/video&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;A demo of the Wordcraft web application&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;As in generative music, AI-assisted story writing can be a mixed bag. At its best, Wordcraft made suggestions that were inspiring and surrealistic, and writers applauded its usefulness for ideation and overcoming writer’s block. However, it also had a tendency to rehash tired tropes, and it could take wading through many dull suggestions before finding an interesting one.&lt;/p&gt;

&lt;p&gt;All of the writers’ stories are available in the Wordcraft Writer’s Workshop’s &lt;a href=&quot;https://g.co/research/wordcraft&quot;&gt;digital literary magazine&lt;/a&gt;, and a detailed writeup of what we learned about the role machine learning can play in creative writing can be found &lt;a href=&quot;https://arxiv.org/abs/2211.05030&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We hope you enjoy perusing through the stories, and we are excited to hear your ideas about how AI can create valuable creative writing tools.&lt;/p&gt;
</description>
        <pubDate>Thu, 01 Dec 2022 08:00:00 -0800</pubDate>
        <link>https://magenta.withgoogle.com/wordcraft-writers-workshop</link>
        <guid isPermaLink="true">https://magenta.withgoogle.com/wordcraft-writers-workshop</guid>
        
        <category>wordcraft,</category>
        
        <category>lamda,</category>
        
        <category>writing</category>
        
        
        <category>blog</category>
        
      </item>
    
  </channel>
</rss>
