A native Splatoon 3 and Splatoon Raiders PC port using static recompilation and a modified ScarletNX!
  • C 80.2%
  • C++ 5.9%
  • Python 5.8%
  • CMake 2.5%
  • Objective-C 1%
  • Other 4.4%
Find a file
Doughston 4b30c84c55 [vk] End the pass after each draw when Pass dump split is on
rt_dump_split had a setting and vk_rtdump_split, but no caller, so a
split dump wrote one picture per pass as before. Each draw now ends its
render pass while the dumped frame records, so each draw gets a picture.

Ran: Splatoon 3 mode select with rt_dump_split=1; the dump had a picture
for each draw, which found the draw of the magenta banner.
2026-11-12 14:47:58 +01:00
.circleci [ci] Publish GitHub Actions releases straight to Forgejo without artifacts. 2026-11-12 00:59:24 +01:00
.claude [docs] Add the game-tag skill and name the tag in the rules 2026-11-10 15:11:23 -03:00
.github [ci] Publish GitHub Actions releases straight to Forgejo without artifacts. 2026-11-12 00:59:24 +01:00
cmake new scarletNX 2026-11-11 05:04:38 -04:00
dist [merge] Merge ScarletNX upstream (59b33a57) into inkypaint 2026-11-11 02:16:20 +00:00
docs Add decrypted NUP support for Splatoon Raiders 2026-11-12 04:50:52 -04:00
po [merge] Merge ScarletNX upstream (59b33a57) into inkypaint 2026-11-11 02:16:20 +00:00
scripts Fix Vulkan rendering compatibility and Apple driver packaging 2026-11-11 18:11:37 -04:00
src [vk] End the pass after each draw when Pass dump split is on 2026-11-12 14:47:58 +01:00
tests [tests] Stub the gs boot in the native graphics test. 2026-11-12 11:39:21 +01:00
tools new scarletNX 2026-11-11 05:04:38 -04:00
.clang-format [docs] The checklists no longer run scripts/format.sh 2026-10-30 00:18:17 -03:00
.gitignore [flake] fix 2026-11-12 10:31:13 +00:00
.mcp.json [docs] The options' new names in the docs and .mcp.json 2026-10-23 13:08:16 -03:00
CLAUDE.md [merge] Merge ScarletNX upstream (59b33a57) into inkypaint 2026-11-11 02:16:20 +00:00
CMakeLists.txt [build] Keep the build folder's path out of __FILE__ in logs. 2026-11-11 21:55:09 +01:00
CMakePresets.json [merge] Merge ScarletNX upstream (59b33a57) into inkypaint 2026-11-11 02:16:20 +00:00
codemagic.yaml [ci] Build dev-* prerelease tags on Codemagic. 2026-11-11 22:39:29 +01:00
CONTRIBUTING.md [merge] Merge ScarletNX upstream (59b33a57) into inkypaint 2026-11-11 02:16:20 +00:00
flake.lock [build] Add a Nix flake 2026-11-12 00:07:56 +00:00
flake.nix [flake] fix 2026-11-12 10:31:13 +00:00
inkypaint.sh [settings] Make the debug environment variables into Debug settings 2026-11-08 18:22:33 +01:00
LICENSE License the fork under GPL-3.0-or-later 2026-10-11 14:43:24 -05:00
pyproject.toml Replace Python pipeline with a C90 driver 2026-10-12 16:39:01 +10:00
README.md [merge] Merge ScarletNX upstream (59b33a57) into inkypaint 2026-11-11 02:16:20 +00:00
ROADMAP-INKYPAINT.md runner fixes sigh 2026-10-27 18:44:42 -04:00
ROADMAP.md [docs] Sort the documents by audience, platform and layer 2026-11-08 20:40:29 +00:00

inkypaint

Listed on PlayPorted

a splatoon 3 pc port!! a proper one (or as proper as it can be) with ScarletNX as a base, and online multiplayer via either LAN! (GRID0 ZeroTier) or a proper NSO replacement! (GRID0+)

Windows, Linux, and Apple silicon Macs! the launcher handles extracting your game, recompiling it, settings, mods, and signing into GRID0+.

Splatoon 3 support targets 11.3.0. Splatoon Raiders support is experimental: both launchers accept an already decrypted ExeFS/RomFS folder, without decryption keys. Compilation is working; gameplay is still being brought up. See Raiders development for the current limits.

dlc is optional! once the game is prepared, go to Game Files → DLC (optional) and install your own Expansion Pass packages, one at a time. no extra recompile needed. dlc gameplay hasn't been tested yet. you'll need your own game dump and your own console's keys, none of that comes with inkypaint.

Download

check releases for the downloads!

