{"id":61716,"date":"2026-03-09T00:36:09","date_gmt":"2026-03-08T23:36:09","guid":{"rendered":"https:\/\/www.davidaddis.com\/?p=61716"},"modified":"2026-03-09T00:48:00","modified_gmt":"2026-03-08T23:48:00","slug":"simple-offline-ai-assets-for-unity","status":"publish","type":"post","link":"https:\/\/www.davidaddis.com\/?p=61716","title":{"rendered":"Simple Offline AI Assets for Unity!"},"content":{"rendered":"\n<p>I was working on my new indie game, and realised I needed some simple and local AI features: speech recognition, some kind of LLM, and text-to-speech. They are all very solved problems, but I couldn&#8217;t find a solution for all of them that was:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Compatible with Unity<\/li>\n\n\n\n<li>Ran in the editor and in a build (the same way!)<\/li>\n\n\n\n<li>Relatively simple to setup and use<\/li>\n\n\n\n<li>Completely local<\/li>\n\n\n\n<li>Didn&#8217;t require exotic libraries that may or may not exist for all platforms<\/li>\n\n\n\n<li>Free (or cheap)<\/li>\n<\/ul>\n\n\n\n<p>So &#8211; I made them! And hence my range of &#8220;Simple Offline&#8221; assets was born. I put them all together, and hosted a small demo on <a href=\"https:\/\/huggingface.co\/spaces\/dtaddis\/LocalVoiceLLM\">Hugging Face<\/a>. Since it uses WebGPU, it&#8217;s still GPU-accelerated. It&#8217;s embedded below!<\/p>\n\n\n\n<div id=\"ai-demo\" style=\"max-width:1280px;margin:auto;text-align:center;\">\n\n  <div id=\"ai-placeholder\" style=\"\n      background:#111;\n      color:white;\n      padding:60px 20px;\n      border-radius:8px;\n      cursor:pointer;\">\n      \n      <h2>Run the Local Voice AI Demo<\/h2>\n      <p>This demo downloads ~350MB and runs entirely in your browser.<\/p>\n      <p>Speech Recognition + LLM + TTS \u2014 all local.<\/p>\n      <button style=\"\n          padding:12px 24px;\n          font-size:18px;\n          margin-top:10px;\n          cursor:pointer;\">\n          Click to Load Demo\n      <\/button>\n  <\/div>\n\n<\/div>\n\n<script>\nfunction loadAIDemo() {\n  const container = document.getElementById(\"ai-demo\");\n\n  container.innerHTML =\n    '<div style=\"position:relative;width:100%;padding-top:56.25%;\">' +\n    '<iframe src=\"https:\/\/dtaddis-localvoicellm.hf.space\" ' +\n    'frameborder=\"0\" ' +\n    'allow=\"microphone *; camera *; autoplay *\" ' +\n    'style=\"position:absolute;top:0;left:0;width:100%;height:100%;\">' +\n    '<\/iframe>' +\n    '<\/div>';\n}\n\ndocument.getElementById(\"ai-placeholder\").onclick = loadAIDemo;\n<\/script>\n\n\n\n<p class=\"has-text-align-center has-small-font-size\"><em>&#8220;Local Voice LLM&#8221; &#8211; a voice-controlled AI agent, running completely locally.<\/em><\/p>\n\n\n\n<p>And you can see all my Unity Assets <a href=\"https:\/\/assetstore.unity.com\/publishers\/126206\">here<\/a>. Hopefully they&#8217;ll be useful to you! If you have any feedback about them, I&#8217;d love to hear it. Please use the Contact section on this site.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I was working on my new indie game, and realised I needed some simple and local AI features: speech recognition, some kind of LLM, and text-to-speech. They are all very solved problems, but I couldn&#8217;t find a solution for all of them that was: So &#8211; I made them! And hence my range of &#8220;Simple &hellip; <a href=\"https:\/\/www.davidaddis.com\/?p=61716\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Simple Offline AI Assets for Unity!<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[31],"tags":[],"class_list":["post-61716","post","type-post","status-publish","format-standard","hentry","category-programming"],"_links":{"self":[{"href":"https:\/\/www.davidaddis.com\/index.php?rest_route=\/wp\/v2\/posts\/61716","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.davidaddis.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.davidaddis.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.davidaddis.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.davidaddis.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=61716"}],"version-history":[{"count":11,"href":"https:\/\/www.davidaddis.com\/index.php?rest_route=\/wp\/v2\/posts\/61716\/revisions"}],"predecessor-version":[{"id":61728,"href":"https:\/\/www.davidaddis.com\/index.php?rest_route=\/wp\/v2\/posts\/61716\/revisions\/61728"}],"wp:attachment":[{"href":"https:\/\/www.davidaddis.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=61716"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.davidaddis.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=61716"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.davidaddis.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=61716"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}