TomodachiDrawer is a collection of firmware and software that generates inputs to control a Nintendo Switch to draw arbitrary images in the Palette House.
See #12 , unfortunately it seems that the Switch 1 is prone to desyncing randomly from inexplicable lag spikes. Current testing suggests this is related to the 3D preview. Switch 2 users are unaffected, and drawings of types that are just lone transparent images do not seem to be prone to these effects. 0.3.1 and 0.3.2 added some mitigations for some other types of delay, but the lag one is still under investigation. If you have any information or clips of the desync occuring, be sure to comment it on that issue!
The program splits images into layers matched to colours in the game, and generates optimized routes for the pen to follow to draw your image.
It has a crossplatform Avalonia UI desktop app that supports flashing directly to a RP2040-Zero which can then be plugged into the USB port of a Switch or Switch 2 where it will begin to draw.
This was designed for an RP2040-Zero as it was one of the cheapest options, however any RP2040 based board should be compatible, with support for the LED on the standard Raspberry Pi Pico too.
Initial setup requires a few steps, made easier by the UI.
Note: flashing lights warning for video, apologies. YouTube Tutorial
An addendum video covering the changes since that was made is available here: Addendum Tutorial
Downloads are available in the releases, they come in a few forms
- TomodachiDrawer.UI.Avalonia.#.#.#.platform.zip platform can be win64 for windows, osx-arm64 for Mac on ARM cpus, osx64 for Mac on x64 cpus, and linux64 and linuxarm64 for the same on linux. Download the one that is right for your computer, for mac users with any recent macbook arm64 should work.
For Linux and Mac users, you may need to run chmod +x binaryNameHere or go into your settings to allow it.
- Download the Desktop app here, for your platform: https://github.com/Lucas7yoshi/TomodachiDrawer/releases
- Extract the zip folder
- Run TomodachiDrawer.UI.Avalonia.[YourPlatform].exe (or similar for your platform)
- Plug in your RP2040-Zero (or Raspberry Pi Pico) to your PC while holding the boot button, or while connected hold BOOT and press reset while still holding boot.
- The program should recognize it.
- Press "Flash Base Firmware", this will install the code that handles sending the inputs.
- Repeat the steps to hold the boot button, then open your image by pressing the open button or dragging it in. It must be 256x256 or smaller.
- Select the Colour Matcher that looks best (arbitrary uses the full range), adjust the TSP solver time limit (explained in the ? button) as needed.
- Select "Export to RP2040" which will write it directly to the RP2040.
- Unplug the RP2040 and connect it to your switch (Note: Ensure "Wired Pro Controller Communication" is enabled in your settings!)
- Note: you must have Palette house open, on "pro" mode, the cursor in the top left of where you want it drawn, zoomed out, and your top colour to be set to black.
- Upon completion, the RGB LED on the Pi will go to a rainbow. If you disconnect it and reconnect it, it will draw it again. Connect to your PC to change the image!
The logic may be delicate for Linux and Mac platforms as those are ones I cannot test. If it does not detect it, you can still drag-and-drop the .uf2 included with the download to your Pi for step 7, and for the image data, select "export .uf2" and save it to a destination, and once done, drag and drop onto the RP2040 drive to flash it manually.
This project is a recreation of a mess of AI coded nonsense that was unmaintainable by me and too fixated to my setup. Please refrain from using AI irresponsibily if you wish to contribute. As I encountered several times, even just leaning on it to think of a general idea on how to approach a problem can send you down a overly complicated rabbit hole that you really dont need to, so be smart.
This project is split into the TomodachiDrawer.Core which houses all the main pathing logic, the output sinks, and colour palette info, as well as the UI's (which there is just one, the UI.Windows in WinForms)
The binary format used is .tdld, and is custom made by me for the purposes of controller microcontrollers. Technically speaking, this format is not at all bound to Tomodachi Life as it is just a generic way to represent inputs and delays in a compact form.
Visual Studio 2026 is neccasary as well as the .NET 10 runtime. For the TomodachiDrawer.Firmware, please see the README.md in the folder.
Contributions are encouraged, and if you want to make a new UI for a new platform you are more than welcome to, in fact, it would be greatly appreciated!
The main areas for improvement are optimizations to the routing logic, I strongly discourage letting AI go loose on this as well, as I found my prior ai-slop-proof-of-concept version was actively slower than even the more simpler logic in the first iteration of this!
This project is licensed under the GPL-3.0 license, read it in full here: LICENSE
The main motivator for this license is that it requires that derivatives share their work with the class openly if they derive from this.
This project depends on the following libraries:
- SkiaSharp (For image reading/writing)
- Google.OrTools (for the TSP solving)
- ImageSharp (For its WuQuantizer)

