一个用于生成输入以控制 Switch 绘制 Tomodachi Life 中的任何内容的工具集,支持输出到 RP2040 或 RP2350。
一个用于生成输入以控制 Switch 绘制 Tomodachi Life 中的任何内容的工具集,支持输出到 RP2040 或 RP2350。
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. Our testing seems to suggest this is partially due to the 3D preview causing the lag, but even with drawings with non-3d previews, it can still desync for longer drawings. The best way to make it work is to create stamps and do one corner at a time and then combine it at the end. This is, understandably, quite annoying. But the alternative is slowing the program down by 10x turning a 2 hour drawing into 20 hours, which is not exactly realistic. If you figure out an alternative way to avoid the lag, please open an issue!
Update as of 2026-05-28: Per #97 this may be partially induced by playing in docked mode. You can draw in handheld mode, however you are then limited by battery life. The game running at 1080p, plus being in the dock which does not have any active fan (unlike the Switch 2) may be causing thermal issues that induce the lag. Worth trying if you are limited to the Switch 1.
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 or ESP32-S3 board, 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.
As of 0.6.0 the program is also compatibile with RP2350 based boards, such as the RP2350-Zero or the Raspberry Pi Pico 2 or 2W
ESP32-S3 boards are also supported. The recommended board is the Waveshare ESP32-S3-Zero - same physical form factor as the RP2040-Zero and onboard WS2812. Other tested S3 boards (Espressif DevKitC-1 in both LED-rev variants, DevKitM-1, Adafruit QT Py ESP32-S3, Lolin S3 Mini, M5Stack AtomS3) ship pre-built in the release - just pick yours from the "Board" dropdown on the ESP32-S3 tab before flashing. The board choice only affects which GPIO the firmware drives for the status LED; everything else is identical. For unlisted boards you can build a custom firmware via idf.py menuconfig - see TomodachiDrawer.Firmware.ESP32S3/README.md. Note that this needs an ESP32-S3 specifically - the original ESP32, ESP32-C3/C6/H2 lack the USB-OTG peripheral required to enumerate as a Switch controller.
One UX wrinkle for the single-port S3 boards (S3-Zero, QT Py S3, AtomS3, etc): once the firmware is running it's pretending to be a Switch controller on that one USB-C port, so esptool can't reach it any more. To re-flash a drawing you have to put the chip back into ROM bootloader mode first - hold BOOT while plugging into the PC (or hold BOOT and tap RST if the board has both buttons). Boards with two USB-C ports (DevKitC-1, DevKitM-1) don't have this problem because their second port is a separate USB-UART bridge that esptool can always reach. If you'll be iterating on drawings a lot, the dual-port boards are friendlier.
Initial setup requires a few steps, made easier by the UI.
Updated TomodachiDrawer Tutorial
Downloads are available in the releases, they come in a few forms
For Linux users you will need to MAY need to run chmod +x to make the executable... executable.
For mac users, there is some important steps to follow to make the program runnable included in a txt file with the program.
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.
The UI has a separate "ESP32-S3 Output" panel below the RP2040 one. Plug the board in (use the left UART port if you have a dual-port DevKitC-1; otherwise just the one port), click Re-scan, and it'll identify the chip + show what firmware is on it. From there:
USB, not the left UART one; on single-port boards like the S3-Zero it's just the one port).For single-port S3 boards, you'll need to put the chip back into ROM bootloader mode before each new Export To ESP32-S3 - hold BOOT while plugging in. Dual-port boards skip this step because esptool can reset the chip via the UART port's DTR/RTS signals.
Runtime: the BOOT button replays the loaded drawing once playback finishes, or aborts a drawing mid-playback if you press it during playback (handy for long drawings - the RP2040 path needs a power cycle for the same).
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 (RP2040, Pico SDK) and TomodachiDrawer.Firmware.ESP32S3 (ESP32-S3, ESP-IDF), please see the README.md in each 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:
The ESP32-S3 firmware (TomodachiDrawer.Firmware.ESP32S3) additionally uses:
暂无开放 Issues,或尚未同步最近议题。