<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Shelby Thomas</title><description>Public repository of experiments and learnings. Closing the gap between demo and production. Compute Infra at NVIDIA. Long tails and fat tails.</description><link>https://shelbyt.com/</link><language>en</language><atom:link href="https://shelbyt.com/rss.xml" rel="self" type="application/rss+xml"/><managingEditor>Shelby Thomas</managingEditor><item><title>How Claude Creates and Synchronizes 3D Objects with its own Composed Music</title><link>https://shelbyt.com/posts/first-rubato/</link><guid isPermaLink="true">https://shelbyt.com/posts/first-rubato/</guid><description>One prompt and a $20 GPU budget. Opus 5.5 wrote the score, built a 3D piano that plays it, and cut the video. All three run off the same list of notes.</description><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;[RubatoGlow — an interactive figure, on the page]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[RubatoFilm — an interactive figure, on the page]&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;&quot;Can You?&quot;&lt;/h3&gt;
&lt;p&gt;I had Opus 5.5 one-shot a prompt &quot;make a piece of music that feels like a machine learning to play music and video to go along with it&quot;.&lt;/p&gt;
&lt;p&gt;I provided a few tools. LilyPond, which turns plain text into sheet music and MIDI, Blender 5.2, and Runpod with a $20 GPU budget which it used to render the 3D piano. It additionally used FluidSynth to play the notes with a piano sound, and Python code to draw the 2D video without any guidance.&lt;/p&gt;
&lt;p&gt;This post covers what Claude did to keep all three in sync. Hint: code, which continues to prove itself as a substrate for solving problems across more domains than people once imagined.&lt;/p&gt;
&lt;h3&gt;Keeping Three Mediums in Sync&lt;/h3&gt;
&lt;p&gt;The most interesting part for me was syncing music, video, and render and I was particularly impressed with keeping the 3D piano exactly in sync with the real notes. Blender renders images one frame at a time, with no sound to follow, so every key has to go down on exactly the right frame from the notes alone.&lt;/p&gt;
&lt;p&gt;Here&apos;s an example of the main theme, with a piano below it to show that the video matches the actual notes. Press play and the keyboard lights up with the clip, then press your turn and play it yourself and prove to yourself it is playing the actual notes.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[RubatoTheme — an interactive figure, on the page]&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;JSON is King&lt;/h3&gt;
&lt;p&gt;The approach Claude took was to first create the score, then turn the score into one list of notes and built the 2D video and 3d render from it. Lets take a look below, here&apos;s the theme&apos;s first note, a B, from the score to the final video:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[RubatoFlow — an interactive figure, on the page]&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;A Note Is a Run of Frames&lt;/h3&gt;
&lt;p&gt;Every note goes through the same steps. The 3D animation shows 24 still pictures every second, and each picture is a frame. A note covers every frame while its key is down, so the first B covers 24 frames.&lt;/p&gt;
&lt;p&gt;Here are all 136 frames of the close-up shot, stacked in 3D. Drag to turn the stack, and move the slider or press Play to go through the frames:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[RubatoFrames — an interactive figure, on the page]&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;The Loop That Presses the Keys&lt;/h3&gt;
&lt;p&gt;This loop moves the 3D piano&apos;s keys in Blender. For every frame, it goes through the list and presses the keys whose notes are sounding. The drawn video runs the same loop at 30 frames a second, and the synthesizer plays the same list, so all three line up. Step through it, and the stack above follows along:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[RubatoStepper — an interactive figure, on the page]&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;The Final Product&lt;/h3&gt;
&lt;p&gt;The final product is the film at the top of this post. Here&apos;s the code building its 3D piano, from a wireframe to the finished look:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[Video — an interactive figure, on the page]&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Findings&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;A shared source of truth did the syncing.&lt;/strong&gt; Everything goes through one list of notes, saved as JSON for Blender and the video and as MIDI for the synthesizer. Nothing lines the three up after the fact.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;The model used existing tools exceeding well.&lt;/strong&gt; It connected LilyPond, FluidSynth and Blender with code instead of building anything new.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;The visuals took the most iteration.&lt;/strong&gt; The music only needed small tweaks at the beginning and the end, but the video took several rounds of notes on camera angles, what to show, and what to cut.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Full &lt;a href=&quot;/first-rubato/first-rubato-score.pdf&quot;&gt;score&lt;/a&gt; here.&lt;/p&gt;</content:encoded><dc:creator>Shelby Thomas</dc:creator><dc:extent>555 words, about 3 min</dc:extent><category>music</category><category>opus-5.5</category><category>blender</category><category>lilypond</category><category>video-gen</category><author>Shelby Thomas</author></item></channel></rss>