System Package
Windows 10/11 x86_64 the installer (-setup.exe), or the portable .zip
macOS 26 on Apple silicon inkypaint.app, zipped
Linux x86_64 (glibc 2.35 or newer) a portable .tar.gz: unpack it and run ./inkypaint

open the launcher and head to Game Files. you'll need:

  • the base game NSP (0100C2500FC20000)
  • the 11.3.0 update NSP (0100C2500FC20800, v2752512)
  • your prod.keys

then prepare the game! extraction and recompilation need about 13 GB of disk space. the first recompile can take half an hour to an hour depending on your machine, which is way too long, and something i want to improve. after that you can just press Play, you don't need to recompile every time you open it.

if you're going to use GRID0+, sign in when the launcher asks about online play so its patches can be included in that first recompile.

Multiplayer!

there are two ways to play with friends:

  • LAN / GRID0 ZeroTier: use the game's LAN play, with everyone on the same LAN or ZeroTier network. enable networking and pick your ZeroTier adapter in Settings > LAN play if you're using it.
  • GRID0+: the NSO replacement! sign in on the launcher's Online page and enable online play. this uses GRID0+'s servers, not Nintendo's, and needs GRID0+'s game patches compiled in.

LAN and GRID0+ are separate options, you don't need a GRID0+ account just to use LAN. networking details here.

Where it's at

it's playable, but there's still work to do! performance varies by machine and scene, and intense matches can struggle on lower end devices (i need to apply more optimization runs for other devices)

higher framerates are still experimental. (as in you can enable it, but theres a flickering bug that happens which im not sure how to fix yet, regardless the game should work fine provided ur device can hold the framerates.)

see the roadmap for what i'm working on.

Building

want to build it yourself? these are the package scripts. .github/workflows/release.yml uses them too.

Package Command Builds on
macOS app ./inkypaint.sh setup, then ./inkypaint.sh launcher (into build/launcher) macOS 26 with Xcode 26 and Homebrew
Windows ./inkypaint.sh windows, or scripts/package-windows.sh macOS or Linux: LLVM 22+ with lld, CMake, Ninja, NASM (makensis for the installer)
Linux scripts/package-linux.sh (scripts/linux-build-deps.sh installs what it needs on Ubuntu 22.04) Linux x86_64

Windows and Linux use the Qt launcher, macOS uses the SwiftUI launcher. more build details are in docs/BUILD.md.

Playing from the checkout on a Mac

if you're working from the checkout on a Mac, inkypaint.sh handles the steps below. put your own dumps and keys in these folders:

inkypaint/
  the rom/            Splatoon 3 [0100C2500FC20000][v65536][BASE].nsp
                      Splatoon 3 11.3.0 [0100C2500FC20800][v2752512][UPD].nsp
  decryption keys/    prod.keys, title.keys

then, in Terminal:

./inkypaint.sh doctor     # what your Mac has; tells you what is missing
./inkypaint.sh setup      # Homebrew packages (cmake, ninja, pkg-config, llvm) and Ryujinx's MoltenVK
./inkypaint.sh build      # the runtime and the driver, into build/macos
./inkypaint.sh prepare    # extract the game with the update (about 10 GB) and recompile it
./inkypaint.sh run 120    # play for 120 seconds (no number: until you close the window)

each step writes to logs/<step>-<time>.log, so if something goes wrong there's a log to check! you'll need Apple's command line tools (xcode-select --install) and Homebrew. recompiling uses a lot of memory, so an 8 GB Mac runs two compiles at a time. use INKY_JOBS=1 ./inkypaint.sh prepare if it's swapping too much. an interrupted prepare picks up where it stopped.

the game world fills your window, including taller MacBook screens and ultrawide monitors! the UI stays centered in 16:9 so it doesn't get stretched. F11 or Alt+Enter toggles fullscreen. the resolution scale still controls rendering quality, changing the aspect ratio doesn't automatically increase the pixel count. Use --adapt_aspect=0 to restore the original 16:9 presentation, or --aspect_ratio=2.333333 to force 21:9. --window_width=1280 --window_height=800 sets the initial window size; resizing it updates the aspect while playing.

How it works

ScarletNX does the heavy lifting here! it translates the game's ARM64 code into LLVM IR ahead of time, then compiles that into a native module for your machine. its runtime handles the Switch OS services and translates the GPU's commands and shaders to Vulkan (through MoltenVK on macOS).

inkypaint builds on that for Splatoon 3 specifically, with the rendering fixes, launcher, display support, and GRID0+ integration. the other console and Linux ABI drivers from upstream aren't part of this fork. there's more on the internals in docs/ARCHITECTURE.md.

License

GPL-3.0-or-later, same as ScarletNX! see LICENSE and credits.

Splatoon belongs to Nintendo. inkypaint isn't affiliated with or endorsed by Nintendo.