<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: AniMate Waifu</title>
    <description>The latest articles on DEV Community by AniMate Waifu (@animate).</description>
    <link>https://dev.to/animate</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4076602%2F5312aedf-7b23-4294-9ced-b8cea7f07590.png</url>
      <title>DEV Community: AniMate Waifu</title>
      <link>https://dev.to/animate</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/animate"/>
    <language>en</language>
    <item>
      <title>Show DEV: a VRM desktop companion built with Tauri + Three.js — and the three things that fought back</title>
      <dc:creator>AniMate Waifu</dc:creator>
      <pubDate>Tue, 15 Sep 2026 06:25:06 +0000</pubDate>
      <link>https://dev.to/animate/show-dev-a-vrm-desktop-companion-built-with-tauri-threejs-and-the-three-things-that-fought-ba4</link>
      <guid>https://dev.to/animate/show-dev-a-vrm-desktop-companion-built-with-tauri-threejs-and-the-three-things-that-fought-ba4</guid>
      <description>&lt;p&gt;I've been building &lt;strong&gt;&lt;a href="https://getanimate.app/?utm_source=devto&amp;amp;utm_medium=column&amp;amp;utm_campaign=backlink_cold_start&amp;amp;utm_content=devto_intro_001" rel="noopener noreferrer"&gt;AniMate Waifu&lt;/a&gt;&lt;/strong&gt; — a desktop companion app that puts a 3D anime character on top of your desktop. It runs on Windows and macOS, and it's the kind of software that has to survive being left running while you do something else.&lt;/p&gt;

&lt;p&gt;This is the intro post: what it does today, and the three problems that took the most attempts. I'll keep posting the ones I hit from here.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;AniMate Waifu puts a character on your desktop as a &lt;strong&gt;transparent, always-on-top overlay&lt;/strong&gt;. Not a wallpaper, not a browser tab — it sits in front of your windows while you work, and it can be set click-through so it never eats your clicks.&lt;/p&gt;

&lt;p&gt;You bring the character: it imports &lt;strong&gt;VRM 0.x and VRM 1.0&lt;/strong&gt; files, including what VRoid Studio exports. On the desktop it tracks your cursor, reacts when you touch it, can be dragged and resized, has idle motion, and moves to whatever you're playing. &lt;strong&gt;VRMA&lt;/strong&gt; dance files can be imported once and applied to any character in your library. A Workshop keeps characters, motions, dances and stages together with 3D previews. Text and voice conversation runs on a persona and TTS voice you set per character; chat history stays on your device, and chat needs a connection.&lt;/p&gt;

&lt;p&gt;Free tier ships with built-in characters. A one-time $9.90 unlock covers your own avatars, dances, motions and stages.&lt;/p&gt;

&lt;p&gt;Stack, since this is dev.to: &lt;strong&gt;Tauri + Three.js + @pixiv/three-vrm&lt;/strong&gt;. The app is closed source; the GitHub repo is where issues and releases live.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three things that fought back
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Transparent, always-on-top and click-through are three requirements that fight each other.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Keeping the character above your windows was the easy part. Keeping it there &lt;em&gt;without&lt;/em&gt; a title bar, &lt;em&gt;without&lt;/em&gt; stealing focus, and &lt;em&gt;while&lt;/em&gt; letting clicks fall through to whatever is underneath took more iterations than the rendering did. Click-through is the awkward one: the window still has to render and animate, but must opt out of hit-testing — and that's platform-specific behaviour, not a flag you set once.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. VRM 0.x and 1.0 are not the same file with a bumped version number.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;0.x uses MToon; 1.0 uses MToon10 and adds capsule colliders, per-joint SpringBone tuning and MatCap masking. If you have a &lt;code&gt;.vrm&lt;/code&gt; and don't know which you're holding: open it in a text editor and search for &lt;code&gt;VRMC_vrm&lt;/code&gt;. Present → 1.0. Only &lt;code&gt;VRM&lt;/code&gt; → 0.x. Renaming doesn't convert anything, because the bone and shader definitions differ.&lt;/p&gt;

&lt;p&gt;The practical consequence: a model a user downloads may simply not load, and the error you get rarely tells you why. PMX and FBX have to be converted to VRM first, which is a detour of its own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. "Lightweight" is a design constraint, not a feature you add later.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An overlay that is always on screen can't be the thing that heats up the laptop. That shaped decisions early: what runs per frame, what gets cached, what stays asleep until something actually happens. It's also why the macOS build targets Apple Silicon only — shipping a second, slower path for Intel Macs would have meant maintaining two performance profiles for a shrinking install base.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'll write about next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What actually breaks when users import their own models (it's usually not the model)&lt;/li&gt;
&lt;li&gt;Keeping a 3D overlay light enough to leave running all day&lt;/li&gt;
&lt;li&gt;The licensing side: which VRM models you can and can't show or ship&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you've built something that has to live on someone else's desktop — especially anything with overlay windows — I'd like to hear what bit you.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>vrm</category>
      <category>ai</category>
      <category>threejs</category>
    </item>
  </channel>
</rss>
