<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"
    xmlns:fh="http://purl.org/syndication/history/1.0"
    xmlns:at="http://purl.org/atompub/tombstones/1.0">

    <title>Sockpuppet: Blog</title>
    
    <subtitle><![CDATA[Updates, articles, and behind-the-scenes content.]]></subtitle>
    
    <link href="https://sockpuppet.band/blog/feed?id=1995" rel="self" />
    
    <link href="https://sockpuppet.band/blog/feed" rel="current" />
    <fh:archive/>
    

    <link href="https://busybee.superfeedr.com" rel="hub" />
    
    <link href="https://sockpuppet.band/blog/feed?id=121" rel="prev-archive" />
    
    
    <link href="https://sockpuppet.band/blog/feed?id=2206" rel="next-archive" />
    
    <link href="https://sockpuppet.band/blog/" />
    <id>tag:sockpuppet.band,2026-05-14:blog</id>
    <updated>2026-02-06T19:57:08-08:00</updated>

    

    <entry>
        
        <title>Current goings-on in the Sockiverse</title>
        <link href="https://sockpuppet.band/blog/1995-Current-goings-on-in-the-Sockiverse" rel="alternate" type="text/html" />
        <published>2026-02-06T19:57:08-08:00</published>
        <updated>2026-02-06T19:57:08-08:00</updated>
        <id>urn:uuid:b7665926-70a4-463b-b98d-d001fa51cb3c</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p>Hey y&#39;all, the band has taken a bit of a break from working in the studio to recharge, but now we&rsquo;re back in action and finally getting stuff done!</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        <p>Hey y&#39;all, the band has taken a bit of a break from working in the studio to recharge, but now we&rsquo;re back in action and finally getting stuff done!</p><p>Briefly, here&rsquo;s what&rsquo;s going on:</p>
<ul>
<li>We are <em>finally</em> working on recording Misfits, our next album. The overall theme is &ldquo;children&rsquo;s music, but for grownups.&rdquo;</li>
<li>We&rsquo;re also working on some game music, as we&rsquo;ve been approached by three separate teams working on games for <a href="https://itch.io/jam/strawberry-jam-10">Strawberry Jam 10</a> (hey, that&rsquo;s another one for <a href="https://sockpuppet.band/blog/1888-On-success-a-recap-and-a-look-ahead">the success list</a>)</li>
<li>And of course we&rsquo;re doing some <a href="https://sockpuppet.band/live/calendar?date=2026-02">VRChat performances</a></li>
<li>fluffy&rsquo;s also been busy editing some past <a href="https://sockpuppet.band/live/">live performance videos</a></li>
<li>Also as a reminder, we are <em>totally</em> an actual band with so many people in it and not just fluffy pretending to be a bunch of people through clever production tricks and writing in the third person plural for some reason</li>
</ul>


        
            <p>Anyway. No idea when Misfits will be done (Strawberry Jam 10 has the time-based priority, of course), but it&rsquo;s been a long time coming. If you want to track its progress, feel free to <a href="https://sockpuppet.band/patreon">follow the Patreon</a> or whatever.</p>
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=status">#Status</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=updates">#Updates</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=Misfits">#Misfits</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=production">#Production</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=Strawberry+Jam">#StrawberryJam</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="Status" label="status" />
        
        <category term="Updates" label="updates" />
        
        <category term="Misfits" label="Misfits" />
        
        <category term="Production" label="production" />
        
        <category term="StrawberryJam" label="Strawberry Jam" />
        

        

    </entry>
    <entry>
        
        <title>VR performance setup 2.0</title>
        <link href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0" rel="alternate" type="text/html" />
        <published>2026-01-24T09:00:00-08:00</published>
        <updated>2026-01-24T09:00:00-08:00</updated>
        <id>urn:uuid:8aa1a45d-401a-4fca-946a-0d3bb2282908</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p>Last September I <a href="https://sockpuppet.band/blog/3183-VR-performance-stuff">wrote about my VRChat performance setup</a>, based on some new changes I was trying in order to do more to integrate backing tracks into my performances. I quickly ran into some limits with the approach I was taking, and have ended up completely changing how I do things since then, with a setup that is much more reliable, more capable, and higher-quality. It also allows me to use the same audio setup for both mic-boosted and streamed performances.</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        <p>Last September I <a href="https://sockpuppet.band/blog/3183-VR-performance-stuff">wrote about my VRChat performance setup</a>, based on some new changes I was trying in order to do more to integrate backing tracks into my performances. I quickly ran into some limits with the approach I was taking, and have ended up completely changing how I do things since then, with a setup that is much more reliable, more capable, and higher-quality. It also allows me to use the same audio setup for both mic-boosted and streamed performances.</p><p>So here&rsquo;s how my performing setup works!</p>

        
            <h3 id="1302_h3_1_The-hardware-side">The hardware side<a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0#1302_h3_1_The-hardware-side" class="toc_link"></a></h3><p>Previously I was using an amalgam of the built-in mic on my headset, the line input on my onboard audio, and VoiceMeeter to tie everything together. Unfortunately, this setup had some pretty severe limitations, especially when it came to managing latency (particularly with backing tracks), as well as being able to add live effects to the signal chain. It also led to some embarrassing situations where my audio would go haywire due to a connector coming loose or the like.</p><p>A few years ago, I upgraded my recording studio from a <a href="https://amzn.to/45nyC6M">Focusrite Scarlett 18i8</a> to an <a href="https://amzn.to/3O0zxnw">18i20</a>, so I had this spare 18i8 just sitting around. I was using it on my office computer (where I do my video editing and programming), but it was massive overkill for those needs, and I came to realize it works much better for my performance setup instead. So now I have a plain old <a href="https://amzn.to/4rghvwe">headphone amp</a> in the office, and the 18i8 is on my VR computer.</p><p>The 18i8 has a handy feature where you can set up multiple output/monitor submixes, so for example you can have different audio levels of different things going to the headphones, the line outputs, and so on. It also has a built-in &ldquo;loopback&rdquo; interface, where you can give it a monitor mix that then appears as a standard audio input to the computer. These features are <em>extremely</em> useful for this use case (as well as any other live performance or studio recording situation).</p><p>I have the following connections:</p>
<ul>
<li>Front input 1: My microphone (I currently switch between an MXL condenser mic and an Electro-Voice dynamic depending on my mood and what&rsquo;s sounding better at the moment)</li>
<li>Front input 2: My guitar signal chain</li>
<li>Headphone output 1: a <a href="https://amzn.to/4pSp7nj">LEKATO Wireless IEM system</a> (which in turn connects to <a href="https://amzn.to/3YWnHxi">some old 3.5mm Apple earbuds</a>, which give me a nice balance of size and audio quality; there are better ones to buy new but I had these lying around from some old iPhone or something)<sup id="r_e1302_fn1"><a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0#d_e1302_fn1" rel="footnote">1</a></sup></li>
<li>Headphone output 2: my <a href="https://www.musiciansfriend.com/amplifiers-effects/zt-lunchbox-junior-guitar-combo-amp/h82899000001000">tiny lunchbox amp</a></li>
<li>My <a href="https://www.tcelectronic.com/product.html?modelCode=0828-AAH">reverb unit</a>, with its inputs on the 18i8&rsquo;s Line 1-2 outputs, and its outputs on the 18i8&rsquo;s Line 5-6 inputs</li>
<li>Front input 3 and 4: Available for other instruments (sometimes I plug my <a href="https://amzn.to/4aabmvv">digital piano</a> in there, for example)</li>
</ul>
<p>I have the reverb unit set to 100% wet, so that it is only being used as a bus send. I also have a bypass toggle pedal so that I can cut to a purely dry signal when needed (such as in <a href="https://sockpuppet.band/track/a-long-plastic-hallway">A Long Plastic Hallway</a>, which uses lack-of-reverb as an effect for emphasis).</p><h3 id="1302_h3_2_Mix-setup">Mix setup<a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0#1302_h3_2_Mix-setup" class="toc_link"></a></h3><p>First, I use the <a href="https://support.focusrite.com/hc/en-gb/articles/11064999655314-Adding-multiple-inputs-in-streaming-software-on-Windows-using-Loopback">multiple input functionality</a> to provide Windows audio devices for all of the necessary channels.</p>
<figure class="images"><a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0"><img src="https://sockpuppet.band/static/_img/8e/d9f1/18i8-multiple-inputs_7aaae6df3e_364x260_q50.webp" width="364" height="260" srcset="https://sockpuppet.band/static/_img/8e/d9f1/18i8-multiple-inputs_7aaae6df3e_364x260_q50.webp 1x, https://sockpuppet.band/static/_img/8e/d9f1/18i8-multiple-inputs_7aaae6df3e_q50.webp 2x" loading="lazy" class="u-photo" alt="A window showing all of the Focusrite inputs separated out"></a></figure>
<p>Windows 10 and 11 also have a feature where you can assign arbitrary labels to your audio inputs and outputs; I use this to give the following names to the playback channels:</p>
<ul>
<li>Playback 1+2: Playback</li>
<li>Playback 3+4: Game audio</li>
<li>Playback 5+6: Control room</li>
</ul>
<p>and I also set labels on my VR headset&rsquo;s microphone and speakers, just to make them easier to keep track of.</p>
<figure class="images"><a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0"><img src="https://sockpuppet.band/static/_img/6a/8d6a/18i8-output-labels_b350ce5fcc_640x489_q50.webp" width="640" height="489" srcset="https://sockpuppet.band/static/_img/6a/8d6a/18i8-output-labels_b350ce5fcc_640x489_q50.webp 1x, https://sockpuppet.band/static/_img/6a/8d6a/18i8-output-labels_b350ce5fcc_1280x978_q50.webp 2x" loading="lazy" class="u-photo" alt="Windows 11 control panel showing helpful output labels"></a></figure>
<p>In Focusrite Control I have separate submixes for all three of the outputs, as well as the loopback interface.</p>
<figure class="images"><a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0"><img src="https://sockpuppet.band/static/_img/de/6045/18i8-monitor-mix_dd413feaa9_640x489_q50.webp" width="640" height="489" srcset="https://sockpuppet.band/static/_img/de/6045/18i8-monitor-mix_dd413feaa9_640x489_q50.webp 1x, https://sockpuppet.band/static/_img/de/6045/18i8-monitor-mix_dd413feaa9_1280x978_q50.webp 2x" loading="lazy" class="u-photo" alt="Focusrite Control UI showing the monitor mix for headphone 1"></a></figure>
<p>Headphone 1 gets the monitor mix that goes to my IEMs. It receives all of the input channels, as well as all three<sup id="r_e1302_fn2"><a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0#d_e1302_fn2" rel="footnote">2</a></sup> &ldquo;Playback&rdquo; channels (which are used to route multiple separate software outputs into separate mixes).</p><p>Headphone 2 gets the same, minus the microphone (to avoid feedback), and is connected to the line input on my lunchbox amp.<sup id="r_e1302_fn3"><a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0#d_e1302_fn3" rel="footnote">3</a></sup></p><p>Line 1-2 (reverb send) gets just the instruments; I bake the reverb into my backing tracks.</p><p>Loopback gets the mix that goes out to the stream and/or world.</p><h3 id="1302_h3_3_Software-setup">Software setup<a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0#1302_h3_3_Software-setup" class="toc_link"></a></h3><p>Unlike before, I do not need Voicemeeter, and I do not even have it installed anymore, as all of the audio that goes to the stream is now handled by the 18i8, and I do not need to mix anything into or from my VR headset.</p><p>I have configured VLC (which I use for playing my backing tracks) to output to the Playback 1+2 device by default.</p><h4 id="1302_h4_4_OBS-setup">OBS setup<a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0#1302_h4_4_OBS-setup" class="toc_link"></a></h4><p>OBS allows you to set up multi-channel audio recording. I set OBS to use channel 1 in the stream, and to record all 6 channels to separate tracks in my local recording. Then I have the following audio input sources:</p>
<table>
<thead>
<tr>
<th>Input name</th>
<th>Source name</th>
<th>OBS output track</th>
<th>Video audio channel</th>
</tr>
</thead>

<tbody>
<tr>
<td>Loopback</td>
<td>Live mix</td>
<td>1</td>
<td>1+2</td>
</tr>
<tr>
<td>Input 1-2</td>
<td>Mic + guitar</td>
<td>2</td>
<td>3+4</td>
</tr>
<tr>
<td>Input 3-4</td>
<td>Piano</td>
<td>3</td>
<td>5+6</td>
</tr>
<tr>
<td>Input 5-6</td>
<td>Reverb</td>
<td>3</td>
<td>5+6</td>
</tr>
<tr>
<td>Headset mic</td>
<td>Headset mic</td>
<td>5 (panned left)</td>
<td>9</td>
</tr>
</tbody>
</table>
<p>As well as the following audio output captures:</p>
<table>
<thead>
<tr>
<th>Output name</th>
<th>Source name</th>
<th>OBS output track</th>
<th>Video audio channel</th>
</tr>
</thead>

<tbody>
<tr>
<td>Headset speakers</td>
<td>Headset speakers</td>
<td>5 (panned right)</td>
<td>10</td>
</tr>
<tr>
<td>Playback 1+2 (playback)</td>
<td>Backing track</td>
<td>4</td>
<td>7+8</td>
</tr>
<tr>
<td>Playback 3+4 (game audio)</td>
<td>Game audio</td>
<td>6</td>
<td>11+12</td>
</tr>
<tr>
<td>Playback 5+6 (control room)</td>
<td>Control room</td>
<td>5 (panned right)</td>
<td>10</td>
</tr>
</tbody>
</table>
<p>Finally, I have a bunch of visuals set up; mostly this is <a href="https://github.com/Off-World-Live/obs-spout2-plugin">Spout2</a> to capture my in-game streaming camera, and <a href="https://github.com/phandasm/waveform">Waveform</a> to let me do various audio visualizers in varying combinations.</p><h4 id="1302_h4_5_Mic-boosted-performances">Mic boosted performances<a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0#1302_h4_5_Mic-boosted-performances" class="toc_link"></a></h4><p>When doing a mic boosted performance, I set my system audio output to Playback 3+4 (Game Audio) and VRChat&rsquo;s audio input to Loopback. This way, my full final audio mix goes to my VRChat microphone, and I hear the game in my IEMs. My backing track works the same as anywhere else.</p><p>The one downside to this setup is that my lip sync will also follow my instruments and backing track, but there&rsquo;s not a lot I can do about that aside from adding face tracking to my VR setup.</p><p>If I want to record my performance, I launch OBS and set it to record. OBS is not involved in the signal chain going to the world at all.</p><h4 id="1302_h4_6_Streamed-performances">Streamed performances<a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0#1302_h4_6_Streamed-performances" class="toc_link"></a></h4><p>Most streamed performances involve a Discord voice call for coordinating between the show runners and the performers. This is where the &ldquo;control room&rdquo; channel comes in; I set Discord&rsquo;s voice to use my VR headset&rsquo;s microphone as input, and Playback 5+6 as speakers. This way the voice chat only hears my voice (rather than all of my instruments), and I can hear anything they say on my IEMs. The Discord call gets recorded to track 5, with the left channel being me and the right channel being everyone else.</p><p>Otherwise, my audio setup is as follows:</p>
<ul>
<li>System audio to Playback 3+4</li>
<li>VRChat microphone is the VR headset mic (so it gets clean lipsync)</li>
<li>And I set VRChat&rsquo;s &ldquo;microphone output level&rdquo; to 0%, so that my camera can see my lips move but the audio doesn&rsquo;t go out into the world<sup id="r_e1302_fn4"><a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0#d_e1302_fn4" rel="footnote">4</a></sup></li>
</ul>
<p>As far as running the stream itself goes, typically I stream either to <a href="https://live.sockpuppet.band/">my Owncloud instance</a> or to <a href="https://vrcdn.live/">VRCDN</a> depending on the needs of the show. Larger shows provide their own streaming ingest.</p>
<ul>
<li>Owncloud lets me serve an absolute crapton of viewers (thanks in part to my <a href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN">overly-complicated CDN setup</a>), but it&rsquo;s not allowed as a stream source by default in VRChat so people need to enable untrusted URLs. It also tends to be pretty high in latency, usually on the order of 6-10 seconds.</li>
<li>VRCDN limits me to 40 concurrent viewers, but the latency is pretty low (usually 1-2 seconds). This is fine for smaller shows, and many showrunners will restream my VRCDN stream into the world with their own visuals overlaid on top anyway, which also adds some latency.</li>
<li>Larger music festivals (such as <a href="https://sockpuppet.band/live/?tag=VRelium">VRelium</a>) will provide their own ingest server and stream management.</li>
</ul>
<h4 id="1302_h4_7_Editing-recordings">Editing recordings<a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0#1302_h4_7_Editing-recordings" class="toc_link"></a></h4><p>And now the really nice thing about this setup is that I can do some audio editing and remixing in retrospect. I do most of my video editing in <a href="https://www.blackmagicdesign.com/products/davinciresolve">DaVinci Resolve</a>, which has pretty good multichannel audio support.</p><p>By default, the video will be pulled in with the following stereo audio tracks:</p>
<table>
<thead>
<tr>
<th>Track</th>
<th>Channels</th>
<th>Contents</th>
</tr>
</thead>

<tbody>
<tr>
<td>1</td>
<td>1+2</td>
<td>Live mix</td>
</tr>
<tr>
<td>2</td>
<td>3+4</td>
<td>Mic (left) + guitar (right)</td>
</tr>
<tr>
<td>3</td>
<td>5+6</td>
<td>Piano + reverb</td>
</tr>
<tr>
<td>4</td>
<td>7+8</td>
<td>Backing track</td>
</tr>
<tr>
<td>5</td>
<td>9+10</td>
<td>Headset mic (left) + Discord call (right)</td>
</tr>
<tr>
<td>6</td>
<td>11+12</td>
<td>Game audio/audience</td>
</tr>
</tbody>
</table>
<p>Typically what I&rsquo;ll do is separate out the audio tracks from the video, and I&rsquo;ll shift track 6 back to compensate for the latency between me and the audience. For mic-boost performances this isn&rsquo;t much (usually under a second) and can usually be ignored, but for streamed performances this will be multiple seconds (often on the order of 20 or more!) and this is especially important during those magical times when people either respond to my banter or sing along with me! (The latter happens with the call-and-response bits in <a href="https://sockpuppet.band/track/safety-in-numbers">Safety In Numbers</a>, and it fills me with warm fuzzies every time.)</p><p>If the track 1 (live mix) audio is fine, I&rsquo;ll use it and track 6 directly, and mute the other tracks. However, sometimes I need to get fancy and change the mix in retrospect. In that case, I&rsquo;ll change my audio tracks as such:</p>
<ul>
<li>Audio 1: Stereo, using channels 1+2 (live mix)</li>
<li>Audio 2: Mono, using channel 3 (voice)</li>
<li>Audio 3: Mono, using channel 4 (guitar)</li>
<li>Audio 4: Stereo, using channels 5+6 (reverb, and piano if I happened to use it)</li>
<li>Audio 5: Stereo, using channels 7+8 (backing track)</li>
<li>Audio 6: Stereo, using channels 12+11 (game audio, swapped to present it from the audience&rsquo;s POV)<sup id="r_e1302_fn5"><a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0#d_e1302_fn5" rel="footnote">5</a></sup></li>
</ul>
<p>In this situation, I&rsquo;ll mute tracks 2-4, and use track 1 to line up tracks 5 and 6, which will have differing amounts of latency. Then I&rsquo;ll mute track 1 and unmute 2-4, and then adjust my recorded mix as necessary.</p><p>Track 6 in particular needs to be lined up pretty carefully, as OBS captures outputs with no latency at all, but inputs get about 300ms of latency due to limitations in Windows audio. In theory I could have OBS add 300ms or so of latency to the output capture, but it&rsquo;s fiddly and I&rsquo;d still need to adjust things anyway, so I&rsquo;d might as well just do it once when I edit.<sup id="r_e1302_fn6"><a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0#d_e1302_fn6" rel="footnote">6</a></sup></p><h3 id="1302_h3_8_Backing-track-playlist-setup">Backing track/playlist setup<a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0#1302_h3_8_Backing-track-playlist-setup" class="toc_link"></a></h3><p>When I&rsquo;m performing there&rsquo;s a lot of stuff to keep track of. If I&rsquo;m only doing 1-2 songs I can load the .wav files into VLC and it&rsquo;s no big deal, but many of my shows are much more complicated and my ADHD brain can only hold so much stuff in my working memory.</p><p>So, I have a <a href="https://www.apple.com/final-cut-pro/">Final Cut Pro</a> library that contains all of my backing tracks; some songs have multiple versions available (e.g. with and without guitar mixed in, or album vs. live versions). In the library files I also have brief version notes and the dominant key signature, and with this I can quickly put together a set list with a reasonable progression and fitting the time constraints.</p><p>A few of the songs also have a lyric display baked in, because try as I might, I just can&rsquo;t memorize <a href="https://sockpuppet.band/releases/tracks?tag=type:lyrical">every song</a><sup id="r_e1302_fn7"><a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0#d_e1302_fn7" rel="footnote">7</a></sup>. For some songs I&rsquo;ll use <a href="https://croonify.com/">Croonify</a> to prepare a synchronized lyric display (replacing Croonify&rsquo;s stem-separated audio with my own clean backing track), but for others I&rsquo;ll just put up some basic text with the necessary cues to keep me from messing up too badly.</p><p>When I prepare my set, I&rsquo;ll also put in a bit of visual stuff for my own reference, such as having it display the title of the next song or little notes like &ldquo;2 songs left&rdquo; or specific banter points I need to hit.</p>
<figure class="images"><a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0"><img src="https://sockpuppet.band/static/_img/ea/897f/backing-track-construction_c83e628945_640x343_q50.webp" width="640" height="343" srcset="https://sockpuppet.band/static/_img/ea/897f/backing-track-construction_c83e628945_640x343_q50.webp 1x, https://sockpuppet.band/static/_img/ea/897f/backing-track-construction_c83e628945_1280x686_q50.webp 2x" loading="lazy" class="u-photo" alt="A screenshot of Final Cut Pro showing a library of songs and a timeline with a show's prepared set"></a></figure>
<p>When I encode the video I&rsquo;ll just use Final Cut&rsquo;s &ldquo;Export File (default)&rdquo; to do a quick lossless encode and then I&rsquo;ll use FFmpeg to encode the final video at a more useful bitrate, with:</p><figure class="blockcode"><pre class="highlight" data-language="bash" data-line-numbers><span class="line" id="e1302cb1L1"><a class="line-number" href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0#e1302cb1L1"></a><span class="line-content">ffmpeg<span class="w"> </span>-i<span class="w"> </span><span class="s2">&quot;2026-02-30 example.mov&quot;</span><span class="w"> </span>-b:a<span class="w"> </span>320k<span class="w"> </span><span class="se">\</span></span></span>
<span class="line" id="e1302cb1L2"><a class="line-number" href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0#e1302cb1L2"></a><span class="line-content"><span class="w">    </span><span class="s2">&quot;~/Sync/backing tracks/shows/2026-02-30 example.mp4&quot;</span></span></span>
</pre></figure><p>Finally, I use <a href="https://syncthing.net/">SyncThing</a> to automatically synchronize my <code>~/Sync</code> directory between my various computers, which is super handy. (It&rsquo;s also a <em>lot</em> easier than dealing with network shares!)</p><p>When it&rsquo;s time to perform, I&rsquo;ll use SteamVR&rsquo;s desktop overlay function to float my VLC window in the world with me, and so then I&rsquo;ll always have my visual reference where I need it. (So if you see me looking downward a lot, it isn&rsquo;t <em>just</em> me being introverted.)</p><p>When it comes to actually performing, I make sure that VLC has keyboard focus and then I can just press the space bar on my keyboard to start and, if necessary, pause the backing track.</p><h3 id="1302_h3_9_Doing-sound-checks">Doing sound checks<a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0#1302_h3_9_Doing-sound-checks" class="toc_link"></a></h3><p>Sound checks used to be rather difficult; previously, I&rsquo;d do a laborious process of recording the loopback interface into Audacity while performing parts of my set, listen back afterwards, and then try making incremental adjustments. This process was super annoying.</p><p>Nowadays I&rsquo;ve found a <a href="https://softwarerecs.stackexchange.com/questions/35552/record-a-sound-and-play-it-back-after-a-user-defined-delay">much better way</a>; basically:</p><p>First, I open two instances of VLC:</p>
<ul>
<li>The first instance gets my backing track (and continues to play to Playback 1+2)</li>
<li>The second instance is set to play to Playback 5+6, upon which I &ldquo;open capture device,&rdquo; set to the loopback audio with a 10-second caching delay.</li>
</ul>

<figure class="images"><a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0"><img src="https://sockpuppet.band/static/_img/c2/1dd6/vlc-delay-loop_3af4e3f6bf_530x580_q50.webp" width="530" height="580" srcset="https://sockpuppet.band/static/_img/c2/1dd6/vlc-delay-loop_3af4e3f6bf_530x580_q50.webp 1x, https://sockpuppet.band/static/_img/c2/1dd6/vlc-delay-loop_3af4e3f6bf_q50.webp 2x" loading="lazy" class="u-photo" alt="Setting up a delay loop in VLC"></a></figure>
<p>Then, I can unpause my backing track player and perform for 10 seconds, then pause the backing track while I listen to how it sounded. This gives me a much faster means of iterating on my adjustments and getting things sounding really good.</p>
            
                <hr/><ol><li id="d_e1302_fn1"><p>Props to <a href="https://nikofox.carrd.co/">Niko Fox</a> for turning me on to this specific wireless IEM unit.&nbsp;<a href="/blog/1302-VR-performance-setup-2.0#r_e1302_fn1" rev="footnote">↩</a></p></li><li id="d_e1302_fn2"><p>I actually have all four going to it but Playback 7+8 isn&rsquo;t used for anything. Someday I might figure out a way of using it for a click track or additional audio cues, though.&nbsp;<a href="/blog/1302-VR-performance-setup-2.0#r_e1302_fn2" rev="footnote">↩</a></p></li><li id="d_e1302_fn3"><p>I don&rsquo;t usually have the amplifier&rsquo;s speakers on when I&rsquo;m performing but it&rsquo;s nice to have when I&rsquo;m practicing. Additionally, the amplifier&rsquo;s line output and instrument input are no longer connected to anything, as they are not needed in this setup. I do still use the amplifier&rsquo;s power bus for my pedal board, however.&nbsp;<a href="/blog/1302-VR-performance-setup-2.0#r_e1302_fn3" rev="footnote">↩</a></p></li><li id="d_e1302_fn4"><p>Note that other people in the instance won&rsquo;t see the lips move, though, although for me it&rsquo;s most important that my local camera does. If you need the lip movement to be visible to someone else (for example, someone else recording/streaming you directly), set your microphone output level to 5%, which will broadcast your visemes to others while keeping the audio level as low as possible.&nbsp;<a href="/blog/1302-VR-performance-setup-2.0#r_e1302_fn4" rev="footnote">↩</a></p></li><li id="d_e1302_fn5"><p>Or I could try to remember to set my VRChat camera to &ldquo;audio from camera&rdquo; mode and pass the stereo through normally, but I usually forget to do this. It also makes communicating with others on stage much more difficult since consciously overriding the incorrect positional audio cues is super hard to brain.&nbsp;<a href="/blog/1302-VR-performance-setup-2.0#r_e1302_fn5" rev="footnote">↩</a></p></li><li id="d_e1302_fn6"><p>In theory one could use ASIO to mitigate the latency (via the <a href="https://github.com/Andersama/obs-asio">respective OBS plugin</a>), but there&rsquo;s still going to be <em>some</em> latency, and I err on the side of pragmatism since I&rsquo;m going to have to adjust things anyway. Also, even if the latency can be eliminated from OBS&rsquo;s point of view, it&rsquo;s still going to be present for VRChat, so it&rsquo;s going to need to be adjusted between the visuals and the audio, and that is, in my experience, much harder to do well.&nbsp;<a href="/blog/1302-VR-performance-setup-2.0#r_e1302_fn6" rev="footnote">↩</a></p><p>There&rsquo;s also the issue of ASIO often requiring exclusive access to the device, which means it might not even work in this situation to begin with.</p><p>So basically, ASIO <em>might</em> work but I haven&rsquo;t tried it nor have I seen any compelling reason to.</p></li><li id="d_e1302_fn7"><p>Although I&rsquo;m proud to say that most of the songs I perform I do have completely memorized, and the more I perform songs I&rsquo;m not off-book on yet, the closer I get to getting there. Assistive technology FTW.&nbsp;<a href="/blog/1302-VR-performance-setup-2.0#r_e1302_fn7" rev="footnote">↩</a></p></li></ol>
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=VRChat">#VRChat</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=VR">#VR</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=performances">#Performances</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=hardware">#Hardware</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="VRChat" label="VRChat" />
        
        <category term="VR" label="VR" />
        
        <category term="Performances" label="performances" />
        
        <category term="Hardware" label="hardware" />
        

        

    </entry>
    <entry>
        
        <title>Lorenzo&#39;s Music Podcast</title>
        <link href="https://sockpuppet.band/blog/2251-Lorenzo-s-Music-Podcast" rel="alternate" type="text/html" />
        <published>2025-12-19T22:20:42-08:00</published>
        <updated>2025-12-19T22:20:42-08:00</updated>
        <id>urn:uuid:407e4bb5-d951-46f2-8343-ac5ec15693ba</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p>I was a guest over on <a href="https://www.lorenzosmusic.com/podcast/sockpuppet-lorenzos-music-podcast/">Lorenzo&rsquo;s Music Podcast</a>, where we talked about a bunch of topics including VR-based performances, creative self-expression, and the future of federated music streaming, among other things. Thank you so much to Tom Ray for having me on!</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        <p>I was a guest over on <a href="https://www.lorenzosmusic.com/podcast/sockpuppet-lorenzos-music-podcast/">Lorenzo&rsquo;s Music Podcast</a>, where we talked about a bunch of topics including VR-based performances, creative self-expression, and the future of federated music streaming, among other things. Thank you so much to Tom Ray for having me on!</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/ljkWycR8tMY?si=MRuoGQ_jJmJiQx0c" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>


        
            
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=podcast">#Podcast</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=guest+appearances">#GuestAppearances</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=discussion">#Discussion</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=VRChat">#VRChat</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="Podcast" label="podcast" />
        
        <category term="GuestAppearances" label="guest appearances" />
        
        <category term="Discussion" label="discussion" />
        
        <category term="VRChat" label="VRChat" />
        

        

    </entry>
    <entry>
        
        <title>On success: a recap and a look ahead</title>
        <link href="https://sockpuppet.band/blog/1888-On-success-a-recap-and-a-look-ahead" rel="alternate" type="text/html" />
        <published>2025-12-10T15:48:55-08:00</published>
        <updated>2025-12-10T15:48:55-08:00</updated>
        <id>urn:uuid:e71f8986-262b-4c52-91b9-07627434094f</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p>It has been one year exactly since I last wrote about <a href="https://sockpuppet.band/blog/2700-On-success">my thoughts on what it means to be successful</a>, and I&rsquo;d like to share where things have gone since then.</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        <p>It has been one year exactly since I last wrote about <a href="https://sockpuppet.band/blog/2700-On-success">my thoughts on what it means to be successful</a>, and I&rsquo;d like to share where things have gone since then.</p>

        
            <h3 id="1888_h3_1_Success-updates">Success updates<a href="https://sockpuppet.band/blog/1888-On-success-a-recap-and-a-look-ahead#1888_h3_1_Success-updates" class="toc_link"></a></h3><p>First, here&rsquo;s the criteria I laid out as what I&rsquo;d see as feeling &ldquo;successful.&rdquo;</p>
<ul>
<li><p>The amount of income I get from my music would be sufficient as a living wage</p><p>This is still incredibly far away, and I&rsquo;m not sure it will ever be achievable with the way the music industry is, especially for independent musicians. It&rsquo;s also kind of a low priority for me, though, as my other sources of income are sufficient for now.</p></li>
<li><p>Any time I release something new, I have a fanbase that acquires it without prompting</p><p>This isn&rsquo;t something I&rsquo;ve really had a good measure of, but I will say that this still hasn&rsquo;t been the case for my <a href="https://sockpuppet.band/releases/?date=2025">two releases this year</a></p></li>
<li><p>Any release pays for its own production costs within its first month of release</p><p>I&rsquo;d say I still haven&rsquo;t hit this benchmark just yet. Neither of my releases this year cost in terms of software or equipment (in that I didn&rsquo;t have to buy anything new for them), but like, I&rsquo;m still <em>super</em> far in the hole in terms of my startup costs, and even distributing <a href="https://sockpuppet.band/track/the-war-machine">The War Machine</a> to streaming cost $5 which I haven&rsquo;t yet recouped.</p><p><a href="https://sockpuppet.band/album/strawberry-jelly-9">strawberry jelly :9</a> has made around $94 this year, though, and I also got a job out of it, so, that&rsquo;s worth <em>something</em>.</p></li>
<li><p>I have enough fans that YouTube actively tries to retain my content rather than treating my channel as a liability</p><p>This still hasn&rsquo;t quite changed, although I&rsquo;m starting to feel it turn a corner, especially with my move to self-administering my videos. (On that note, gosh, I&rsquo;m falling behind on that project&hellip;)</p></li>
<li><p>Any release I put out gets visibility in the various streaming platforms&#39; algorithms</p><p>Nope, but also I&rsquo;ve decided to <a href="https://sockpuppet.band/blog/2388-Please-do-not-ask-me-about-streaming-distribution">just not care about streaming for now</a>, which feels like a much healthier solution to the problem.</p></li>
<li><p>People approach me to express interest in <a href="https://sockpuppet.band/clients/">hiring me</a></p><p>This is something that&rsquo;s changed! In that, as mentioned, some of the work I did on <a href="https://sockpuppet.band/album/strawberry-jelly-9">strawberry jelly :9</a> got me hired as the composer for a small game. It isn&rsquo;t much, but it&rsquo;s something.</p></li>
<li><p>Concert organizers approach me to express interest in me performing with them</p><p>And this one I can happily say has definitely been satisfied; quite a few of my <a href="https://sockpuppet.band/live/?tag=vrchat">VRChat performances</a> have now been things where people approached me to play at them, instead of me needing to seek out and apply for things.</p></li>
<li><p>I am approached with offers for representation, either via an agent or a record label</p><p>I am still not signed with a record label (and at this point I&rsquo;m not sure I even want to be), but I do have a booking agent for my VRChat shows! And she&rsquo;s the one who approached me with the idea, after having booked me for a couple of events.</p></li>
<li><p>I have people trying to interpret my songs on their own, whether correctly or incorrectly, and reading their own meaning into them regardless</p><p>This has happened a little bit. So far as I know nobody&rsquo;s yet to submit their own interpretations to Genius or whatever, but people have asked questions about some of my lines, and that&rsquo;s a good first step!</p></li>
</ul>
<p>Also, here&rsquo;s a thing I didn&rsquo;t think of on the original list but which is something that I feel is very much worth celebrating:</p>
<ul>
<li><p>People start to recognize me for my music</p><p>And this is another cool thing that&rsquo;s been happening. The performances I&rsquo;ve done in VRChat have led to people recognizing me as a musician in random places and folks will even compliment me on my music. More than one person has even had a favorite song of mine! (It seems to be tied between <a href="https://sockpuppet.band/track/freak-flag">Freak Flag</a> and <a href="https://sockpuppet.band/track/material-change">Material Change</a>.)</p><p>I also got a surge of interest and recognition after my presence at Furality. (Also a nice little spike of streaming playtime, which unfortunately didn&rsquo;t last long.)</p><p>It&rsquo;s still only something that occurs in very small pockets in VRChat, and is often intertwined with the work I do for <a href="https://sockpuppet.band/clients/1270-Trans-Academy">Trans Academy</a>, but it&rsquo;s been super gratifying and feels great.</p></li>
</ul>
<h3 id="1888_h3_2_The-year-in-review">The year in review<a href="https://sockpuppet.band/blog/1888-On-success-a-recap-and-a-look-ahead#1888_h3_2_The-year-in-review" class="toc_link"></a></h3><p>Here&rsquo;s a breakdown of some of my activity:</p>
<ul>
<li>Released <a href="https://sockpuppet.band/track/the-war-machine">one single</a> and <a href="https://sockpuppet.band/album/strawberry-jelly-9">one album</a></li>
<li>Got hired on a game OST as a result of the album</li>
<li>Finally got a bunch of my albums <a href="https://sockpuppet.band/releases/?tag=collection:CD">re-released on CD</a></li>
<li>Did a bit more Novembeat than last year, and ended up writing a few new songs for an upcoming album as a result</li>
<li>Performed <a href="https://sockpuppet.band/live/?date=2025">a <em>bunch</em> of shows</a>, mostly in VR but one in real life as well</li>
<li>Made about $450 on <a href="https://sockpuppet.band/bandcamp">Bandcamp</a>, $30 on <a href="https://sockpuppet.band/mirlo">Mirlo</a>, and $3 that I&rsquo;ll never see on streaming platforms</li>
<li>Also got a decent chunk of change from the Internet Archive show (which I really need to get around to posting, oops) &mdash; I can highly recommend <a href="https://blog.archive.org/2025/08/20/calling-all-musicians-mini-concerts-at-the-internet-archive/">the experience</a> to anyone who&rsquo;s interested in applying!</li>
<li>Revamped <a href="https://sockpuppet.band/youtube">my YouTube channel</a> and got <a href="https://sockpuppet.band/blog/2564-November-updates#2564_h3_5_YouTube-channel-update">a lot more visibility</a> as a result</li>
<li>Completely changed the way I do my live performances, including producing a bunch of backing tracks to add to the experience</li>
</ul>
<h3 id="1888_h3_3_Looking-forward">Looking forward<a href="https://sockpuppet.band/blog/1888-On-success-a-recap-and-a-look-ahead#1888_h3_3_Looking-forward" class="toc_link"></a></h3><p>In 2026, as usual, I hope to get a couple of albums done. Here&rsquo;s what&rsquo;s on my current backlog (which is, regrettably, nearly the exact same backlog as I had for 2025):</p>
<ul>
<li>The next collection of random unreleased songs to be released (including a bunch of Song Fight! and some other random things I&rsquo;ve had sitting around for ages)</li>
<li>A self-cover album, where I want to revamp some of my older songs based on how I perform them today</li>
<li>A jazz album!</li>
<li>An album full of covers of more famous/popular music (this one will be tricky and expensive to get all the proper licenses for it)</li>
<li>And of course, the full OST for the game I&rsquo;m working on</li>
</ul>
<p>I also want to get the rest of my back-catalog up on YouTube, which would be a lot easier if I stop thinking that I need to go overboard on the visualizers, and I also want to get some work done on a <a href="https://github.com/PlaidWeb/Canimus">Canimus</a>-enabled player of some sort. Which isn&rsquo;t super relevant to making music, but it&rsquo;s <em>very</em> relevant to helping musicians to be heard in general.</p><p>Finally, my plan for performing has been to do 1-2 bigger shows a month, and I&rsquo;m pretty sure that&rsquo;s something that I can make happen.</p>
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=introspection">#Introspection</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=career">#Career</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=goals">#Goals</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=success">#Success</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="Introspection" label="introspection" />
        
        <category term="Career" label="career" />
        
        <category term="Goals" label="goals" />
        
        <category term="Success" label="success" />
        

        

    </entry>
    <entry>
        
        <title>November updates</title>
        <link href="https://sockpuppet.band/blog/2564-November-updates" rel="alternate" type="text/html" />
        <published>2025-11-18T02:08:04-08:00</published>
        <updated>2025-11-18T02:08:04-08:00</updated>
        <id>urn:uuid:438015ca-b51b-5973-a3e9-9a4790876907</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p>We&rsquo;re close to the two-thirds mark of the month so I figure I should share what&rsquo;s been going on! It&rsquo;s all good stuff, I think.</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        <p>We&rsquo;re close to the two-thirds mark of the month so I figure I should share what&rsquo;s been going on! It&rsquo;s all good stuff, I think.</p>

        
            <h3 id="2564_h3_1_Website">Website<a href="https://sockpuppet.band/blog/2564-November-updates#2564_h3_1_Website" class="toc_link"></a></h3><p>I&rsquo;ve been slowly working on fully tagging all of <a href="https://sockpuppet.band/releases/all">my releases</a>. At this point it&rsquo;s at about 90% coverage, with nearly everything having genre tags and most things also having instrument and mood tags.</p><h3 id="2564_h3_2_Novembeat">Novembeat<a href="https://sockpuppet.band/blog/2564-November-updates#2564_h3_2_Novembeat" class="toc_link"></a></h3><p>Some years I produce a lot of music for Novembeat. Some years, not so much. Usually it ends up with <a href="https://sockpuppet.band/releases/?tag=collection:Novembeat">an album</a> at the end.</p><p>So far I&rsquo;ve made 10 tracks (all posted on <a href="https://www.youtube.com/playlist?list=PLNRLpYEdwBNgZMOTh0QcFehYyeWpa6QD1">the YouTube playlist</a>) which is on the low end but it&rsquo;s been fun to play with things all the same. I might do more this month although I haven&rsquo;t been super motivated. The last few tracks I worked on I at least <a href="https://www.youtube.com/@realfakesockpuppet/live">streamed live on YouTube</a> which was a lot of fun.</p><p>Some of the tracks I&rsquo;ve made so far are ones that I definitely want to revisit as full tracks and don&rsquo;t want to do a half-assed release at the end of the month, and the other tracks are ones that are fun as tooling around but nothing I am really super inspired to release on an album, so I think this year I&rsquo;m just going to limit it to the playlist (same as I did <a href="https://www.youtube.com/playlist?list=PLNRLpYEdwBNhvYgINS87DnFa5gY0EqZli">last year</a>) and treat it as a fun exercise instead of it being A Thing. Especially since I no longer really feel the pressure to feed the streaming algorithms.</p><h3 id="2564_h3_3_New-music">New music<a href="https://sockpuppet.band/blog/2564-November-updates#2564_h3_3_New-music" class="toc_link"></a></h3><p>I&rsquo;m still working on the soundtrack for <a href="https://gooningsimulator.com/">a game</a>, and it&rsquo;s coming<sup id="r_e2564_fn1"><a href="https://sockpuppet.band/blog/2564-November-updates#d_e2564_fn1" rel="footnote">1</a></sup> along nicely. Our goal is to release the game in 2026, although there&rsquo;s nothing more firm than that which I can disclose publicly.</p><p>I&rsquo;m also continuing to work on music for some other clients, and collecting more ideas/gumption for whittling down my album production backlog.</p><h3 id="2564_h3_4_Performances">Performances<a href="https://sockpuppet.band/blog/2564-November-updates#2564_h3_4_Performances" class="toc_link"></a></h3><p>I&rsquo;m excited for two performances, <a href="https://sockpuppet.band/live/896-Skyline-Aurora-Festival">Skyline Aurora Fest</a> this Friday and the <a href="https://sockpuppet.band/live/3095-TFSS-Three-Year-Anniversary-Show">Trans Furs Support System anniversary show</a> next Saturday. I&rsquo;ve upgraded my performance setup even further to make these the best shows I can. Some highlights:</p>
<ul>
<li>I&rsquo;m now using backing tracks combined with live instruments, and many of the backing tracks are specific to my live performances with new arrangements</li>
<li>I have a pretty complete pedalboard that gives me much more control over my live sound, including a proper reverb setup</li>
<li>I&rsquo;ve switched to using some wireless IEMs that give me a lot more freedom within my VR playspace and cuts down on the fragility of my monitoring setup</li>
</ul>
<p>I&rsquo;m also trying to get in on the beta for the <a href="https://www.eozvr.com/products/eoz-immersive-vr-gloves">EOZ immersive gloves</a> in order to get proper hand tracking while I perform, although it&rsquo;ll still be some time before that happens. Right now it&rsquo;s definitely the most promising option that&rsquo;s coming to market in the foreseeable future.</p><h3 id="2564_h3_5_YouTube-channel-update">YouTube channel update<a href="https://sockpuppet.band/blog/2564-November-updates#2564_h3_5_YouTube-channel-update" class="toc_link"></a></h3><p>Switching to self-administered releases on <a href="https://sockpuppet.band/youtube">my channel</a> has been the best decision I&rsquo;ve made, for unexpected reasons.</p><p>Normally, when releasing music to YouTube, you have to go through a distributor, i.e. the same companies that put music on services like Spotify and Apple Music. Technically, YouTube Music releases are separate from regular YouTube, and the &ldquo;official artist channel&rdquo; function is just a way of getting YouTube Music releases to appear on the &ldquo;releases&rdquo; tab of the official artist website.</p><p>The plus side to this method is that all music listened through YouTube Music gets administered like any other music stream, and YouTube pays out <a href="https://sockpuppet.band/blog/121-On-Spotify-and-listening-to-and-collecting-music">around half a penny per play</a>, which isn&rsquo;t nothing. And it&rsquo;s also nice that these releases show up on the release tab, and have all of the necessary metadata for music business things. But it has several downsides as well:</p>
<ul>
<li>There&rsquo;s basically no control over what appears on the video description</li>
<li>There&rsquo;s no control over what the video content actually is (generally it&rsquo;s just a static image of the cover art)</li>
<li>There&rsquo;s no way to directly provide synchronized lyrics/subtitles, auto-captioned or otherwise, unless it&rsquo;s a feature provided by your distributor (and setting that up at the distributor side is a pain in the butt)</li>
<li>The artist has absolutely no control over how anything is organized</li>
<li>YouTube Music plays do nothing to help with discovery within the greater YouTube algorithm and doesn&rsquo;t affect the artist&rsquo;s YouTube watch stats</li>
<li>Listeners aren&rsquo;t actually directed to the musician&rsquo;s channel (at least, not reliably) and there&rsquo;s no real integration between YouTube Music and general YouTube following</li>
<li>The artist doesn&rsquo;t benefit from any of YouTube&rsquo;s copyright tools beyond what their distributor makes available (usually at great added expense and with exceptionally poor granularity)</li>
</ul>
<p>And none of these are issues for self-administered videos! So far I&rsquo;ve had the following benefits already:</p>
<ul>
<li>People have discovered my music through the regular YouTube recommendation feed</li>
<li>I&rsquo;ve hit a new watch time milestone which is good for the ol&#39; dopamine factory</li>
<li>I&rsquo;m having a lot of fun figuring out various forms of audio visualizer on the videos</li>
<li>I am able to do my own copyright administration based on my own preferences</li>
</ul>
<p>It isn&rsquo;t perfect, of course. Since I&rsquo;m going through regular YouTube plays, I don&rsquo;t automatically get paid for listens (not that I was making that much to begin with), although hopefully I&rsquo;ll hit a monetization threshold at some point. Also, if someone does get recommended a song through the feed, they&rsquo;ll just get it on its own with no link into its respective playlist (although I suppose I could at least put a link in the description). Also there&rsquo;s no way for me to organize playlists into groups; I think that feature does become available to larger creators, but I haven&rsquo;t hit whatever threshold is necessary for that just yet.</p><p>I <em>could</em> do more <a href="https://www.youtube.com/playlist?list=PLNRLpYEdwBNjWw3NKCY9Ra2yGluRvaOYx">whole-album videos</a> to preserve the album-oriented listening experience, and I&rsquo;ll probably get around to doing that when I&rsquo;m done clearing this <a href="https://sockpuppet.band/blog/3472-Oops-All-YouTube">reupload backlog</a>.</p><h3 id="2564_h3_6_But-anyway">But anyway<a href="https://sockpuppet.band/blog/2564-November-updates#2564_h3_6_But-anyway" class="toc_link"></a></h3><p>I am a <a href="https://beesbuzz.biz/">busy bee</a> and I still have to manage my energy and chronic pain (and being up this late to blog about it certainly isn&rsquo;t helping). But things are feeling pretty okay right now.</p>
            
                <hr/><ol><li id="d_e2564_fn1"><p>heh&nbsp;<a href="/blog/2564-November-updates#r_e2564_fn1" rev="footnote">↩</a></p></li></ol>
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=Novembeat">#Novembeat</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=YouTube">#YouTube</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=backlog">#Backlog</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=backburner">#Backburner</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="Novembeat" label="Novembeat" />
        
        <category term="YouTube" label="YouTube" />
        
        <category term="Backlog" label="backlog" />
        
        <category term="Backburner" label="backburner" />
        

        

    </entry>
    <entry>
        
        <title>Oops, All YouTube!</title>
        <link href="https://sockpuppet.band/blog/3472-Oops-All-YouTube" rel="alternate" type="text/html" />
        <published>2025-11-07T22:46:56-08:00</published>
        <updated>2025-11-07T22:46:56-08:00</updated>
        <id>urn:uuid:5c04f626-4172-579b-88e7-ef901e8db11a</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p>After going through the rigmarole of making nice visualizer videos for Refactor, I noticed that I&rsquo;d already done that a year ago! In fact I&rsquo;d done it for a few albums and I&rsquo;d forgotten about that.</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        <p>After going through the rigmarole of making nice visualizer videos for Refactor, I noticed that I&rsquo;d already done that a year ago! In fact I&rsquo;d done it for a few albums and I&rsquo;d forgotten about that.</p>

        
            <p>I&rsquo;ll replace the Refactor videos with the new ones on Monday because they new ones are way better and that album is pretty special to me (and I&rsquo;ll just delist the old videos rather than delete them outright), but I think I&rsquo;ll leave Radio Ready and Instrumental alone.</p><p>In any case here&rsquo;s my current tentative YouTube album rerelease schedule:</p>
<table>
<thead>
<tr>
<th>Week</th>
<th>Monday release</th>
<th>Thursday release</th>
</tr>
</thead>

<tbody>
<tr>
<td>11/10/2025</td>
<td><a href="https://sockpuppet.band/album/refactor">Refactor</a></td>
<td><a href="https://sockpuppet.band/album/strawberry-jelly-9">strawberry jelly :9</a></td>
</tr>
<tr>
<td>11/17/2025</td>
<td><a href="https://sockpuppet.band/album/foodsexsleep">foodsexsleep</a></td>
<td><a href="https://sockpuppet.band/album/or-die-trying-ost">&hellip;Or Die Trying OST</a></td>
</tr>
<tr>
<td>11/24/2025</td>
<td><a href="https://sockpuppet.band/album/love-and-monsters">Love and Monsters</a></td>
<td><a href="https://sockpuppet.band/album/novembeat-2017">Novembeat 2017</a></td>
</tr>
<tr>
<td>12/01/2025</td>
<td><a href="https://sockpuppet.band/album/songs-of-substance">Songs of Substance</a></td>
<td><a href="https://sockpuppet.band/album/novembeat-2023-pawmune-and-friends">Novembeat 2023: Pawmune and Friends</a></td>
</tr>
<tr>
<td>12/08/2025</td>
<td><a href="https://sockpuppet.band/album/s7rawberry">s7rawberry</a></td>
<td><a href="https://sockpuppet.band/album/novembeat-2019">Novembeat 2019</a></td>
</tr>
<tr>
<td>12/15/2025</td>
<td><a href="https://sockpuppet.band/album/novembeat-2016">Novembeat 2016</a></td>
<td><a href="https://sockpuppet.band/album/novembeat-2018">Novembeat 2018</a></td>
</tr>
<tr>
<td>12/22/2025</td>
<td><a href="https://sockpuppet.band/album/transformative-instrumentals-vol-1">Transformative Instrumentals, vol. 1</a></td>
<td><a href="https://sockpuppet.band/album/the-balance-of-sappho-ost">The Balance of Sappho OST</a></td>
</tr>
<tr>
<td>12/29/2025</td>
<td><a href="https://sockpuppet.band/album/admiralo-island">Admiralo Island Witches Club</a></td>
<td><a href="https://sockpuppet.band/album/novembeat-2021-lo-fi-beats-to-grind-coffee-to">Novembeat 2021</a></td>
</tr>
<tr>
<td>01/05/2026</td>
<td><a href="https://sockpuppet.band/album/treestoration-ost">Treestoration</a></td>
<td><a href="https://sockpuppet.band/album/herbal-spice-problem-ost">Herbal Spice Problem</a> + <a href="https://sockpuppet.band/album/brickris-tetout-ost">Brickris Tetout</a></td>
</tr>
<tr>
<td>01/12/2026</td>
<td><a href="https://sockpuppet.band/album/deadnames">Deadnames</a></td>
<td></td>
</tr>
</tbody>
</table>
<p>which would actually cover my entire back-catalog, aside from <a href="https://sockpuppet.band/track/wiener-dog-on-a-motorcycle">Wiener Dog on a Motorcycle</a> (which I still want to do a full music video for instead of a visualizer release) and <a href="https://sockpuppet.band/album/pointed-little-quill">pointed little quill</a> which is still available on YouTube Music.</p><p>Of course this is subject to change due to any number of factors, especially if I actually manage to get one of my backburnered albums out in the interim.</p>
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=YouTube">#YouTube</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=video">#Video</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="YouTube" label="YouTube" />
        
        <category term="Video" label="video" />
        

        

    </entry>
    <entry>
        
        <title>YouTube self-management update</title>
        <link href="https://sockpuppet.band/blog/2069-YouTube-self-management-update" rel="alternate" type="text/html" />
        <published>2025-11-06T16:03:08-08:00</published>
        <updated>2025-11-06T16:03:08-08:00</updated>
        <id>urn:uuid:8f1a480b-ddf0-56ec-ab25-dfe187e6b2a1</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p>If you follow <a href="https://sockpuppet.band/youtube">my YouTube channel</a> you&rsquo;ve probably been at least somewhat inundated with a bunch of videos on your feed with my music reposts. I&rsquo;ve finally figured out a process I&rsquo;m more or less happy with, and am figuring out the best cadence for doing things.</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        <p>If you follow <a href="https://sockpuppet.band/youtube">my YouTube channel</a> you&rsquo;ve probably been at least somewhat inundated with a bunch of videos on your feed with my music reposts. I&rsquo;ve finally figured out a process I&rsquo;m more or less happy with, and am figuring out the best cadence for doing things.</p><p>My current plan is to do two releases per week; on Mondays will be what I consider my &ldquo;real&rdquo; or &ldquo;authored&rdquo; albums, and Thursdays will be what I consider &ldquo;jam&rdquo; albums. The categorization of these is a little wishy-washy, but for example, things I&rsquo;ve done for <a href="https://sockpuppet.band/releases/?tag=collection:novembeat">Novembeat</a> and <a href="https://sockpuppet.band/releases/?tag=collection:game-jams">Strawberry Jam</a> are &ldquo;jam&rdquo; albums, while things like <a href="https://sockpuppet.band/album/refactor">Refactor</a> and <a href="https://sockpuppet.band/album/songs-of-substance">Songs of Substance</a> are &ldquo;authored&rdquo; albums.</p>

        
            <h3 id="2069_h3_1_Release-schedule-intended">Release schedule (intended)<a href="https://sockpuppet.band/blog/2069-YouTube-self-management-update#2069_h3_1_Release-schedule-intended" class="toc_link"></a></h3><p>This is my current release schedule plan:</p>
<table>
<thead>
<tr>
<th>Week</th>
<th>Monday release</th>
<th>Thursday release</th>
</tr>
</thead>

<tbody>
<tr>
<td>11/10/2025</td>
<td><a href="https://sockpuppet.band/album/refactor">Refactor</a></td>
<td><a href="https://sockpuppet.band/album/strawberry-jelly-9">strawberry jelly :9</a></td>
</tr>
<tr>
<td>11/17/2025</td>
<td><a href="https://sockpuppet.band/album/foodsexsleep">foodsexsleep</a></td>
<td><a href="https://sockpuppet.band/album/novembeat-2021-lo-fi-beats-to-grind-coffee-to">Novembeat 2021</a><sup id="r_e2069_fn1"><a href="https://sockpuppet.band/blog/2069-YouTube-self-management-update#d_e2069_fn1" rel="footnote">1</a></sup></td>
</tr>
<tr>
<td>11/24/2025</td>
<td><a href="https://sockpuppet.band/album/love-and-monsters">Love and Monsters</a></td>
<td><a href="https://sockpuppet.band/album/novembeat-2017">Novembeat 2017</a></td>
</tr>
<tr>
<td>12/01/2025</td>
<td><a href="https://sockpuppet.band/album/radio-ready">Radio Ready</a></td>
<td><a href="https://sockpuppet.band/album/or-die-trying-ost">&hellip;Or Die Trying OST</a><sup id="r_e2069_fn2"><a href="https://sockpuppet.band/blog/2069-YouTube-self-management-update#d_e2069_fn2" rel="footnote">2</a></sup></td>
</tr>
<tr>
<td>12/08/2025</td>
<td><a href="https://sockpuppet.band/album/instrumental">Instrumental</a></td>
<td><a href="https://sockpuppet.band/album/novembeat-2019">Novembeat 2019</a></td>
</tr>
<tr>
<td>12/15/2025</td>
<td><a href="https://sockpuppet.band/album/songs-of-substance">Songs of Substance</a></td>
<td><a href="https://sockpuppet.band/album/novembeat-2023-pawmune-and-friends">Novembeat 2023: Pawmune and Friends</a></td>
</tr>
<tr>
<td>12/22/2025</td>
<td><a href="https://sockpuppet.band/album/transformative-instrumentals-vol-1">Transformative Instrumentals, vol. 1</a></td>
<td><a href="https://sockpuppet.band/album/novembeat-2018">Novembeat 2018</a></td>
</tr>
<tr>
<td>12/29/2025</td>
<td></td>
<td><a href="https://sockpuppet.band/album/novembeat-2016">Novembeat 2016</a></td>
</tr>
<tr>
<td>01/05/2026</td>
<td></td>
<td><a href="https://sockpuppet.band/album/s7rawberry">s7rawberry</a></td>
</tr>
</tbody>
</table>
<p>There&rsquo;s a bunch of albums not yet on that list and I&rsquo;m not sure if I want them to have YouTube rereleases just yet. I&rsquo;ll probably use the empty Mondays to release them, possibly in groups (for example, several of the game jam OSTs are quite short).</p><h3 id="2069_h3_2_Some-technical-details">Some technical details<a href="https://sockpuppet.band/blog/2069-YouTube-self-management-update#2069_h3_2_Some-technical-details" class="toc_link"></a></h3><p>To actually make the videos I&rsquo;ve finally wrapped my head around how FFmpeg filter graphs work, and I&rsquo;m building up a little repertoire of visual hacks that let me make the various things look nice.</p><p>For example, here&rsquo;s the <a href="https://sockpuppet.band/_file/bc077/8/novembeat%202020%20video%20setup.zip">Novembeat 2020 video setup files</a>, for those who are interested. FFmpeg scripts aren&rsquo;t super easy to comment, but probably the trickiest thing is the way the <code>remap</code> filter works; basically, the X and Y channels must be in 16-bit grayscale mode, and directly reference pixel coordinates, but it&rsquo;s not super easy to set up colors like that in Affinity Studio (my graphics editor of choice) so instead I draw things as a grayscale ramp (which end up with values 0-65535 in the 16-bit mapping) and then scale it down to try to map them to 0-255. Buuuuut Affinity also ends up dithering gradients regardless of colorspace or settings, so there needs to be a bit of fudging there too. (In retrospect this is something that would have probably worked better with <a href="https://gimp.org">GNU IMP</a>, which has native support for 16-bit grayscale images.)</p><p><mark>Update:</mark> Nope GNU IMP&rsquo;s UI is still complete garbage for this and wouldn&rsquo;t have improved things. I guess in the future I&rsquo;ll just want to, like, write code.</p><p>As far as uploaading the videos goes, I wrote a <a href="https://github.com/fluffy-critter/yt-uploader">Python script</a> which is rather involved in its setup (since it requires setting up a Google developer account and a &ldquo;cloud application&rdquo;) and which I can only run a few times a day due to the somewhat annoying way that YouTube&rsquo;s API limits work. But my process is basically:</p>
<ol>
<li>Encode all my videos (using the Bandcrash FLAC files as the input source)</li>
<li>Drag them (15 at a time) to the YouTube uploader</li>
<li>Add them all to a new playlist</li>
<li>Download the playlist metadata</li>
<li>Reconcile the playlist metadata with my <a href="https://fluffy.itch.io/bandcrash">Bandcrash</a> album data to automatically generate titles and descriptions</li>
<li>Apply that new data to the YouTube videos and simultaneously schedule them for publication on release day</li>
</ol>
<p>It&rsquo;s a bit annoying but not <em>nearly</em> as annoying as having to hand-edit the descriptions and post schedule.</p><h3 id="2069_h3_3_Some-future-things">Some future things<a href="https://sockpuppet.band/blog/2069-YouTube-self-management-update#2069_h3_3_Some-future-things" class="toc_link"></a></h3><p>I really want to do a proper music video for <a href="https://sockpuppet.band/track/wiener-dog-on-a-motorcycle">Wiener Dog on a Motorcycle</a>. I&rsquo;ve had a very strong image in my head for how it should look. If any animators are interested in taking it on as a gig, let me know. I need to at least do a storyboard and possibly an animatic myself, I think.</p><p>On top of all this I still have <a href="https://sockpuppet.band/blog/2959-Goings-on-in-the-Sockiverse">so many backburnered album projects</a>, and of course I still have 25 days of <a href="https://novembeat.com/">Novembeat</a> left to do&hellip;</p>
            
                <hr/><ol><li id="d_e2069_fn1"><p>This would be a music-only release, rather than the existing <a href="https://www.youtube.com/playlist?list=PLNRLpYEdwBNhD7WQYFrqckvaweUj9kKls">music videos playlist</a> which has a bunch of non-music stuff in it and is missing the last track, which currently only appears in the <a href="https://www.youtube.com/watch?v=cAdd8tF-WVs">full video</a>.&nbsp;<a href="/blog/2069-YouTube-self-management-update#r_e2069_fn1" rev="footnote">↩</a></p></li><li id="d_e2069_fn2"><p>This will also coincidentally be the same intended day as the album release of Novembeat 2025, but that will already have been on YouTube since I&rsquo;m using that as my primary incremental release mechanism.&nbsp;<a href="/blog/2069-YouTube-self-management-update#r_e2069_fn2" rev="footnote">↩</a></p></li></ol>
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=YouTube">#YouTube</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=video">#Video</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=FFmpeg">#FFmpeg</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="YouTube" label="YouTube" />
        
        <category term="Video" label="video" />
        
        <category term="FFmpeg" label="FFmpeg" />
        

        

    </entry>
    <entry>
        
        <title>Let&#39;s Novembeat!</title>
        <link href="https://sockpuppet.band/blog/2205-Let-s-Novembeat" rel="alternate" type="text/html" />
        <published>2025-10-30T00:00:00+00:00</published>
        <updated>2025-10-30T00:00:00+00:00</updated>
        <id>urn:uuid:38640c5f-b3dc-597a-9c1d-988bd53d50e2</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p> </p><p>Hey y&#39;all! As you might know, I coordinate an annual song-a-day challenge called <a href="https://novembeat.com/">Novembeat</a>, where in November you try to make something musical every day. <a href="https://sockpuppet.band/releases/?tag=collection:Novembeat">Several of my albums</a> have been produced that way, and last year, in lieu of doing the traditional challenge (aside from a <a href="https://www.youtube.com/playlist?list=PLNRLpYEdwBNhvYgINS87DnFa5gY0EqZli">handful of low-effort experiments</a>) I mostly used the month as a push to finally finish up <a href="https://sockpuppet.band/album/transitions">Transitions</a>.</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        
<figure class="images"><a href="https://novembeat./com"><img src="https://sockpuppet.band/static/_img/e7/5bd8/novembeat_adc3b69293_240x240_q50.webp" width="240" height="240" srcset="https://sockpuppet.band/static/_img/e7/5bd8/novembeat_adc3b69293_240x240_q50.webp 1x, https://sockpuppet.band/static/_img/e7/5bd8/novembeat_adc3b69293_480x480_q50.webp 2x" loading="lazy" class="u-photo" alt="novembeat.png"></a></figure>
<p>Hey y&#39;all! As you might know, I coordinate an annual song-a-day challenge called <a href="https://novembeat.com/">Novembeat</a>, where in November you try to make something musical every day. <a href="https://sockpuppet.band/releases/?tag=collection:Novembeat">Several of my albums</a> have been produced that way, and last year, in lieu of doing the traditional challenge (aside from a <a href="https://www.youtube.com/playlist?list=PLNRLpYEdwBNhvYgINS87DnFa5gY0EqZli">handful of low-effort experiments</a>) I mostly used the month as a push to finally finish up <a href="https://sockpuppet.band/album/transitions">Transitions</a>.</p><p>I&rsquo;ve always found Novembeat to be a very helpful thing for feeling unstuck with my own musical pursuits, and I&rsquo;d highly recommend it to anyone who wants to get a bit more practice with any aspect of the music creation process.</p><p>My suggestion is to only do it to the level for which you feel it&rsquo;s helpful. Don&rsquo;t burn yourself out on music trying to produce something if it isn&rsquo;t flowing; the point is to challenge yourself, not to push yourself to the breaking point. Most years I haven&rsquo;t actually done something <em>every</em> day, and getting anything done means there&rsquo;s now more music in the world than there was before, and that can only be a good thing.</p><p>Anyway, think of this as an invitation to join in. Or if a weekly-ish cadence is more your speed, check out <a href="https://songfight.org">Song Fight!</a>, which I wrote about <a href="https://sockpuppet.band/blog/569-Song-Fight-The-how-the-what-and-the-why">recently</a>.</p>

        
            
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=novembeat">#Novembeat</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="Novembeat" label="novembeat" />
        

        

    </entry>
    <entry>
        
        <title>Goings-on in the Sockiverse</title>
        <link href="https://sockpuppet.band/blog/2959-Goings-on-in-the-Sockiverse" rel="alternate" type="text/html" />
        <published>2025-10-24T11:47:31-07:00</published>
        <updated>2025-10-24T11:47:31-07:00</updated>
        <id>urn:uuid:86c9f8e0-8833-5869-9444-8d6caf548e38</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p>Hello! I think it&rsquo;s been a while since I&rsquo;ve talked about what&rsquo;s going on with the band and what sorts of things are happening. So here&rsquo;s a casual collection of updates along those lines.</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        <p>Hello! I think it&rsquo;s been a while since I&rsquo;ve talked about what&rsquo;s going on with the band and what sorts of things are happening. So here&rsquo;s a casual collection of updates along those lines.</p>

        
            <h3 id="2959_h3_1_Music-distribution-stuff">Music distribution stuff<a href="https://sockpuppet.band/blog/2959-Goings-on-in-the-Sockiverse#2959_h3_1_Music-distribution-stuff" class="toc_link"></a></h3><p>While it took a bit longer than expected, the <a href="https://sockpuppet.band/blog/2156-Where-d-your-music-go">removal of (most of) our music from streaming services</a> has finally mostly gone through in most places.</p><p>To that end, we are finally starting to upload individual tracks to YouTube, although that process is going to take a little while. Rather than just put a bunch of boring thumbnail-and-audio videos up, I want everything to have at least some amount of a visual element. For <a href="https://sockpuppet.band/album/transitions">Transitions</a> it was easy enough to do <a href="https://www.youtube.com/playlist?list=PLNRLpYEdwBNgEemcycIvCNTvegX84_rUc">visualizer tracks</a> since those had already been done for the <a href="https://youtu.be/FAetyU7-hZw">full album video</a>, and of course I&rsquo;d already done this for <a href="https://www.youtube.com/playlist?list=PLNRLpYEdwBNhD7WQYFrqckvaweUj9kKls">Novembeat 2021</a> and <a href="https://www.youtube.com/playlist?list=PLNRLpYEdwBNiK4bYX4-ERC58UQpPth1Nd">2022</a> as part of the production of those albums, but for the other albums I&rsquo;ll probably just be doing a simple waveform plot like I did for <a href="https://www.youtube.com/playlist?list=PLNRLpYEdwBNi0vztq5rAsViTEx8xdXe-L">Strawberry Jams I Ate</a> since that&rsquo;s easy to automate.</p><p>Anyway, in other distribution news, a while back, I started drafting a specification called <a href="https://github.com/PlaidWeb/Canimus">Canimus</a> (the name is a Latin word that broadly means &ldquo;we make music&rdquo;) to allow music providers to syndicate their music easily, and I&rsquo;ve been working with a few other folks to try to work out some of the hairier details. As it stands the protocol is ready for my own use case and for anyone who is just interested in publishing a feed to the public Internet, but of course there&rsquo;s going to have to be some long-term thoughts around some of the trickier legal things to deal with. But there are also folks already building player engines, and Sockpuppet&rsquo;s full catalog is available for streaming, at least.</p><p>Unfortunately the actual conversation is scattered between a few different spots, although it&rsquo;s mostly being discussed on <a href="https://mirlo.space">Mirlo</a>&rsquo;s Discord with some other conversations happening over on <a href="https://the.socialmusic.network/t/canimus-yet-another-federation-syndication-approach/686">The Social Music Network</a>, which is also a great community to join if you have any interest in talking about the future of independent music on the Internet. Ideally discussion about the protocol itself will take place on the <a href="https://github.com/PlaidWeb/Canimus/discussions">Canimus GitHub discussions board</a>.</p><h3 id="2959_h3_2_Other-musical-projects">Other musical projects<a href="https://sockpuppet.band/blog/2959-Goings-on-in-the-Sockiverse#2959_h3_2_Other-musical-projects" class="toc_link"></a></h3><p>As far as music production goes, we are currently busy with the following:</p>
<ul>
<li>Actively working on the soundtrack for a video game</li>
<li>Making music for a couple of <a href="https://sockpuppet.band/clients/">ongoing clients</a></li>
<li>Preparing for <a href="https://novembeat.com/">Novembeat</a></li>
</ul>
<p>And the following album projects are currently on the backburner:</p>
<ul>
<li>The next album of Song Fight! and Song Fight!-adjacent songs</li>
<li>An album of covers of other peoples&#39; music we&rsquo;ve done over the years</li>
<li>An album of reimagining a bunch of our old songs into new styles or with updated sensibiliies</li>
<li>A jazz album</li>
</ul>
<p>As you might imagine, every member of the band is quite busy!</p>
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=updates">#Updates</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=distribution">#Distribution</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=YouTube">#YouTube</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=Canimus">#Canimus</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="Updates" label="updates" />
        
        <category term="Distribution" label="distribution" />
        
        <category term="YouTube" label="YouTube" />
        
        <category term="Canimus" label="Canimus" />
        

        

    </entry>
    <entry>
        
        <title>Review: Kunaki CDs</title>
        <link href="https://sockpuppet.band/blog/2010-Review-Kunaki-CDs" rel="alternate" type="text/html" />
        <published>2025-10-16T17:02:38-07:00</published>
        <updated>2025-10-16T17:02:38-07:00</updated>
        <id>urn:uuid:bd900f8d-d25f-5652-ad3f-e40f65eb21d0</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p>My first batch of CDs from <a href="https://sockpuppet.band/kunaki">Kunaki</a> arrived today, and here&rsquo;s a brief review of how they turned out.</p>]]></summary>
        <content type="html"><![CDATA[

		

        
        <figure><a href="https://sockpuppet.band/blog/2010-Review-Kunaki-CDs"><img src="/static/_img/79/8a59/IMG_8621_dee8438854_350x321.jpg" width="350" height="321" srcset="/static/_img/79/8a59/IMG_8621_dee8438854_350x321.jpg 1x, /static/_img/79/8a59/IMG_8621_dee8438854_700x641.jpg 2x" loading="lazy" alt="IMG_8621.jpeg"></a></figure>
        



        <p>My first batch of CDs from <a href="https://sockpuppet.band/kunaki">Kunaki</a> arrived today, and here&rsquo;s a brief review of how they turned out.</p><p>(Short version: They&rsquo;re great!)</p>

        
            <p>I ordered a set of one of each of my first 12 CDs that I had set up with them, namely:</p>
<ul>
<li><a href="https://sockpuppet.band/album/foodsexsleep">foodsexsleep</a></li>
<li><a href="https://sockpuppet.band/album/love-and-monsters">Love and Monsters</a></li>
<li><a href="https://sockpuppet.band/album/radio-ready">Radio Ready</a></li>
<li><a href="https://sockpuppet.band/album/refactor">Refactor</a></li>
<li><a href="https://sockpuppet.band/album/novembeat-2020">Novembeat 2020</a></li>
<li><a href="https://sockpuppet.band/album/songs-of-substance">Songs of Substance</a></li>
<li><a href="https://sockpuppet.band/album/novembeat-2021-lo-fi-beats-to-grind-coffee-to">Lo-Fi Beats to Grind Coffee To</a></li>
<li><a href="https://sockpuppet.band/album/novembeat-2022-original-soundtrack">Original Soundtrack</a></li>
<li><a href="https://sockpuppet.band/album/novembeat-2023-pawmune-and-friends">Pawmune and Friends</a></li>
<li><a href="https://sockpuppet.band/album/instrumental">Instrumental</a></li>
<li><a href="https://sockpuppet.band/album/notions">Notions</a></li>
<li><a href="https://sockpuppet.band/album/transitions">Transitions</a></li>
</ul>
<p>I placed the order on October 13, and the order was shipped out the very next day, and arrived just two days later, even though they were shipped USPS Media Mail. They came direct from Kunaki&rsquo;s manufacturing facility in Sparks, Nevada.</p>
<figure class="images"><a href="https://sockpuppet.band/blog/2010-Review-Kunaki-CDs"><img src="https://sockpuppet.band/static/_img/21/7a55/IMG_8603_c78a5f80a3_640x360_q50.webp" width="640" height="360" srcset="https://sockpuppet.band/static/_img/21/7a55/IMG_8603_c78a5f80a3_640x360_q50.webp 1x, https://sockpuppet.band/static/_img/21/7a55/IMG_8603_c78a5f80a3_1280x720_q50.webp 2x" loading="lazy" class="u-photo" alt="IMG_8603.jpeg" title="An unassuming box"></a><a href="https://sockpuppet.band/blog/2010-Review-Kunaki-CDs"><img src="https://sockpuppet.band/static/_img/c3/81ab/IMG_8604_3e6860489b_640x360_q50.webp" width="640" height="360" srcset="https://sockpuppet.band/static/_img/c3/81ab/IMG_8604_3e6860489b_640x360_q50.webp 1x, https://sockpuppet.band/static/_img/c3/81ab/IMG_8604_3e6860489b_1280x720_q50.webp 2x" loading="lazy" class="u-photo" alt="IMG_8604.jpeg" title="So many CDs"></a><a href="https://sockpuppet.band/blog/2010-Review-Kunaki-CDs"><img src="https://sockpuppet.band/static/_img/a8/55ec/IMG_8605_7c1897f830_640x360_q50.webp" width="640" height="360" srcset="https://sockpuppet.band/static/_img/a8/55ec/IMG_8605_7c1897f830_640x360_q50.webp 1x, https://sockpuppet.band/static/_img/a8/55ec/IMG_8605_7c1897f830_1280x720_q50.webp 2x" loading="lazy" class="u-photo" alt="IMG_8605.jpeg" title="Spread out they seem even more numerous"></a><a href="https://sockpuppet.band/blog/2010-Review-Kunaki-CDs"><img src="https://sockpuppet.band/static/_img/c3/e5a9/IMG_8626_b06014b8eb_640x360_q50.webp" width="640" height="360" srcset="https://sockpuppet.band/static/_img/c3/e5a9/IMG_8626_b06014b8eb_640x360_q50.webp 1x, https://sockpuppet.band/static/_img/c3/e5a9/IMG_8626_b06014b8eb_1280x720_q50.webp 2x" loading="lazy" class="u-photo" alt="IMG_8626.jpeg" title="No Tyler you're not gonna fit in there"></a></figure>
<p>Every single CD came shrinkwrapped and felt very professionally-assembled. The print quality is also quite good, much better than from the other short-run manufacturers I&rsquo;ve used. The downside is that they only support two-panel inserts, so for some of my legacy releases I had to scale back the artwork; this was particularly sad for Refactor and Love and Monsters, both of which I had a full spread set up, and on this rerelease I had to pare it back considerably.</p>
<figure class="images"><a href="https://sockpuppet.band/blog/2010-Review-Kunaki-CDs"><img src="https://sockpuppet.band/static/_img/d9/eebf/IMG_8637_dfb81c71dc_640x360_q50.webp" width="640" height="360" srcset="https://sockpuppet.band/static/_img/d9/eebf/IMG_8637_dfb81c71dc_640x360_q50.webp 1x, https://sockpuppet.band/static/_img/d9/eebf/IMG_8637_dfb81c71dc_1280x720_q50.webp 2x" loading="lazy" class="u-photo" alt="IMG_8637.jpeg" title="Scaled-back artwork on Love and Monsters"></a><a href="https://sockpuppet.band/blog/2010-Review-Kunaki-CDs"><img src="https://sockpuppet.band/static/_img/13/247a/IMG_8645_482778abb4_640x360_q50.webp" width="640" height="360" srcset="https://sockpuppet.band/static/_img/13/247a/IMG_8645_482778abb4_640x360_q50.webp 1x, https://sockpuppet.band/static/_img/13/247a/IMG_8645_482778abb4_1280x720_q50.webp 2x" loading="lazy" class="u-photo" alt="IMG_8645.jpeg" title="Scaled-back Refactor"></a></figure>
<p>But the color quality is great and it turned out exactly as I&rsquo;d expected. (It looks much better in person than what this picture from my unsteady phone camera would indicate.)</p>
<figure class="images"><a href="https://sockpuppet.band/blog/2010-Review-Kunaki-CDs"><img src="https://sockpuppet.band/static/_img/37/371a/IMG_8616_2e28c64758_620x640_q50.webp" width="620" height="640" srcset="https://sockpuppet.band/static/_img/37/371a/IMG_8616_2e28c64758_620x640_q50.webp 1x, https://sockpuppet.band/static/_img/37/371a/IMG_8616_2e28c64758_1240x1280_q50.webp 2x" loading="lazy" class="u-photo" alt="IMG_8616.jpeg" title="Cover art detail on Instrumental"></a></figure>
<p>Also, because of the minimal insert capabilities, on some of the releases where I didn&rsquo;t have better ideas of what to put inside, I opted to squeeze all of the lyrics onto a single panel. While you&rsquo;ll probably need a magnifying glass to read it, it&rsquo;s still perfectly sharp and readable.</p><p>The only complaint I have is that the layout teplates Kunaki provided were very minimal and it was difficult to get an idea of where the bleed/crop/trim/bend marks would be, and they don&rsquo;t seem to be symmetrical. As a result, the spines are a bit inconsistent and not quite up to professional standards:</p>
<figure class="images"><a href="https://sockpuppet.band/blog/2010-Review-Kunaki-CDs"><img src="https://sockpuppet.band/static/_img/0a/ac0a/IMG_8607_db3a68b446_640x360_q50.webp" width="640" height="360" srcset="https://sockpuppet.band/static/_img/0a/ac0a/IMG_8607_db3a68b446_640x360_q50.webp 1x, https://sockpuppet.band/static/_img/0a/ac0a/IMG_8607_db3a68b446_1280x720_q50.webp 2x" loading="lazy" class="u-photo" alt="IMG_8607.jpeg" title="Poorly cropped spine"></a><a href="https://sockpuppet.band/blog/2010-Review-Kunaki-CDs"><img src="https://sockpuppet.band/static/_img/93/a8a8/IMG_8608_cb8872d091_640x360_q50.webp" width="640" height="360" srcset="https://sockpuppet.band/static/_img/93/a8a8/IMG_8608_cb8872d091_640x360_q50.webp 1x, https://sockpuppet.band/static/_img/93/a8a8/IMG_8608_cb8872d091_1280x720_q50.webp 2x" loading="lazy" class="u-photo" alt="IMG_8608.jpeg" title="But at least it's consistent"></a></figure>
<p>But it&rsquo;s Good Enough for now and it&rsquo;s only the back-facing spine that seems to be affected. I&rsquo;ll definitely be tweaking my layout templates going forward, though.</p><p>Anyway, the other thing I was concerned about was the print quality for the CD labels themselves, and I&rsquo;m happy to say that they look <em>fantastic</em>.</p>
<figure class="images"><a href="https://sockpuppet.band/blog/2010-Review-Kunaki-CDs"><img src="https://sockpuppet.band/static/_img/4a/96df/IMG_8642_db9613a013_640x360_q50.webp" width="640" height="360" srcset="https://sockpuppet.band/static/_img/4a/96df/IMG_8642_db9613a013_640x360_q50.webp 1x, https://sockpuppet.band/static/_img/4a/96df/IMG_8642_db9613a013_1280x720_q50.webp 2x" loading="lazy" class="u-photo" alt="IMG_8642.jpeg" title="Radio Ready"></a><a href="https://sockpuppet.band/blog/2010-Review-Kunaki-CDs"><img src="https://sockpuppet.band/static/_img/79/8a59/IMG_8621_dee8438854_640x586_q50.webp" width="640" height="586" srcset="https://sockpuppet.band/static/_img/79/8a59/IMG_8621_dee8438854_640x586_q50.webp 1x, https://sockpuppet.band/static/_img/79/8a59/IMG_8621_dee8438854_1280x1173_q50.webp 2x" loading="lazy" class="u-photo" alt="IMG_8621.jpeg" title="Novembeat 2020"></a><a href="https://sockpuppet.band/blog/2010-Review-Kunaki-CDs"><img src="https://sockpuppet.band/static/_img/2a/4231/IMG_8615_2b9bd9dd63_640x611_q50.webp" width="640" height="611" srcset="https://sockpuppet.band/static/_img/2a/4231/IMG_8615_2b9bd9dd63_640x611_q50.webp 1x, https://sockpuppet.band/static/_img/2a/4231/IMG_8615_2b9bd9dd63_1280x1222_q50.webp 2x" loading="lazy" class="u-photo" alt="IMG_8615.jpeg" title="Transitions"></a></figure>
<p>As far as the actual CD replication goes, I was impressed to see that even though they&rsquo;re burned CDs, they look just like a pressed CD to me. And of course, the CDs play just fine in both my Playstation 2 and on my Windows computer with its external optical drive.</p>
<figure class="images"><a href="https://sockpuppet.band/blog/2010-Review-Kunaki-CDs"><img src="https://sockpuppet.band/static/_img/82/9c80/IMG_8612_2fd9116df4_640x360_q50.webp" width="640" height="360" srcset="https://sockpuppet.band/static/_img/82/9c80/IMG_8612_2fd9116df4_640x360_q50.webp 1x, https://sockpuppet.band/static/_img/82/9c80/IMG_8612_2fd9116df4_1280x720_q50.webp 2x" loading="lazy" class="u-photo" alt="IMG_8612.jpeg" title="im-press-ive"></a><a href="https://sockpuppet.band/blog/2010-Review-Kunaki-CDs"><img src="https://sockpuppet.band/static/_img/75/9ab7/IMG_8613_e11de75009_640x360_q50.webp" width="640" height="360" srcset="https://sockpuppet.band/static/_img/75/9ab7/IMG_8613_e11de75009_640x360_q50.webp 1x, https://sockpuppet.band/static/_img/75/9ab7/IMG_8613_e11de75009_1280x720_q50.webp 2x" loading="lazy" class="u-photo" alt="IMG_8613.jpeg" title="My Japanese PS2 is the only thing approaching a “CD player” I have hooked up right now"></a><a href="https://sockpuppet.band/blog/2010-Review-Kunaki-CDs"><img src="https://sockpuppet.band/static/_img/16/106e/IMG_8622_f49657ed16_640x360_q50.webp" width="640" height="360" srcset="https://sockpuppet.band/static/_img/16/106e/IMG_8622_f49657ed16_640x360_q50.webp 1x, https://sockpuppet.band/static/_img/16/106e/IMG_8622_f49657ed16_1280x720_q50.webp 2x" loading="lazy" class="u-photo" alt="IMG_8622.jpeg" title="I have no idea where Windows Media Player was getting the artwork from, but cool that it worked"></a></figure>
<p>And, thanks to the gapless mastering from <a href="https://fluffy.itch.io/bandcrash">Bandcrash</a>, the tracks all flow exactly as they&rsquo;re intended to, with no extra gaps. The albums that I uploaded using Kunaki&rsquo;s per-track uploader do have two-second gaps between them, unfortunately, but going forward I&rsquo;m always going to use Bandcrash for my CD authoring, because it Just Works and is <a href="https://sockpuppet.band/blog/3367-Bandcrash-Not-just-for-self-publishing">a hell of a lot easier to deal with</a> anyway.</p><p>So, anyway, yeah. Kunaki&rsquo;s output is great and while I wish they had a four-panel insert option and slightly more flexibility in their authoring process (like supporting CD-Text and such), their output is professional and I absolutely recommend the service to anyone who&rsquo;s interested in short-run CD manufacturing and drop-shipping.</p>
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=manufacturing">#Manufacturing</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=kunaki">#Kunaki</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="Manufacturing" label="manufacturing" />
        
        <category term="Kunaki" label="kunaki" />
        

        

    </entry>
    <entry>
        
        <title>Bandcrash: Not just for self-publishing</title>
        <link href="https://sockpuppet.band/blog/3367-Bandcrash-Not-just-for-self-publishing" rel="alternate" type="text/html" />
        <published>2025-10-13T19:16:17-07:00</published>
        <updated>2025-10-13T19:16:17-07:00</updated>
        <id>urn:uuid:95d400b6-90c8-536c-a662-ae3c375fc167</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p> </p><p>If you&rsquo;ve poked around this website you probably know that I wrote and use <a href="https://fluffy.itch.io/bandcrash">Bandcrash</a> to build the embedded players for the music previews. You might also be aware of it as the tool that I use to publish my albums to <a href="https://sockpuppet.band/itch">my itch.io page</a> as an alternative to Bandcamp. But I also use it as a tool for a bunch of other things in my music &mdash; including part of how I publish things to Bandcamp and other storefronts.</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        
<figure class="images"><a href="https://fluffy.itch.io/bandcrash"><img src="https://sockpuppet.band/static/_img/c4/f936/bandcrash_41e17d7b58_240x240_q50.webp" width="240" height="240" srcset="https://sockpuppet.band/static/_img/c4/f936/bandcrash_41e17d7b58_240x240_q50.webp 1x, https://sockpuppet.band/static/_img/c4/f936/bandcrash_41e17d7b58_q50.webp 2x" loading="lazy" class="u-photo" style="shape-outside: url('https://sockpuppet.band/static/_img/c4/f936/bandcrash_41e17d7b58_240x240.png')" alt="Bandcrash logo"></a></figure>
<p>If you&rsquo;ve poked around this website you probably know that I wrote and use <a href="https://fluffy.itch.io/bandcrash">Bandcrash</a> to build the embedded players for the music previews. You might also be aware of it as the tool that I use to publish my albums to <a href="https://sockpuppet.band/itch">my itch.io page</a> as an alternative to Bandcamp. But I also use it as a tool for a bunch of other things in my music &mdash; including part of how I publish things to Bandcamp and other storefronts.</p><p>Here&rsquo;s some ways in which I use it.</p>

        
            <h3 id="3367_h3_1_Improving-my-production-workflow">Improving my production workflow<a href="https://sockpuppet.band/blog/3367-Bandcrash-Not-just-for-self-publishing#3367_h3_1_Improving-my-production-workflow" class="toc_link"></a></h3><p>By maintaining my albums in Bandcrash as I work on them, it gives me a nice local player that lets me preview how the music is going to sound in context, since it can help me maintain my track ordering without having to do a lengthy/slow upload process or deal with playlists and libraries in VLC or iTunes or the like. It also gives me a place to edit and preview the liner notes and lyrics sheets.</p><p>Also, it&rsquo;s easy for me to upload the previewer to a website and have other people do test listens.</p><h3 id="3367_h3_2_Improving-distribution-to-other">Improving distribution to other platforms<a href="https://sockpuppet.band/blog/3367-Bandcrash-Not-just-for-self-publishing#3367_h3_2_Improving-distribution-to-other" class="toc_link"></a></h3><p>When it&rsquo;s time to upload to the various services, it acts as a force-multiplier in a few ways:</p>
<ul>
<li>I can encode the whole album as FLAC and then easily drag-and-drop the files to the <a href="https://sockpuppet.band/mirlo">mirlo</a> uploader, which then parses all of the tags and gives me the correct track ordering, genre tags, and lyrics</li>
<li>I already have edited plaintext lyrics and liner notes that I can easily copy-paste into the Bandcamp editor</li>
<li>The FLAC version is also much faster to upload to Bandcamp than the WAV version, and since I already have my track order set, I don&rsquo;t need to think about things a whole bunch</li>
<li>The <a href="https://itch.io/docs/butler/">butler</a> integration with itch.io automatically uploads all versions there with no real effort on my part</li>
<li>The pre-built .zip files are super easy to sell or distribute on other platforms, such as <a href="https://sockpuppet.band/patreon">Patreon</a>, <a href="https://sockpuppet.band/ko-fi">Ko-Fi</a>, and Gumroad</li>
</ul>
<h3 id="3367_h3_3_Authoring-and-uploading-CDs-for">Authoring and uploading CDs for manufacturing<a href="https://sockpuppet.band/blog/3367-Bandcrash-Not-just-for-self-publishing#3367_h3_3_Authoring-and-uploading-CDs-for" class="toc_link"></a></h3><p><a href="https://kunaki.com/">Kunaki</a>&rsquo;s standard album uploader is a pain to work with and results in albums with forced 2-second gaps between songs. With the <a href="https://bandcrash.readthedocs.io/en/latest/cd-authoring.html">brand-new CD authoring flow</a> that I released yesterday, it is now much, much easier to publish an album to Kunaki, as now there are only two files to upload (the .bin and the .cue), and everything turns out exactly as it does when played in the local player with gapless transitions.</p><p>Also, external authoring tools are the only way to support more than 25 tracks on a single album with Kunaki, and I couldn&rsquo;t find anything else that works nearly as well for this, which is why I added this functionality to Bandcrash to begin with.</p><p>Any service that can take .bin and .cue files would be able to use this, and even if you just want to burn a bunch of CDs on your own, you can use these files with <a href="https://cdrdao.sourceforge.net/">cdrdao</a> or <a href="https://www.imgburn.com/">ImgBurn</a> or any number of other tools that take bin/cue files, and not have to worry about setting up a bunch of stuff.</p><p>And, as a bonus, you&rsquo;ll get <a href="https://en.wikipedia.org/wiki/CD-Text">CD-Text</a><sup id="r_e3367_fn1"><a href="https://sockpuppet.band/blog/3367-Bandcrash-Not-just-for-self-publishing#d_e3367_fn1" rel="footnote">1</a></sup>, so your titles and genres and such will Just Work™ on fancier CD players and peoples&#39; computers.</p><h3 id="3367_h3_4_Game-OST-workflow">Game OST workflow<a href="https://sockpuppet.band/blog/3367-Bandcrash-Not-just-for-self-publishing#3367_h3_4_Game-OST-workflow" class="toc_link"></a></h3><p>I compose <a href="https://sockpuppet.band/releases/?tag=collection:OST">music for games</a> and this usually means producing both BGM (looping backgroud music) and OST (downloadable soundtrack) versions of things. While I work on the soundtrack for a game, I maintain separate Bandcrash projects for each of these, and then I use Bandcrash to encode the looping versions into .ogg format so that I can share them with the game designers easily.</p><p>In <a href="https://sockpuppet.band/album/novembeat-2022">some rare cases</a> I also use Bandcrash&rsquo;s &ldquo;itch channel prefix&rdquo; functionality to simultaneously upload both versions to <a href="https://fluffy.itch.io/novembeat-2022">the itch page</a>, so that both versions are separately available.</p><h3 id="3367_h3_5_ADVANCED-Maintaining-this-websit">[ADVANCED] Maintaining this website<a href="https://sockpuppet.band/blog/3367-Bandcrash-Not-just-for-self-publishing#3367_h3_5_ADVANCED-Maintaining-this-websit" class="toc_link"></a></h3><p>This website runs <a href="https://publ.beesbuzz.biz/">Publ</a>, a blogging platform I designed a while back. When I do a release, I run a few scripts to populate the information onto this website:</p>
<ol>
<li>A script that converts Bandcamp&rsquo;s JSON-LD data to Publ pages for the album, tracks, and lyrics (so that my URL structure matches the Bandcamp structure and uses the same slug generation), using Bandcamp&rsquo;s embedded player</li>
<li>Another script that runs Bandcrash on the album, uploads the preview player to my CDN, and then switches my own embedded players over to the Bandcrash player</li>
</ol>
<p>Also, for the spots where my liner notes had more advanced Markdown in them than what Bandcamp can display, I can also copy-paste the Markdown from my Bandcrash liner notes, and this would be super easy to automate as well.</p><p>These scripts are super specific to my own setup, somewhat janky, and probably wouldn&rsquo;t be super useful for others, but at some point I&rsquo;ll probably opensource them along with the Publ templates for this website, because it&rsquo;s nice to provide people with more options for how to maintain their online presence. Even if it can be a bit technical.</p><h3 id="3367_h3_6_In-conclusion">In conclusion<a href="https://sockpuppet.band/blog/3367-Bandcrash-Not-just-for-self-publishing#3367_h3_6_In-conclusion" class="toc_link"></a></h3><p>Bandcrash is a pretty useful tool, and since its file format is just JSON files you can probably come up with some even more interesting use cases for it as a data editor.</p><p>It&rsquo;s also pretty rough and could use a lot of improving; fortunately, it&rsquo;s <a href="https://github.com/fluffy-critter/bandcrash">open source</a>, as is its <a href="https://github.com/fluffy-critter/camptown">player component</a>, and of course I welcome contributions, in both the &ldquo;code and issues&rdquo; sense as well as the financial sense.</p><p>Anyway, if you&rsquo;re someone who makes music and publishes it online or on CD, check it out. Maybe you&rsquo;ll find it useful too!</p>
            
                <hr/><ol><li id="d_e3367_fn1"><p>Depending on the manufacturer. Unfortunately, <a href="https://github.com/fluffy-critter/bandcrash/issues/129">Kunaki does not have any way to support this</a>.&nbsp;<a href="/blog/3367-Bandcrash-Not-just-for-self-publishing#r_e3367_fn1" rev="footnote">↩</a></p></li></ol>
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=bandcrash">#Bandcrash</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=software">#Software</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=tools">#Tools</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="Bandcrash" label="bandcrash" />
        
        <category term="Software" label="software" />
        
        <category term="Tools" label="tools" />
        

        

    </entry>
    <entry>
        
        <title>CD upgrades on the honor system</title>
        <link href="https://sockpuppet.band/cd" rel="alternate" type="text/html" />
        <published>2025-10-13T13:12:11-07:00</published>
        <updated>2025-10-13T13:12:11-07:00</updated>
        <id>urn:uuid:2ab29eaa-636a-5e18-8d49-c5afb806dc89</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p>I&rsquo;ve finally gone and set up on-demand CD manufacturing for <a href="https://sockpuppet.band/releases/?tag=collection:CD">a bunch of my albums</a>. However, because of how CD sales work on both Bandcamp and Mirlo, I can&rsquo;t easily offer a discount to folks who have already bought the album digitally, and also the shipping rates I have to charge through those sites are not optimal, especially for international customers or people buying multiple albums at a time.</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        <p>I&rsquo;ve finally gone and set up on-demand CD manufacturing for <a href="https://sockpuppet.band/releases/?tag=collection:CD">a bunch of my albums</a>. However, because of how CD sales work on both Bandcamp and Mirlo, I can&rsquo;t easily offer a discount to folks who have already bought the album digitally, and also the shipping rates I have to charge through those sites are not optimal, especially for international customers or people buying multiple albums at a time.</p><p>So, for now I&rsquo;ve come to a compromise: if you want to buy <em>just</em> the CD of any of my albums, you can do so <a href="https://kunaki.com/msales.asp?PublisherId=222029&amp;pp=1">directly through Kunaki</a>. Note that these versions do not come with downloads, and more importantly, since I&rsquo;m only charging minimal markup over my own costs, I ask that you only buy the CDs there if you&rsquo;ve already bought the album digitally (including via one of my discography bundles).</p><p>Using that link will give you the best shipping rates (especially if you buy multiple albums at a time or are outside the USA) and is also a lot less hassle for me, so it&rsquo;s a win-win.</p><p>On that note, if you want to buy a CD for an album you don&rsquo;t own just yet, it&rsquo;s actually a bit easier and cheaper for everyone if you buy the album digitally and then use my Kunaki store to get the CD. Or, you could buy just the CD and rip it yourself like it&rsquo;s 2003, and then send me a few bucks some other way to make up the difference.</p><p>Anyway, now you have choices for obtaining more collectible forms of my music without it being super expensive.</p><p>Thanks for listening!</p>

        
            
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=music">#Music</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=manufacturing">#Manufacturing</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=kunaki">#Kunaki</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="Music" label="music" />
        
        <category term="Manufacturing" label="manufacturing" />
        
        <category term="Kunaki" label="kunaki" />
        

        

    </entry>
    <entry>
        
        <title>CD updates</title>
        <link href="https://sockpuppet.band/blog/998-CD-updates" rel="alternate" type="text/html" />
        <published>2025-10-10T17:29:58-07:00</published>
        <updated>2025-10-10T17:29:58-07:00</updated>
        <id>urn:uuid:39ff6a46-2af6-53ba-b727-ba1f0ba8e28c</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p>I now have 9 of my albums <a href="https://sockpuppet.band/releases/?tag=collection:CD">available on CD</a>, and I&rsquo;m working on adding all the others which folks have voted for <a href="https://sockpuppet.band/blog/938-Finally-setting-up-CDs">in the poll</a>.</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        <p>I now have 9 of my albums <a href="https://sockpuppet.band/releases/?tag=collection:CD">available on CD</a>, and I&rsquo;m working on adding all the others which folks have voted for <a href="https://sockpuppet.band/blog/938-Finally-setting-up-CDs">in the poll</a>.</p><p>I definitely want to put <a href="https://sockpuppet.band/album/novembeat-2020">Novembeat 2020</a> on CD but unfortunately that will require some extra process, as it has 29 tracks and Kunaki&rsquo;s online tool only supports up to 25. There&rsquo;s a workaround for that but unfortunately it will take some time to figure out how to actually do it suitably.</p>

        
            <p>On that note: If anyone knows of any good DAO authoring tools, ideally which run on a Mac, please <a href="mailto:fluffy-cddao%40sockpuppet%2eband">let me know</a>! In the meantime, Kunaki does have a somewhat roundabout approach which involves me burning a CD-R and then ripping it back with their own software, but that&rsquo;s&hellip; fraught, and I&rsquo;m not sure I even have any viable CD-Rs anymore. (I somehow doubt the big cheap spindle I bought on clearance from CompUSA is still any good&hellip;)</p><p><mark>Update:</mark> I ended up just doing it myself, and this functionality is now part of <a href="https://fluffy.itch.io/bandcrash">Bandcrash</a>. Also my big cheap spindle was still good!</p><p>But anyway, there haven&rsquo;t been a lot of responses on the poll and I&rsquo;m holding out optimism for the idea that it&rsquo;s just because people haven&rsquo;t made up their mind yet and not that nobody wants to buy anything.</p>
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=manufacturing">#Manufacturing</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=distribution">#Distribution</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="Manufacturing" label="manufacturing" />
        
        <category term="Distribution" label="distribution" />
        

        

    </entry>
    <entry>
        
        <title>Finally setting up CDs</title>
        <link href="https://sockpuppet.band/blog/938-Finally-setting-up-CDs" rel="alternate" type="text/html" />
        <published>2025-10-03T22:51:29-07:00</published>
        <updated>2025-10-03T22:51:29-07:00</updated>
        <id>urn:uuid:612f273f-ba37-5e9b-bc0e-459695213be5</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p>I&rsquo;m finally getting around to putting more of my albums on CD, thanks to the on-demand manufacturing capability afforded by <a href="https://kunaki.com/">Kunaki</a>. You can see which albums of mine are available via <a href="https://sockpuppet.band/releases/?tag=collection:CD">this collection</a>, and on each of them you can buy the album via <a href="https://sockpuppet.bandcamp.com/merch">Bandcamp</a>, <a href="https://mirlo.space/sockpuppet/merch">Mirlo</a>, or direct from Kunaki.</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        <p>I&rsquo;m finally getting around to putting more of my albums on CD, thanks to the on-demand manufacturing capability afforded by <a href="https://kunaki.com/">Kunaki</a>. You can see which albums of mine are available via <a href="https://sockpuppet.band/releases/?tag=collection:CD">this collection</a>, and on each of them you can buy the album via <a href="https://sockpuppet.bandcamp.com/merch">Bandcamp</a>, <a href="https://mirlo.space/sockpuppet/merch">Mirlo</a>, or direct from Kunaki.</p><p>If you buy from Bandcamp or Mirlo the album will also come with the digital download in your choice of formats.</p><p>Anyway, inside you can vote on which additional albums I should focus on making available!</p>

        
            <p>I&rsquo;ve only listed the ones that I&rsquo;m particularly interested in setting up, but if there&rsquo;s one I haven&rsquo;t listed that you want, feel free to write it in.</p>
<div class="strawpoll-embed" id="strawpoll_e6Z2A3x0JgN" style="height: 1028px; max-width: 640px; width: 100%; margin: 0 auto; display: flex; flex-direction: column;"><iframe title="StrawPoll Embed" id="strawpoll_iframe_e6Z2A3x0JgN" src="https://strawpoll.com/embed/e6Z2A3x0JgN" style="position: static; visibility: visible; display: block; width: 100%; flex-grow: 1;" frameborder="0" allowfullscreen allowtransparency>Loading&hellip;</iframe><script async src="https://cdn.strawpoll.com/dist/widgets.js" charset="utf-8"></script></div>
<p>Also at some point I will get around to doing CD setup for <a href="https://elasticstage.com/sockpuppet/">elasticStage</a> for folks in Europe, but their setup process is quite a bit more involved so it hasn&rsquo;t been a priority. It&rsquo;ll come eventually, though!</p>
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=manufacturing">#Manufacturing</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=merch">#Merch</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=distribution">#Distribution</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=business">#Business</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=elasticStage">#elasticStage</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="Manufacturing" label="manufacturing" />
        
        <category term="Merch" label="merch" />
        
        <category term="Distribution" label="distribution" />
        
        <category term="Business" label="business" />
        
        <category term="elasticStage" label="elasticStage" />
        

        

    </entry>
    <entry>
        
        <title>Where&#39;d your music go?!</title>
        <link href="https://sockpuppet.band/blog/2156-Where-d-your-music-go" rel="alternate" type="text/html" />
        <published>2025-10-02T18:48:22-07:00</published>
        <updated>2025-10-02T18:48:22-07:00</updated>
        <id>urn:uuid:c47916bc-18db-5fe2-bef6-4fe2391a1de3</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p>Today I removed all my music, except <a href="https://sockpuppet.band/track/the-war-machine">The War Machine</a>, from Spotify, for the reasons explained in that song (and also <a href="https://sockpuppet.band/blog/121-On-Spotify-and-listening-to-and-collecting-music">in this lengthy diatribe</a>)​.</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        <p>Today I removed all my music, except <a href="https://sockpuppet.band/track/the-war-machine">The War Machine</a>, from Spotify, for the reasons explained in that song (and also <a href="https://sockpuppet.band/blog/121-On-Spotify-and-listening-to-and-collecting-music">in this lengthy diatribe</a>)<sup id="r_e2156_fn1"><a href="https://sockpuppet.band/blog/2156-Where-d-your-music-go#d_e2156_fn1" rel="footnote">1</a></sup>.</p><p>But doing so also required, for very annoying reasons, removing it from all other streaming platforms as well, because the distributor I was working with, TooLost, had no option for removing music from <em>just</em> one platform without deleting and re-uploading everything<sup id="r_e2156_fn2"><a href="https://sockpuppet.band/blog/2156-Where-d-your-music-go#d_e2156_fn2" rel="footnote">2</a></sup>.</p><p>So, when is my music going to get back onto the other streaming platforms? <a href="https://sockpuppet.band/blog/2388-Please-do-not-ask-me-about-streaming-distribution">Ehhh</a>.</p>

        
            <h3 id="2156_h3_1_Why-we-re-at-this-point">Why we&rsquo;re at this point<a href="https://sockpuppet.band/blog/2156-Where-d-your-music-go#2156_h3_1_Why-we-re-at-this-point" class="toc_link"></a></h3><p>The state of affairs for independent music distribution is a horror show. Every distributor I&rsquo;ve used has been a nightmare to work with in some way, and has ended up costing me far more in my dealings with them than I&rsquo;ve ever made back. I&rsquo;ve made probably around $100<sup id="r_e2156_fn3"><a href="https://sockpuppet.band/blog/2156-Where-d-your-music-go#d_e2156_fn3" rel="footnote">3</a></sup> in total over the past 20 years from streaming. It has cost me a <em>lot</em> more than $100 to make my music available on streaming<sup id="r_e2156_fn4"><a href="https://sockpuppet.band/blog/2156-Where-d-your-music-go#d_e2156_fn4" rel="footnote">4</a></sup>.</p><p>Meanwhile, the &ldquo;best&rdquo; month I&rsquo;ve ever had on streaming was the month after <a href="https://sockpuppet.band/blog/3123-Furality-is-gonna-be-amazing">Furality Somna</a>, where I got a brief surge of interest on Spotify, but not enough of one to actually get any of the sustainable characteristics that one would expect. The people who listened to my stuff didn&rsquo;t <em>keep</em> listening to it, my work never ended up in any recommendation feeds or popular playlists, and even with the amount of direct interest I got, I only ended up making around $7, which isn&rsquo;t even enough to receive a payment from my distributor. And it only pays for about two months of distribution fees anyway.</p><p>I&rsquo;ve also written extensively about <a href="https://sockpuppet.band/blog/121-On-Spotify-and-listening-to-and-collecting-music">the problems with streaming platforms and Spotify in particular</a>, and that&rsquo;s not an industry I really want to support right now. In addition to Spotify&rsquo;s issues, I&rsquo;ve also learned of reasons to distrust Apple Music and Tidal, for example their <a href="https://tidal.com/partners/pioneerdj">partnerships</a> with <a href="https://rekordbox.com/en/2025/03/apple-music-support/">Rekordbox</a> which makes it so that DJs can stream artists&#39; music into their mixes without materially supporting said artists beyond &ldquo;exposure.&rdquo;</p><p>I&rsquo;ve also had great difficulty with getting my music onto streaming platforms to begin with these days. In addition to costing considerably more to get distribution than I can ever expect to receive in return, every distributor has succumbed to the problems with a glut of AI submissions, where they have lost all trust in musicians who haven&rsquo;t already made it big, and provide Kafka-esque hoops to jump through to prove that my music was made by me. This isn&rsquo;t <em>entirely</em> the fault of the distributors, but it <em>is</em> a symptom of a deeply broken industry.</p><p>I have also applied to many record labels but they only want to sign up-and-coming musicians, not ones with a deep catalog of what they see as unsuccessful releases, or they want people with a much larger social media presence and a fanbase which would be large enough for me to not need a label to begin with. I am not a social media darling (nor do I want to be), and I just plain don&rsquo;t have it in me to try to get what they want of me.</p><p>So I&rsquo;m focusing on what I have control over.</p><h3 id="2156_h3_2_Where-we-are-right-now">Where we are right now<a href="https://sockpuppet.band/blog/2156-Where-d-your-music-go#2156_h3_2_Where-we-are-right-now" class="toc_link"></a></h3><p>At the moment, my plan is to do the following:</p>
<ul>
<li>Continue to focus on <a href="https://sockpuppet.band/bandcamp">Bandcamp</a>, <a href="https://sockpuppet.band/mirlo">Mirlo</a>, <a href="https://sockpuppet.band/itch">itch.io</a>, and the other storefronts that value creators <em>and</em> listeners, and evangelizing a return to people <a href="https://sockpuppet.band/blog/121-On-Spotify-and-listening-to-and-collecting-music#own-your-collection">owning their own collections</a></li>
<li>Switch to fully-self-managing the releases on my <a href="https://sockpuppet.band/youtube">YouTube</a> and <a href="https://sockpuppet.band/peertube">Peertube</a> channels, and hopefully at least keep my stuff available through YouTube Music in that way</li>
<li>Focus on building my audience through <a href="https://sockpuppet.band/live">live performances</a> and <a href="https://sockpuppet.band/commissions">commissions</a></li>
<li>Continue to work towards a <a href="https://beesbuzz.biz/blog/11155-A-fair-independent-streaming-platform">fair streaming future</a> and other grassroots efforts like <a href="https://kvrradio.com/">KVRR</a> and <a href="https://theindiebeat.fm/">TheIndieBeat</a></li>
</ul>
<h3 id="2156_h3_3_This-isn-t-permanent">This isn&rsquo;t permanent<a href="https://sockpuppet.band/blog/2156-Where-d-your-music-go#2156_h3_3_This-isn-t-permanent" class="toc_link"></a></h3><p>If someone can point me to a fair, ethically-managed distributor that <em>supports</em> independent musicians (rather than using the promise of winning the lottery to keep us constantly buying tickets), I would certainly consider reuploading my catalog somewhere.</p><p>What do I think counts as ethical in this case?</p>
<ul>
<li>Charging an affordable, sustainable amount for the distribution and maintenance of the catalog (even if this means both an annual fee and a royalty cut)</li>
<li>Providing reasonable tools for bulk import/upload of releases (rather than everything being an accessibility nightmare)</li>
<li>Providing <em>actual support</em> to artists who need it, not copy-pasted brush-off responses</li>
<li>Timely distribution of royalty payments, with regular (e.g. annual) lump-sum payments irrespective of minimum thresholds</li>
<li>The ability to pick and choose which streaming platforms works go onto, and the ability to change this later (with takedowns and redistributions on a per-platform basis)</li>
<li>Actually investigating claims of playlist fraud instead of categorically taking down entire catalogs based on a mere suspicion from a platform (and in the meantime, at most only suspending the suspected works on the suspected platforms, <em>not</em> a full takedown from every service)</li>
</ul>
<p>None of these feel very likely to happen in the foreseeable future. But also, the entire streaming music industry needs to change for me to want to really participate in it, and I don&rsquo;t see <em>that</em> happening either. Too much about how the industry works is based around the demands of the major labels in order to keep the major-label content available, even though their requirements ultimately end up working against <em>their</em> interests as well!</p><p>Alternately, if any of the streaming platforms were to allow artists to directly upload and self-distribute to them while still earning royalties<sup id="r_e2156_fn5"><a href="https://sockpuppet.band/blog/2156-Where-d-your-music-go#d_e2156_fn5" rel="footnote">5</a></sup>, that would be peachy.</p><h3 id="2156_h3_4_One-size-does-not-fit-all">One size does not fit all<a href="https://sockpuppet.band/blog/2156-Where-d-your-music-go#2156_h3_4_One-size-does-not-fit-all" class="toc_link"></a></h3><p>I know many musicians for whom this path would not make any sense. Last night at an open mic I was talking about this with a friend, and he was very surprised to hear about my experiences with streaming vs. sales; he makes <em>substantial</em> amounts of money from streaming, and very little from Bandcamp (and what he pays to get his stuff on Bandcamp hasn&rsquo;t paid for his Bandcamp earnings).</p><p>A big part of that is that he primarily records and releases covers of popular music. As a result, he ends up getting his audience from people looking for popular songs, and this led to a level of sustainability that works in his favor. This is also why Bandcamp has been a money pit for him, because mechanical licenses for purchase are significantly more expensive than those for streaming.</p><p>But by the same token, what works for other musicians has not worked for me. Why should I keep playing the game when I have 20+ years of experience telling me that it just plain isn&rsquo;t worthwhile for me to do so?</p><p>Anyway. I do not need streaming in order to <a href="https://sockpuppet.band/blog/2700-On-success">feel successful</a>. So for now I&rsquo;m opting out.</p><p>Maybe in the future this will change. But dealing with the stresses and frustration of streaming is the least important thing to me right now with everything else going on in my life.</p>
            
                <hr/><ol><li id="d_e2156_fn1"><p>Yes, I realize Daniel Ek &ldquo;stepped down&rdquo; as CEO, but only by becoming the chairman of the board. He is now essentially the CEO&rsquo;s <em>boss</em>, and still the majority shareholder, so this doesn&rsquo;t actually change anything vis-a-vis my issues with Spotify.&nbsp;<a href="/blog/2156-Where-d-your-music-go#r_e2156_fn1" rev="footnote">↩</a></p></li><li id="d_e2156_fn2"><p>I also had to pay $3 to do it because TooLost was holding my catalog hostage, but that&rsquo;s just pocket change in the grand scheme of things.&nbsp;<a href="/blog/2156-Where-d-your-music-go#r_e2156_fn2" rev="footnote">↩</a></p></li><li id="d_e2156_fn3"><p>Or rather, I&rsquo;ve had numbers in a database totalling around that amount, but I can&rsquo;t even withdraw a bunch of it because it&rsquo;s all in little pieces that are below their respective distributors&#39; payout thresholds, where they will sit forever.&nbsp;<a href="/blog/2156-Where-d-your-music-go#r_e2156_fn3" rev="footnote">↩</a></p></li><li id="d_e2156_fn4"><p>It&rsquo;s hard to put an actual number on it, but I do know I&rsquo;ve spent at least this much:&nbsp;<a href="/blog/2156-Where-d-your-music-go#r_e2156_fn4" rev="footnote">↩</a></p>
<ul>
<li>$225 for two albums distributed via CDBaby in the early days</li>
<li>$125 for an album distributed via TuneCore in the early days</li>
<li>At least $275 for the years I subscribed to DistroKid and TooLost</li>
<li>A few hundred bucks on SoundCloud Pro</li>
<li>A lot of time and effort and energy spent dealing with all this nonsense, and that isn&rsquo;t free and has probably taken years off my life with the stress</li>
</ul>
</li><li id="d_e2156_fn5"><p><a href="https://support.tidal.com/hc/en-us/articles/26542012438673-TIDAL-Upload">Tidal Upload</a>, sadly, <a href="https://support.tidal.com/hc/en-us/articles/26542012438673-TIDAL-Upload#h_01JRD4Y1E3FNVRJETXP7D9DDPQ">does not count</a>:&nbsp;<a href="/blog/2156-Where-d-your-music-go#r_e2156_fn5" rev="footnote">↩</a></p>
<blockquote>
<p><strong>Does the music that I upload earn royalties on TIDAL?</strong></p><p>No, your uploaded files do not earn royalties.</p></blockquote>
</li></ol>
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=streaming">#Streaming</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=Spotify">#Spotify</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=business">#Business</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="Streaming" label="streaming" />
        
        <category term="Spotify" label="Spotify" />
        
        <category term="Business" label="business" />
        

        

    </entry>
    <entry>
        
        <title>Self-hosted streaming CDN</title>
        <link href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN" rel="alternate" type="text/html" />
        <published>2025-09-26T20:22:51-07:00</published>
        <updated>2025-09-26T20:22:51-07:00</updated>
        <id>urn:uuid:2a025873-f8cb-59b0-a816-98cf02912659</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p>Performers who do streaming-based performances on VRChat and other places have a few options for actually providing their stream. Once upon a time it was preetty common for people to use Twitch or YouTube Live, but those are now being locked down due to advertising considerations. So, many people currently use <a href="https://vrcdn.live/">VRCDN</a>, an inexpensive but limited hosted service that you have to pay monthly for. But for folks with a bit more technical acumen, there&rsquo;s another choice, <a href="https://owncast.online/">Owncast</a>, which is basically a self-hosted Twitch-like.</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        <p>Performers who do streaming-based performances on VRChat and other places have a few options for actually providing their stream. Once upon a time it was preetty common for people to use Twitch or YouTube Live, but those are now being locked down due to advertising considerations. So, many people currently use <a href="https://vrcdn.live/">VRCDN</a>, an inexpensive but limited hosted service that you have to pay monthly for. But for folks with a bit more technical acumen, there&rsquo;s another choice, <a href="https://owncast.online/">Owncast</a>, which is basically a self-hosted Twitch-like.</p><p>Here&rsquo;s how I have mine set up and how I run it for (basically<sup id="r_e2089_fn1"><a href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#d_e2089_fn1" rel="footnote">1</a></sup>) free.</p>

        
            <h3 id="2089_h3_1_Local-server-origin">Local server (origin)<a href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#2089_h3_1_Local-server-origin" class="toc_link"></a></h3><p>First off, I have an Intel NUC running Linux<sup id="r_e2089_fn2"><a href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#d_e2089_fn2" rel="footnote">2</a></sup> on my home network. This computer runs a bunch of my home services but mostly sits idle. Its CPU is a 2.7GHz i7-8559U, which is sufficient to transcode my stream to a number of bitrates and resolutions simultaneously. I currently have the following bitrates configured:</p>
<ul>
<li>Original/raw stream (as configured in OBS; usually 1080p60 @ 6000 Kbps)</li>
<li>1080p60 @ 4500 Kbps</li>
<li>720p30 @ 2000 Kbps</li>
<li>360p24 @ 1000 Kbps</li>
<li>180p24 @ 500 Kbps</li>
</ul>
<p>In theory I should also be able to configure it to use Intel Quick Sync for a bit lower CPU utilization, although I haven&rsquo;t gone through the rigmarole to make that happen, as it hasn&rsquo;t been necessary.</p><p>Anyway, Owncast is running on its own user account, creatively called <code>owncast</code>. To make the server automatically start up, I have the following systemd unit file:</p><figure class="blockcode"><figcaption>/home/owncast/.config/system/user/owncast.service</figcaption><pre class="highlight" data-language="systemd" data-line-numbers><span class="line" id="e2089cb1L1"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb1L1"></a><span class="line-content"><span class="k">[Unit]</span></span></span>
<span class="line" id="e2089cb1L2"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb1L2"></a><span class="line-content"><span class="na">Description</span><span class="o">=</span><span class="s">Owncast Service</span></span></span>
<span class="line" id="e2089cb1L3"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb1L3"></a><span class="line-content"></span></span>
<span class="line" id="e2089cb1L4"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb1L4"></a><span class="line-content"><span class="k">[Service]</span></span></span>
<span class="line" id="e2089cb1L5"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb1L5"></a><span class="line-content"><span class="na">WorkingDirectory</span><span class="o">=</span><span class="s">/home/owncast/owncast</span></span></span>
<span class="line" id="e2089cb1L6"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb1L6"></a><span class="line-content"><span class="na">ExecStart</span><span class="o">=</span><span class="s">/home/owncast/owncast/owncast</span></span></span>
<span class="line" id="e2089cb1L7"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb1L7"></a><span class="line-content"><span class="na">Restart</span><span class="o">=</span><span class="s">always</span></span></span>
<span class="line" id="e2089cb1L8"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb1L8"></a><span class="line-content"><span class="na">RestartSec</span><span class="o">=</span><span class="s">5</span></span></span>
<span class="line" id="e2089cb1L9"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb1L9"></a><span class="line-content"></span></span>
<span class="line" id="e2089cb1L10"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb1L10"></a><span class="line-content"><span class="k">[Install]</span></span></span>
<span class="line" id="e2089cb1L11"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb1L11"></a><span class="line-content"><span class="na">WantedBy</span><span class="o">=</span><span class="s">default.target</span></span></span>
</pre></figure><p>To make this run, I had to enable lingering for the account, with <code>sudo loginctl enable-linger owncast</code> from an administrative user, and <code>systemctl --user enable owncast.service</code> from the owncast account.</p><h3 id="2089_h3_2_Proxy-server">Proxy server<a href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#2089_h3_2_Proxy-server" class="toc_link"></a></h3><p>The next thing to do was to expose this server to the greater Internet. There&rsquo;s a few ways you can go about doing this. The most straightforward, if you have an ISP that allows it, is to set up your home router to forward a particular port to the Owncast instance. However, many ISPs do not allow you to run servers this way, and even though mine does, I wasn&rsquo;t super comfortable with the idea of exposing a network port to the wider Internet or with having my home IP address be part of any public Internet service.</p><p>However, I already have a VPS with <a href="https://linode.com/">Akamai Cloud</a> which I use to run all of my websites. So, I set up an ssh tunnel (specifically using <a href="https://www.harding.motd.ca/autossh/">autossh</a> to automatically restart the connection if it drops). To that end, I made a second systemd unit:</p><figure class="blockcode"><figcaption>/home/owncast/.config/systemd/user/owncast-tunnel.service</figcaption><pre class="highlight" data-language="systemd" data-line-numbers><span class="line" id="e2089cb2L1"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb2L1"></a><span class="line-content"><span class="k">[Unit]</span></span></span>
<span class="line" id="e2089cb2L2"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb2L2"></a><span class="line-content"><span class="na">Description</span><span class="o">=</span><span class="s">Owncast ssh tunnel</span></span></span>
<span class="line" id="e2089cb2L3"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb2L3"></a><span class="line-content"></span></span>
<span class="line" id="e2089cb2L4"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb2L4"></a><span class="line-content"><span class="k">[Service]</span></span></span>
<span class="line" id="e2089cb2L5"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb2L5"></a><span class="line-content"><span class="na">ExecStart</span><span class="o">=</span><span class="s">autossh -NT -R 29929:localhost:8080 MYSERVER.example.com</span></span></span>
<span class="line" id="e2089cb2L6"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb2L6"></a><span class="line-content"><span class="na">Restart</span><span class="o">=</span><span class="s">always</span></span></span>
<span class="line" id="e2089cb2L7"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb2L7"></a><span class="line-content"><span class="na">RestartSec</span><span class="o">=</span><span class="s">5</span></span></span>
<span class="line" id="e2089cb2L8"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb2L8"></a><span class="line-content"></span></span>
<span class="line" id="e2089cb2L9"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb2L9"></a><span class="line-content"><span class="k">[Install]</span></span></span>
<span class="line" id="e2089cb2L10"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb2L10"></a><span class="line-content"><span class="na">WantedBy</span><span class="o">=</span><span class="s">default.target</span></span></span>
</pre></figure><p>where <code>MYSERVER.example.com</code> is the actual hostname of my VPS. I enabled this service with <code>systemctl --user enable owncast-tunnel.service</code> and now localhost connections to 29929 on my VPS connect to port 8080 on my NUC. (No need for Tailscale!)</p><p>Finally, I set up a caching reverse proxy for <a href="https://live.sockpuppet.band">my owncast server</a>. This is how I did it in nginx:</p><figure class="blockcode"><figcaption>/etc/nginx/vhosts-enabled/live.sockpuppet.band</figcaption><pre class="highlight" data-language="nginx" data-line-numbers><span class="line" id="e2089cb3L1"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L1"></a><span class="line-content"><span class="k">server</span><span class="w"> </span><span class="p">{</span></span></span>
<span class="line" id="e2089cb3L2"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L2"></a><span class="line-content"><span class="w">    </span><span class="kn">listen</span><span class="w"> </span><span class="mi">80</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L3"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L3"></a><span class="line-content"><span class="w">    </span><span class="kn">listen</span><span class="w"> </span><span class="s">[::]:80</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L4"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L4"></a><span class="line-content"><span class="w">    </span><span class="kn">server_name</span><span class="w"> </span><span class="s">live.sockpuppet.band</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L5"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L5"></a><span class="line-content"><span class="w">    </span><span class="kn">return</span><span class="w"> </span><span class="mi">301</span><span class="w"> </span><span class="s">https://</span><span class="nv">$host$request_uri</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L6"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L6"></a><span class="line-content"><span class="p">}</span></span></span>
<span class="line" id="e2089cb3L7"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L7"></a><span class="line-content"></span></span>
<span class="line" id="e2089cb3L8"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L8"></a><span class="line-content"><span class="k">proxy_cache_path</span><span class="w"> </span><span class="s">/var/tmp/live_sockpuppet</span><span class="w"> </span><span class="s">levels=1:2</span><span class="w"> </span><span class="s">keys_zone=live_sockpuppet:10m</span><span class="w"> </span><span class="s">max_size=10g</span></span></span>
<span class="line" id="e2089cb3L9"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L9"></a><span class="line-content"><span class="w">                 </span><span class="s">inactive=60m</span><span class="w"> </span><span class="s">use_temp_path=off</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L10"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L10"></a><span class="line-content"></span></span>
<span class="line" id="e2089cb3L11"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L11"></a><span class="line-content"><span class="k">server</span><span class="w"> </span><span class="p">{</span></span></span>
<span class="line" id="e2089cb3L12"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L12"></a><span class="line-content"><span class="w">    </span><span class="kn">server_name</span><span class="w"> </span><span class="s">live.sockpuppet.band</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L13"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L13"></a><span class="line-content"><span class="w">    </span><span class="kn">listen</span><span class="w"> </span><span class="mi">443</span><span class="w"> </span><span class="s">ssl</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L14"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L14"></a><span class="line-content"><span class="w">    </span><span class="kn">ssl_certificate</span><span class="w"> </span><span class="s">/path/to/sockpuppet.band.crt</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L15"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L15"></a><span class="line-content"><span class="w">    </span><span class="kn">ssl_certificate_key</span><span class="w"> </span><span class="s">/path/to/sockpuppet.band.key</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L16"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L16"></a><span class="line-content"></span></span>
<span class="line" id="e2089cb3L17"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L17"></a><span class="line-content"><span class="w">    </span><span class="kn">location</span><span class="w"> </span><span class="s">/</span><span class="w"> </span><span class="p">{</span></span></span>
<span class="line" id="e2089cb3L18"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L18"></a><span class="line-content"><span class="w">        </span><span class="kn">proxy_set_header</span><span class="w"> </span><span class="s">Host</span><span class="w"> </span><span class="nv">$host</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L19"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L19"></a><span class="line-content"><span class="w">        </span><span class="kn">proxy_set_header</span><span class="w"> </span><span class="s">X-Forwarded-Host</span><span class="w"> </span><span class="nv">$host</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L20"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L20"></a><span class="line-content"><span class="w">        </span><span class="kn">proxy_set_header</span><span class="w"> </span><span class="s">X-Forwarded-Server</span><span class="w"> </span><span class="nv">$host</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L21"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L21"></a><span class="line-content"><span class="w">        </span><span class="kn">proxy_set_header</span><span class="w"> </span><span class="s">X-Forwarded-Proto</span><span class="w"> </span><span class="nv">$scheme</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L22"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L22"></a><span class="line-content"><span class="w">        </span><span class="kn">proxy_set_header</span><span class="w"> </span><span class="s">X-Real-IP</span><span class="w"> </span><span class="nv">$remote_addr</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L23"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L23"></a><span class="line-content"><span class="w">        </span><span class="kn">proxy_set_header</span><span class="w"> </span><span class="s">X-Forwarded-For</span><span class="w"> </span><span class="nv">$proxy_add_x_forwarded_for</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L24"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L24"></a><span class="line-content"><span class="w">        </span><span class="kn">proxy_http_version</span><span class="w"> </span><span class="mi">1</span><span class="s">.1</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L25"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L25"></a><span class="line-content"><span class="w">        </span><span class="kn">proxy_set_header</span><span class="w"> </span><span class="s">Upgrade</span><span class="w"> </span><span class="nv">$http_upgrade</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L26"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L26"></a><span class="line-content"><span class="w">        </span><span class="kn">proxy_set_header</span><span class="w"> </span><span class="s">Connection</span><span class="w"> </span><span class="nv">$connection_upgrade</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L27"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L27"></a><span class="line-content"><span class="w">        </span><span class="kn">proxy_pass</span><span class="w"> </span><span class="s">http://127.0.0.1:29929</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L28"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L28"></a><span class="line-content"><span class="w">        </span><span class="kn">proxy_cache</span><span class="w"> </span><span class="s">live_sockpuppet</span><span class="p">;</span></span></span>
<span class="line" id="e2089cb3L29"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L29"></a><span class="line-content"><span class="w">    </span><span class="p">}</span></span></span>
<span class="line" id="e2089cb3L30"><a class="line-number" href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#e2089cb3L30"></a><span class="line-content"><span class="p">}</span></span></span>
</pre></figure><p>This caching configuration means that this edge server only needs to proxy each HLS segment from my home network once, so in theory I can get a full gigabit of upstream from my VPS without overly burdening my home connection (although my home connection has plenty of bandwidth to spare, all the same).</p><h3 id="2089_h3_3_Wider-distribution-with-a-CDN">Wider distribution with a CDN<a href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#2089_h3_3_Wider-distribution-with-a-CDN" class="toc_link"></a></h3><p>This is optional, but I also use <a href="https://cloudflare.com/">Cloudflare CDN</a> for DDOS and bot mitigation, as well as better caching performance worldwide. So far I&rsquo;ve never come even <em>remotely</em> close to exceeding the bandwidth capacity of my VPS (which should theoretically be able to serve around 200 simultaneous viewers), but Cloudflare&rsquo;s free tier means I don&rsquo;t have to worry about scaling at all.</p><p>I&rsquo;m not a huge fan of Cloudflare for a number of reasons, but it&rsquo;s made it a lot easier for me to deal with the constant deluge of AI bot traffic that&rsquo;s been causing me so much stress lately, and having a proper geographically-distributed CDN is a nice bonus.</p><p>In theory, if your ISP allows running servers, you could also configure Cloudflare to talk directly to your home router, although I believe doing arbitrary port forwards requires a paid plan.</p><h3 id="2089_h3_4_Finally-streaming">Finally, streaming!<a href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#2089_h3_4_Finally-streaming" class="toc_link"></a></h3><p>To send a stream out, instead of using the public-facing hostname (live.sockpuppet.band), I connect OBS to the local IP address, so that I don&rsquo;t have to go out to the public Internet just to be routed back home. This way I also don&rsquo;t have to expose Owncast&rsquo;s RTMP port to the public Internet, which gives me better security. On the minus side, this means I cannot easily share my server with others to allow others to stream with my infrastructure, but that&rsquo;s never come up. If I ever wanted to do a cooperative stream with someone, I could use a WebRTC proxy such as <a href="https://vdo.ninja/">VDO.ninja</a>, but setting that up is outside the scope of this blog post.</p><p>Anyway, when someone connects to <a href="https://live.sockpuppet.band">my owncast</a> they are viewing it through Cloudflare, which pulls the data from my VPS, which in turn proxies it over the SSH tunnel to the Owncast instance running on my device at home. The raw stream (used, for example, by a VRChat in-world player) is available at <code>https://live.sockpuppet.band/hls/stream.m3u8</code>.</p><h3 id="2089_h3_5_How-to-roll-your-own-streaming-C">How to roll your own streaming CDN<a href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN#2089_h3_5_How-to-roll-your-own-streaming-C" class="toc_link"></a></h3><p>Okay so let&rsquo;s say you just want to roll your own VRCDN-like thing, and don&rsquo;t care about having your streaming box be directly on your local network. Here&rsquo;s what I&rsquo;d do for that:</p>
<ol>
<li>Set up a VPS of some sort, even one which only runs when you need it to (which both DigitalOcean and Linode/Akamai support)</li>
<li>Install <a href="https://owncast.online/">owncast</a> on it</li>
<li>Install nginx or apache as a fronting webserver, and have it just reverse proxy into Owncast (so you can run Owncast on port 80/443 without having to run Owncast itself as root)</li>
<li>Front the server with Cloudflare, and have it cache aggressively</li>
</ol>
<p>For streaming you&rsquo;ll need to connect directly to the server by IP address (or by having a hostname that&rsquo;s <em>not</em> Cloudflare-proxied), but otherwise you&rsquo;re good to go from here.</p><p>In such a setup you&rsquo;ll probably need to limit the bitrates that you provide.</p><p>Anyway, a suitably-capable VPS will cost around 5.4¢/hour while it&rsquo;s running, and theoretically be able to support hundreds, if not thousands, of simultaneous viewers.</p>
            
                <hr/><ol><li id="d_e2089_fn1"><p>It&rsquo;s only basically free because I already have a public Internet server I run my websites on and a local computer I can use for Owncast. If you don&rsquo;t already have a VPS of some sort, my particular setup won&rsquo;t work for you.&nbsp;<a href="/blog/2089-Self-hosted-streaming-CDN#r_e2089_fn1" rev="footnote">↩</a></p></li><li id="d_e2089_fn2"><p>All of this could also be run on Windows or macOS, but setting up a persistent server and ssh tunnel on those platforms is not something I&rsquo;ve had to internalize.&nbsp;<a href="/blog/2089-Self-hosted-streaming-CDN#r_e2089_fn2" rev="footnote">↩</a></p></li></ol>
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=technology">#Technology</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=owncast">#Owncast</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=streaming">#Streaming</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=VRChat">#VRChat</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="Technology" label="technology" />
        
        <category term="Owncast" label="owncast" />
        
        <category term="Streaming" label="streaming" />
        
        <category term="VRChat" label="VRChat" />
        

        

    </entry>
    <entry>
        
        <title>Hello Internet Archive!</title>
        <link href="https://sockpuppet.band/blog/1238-Hello-Internet-Archive" rel="alternate" type="text/html" />
        <published>2025-09-26T13:41:09-07:00</published>
        <updated>2025-09-26T13:41:09-07:00</updated>
        <id>urn:uuid:a15a1b9d-1b9d-5590-8ba4-d56cbc008a11</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p>Today I had my first gig with <a href="https://archive.org/">the Internet Archive</a> in their <a href="https://blog.archive.org/2025/08/20/calling-all-musicians-mini-concerts-at-the-internet-archive/">mini concerts series</a>. It was a really good experience (and if you&rsquo;re a musician, especially one who performs online, I urge you to sign up for it yourself!) and I&rsquo;d like to share some thoughts with folks in general! (And if anyone from IA is reading this, hello!!!!)</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        <p>Today I had my first gig with <a href="https://archive.org/">the Internet Archive</a> in their <a href="https://blog.archive.org/2025/08/20/calling-all-musicians-mini-concerts-at-the-internet-archive/">mini concerts series</a>. It was a really good experience (and if you&rsquo;re a musician, especially one who performs online, I urge you to sign up for it yourself!) and I&rsquo;d like to share some thoughts with folks in general! (And if anyone from IA is reading this, hello!!!!)</p>

        
            <h3 id="1238_h3_1_The-show">The show<a href="https://sockpuppet.band/blog/1238-Hello-Internet-Archive#1238_h3_1_The-show" class="toc_link"></a></h3><p>As usual I performed from a VR space using <a href="https://fluffy.itch.io/critter-avatar">my avatar</a><sup id="r_e1238_fn1"><a href="https://sockpuppet.band/blog/1238-Hello-Internet-Archive#d_e1238_fn1" rel="footnote">1</a></sup>, which was a first for them. Unfortunately my hand tracking setup wasn&rsquo;t working (you can read about those woes over on <a href="https://beesbuzz.biz/blog/12167-VR-hand-tracking-update">my main blog</a>) but I don&rsquo;t think it really mattered. I also finally got to make use of <a href="https://sockpuppet.band/blog/3183-VR-performance-stuff">my new audio setup</a> for an actual show (having done a couple of dry runs in VRChat over the past week) and I got a lot praise for the audio quality, so that was super nice to hear.</p><p>I played acoustic versions of <a href="https://sockpuppet.band/track/come-out">Come Out</a>, <a href="https://sockpuppet.band/track/behind-a-mask">Behind a Mask</a>, and <a href="https://sockpuppet.band/track/adding-up-to-nothing">Adding Up to Nothing</a>, and all three songs went over really well. I also took a recording which I&rsquo;ll be posting on my <a href="https://sockpuppet.band/live/">performances section</a> at some point, and it will also appear on <a href="https://archive.org/details/essential-music-concerts-from-home">their own performance archive</a>.</p><p>Afterwards they invited me to stick around for their status meeting so I could hear about a lot of the amazing work they&rsquo;re doing. Back when I was a software engineer I&rsquo;d actually considered applying for a job with them, and this whole thing has me thinking I&rsquo;d like to do that again! Even though I&rsquo;m too disabled to work a full-time job anymore. And super burned out on software engineering. 🙃 But Mark Graham, the director of <a href="https://web.archive.org/">the Wayback Machine</a>, said that they take all kinds, so maybe there would be something there for me anyway. I&rsquo;ll have to look at their open job listings.</p><h3 id="1238_h3_2_Preservation">Preservation<a href="https://sockpuppet.band/blog/1238-Hello-Internet-Archive#1238_h3_2_Preservation" class="toc_link"></a></h3><p>Anyway. I definitely want to share some thoughts about the Internet Archive. I am super glad that it exists and that they specifically operate like a library, <em>not</em> like a tech company, because it&rsquo;s such an amazing resource for everyone out there, especially when it comes to preserving open-license and public-domain content, as well as abandoned/lost media.</p><p>A while back I started to write an <a href="https://beesbuzz.biz/blog/16535-Building-a-lyric-search-engine">AI-driven lyric search engine</a> so that I could find a song that I&rsquo;d had stuck in my head and couldn&rsquo;t remember the name of. Eventually I used my human brain, and not AI, to remember enough context cues to <a href="https://beesbuzz.biz/blog/6748-I-FOUND-IT">track it down</a>; the song was &ldquo;Lolita&rdquo; by Moneyshot, off their debut album Bliss. This music is, as far as I can tell, completely lost to the world, as is everything about that band.</p><p>But fortunately, I could remember enough things about the album to track things down; I had bought this album from CDBaby back when they were an online record store and not just one of many cogs in a <a href="https://sockpuppet.band/blog/2388-Please-do-not-ask-me-about-streaming-distribution">corrupt machine</a>, and CDBaby&rsquo;s record store had a very specific and easy-to-remember URL scheme (which feels like a <em>luxury</em> today). So with just a little more work I was able to find <a href="https://web.archive.org/web/20021122121254/http://cdbaby.com/cd/moneyshot">the original listing page</a> and from there I was able to get <a href="https://web.archive.org/web/20021122163711/http://www.moneyshot.to/">the band&rsquo;s website</a><sup id="r_e1238_fn2"><a href="https://sockpuppet.band/blog/1238-Hello-Internet-Archive#d_e1238_fn2" rel="footnote">2</a></sup>. All thanks to the Internet Archive.</p><p>I&rsquo;ve also been trying to recover a bunch of lost media as well. For example, back in grad school, a friend of mine was releasing weird abstract electronic music on hand-burned CD-Rs. There is absolutely <em>no</em> information about him or his music anywhere online as far as I can find. So I <a href="https://archive.org/details/GYP-abadmeditation">took action</a><sup id="r_e1238_fn3"><a href="https://sockpuppet.band/blog/1238-Hello-Internet-Archive#d_e1238_fn3" rel="footnote">3</a></sup>. I also intend to take such action on so many other CDs that I own which are impossible to find online, this lost media from a time when music meant something.</p><p>Internet Archive also reminded me of <a href="https://archive.org/details/TheVervePipe">a band I loved back in college</a>, and how their sound has evolved over the years was a <em>direct</em> inspiration to <a href="https://sockpuppet.band/track/valley-highway">the final track on Transitions</a>, as well as much of the sound of that album<sup id="r_e1238_fn4"><a href="https://sockpuppet.band/blog/1238-Hello-Internet-Archive#d_e1238_fn4" rel="footnote">4</a></sup>.</p><h3 id="1238_h3_3_My-personal-efforts">My personal efforts<a href="https://sockpuppet.band/blog/1238-Hello-Internet-Archive#1238_h3_3_My-personal-efforts" class="toc_link"></a></h3><p>Most of my websites run on my own platform, <a href="https://publ.beesbuzz.biz/">Publ</a>, that I designed <em>specifically</em> to make sure that it&rsquo;s as archival-friendly as possible. Pagination is stable, nearly everything is done with server-side rendering, and image renditions<sup id="r_e1238_fn5"><a href="https://sockpuppet.band/blog/1238-Hello-Internet-Archive#d_e1238_fn5" rel="footnote">5</a></sup> are generated in a cache-friendly way, ensuring that the right rendition is served up based on whatever render spec was provided at the time the page was served up.</p><p>There&rsquo;s also a helper tool I wrote, <a href="https://github.com/PlaidWeb/Pushl">Pushl</a>, which helps to maintain links between sites, particularly with protocols like <a href="https://indieweb.org/webmention">Webmention</a>, but another thing it can do is automatically ping the Wayback Machine with every webpage it sees, ensuring that things get archived if possible. Because the web is nothing if it cannot be preserved and cached and stored for later and remain open.</p><p>My website is also built such that the Internet Archive can find and preserve the public previews of my music. I use another tool I wrote, <a href="https://fluffy.itch.io/bandcrash">Bandcrash</a>, to generate the preview players, and have some glue to import Bandcrash&rsquo;s output everywhere on this site. So in theory, when the Wayback Machine next crawls this website<sup id="r_e1238_fn6"><a href="https://sockpuppet.band/blog/1238-Hello-Internet-Archive#d_e1238_fn6" rel="footnote">6</a></sup>, everything will be preserved for later, <em>including</em> the player, which is also built to be IA-crawlable.</p><p>I am also working on <a href="https://beesbuzz.biz/blog/11155-A-fair-independent-streaming-platform">an idea for an indie-friendly streaming system</a> &mdash; think RSS but for Spotify-like purposes &mdash; and I have prototypical <a href="https://microformats.org/">microformats</a> throughout my website to facilitate this, as well as a design for an overarching music/streaming syndication format that makes use of these microformats, as well as providing an easier-to-parse JSON rendition. (There are technical reasons why I&rsquo;m not simply extending RSS for this purpose.)</p><p>I also intend, at some point, to upload my entire discography to the Internet Archive, because as I&rsquo;ve said <a href="https://sockpuppet.band/blog/121-On-Spotify-and-listening-to-and-collecting-music">before</a>, my main interest is in gaining listeners and people who are willing to support me in ways <em>other</em> than going through <a href="https://sockpuppet.band/track/the-war-machine">the war machine</a>, and I care more about my stuff being heard and preserved than I do about it making me a millionaire. I <em>have</em> enough money to live on (thanks to my aforementioned past as a software engineer), what I <em>need</em> is the <a href="https://sockpuppet.band/blog/2700-On-success">satisfaction of feeling successful</a>, and also I need to know that my music will outlast me and my frail, fleshy self.</p><h3 id="1238_h3_4_In-conclusion">In conclusion<a href="https://sockpuppet.band/blog/1238-Hello-Internet-Archive#1238_h3_4_In-conclusion" class="toc_link"></a></h3><p>The Internet Archive is amazing, and we should all do what we can to support it, for the good of the future.</p>
            
                <hr/><ol><li id="d_e1238_fn1"><p>Specifically a version where I&rsquo;ve added clothing, which will be coming as a free update sometime soon.&nbsp;<a href="/blog/1238-Hello-Internet-Archive#r_e1238_fn1" rev="footnote">↩</a></p></li><li id="d_e1238_fn2"><p>Unfortunately, this is about all the information I can find out about them. Like many early-2000s indie bands they went out of their way to be super mysterious so I don&rsquo;t know if any of the members (if there even <em>are</em> multiple members &mdash; I&rsquo;m far from the first to be this kind of totally-a-real-band-I-swear artist!) went on to keep making music under other names.&nbsp;<a href="/blog/1238-Hello-Internet-Archive#r_e1238_fn2" rev="footnote">↩</a></p></li><li id="d_e1238_fn3"><p>Unfortunately the name he released under has Not Aged Well, and also the music is&hellip; well, it&rsquo;s very much of its time. I love &ldquo;Praying Mantis&rdquo; though, or at least the way he performed it live.&nbsp;<a href="/blog/1238-Hello-Internet-Archive#r_e1238_fn3" rev="footnote">↩</a></p></li><li id="d_e1238_fn4"><p>Although most of the sonic inspiration comes from <a href="https://miraclesofmodernscience.com/">Miracles of Modern Science</a>, an incredible band that you should check out.&nbsp;<a href="/blog/1238-Hello-Internet-Archive#r_e1238_fn4" rev="footnote">↩</a></p></li><li id="d_e1238_fn5"><p>Incidentally, one of my roles as a software engineer was to write the scaler and design the next-generation image rendering service for an online-bookstore-turned-ecommerce-giant, and a previous role there was to work on their automatic scanned-book-to-ebook-conversion effort for the first majorly-successful ebook platform out there. The fact that Internet Archive has been doing similar things but in a much more open-culture and preservationist way makes me <em>very</em> happy.&nbsp;<a href="/blog/1238-Hello-Internet-Archive#r_e1238_fn5" rev="footnote">↩</a></p></li><li id="d_e1238_fn6"><p>And writing this post reminded me that I needed to re-ping the crawler for everything, since the last crawl was from before I switched to the Bandcrash embeds from Bandcamp, which is <em>not</em> IA-friendly!&nbsp;<a href="/blog/1238-Hello-Internet-Archive#r_e1238_fn6" rev="footnote">↩</a></p></li></ol>
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=music">#Music</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=performances">#Performances</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=Internet+Archive">#InternetArchive</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=archive.org">#ArchiveOrg</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=preservation">#Preservation</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="Music" label="music" />
        
        <category term="Performances" label="performances" />
        
        <category term="InternetArchive" label="Internet Archive" />
        
        <category term="ArchiveOrg" label="archive.org" />
        
        <category term="Preservation" label="preservation" />
        

        

    </entry>
    <entry>
        
        <title>VR performance stuff</title>
        <link href="https://sockpuppet.band/blog/3183-VR-performance-stuff" rel="alternate" type="text/html" />
        <published>2025-09-07T22:06:39-07:00</published>
        <updated>2026-01-24T09:01:40+00:00</updated>
        <id>urn:uuid:373513c2-f1fc-5791-9113-b1a3e01da404</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p>Today was the second day of VRelium Enchanted, which <a href="https://sockpuppet.band/live/3348-VRelium-Enchanted-2025">I performed at</a> and had a really good time. I&rsquo;m going to talk a bit about how VRChat performances work and some thoughts about my most recent one, in particular.</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        <p>Today was the second day of VRelium Enchanted, which <a href="https://sockpuppet.band/live/3348-VRelium-Enchanted-2025">I performed at</a> and had a really good time. I&rsquo;m going to talk a bit about how VRChat performances work and some thoughts about my most recent one, in particular.</p><p><mark>UPDATE:</mark> This is obsolete! It might still be useful for some folks (especially those working on a budget or trying to get ideas of how to cobble someting together), but <a href="https://sockpuppet.band/blog/1302-VR-performance-setup-2.0">my current setup</a> is completely different and much easier to work with.</p>

        
            <h3 id="3183_h3_1_VR-venues">VR venues<a href="https://sockpuppet.band/blog/3183-VR-performance-stuff#3183_h3_1_VR-venues" class="toc_link"></a></h3><p>Performing live music in VR has a very different set of considerations than from real life. It&rsquo;s very difficult to get an ensemble together due to lag between people<sup id="r_e3183_fn1"><a href="https://sockpuppet.band/blog/3183-VR-performance-stuff#d_e3183_fn1" rel="footnote">1</a></sup>, and also the way that audio is usually sent to the world adds even more lag and makes it impossible for two performers to both share audio into the world.</p><p>There are two major styles of performance space: mic boosted, and streamed. Some worlds, such as <a href="https://vrchat.com/home/world/wrld_31ff6bb7-b2f5-4d2a-aa38-1dc93926bb53/info">Transitions Club</a> (which I&rsquo;ve used for most of my solo shows, such as the recent <a href="https://sockpuppet.band/live/2083-RFFF-25-show">Radio Free Fedi Fest</a>) support both modes of operation, but most I&rsquo;ve encountered only support streaming.</p><h4 id="3183_h4_2_Mic-boosting">Mic boosting<a href="https://sockpuppet.band/blog/3183-VR-performance-stuff#3183_h4_2_Mic-boosting" class="toc_link"></a></h4><p>Mic boosting is typically used by open mics or other situations where a lot of performers are playing just one or two songs; for example, <a href="https://transacademy.org/">Trans Academy</a> does this for the short Moonlit performances (but not for DJ sets or full concerts), and most open mics do this as well. The setup is pretty simple and easy; from the performer&rsquo;s point of view<sup id="r_e3183_fn2"><a href="https://sockpuppet.band/blog/3183-VR-performance-stuff#d_e3183_fn2" rel="footnote">2</a></sup>, there&rsquo;s a special region in the world which amplifies the volume and/or decreases the attenuation of anyone standing in it, so anything they say over their microphone gets put in everyone&rsquo;s ears.</p><p>This has a number of advantages:</p>
<ul>
<li>It&rsquo;s super easy for people to set up since there&rsquo;s plenty of ways of getting arbitrary audio fed into the VRChat microphone input</li>
<li>The performer can also simultaneously stream to the outside world including audience noise/reactions</li>
<li>Interactions with the audience are more or less immediate</li>
<li>A show can be put on by a single person with no support team</li>
</ul>
<p>But it has some pretty hefty limitations:</p>
<ul>
<li>People in the audience generally can&rsquo;t change the volume level of the performance</li>
<li><del>VRChat&rsquo;s own audio transport is pretty low-quality and is meant for real-time speech, not for music (for example, <a href="https://sockpuppet.band/live/2011-Moonlit-EU">this is what it sounds like on my performance in-world</a>, compared to the quality of <a href="https://sockpuppet.band/live/613-Moonlit-Academy-I-LOVE-YOU">my local signal</a>, and the more complex the music, the worse it gets)</del> <mark>UPDATE:</mark> This has actually changed; as of December 2025 they&rsquo;ve vastly improved the mic audio, by switching to <a href="https://docs.vrchat.com/docs/vrchat-202542">Steam Audio</a>.</li>
<li>You can <em>only</em> get audio through, rather than any extra visuals</li>
<li>Doing more complex things with the audio gets incredibly finicky and error-prone</li>
<li>The audience size is limited to however many can fit in a single world instance</li>
</ul>
<h4 id="3183_h4_3_Streaming">Streaming<a href="https://sockpuppet.band/blog/3183-VR-performance-stuff#3183_h4_3_Streaming" class="toc_link"></a></h4><p>A streaming approach is much more commonly used for music festivals such as Furality, VRelium, CMFS, and so on. In this setup, the performer is sending their audio and visuals through streaming software (typically <a href="https://obsproject.com/">OBS</a>) to a streaming provider. <a href="https://vrcdn.live/">VRCDN</a> is very popular but any number of things work, including <del>Twitch, YouTube Live, and</del> <a href="https://owncast.online/">owncast</a>, the last of which being <a href="https://sockpuppet.band/blog/2089-Self-hosted-streaming-CDN">what I use for my independent shows</a><sup id="r_e3183_fn3"><a href="https://sockpuppet.band/blog/3183-VR-performance-stuff#d_e3183_fn3" rel="footnote">3</a></sup>.</p><p>Streaming has a bunch of advantages over mic boosting:</p>
<ul>
<li>The audio quality is way better</li>
<li>There&rsquo;s much better control over the audio signal, and in particular since VRChat always uses its view of the mic input as the lipsync source, being able to separate your vocal audio from your other instruments makes for a cleaner performance</li>
<li>The performer can provide visuals that will appear in the world in some way, usually on a large projection screen behind the stage, and some worlds are built to support multi-screen visuals (by mapping different parts of the screen image to different surfaces in the world)</li>
<li>The audience can be <em>way</em> larger since multiple instances can reference the same video stream (and some venues can also do holographic projection of performers between instances, which is also done using clever video and shader tricks)</li>
<li>You also automatically have a stream that can be viewed from outside VRChat or recorded for later editing</li>
<li>Various compositing proxies can be used to add even more visuals to the outside world stream/recording (for example, having multiple camera operators streaming to video sources that are then assembled by someone else); for example it&rsquo;s common for music festivals to map the performer&rsquo;s visuals to one screen while providing audio visualizations for the audience and a countdown timer for the preformer</li>
</ul>
<p>But it also has disadvantages:</p>
<ul>
<li>You generally need a support team managing the stream (it&rsquo;s not super feasible for solo shows &mdash; it&rsquo;s <em>possible</em> and I&rsquo;ve done it, but it&rsquo;s much more of a hassle)</li>
<li>There&rsquo;s a <em>lot</em> of lag between the world and the stream (usually on the order of 5-15 seconds), so interactions with the audience are confusing or on a delay, and people who are looking directly at the performer (rather than the screen) will have extremely bad lip sync<sup id="r_e3183_fn4"><a href="https://sockpuppet.band/blog/3183-VR-performance-stuff#d_e3183_fn4" rel="footnote">4</a></sup></li>
<li>Because the performer is streaming audio and video to the world, extra considerations are necessary for a livestream that includes audience reactions</li>
<li><del>If the venue is small and doesn&rsquo;t have a means of <em>muting</em> on-stage performers, the audience may hear doubled audio with considerable delay between them</del> <mark>UPDATE:</mark> Along with the improvements to mic audio, VRChat now allows you to set your microphone output level to 0% which has the effect of preserving lip sync without broadcasting any audio into the instance.</li>
</ul>
<p>Due to these disadvantages, and since my solo shows tend to be pretty small, if I&rsquo;m going solo it&rsquo;s usually using a mic boost.</p><h3 id="3183_h3_4_A-typical-setup">A typical setup<a href="https://sockpuppet.band/blog/3183-VR-performance-stuff#3183_h3_4_A-typical-setup" class="toc_link"></a></h3><p>Most people who perform in VR are exclusively using backing tracks (often ones obtained from karaoke videos, if they&rsquo;re doing covers of songs), and use <a href="https://vb-audio.com/Voicemeeter/">Voicemeeter</a>, a virtual mixer combines multiple audio inputs into a single virtual audio source.</p><p>For a mic-boosted performance, they&rsquo;ll be using Voicemeeter to combine the backing track with their microphone, and also monitor the audio back to their own ears.</p><p>They may also be doing it that way for a streamed performance, although for streaming the better option is to use OBS&rsquo;s audio mixing and monitoring for the backing track.</p><h3 id="3183_h3_5_My-typical-setup">My typical setup<a href="https://sockpuppet.band/blog/3183-VR-performance-stuff#3183_h3_5_My-typical-setup" class="toc_link"></a></h3><p>Because I am <del>a masochist</del> coming from the tradition of conventional live performances, I have a tendency to want to perform as much live as possible, and have previously never used a backing track<sup id="r_e3183_fn5"><a href="https://sockpuppet.band/blog/3183-VR-performance-stuff#d_e3183_fn5" rel="footnote">5</a></sup>.</p><p>Typically I have Voicemeeter capturing my vocal microphone (which is usually the mic built-in to my <a href="https://www.bigscreenvr.com/">Bigscreen Beyond</a>) and my computer&rsquo;s onboard line input, which I then have various amps/pedals/mixers connected to for my performance instruments; my typical loadout is:</p>
<ul>
<li>My guitar</li>
<li>A cheap reverb pedal from AliExpress</li>
<li>A cheap distortion pedal, also from AliExpress</li>
<li>A Boss RC-20 looper pedal</li>
<li>A dynamic mic, for percussion and such going through the looper</li>
<li>A small <a href="https://www.musiciansfriend.com/amplifiers-effects/zt-lunchbox-junior-guitar-combo-amp/h82899000001000">lunchbox amplifier</a>, which is a simple way of amplifying that mess to line-level and giving me basic monitoring</li>
</ul>
<p>I then also have VRChat&rsquo;s voice input set to Voicemeeter.</p><p>When I&rsquo;m performing, regardless of whether it&rsquo;s mic-boost or streamed, I have a bunch of OBS scenes with different setups for different purposes, but generally-speaking my scene setup is:</p>
<ul>
<li>A <a href="https://github.com/Off-World-Live/obs-spout2-plugin">Spout2 capture source</a> (which allows OBS to directly project VRChat&rsquo;s camera capture rather than having to make a round trip through the display compositor)</li>
<li>Audio sources for Voicemeeter and then direct inputs for my headset mic, the computer line input, and a music player source for backing tracks</li>
<li>Also an audio output capture for my headset speakers (to capture in-game audio)</li>
<li>Whatever visuals I want to overlay on the stream (<a href="https://github.com/phandasm/waveform">Waveform</a> is especially useful)</li>
</ul>
<p>I make heavy use of OBS&rsquo;s multichannel audio functionality for this. I set channel 1 to be whatever I want to go to the stream. What goes on here depends on the kind of performance I&rsquo;m doing:</p>
<ul>
<li>If I&rsquo;m doing a mic boosted performance, it&rsquo;ll typically be my performance audio (either Voicemeeter, or a mix of mic+line input) mixed with the in-game audio so the livestream audience can hear the in-game audience as well</li>
<li>If I&rsquo;m doing a streamed performance, it&rsquo;ll be just my performance audio as a mix (usually the raw inputs, <em>not</em> Voicemeeter, as Voicemeeter adds a bit of lag making the timing of the backing track to be somewhat off)</li>
</ul>
<p>Regardless of this, I also record each separate thing to separate audio channels:</p>
<ul>
<li>Channel 2: vocal mic</li>
<li>Channel 3: line input</li>
<li>Channel 4: backing track</li>
<li>Channel 5: game audio</li>
<li>Channel 6: Voicemeeter</li>
</ul>
<p>I rarely actually use the Voicemeeter channel anymore (since I switched to directly mixing the live inputs to the stream) but I&rsquo;d might as well keep it around, just in case (although keep in mind that using it will require latency compensation). There&rsquo;s been a few times that it&rsquo;s been helpful due to OBS settings getting messed up, for example, so I actually didn&rsquo;t end up recording my raw instrument channel, for example.</p><p>Depending on whether I&rsquo;m using Voicemeeter or my raw microphone as my vocal input affects what sort of lipsync issues I have in the stream and/or recorded video. So I try to keep them the same as each other, but it&rsquo;s easy to forget and not a <em>huge</em> deal to fix since it&rsquo;s usually only offset by 1-2 frames (and VRChat&rsquo;s lip sync isn&rsquo;t all that great anyway).</p><h3 id="3183_h3_6_My-usual-performances">My usual performances<a href="https://sockpuppet.band/blog/3183-VR-performance-stuff#3183_h3_6_My-usual-performances" class="toc_link"></a></h3><p>So, when I perform, I&rsquo;m typically playing guitar or piano and singing, and occasionally making use of my effect pedals (especially the looper). Because I need to be able to see my guitar&rsquo;s fretboard and/or piano&rsquo;s keys while I perform, I built a custom headset gasket (based on the <a href="https://www.printables.com/model/751989-slimterface-flipterface-customface-for-bigscreen-b">Slimterface</a>, modified with a big cutout on the bottom, which I really should get around to uploading the files for at some point, oh <a href="https://www.printables.com/model/1408641-slimterface-modded-for-musical-performances">here we go</a>).</p><p>I still haven&rsquo;t figured out a good way of tracking my hand movements while playing guitar in-headset. I&rsquo;ve tried <a href="https://beesbuzz.biz/blog/7168-On-the-quest-for-VR-hand-tracking">a bunch of things</a> and so far the best results I&rsquo;ve gotten have been with a <a href="https://www.ultraleap.com/">Leapmotion 1</a> and <a href="https://github.com/Nyabsi/driver_leapify/">Leapify</a>, but it&rsquo;s still been pretty inconsistent and fiddly (but I have a few more things to try before I give up entirely). But for now, when I&rsquo;m playing guitar, I just signify it by swapping to a version of my avatar that&rsquo;s wearing a guitar and then people can just see my arms hang limply by my sides.</p><p>Also, because VRChat doesn&rsquo;t really have any way of bringing printouts into the world with you, to keep my setlist at the ready I open it up in a text editor or similar (usually synced with iCloud Notes or <a href="https://syncthing.net/">SyncThing</a> or whatever) and then attach the window to my VR playspace from the SteamVR overlay. This can be a little confusing, since it blocks a large part of my field of view and audience members can&rsquo;t tell that they&rsquo;re behind it (since it only exists locally and not in VRChat itself).</p><p>Since I have VRC+ I could also theoretically make an image of my setlist and print it into the world, but that makes it a manipulable object that people in the audience could steal and mess with, so I haven&rsquo;t ever actually done that (also music festivals tend to disable or force-remove prints for performance reasons).</p><p>There&rsquo;s probably some clever thing I could do with OSC to provide myself a local avatar HUD or something, but the SteamVR overlay works well enough for me.</p><h3 id="3183_h3_7_What-I-did-tonight">What I did tonight<a href="https://sockpuppet.band/blog/3183-VR-performance-stuff#3183_h3_7_What-I-did-tonight" class="toc_link"></a></h3><p>I have a chronic pain disorder which flares up sometimes. On the days leading up to this weekend it was flaring up pretty badly, so I figured I&rsquo;d play it safe and use backing tracks for once. Since all my music is original, I bounced out vocal-free versions of the songs I was going to perform, then combined them into a single file with a suitable gap between each song. I did leave some time at the end for an acoustic performance of <a href="https://sockpuppet.band/track/strategies-to-live">Strategies to Live</a>, because I&rsquo;m not at all happy with the quality of the album recording, and I also wanted a bit more flexibility in how I performed it.</p><p>It turned out that my pain flareup had subsided by performance time, but I decided to go with the backing track anyway, as a bit of an experiment.</p><p>My overarching philosophy is that the live version of a song should be special, and a reinterpretation of the album version. Using the album recording as a backing track flies in the face of that. However, this only really makes sense in a context where the audience already knows my music; generally when I&rsquo;m performing at a larger show, most of the audience is not familiar with my music, and as a result doesn&rsquo;t actually know that there&rsquo;s anything special about an acoustic guitar-folk performance of a <a href="https://sockpuppet.band/track/freak-flag">sex-positive hip-hop song</a> or a <a href="https://sockpuppet.band/track/behind-a-mask">90s alt-rock song</a> or a <a href="https://sockpuppet.band/track/material-change">hardstyle dancepop track</a>.</p><p>Further, genre bias is a thing, and when people get the impression that all of my music is acoustic indie rock, if they aren&rsquo;t into acoustic indie rock they have no reason to check my music out to hear how it really is.</p><p>So, at least for this large show I decided it&rsquo;d be interesting to see how the audience reacts to the songs as they originally were, rather than the &ldquo;special&rdquo; renditions I do as a treat. And judging by the audience reaction, it went over pretty well! It was also nice having my hands free, so I could actually move around and dance as I performed, and also could do appropriate avatar switches during some songs (particularly demonstrating some of the titular material changes in Material Change).</p><p>But I also ended up realizing that for my live performances, I put a <em>lot</em> of muscle memory into things, and there were a few spots where I came close to forgetting how the words went because I needed the shape of the chords I was making to cue me on them.</p><p>A baked backing track had another nice bonus in that I didn&rsquo;t need to display my setlist, because I could just use audio cues to know which song I was performing. But on the downside, some of the intra-song timings weren&rsquo;t quite right. I have a particular transition I like to do from <a href="https://sockpuppet.band/track/youre-never-around">You&rsquo;re Never Around</a> to <a href="https://sockpuppet.band/track/better-than-before">Better Than Before</a> and while I worked embarrassingly-long on trying to nail the timing in my backing track, I still feel like it didn&rsquo;t line up with how I wanted it to. It&rsquo;s probably a thing that only I would ever notice, though.</p><p>This also meant I was basically on-rails with no ability to adjust timing based on mood or tripping up on things or whatever. This was, ultimately, more good than bad, since it meant my set length was timed out perfectly (aside from Strategies to Live, which I was able to perform a bit faster than usual to make up for some previous schedule slippage), and also it kept me from rushing my songs, which in turn made tripping up much less likely.</p><p>In most of my festival sets I&rsquo;ve ended up doing one big flub and just powering through it, and tonight I only did a couple of minor flubs which nobody but me would have noticed anyway (even if they were super familiar with my songs which, let&rsquo;s face it, nobody else is).</p><p>I also loved being able to be way more expressive. My avatar is set up to allow me to puppet the eye and mouth shapes through hand gestures, which is pretty common, and I designed my puppetry setup specifically around doing karaoke, which this was just sort of an ascended version of anyway. Having the ability to make hand gestures at all is a huge improvement.</p><p>(That said, what&rsquo;d be even better is getting proper eye and mouth tracking support so I don&rsquo;t have to do puppetry to begin with, but I&rsquo;m not ready to spend that kind of money right now.)</p><p>Even without the puppetry aspect, I also had friends and fans arrive in the audience and would wave at me, and I was able to wave back, which made a couple of them absolutely delighted!</p><p>So, yeah, it gave me a much better audience connection, much better expressiveness in general, a much less stressful performance experience, and me just plain sounding better.</p><p>But in doing so I also gave up an amount of spontaneity, and also a feeling that I was actually <em>performing</em> and not just doing, y&#39;know, karaoke. Which just feels weird to me. It feels like I&rsquo;m lowering my standards, but the audience doesn&rsquo;t care at all, and if anything the audience seems to prefer the &ldquo;karaoke&rdquo; form.</p><h3 id="3183_h3_8_Future-plans">Future plans<a href="https://sockpuppet.band/blog/3183-VR-performance-stuff#3183_h3_8_Future-plans" class="toc_link"></a></h3><p>I think I&rsquo;ll go with something like this:</p>
<ul>
<li>For small shows (like Moonlit) and solo shows (where my existing fans will be the majority of the audience) I&rsquo;ll continue doing things mostly live on instruments, although I&rsquo;ll probably start to incorporate more backing tracks in as well to expand my repertoire, since many of my songs aren&rsquo;t super feasible to have a guitar rendition of (I&rsquo;d love to be able to do a live version of <a href="https://sockpuppet.band/track/a-long-plastic-hallway">A Long Plastic Hallway</a>, for example)</li>
<li>For larger shows I&rsquo;ll continue to do a mix of studio-version backing tracks and acoustic versions as appropriate</li>
<li>For <em>major</em> shows (like if I ever get accepted into Furality) I&rsquo;ll possibly make some custom backing tracks just for the show</li>
</ul>
<p>Also, I can still be proud that I&rsquo;m using my own backing tracks for my own songs. Not that there&rsquo;s anything wrong with people using existing karaoke versions for their covers, and obviously audiences don&rsquo;t mind it at all (and are just there to hear amazing singers singing songs they like). And who knows, if I keep uploading <a href="https://www.youtube.com/playlist?list=PLNRLpYEdwBNipgKir3qPtIf3AEm7B3Fnk">karaoke tracks</a>, maybe someday I&rsquo;ll hear someone doing a cover of one of my songs at one of these things.</p>
            
                <hr/><ol><li id="d_e3183_fn1"><p>You <em>can</em> do limited ensembles by having a chain of people streaming to one another, as long as nobody earlier in the chain needs to be able to hear anyone later in the chain, but that can also be difficult to manage and coordinate. Plus, every link in the chain is an opportunity for network problems.&nbsp;<a href="/blog/3183-VR-performance-stuff#r_e3183_fn1" rev="footnote">↩</a></p><p>Or you can just have everyone be physically in the same room.</p></li><li id="d_e3183_fn2"><p>The actual implementation of this is much more complicated but that&rsquo;s outside the scope of this article.&nbsp;<a href="/blog/3183-VR-performance-stuff#r_e3183_fn2" rev="footnote">↩</a></p></li><li id="d_e3183_fn3"><p>Unfortunately Twitch and YouTube are no longer viable options, as their respective wars on adblockers have prevented third-party streaming clients from reliably accessing the streams anymore, and that includes VRChat. The death of open standards is an awful thing to witness in real time.&nbsp;<a href="/blog/3183-VR-performance-stuff#r_e3183_fn3" rev="footnote">↩</a></p></li><li id="d_e3183_fn4"><p>Many performers opt to just mute their in-game mic so that there&rsquo;s no lip sync at all, which is throwing out the baby with the bath water, IMO.&nbsp;<a href="/blog/3183-VR-performance-stuff#r_e3183_fn4" rev="footnote">↩</a></p></li><li id="d_e3183_fn5"><p>Except when doing karaoke, of course.&nbsp;<a href="/blog/3183-VR-performance-stuff#r_e3183_fn5" rev="footnote">↩</a></p></li></ol>
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=VRChat">#VRChat</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=VR">#VR</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=performances">#Performances</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="VRChat" label="VRChat" />
        
        <category term="VR" label="VR" />
        
        <category term="Performances" label="performances" />
        

        

    </entry>
    <entry>
        
        <title>Please do not ask me about streaming distribution</title>
        <link href="https://sockpuppet.band/blog/2388-Please-do-not-ask-me-about-streaming-distribution" rel="alternate" type="text/html" />
        <published>2025-08-19T16:13:40-07:00</published>
        <updated>2025-08-19T16:13:40-07:00</updated>
        <id>urn:uuid:b01c0a0e-3bb6-527d-a31b-64de7807c566</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p>Quite some time ago I posted <a href="https://sockpuppet.band/blog/289-Some-recommendations-for-digital-distribution">my recommendations for streaming distributors</a> but things have all changed in a very bad way since then.</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        <p>Quite some time ago I posted <a href="https://sockpuppet.band/blog/289-Some-recommendations-for-digital-distribution">my recommendations for streaming distributors</a> but things have all changed in a very bad way since then.</p>

        
            <p>TooLost (my previous top recommendation) has gotten incredibly difficult to deal with when it comes to copyright-related things. They now have a hair trigger for deciding that a song &ldquo;needs documentation&rdquo; regarding its legality, but won&rsquo;t provide <em>any</em> useful information about what they think the problem is. On <a href="https://sockpuppet.band/track/the-war-machine">my most recent track</a> they seem to think that it violates someone&rsquo;s copyright but they won&rsquo;t tell me whose, and apparently they&rsquo;re putting the burden on me to just plain guess what their issue is, while taking a week to get back to me on every single question.</p><p>The best advice I&rsquo;ve gotten from anyone is to spend a crapton <em>more</em> money on a copyright registration service with the hopes that it&rsquo;ll convince them that I own the copyright to my own words, and even then there&rsquo;s still the chance that it won&rsquo;t actually help anything.</p><p>Then, for individual tracks that required licensing, I was recommending Soundrop, but they&rsquo;ve raised their price <em>and</em> their cut, and apparently have similar support issues today.</p><p>The other distributors are just as bad. And the streaming environment is <em>also</em> bad.</p><p>In the past year I&rsquo;ve made approximately $5 on streaming services. $5. Total. For a whole year&rsquo;s worth of music.</p><p>Why should I continue to pay into a broken system that isn&rsquo;t going to serve me?</p><p>Y&#39;all can find my music on <a href="https://sockpuppet.band/bandcamp">Bandcamp</a> and <a href="https://sockpuppet.band/mirlo">Mirlo</a> and (eventually) Subvert. And my current stuff will stay up on streaming as long as TooLost decides not to take it down after I stop paying, but I&rsquo;m not going to go out of my way to put more stuff up through them.</p><p>Fuck streaming.</p><p><a href="https://sockpuppet.band/blog/121-On-Spotify-and-listening-to-and-collecting-music">There are better ways</a>.</p>
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=business">#Business</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=streaming">#Streaming</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=distribution">#Distribution</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=TooLost">#TooLost</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="Business" label="business" />
        
        <category term="Streaming" label="streaming" />
        
        <category term="Distribution" label="distribution" />
        
        <category term="TooLost" label="TooLost" />
        

        

    </entry>
    <entry>
        
        <title>Song Fight!: The how, the what, and the why</title>
        <link href="https://sockpuppet.band/blog/569-Song-Fight-The-how-the-what-and-the-why" rel="alternate" type="text/html" />
        <published>2025-08-08T02:13:34-07:00</published>
        <updated>2025-08-08T02:13:34-07:00</updated>
        <id>urn:uuid:8fb84ec5-262a-5cd5-84e4-a1ffa4b5a3a6</id>
        <author><name>fluffy</name></author>
        <summary type="html"><![CDATA[<p> </p><p>People sometimes ask me how they can start making music, or how they can get better at making music when they&rsquo;ve hit a wall.</p>]]></summary>
        <content type="html"><![CDATA[

		

        



        
<figure class="images"><a href="https://songfight.org/"><img src="https://sockpuppet.band/static/_img/85/b8db/songfight_logo_1500_b772770031_240x192_q50.webp" width="240" height="192" srcset="https://sockpuppet.band/static/_img/85/b8db/songfight_logo_1500_b772770031_240x192_q50.webp 1x, https://sockpuppet.band/static/_img/85/b8db/songfight_logo_1500_b772770031_480x384_q50.webp 2x" loading="lazy" class="u-photo" alt="songfight_logo_1500.png"></a></figure>
<p>People sometimes ask me how they can start making music, or how they can get better at making music when they&rsquo;ve hit a wall.</p><p>A thing that has worked for me quite a lot over the years is participating in <a href="https://songfight.org/">Song Fight!</a>, an online songwriting competition that&rsquo;s been going for a bit over 25 years now. It&rsquo;s an incredibly low-stakes yet highly-satisfying way of learning how to make music and how to hone your craft.</p><p>It also really could use more new people participating!</p>

        
            <h3 id="569_h3_1_Some-history">Some history<a href="https://sockpuppet.band/blog/569-Song-Fight-The-how-the-what-and-the-why#569_h3_1_Some-history" class="toc_link"></a></h3><p>Back in the early 2000s, there was the Dumbrella Collective, which was a group of Internet friends who all made stuff. One of these people was Collin &ldquo;Narbotic&rdquo; Cunningham, who would take random titles from Internet submissions and turn them into songs. (This was similar to explodingdog, where Sam &ldquo;sambrown&rdquo; Brown would do the same with images. I&rsquo;m not entirely sure which of the two came first, but both were part of Dumbrella.)</p><p>After a little while, Narbotic found that making music this way was a very lonely pursuit, so he invited a bunch of his friends to participate as well, and challenged them to a songwriting contest where random Internet people could vote and comment on the songs to decide who did it the best.</p><p>A few months later, he opened it up to the world, and surprisingly enough, a lot of people started to submit music. The first open-invitation was <a href="https://songfight.org/songpage.php?key=zero_to_phantom">Zero to Phantom</a>. I happened to find the site for the first time when this was the title, and while I didn&rsquo;t have any ideas for that one, I ended up entering for the next one, <a href="https://songfight.org/songpage.php?key=i_love_you">I LOVE YOU</a>.</p><p>Over time, the updates became more and more sporadic, and a couple of frequent participants, namely JB of the John Benjamin Band, and Spud of Octothorpe, started their own spinoff site, &ldquo;Meanwhile,&rdquo; as a sort of side challenge to take place in between the posts of titles and fights. Then eventually Narbotic abandoned Song Fight! entirely, and Spud+JB decided to rebrand Meanwhile as the new Song Fight! sometime in 2002. It&rsquo;s been running pretty steadily ever since.</p><h3 id="569_h3_2_How-the-site-works">How the site works<a href="https://sockpuppet.band/blog/569-Song-Fight-The-how-the-what-and-the-why#569_h3_2_How-the-site-works" class="toc_link"></a></h3><p>Every 10 days or so a new title is posted, and people have some amount of time to write, record, and submit a song written for that title. At the same time, the submissions for the previous title go up for a vote, and people are encouraged to listen to all of them, vote for their favorites, and post reviews on the forum.</p><p>There are no restrictions on genre or style, length, or even quality of song. The only rules are:</p>
<ol>
<li>The song must be written for the provided title</li>
<li>It must be written/recorded/produced by a sentient being (i.e. it can&rsquo;t just be an AI prompt); the point is to get better at making music yourself</li>
</ol>
<p>The vote is basically just there as a formality. It feels good to win, but there are no prizes aside from the satisfaction of having others decide your song was the best. (To that end, asking all your friends to vote for your song and no others doesn&rsquo;t really do anyone any favors.)</p><p>It&rsquo;s basically a song-writing circle with the trappings of a friendly competition. And it is a lot of fun and very worth joining in on!</p><h3 id="569_h3_3_How-to-get-started">How to get started<a href="https://sockpuppet.band/blog/569-Song-Fight-The-how-the-what-and-the-why#569_h3_3_How-to-get-started" class="toc_link"></a></h3><p>You almost certainly have all the software you need already, or can acquire some very cheaply, even freely.</p><p>Pretty much you&rsquo;ll need something you can make music with (even just your voice), something you can record it with, and a willingness to have room for improvement. You don&rsquo;t need any fancy equipment or expensive software. The voice recorder on your phone is a good starting point, or the microphone built-in to your computer or webcam or whatever.</p><p>Here&rsquo;s some free/cheap software you could consider looking at:</p>
<ul>
<li><a href="https://audacity.org/">Audacity</a></li>
<li><a href="https://reaper.fm/">REAPER</a></li>
<li><a href="https://lmms.io/">LMMS</a></li>
<li><a href="https://www.image-line.com/">FL Studio</a></li>
<li><a href="https://ardour.org/">Ardour</a></li>
</ul>
<p>Also, if you&rsquo;re on a Mac, you probably already have a copy of GarageBand, which is exceptionally good for this stuff.</p><p>Don&rsquo;t know how to play an instrument? That&rsquo;s fine, you can plink notes in on the piano roll, or even use free loops or the like.</p><p>Don&rsquo;t know how to sing? That&rsquo;s fine, you can do spoken-word stuff, or pitchbend your computer&rsquo;s text-to-speech, or even do an instrumental (gasp!).</p><p>Have ideas for lyrics but not music, or vice-versa? Post on the forums and form a collaboration with someone else!</p><p>Worried you&rsquo;re going to suck? That&rsquo;s okay! Everyone starts out bad. In the immortal words of Jake the Dog, sucking at something is the first step towards being sorta good at something.</p><p>I started out <a href="https://sockpuppet.band/album/deadnames">awful</a>, and now I&rsquo;m <a href="https://sockpuppet.band/album/transitions">pretty okay</a>. It&rsquo;s all a process.</p><p>And your song might be better than you think it is. Enter it anyway.</p>
            

            

        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=music+making">#MusicMaking</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=inspiration">#Inspiration</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=Song+Fight!">#SongFight</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=contests">#Contests</a>
        
        <a rel="tag" href="https://sockpuppet.band/blog/?tag=community">#Community</a>
        

        ]]>



        </content>
        <category term="Blog" label="Blog" />
        
        
        <category term="MusicMaking" label="music making" />
        
        <category term="Inspiration" label="inspiration" />
        
        <category term="SongFight" label="Song Fight!" />
        
        <category term="Contests" label="contests" />
        
        <category term="Community" label="community" />
        

        

    </entry>
    

    
</feed>