Skip to main content

Splatlogger

A PID Grabber and player/match information logging tool for Splatoon, supporting Wii U and Cemu*.

*Cemu support has only been tested on Windows and Linux, though macOS should work as well.

Prerequisites (Wii U)

Your console will need to have either the Tiramisu or Aroma environment set up or have another way to run homebrew, such as Haxchi or the browser exploit.

On Tiramisu, use TCPGecko, Geckiine, or any other app with the TCPGecko server.

On Aroma, use TCPGecko-Plugin.

Usage

Running the executable

Windows and Linux executables are provided on the Releases page.

Run Splatlogger with:

path/to/Splatlogger-executable --ip IP [options] / --cemu [PID] [options]

Use the --ip target where IP is your Wii U's LAN IP address, or the -c / --cemu target to enable Cemu mode where PID is the process ID of the Cemu process (optional, should be detected automatically).

Open a command prompt/terminal window and drag the executable into it to automatically get the path.

On Linux, you might need to make the file executable first with chmod +x path/to/Splatlogger-executable

Running with Python

You can install Splatlogger as a package from PyPI:

pip install Splatlogger

To enable Cemu support, install with the cemu extra:

pip install "Splatlogger[cemu]"

(use pip install --upgrade to update from an older version)

Then run with:

splatlogger --ip IP [options] / --cemu [PID] [options]

(if that fails, try python -m splatlogger)

Use the --ip target where IP is your Wii U's LAN IP address, or the -c / --cemu target to enable Cemu mode where PID is the process ID of the Cemu process (optional, should be detected automatically).

To run from source instead, download the latest source archive from the Releases page and extract it, then open a terminal window in the extracted directory.

Install the required dependencies:

pip install -r requirements.txt / cemu_requirements.txt

Then move into the src directory and run:

python -m splatlogger --ip IP [options] / --cemu [PID] [options]

Options

  • --log-level option - Set how much data should be logged.

    • none - Don't create a log file.
    • standard - Log only basic player information, the same as what's printed to the console (default).
    • extended - Log all player information and additional match information.
    • stats - Same as above with the addition of player stats (points, K/D, win/lose) and disconnect detection. Requires the match to end to finish logging; if it ends abruptly, the stats won't be logged.
  • --service - Choose which network service you're using.

    • none - Disable fetching account info.
    • pretendo - Pretendo Network (default).
    • altendo - Altendo Network.
  • -a [option], --auto [option] - Enable auto logging. When enabled will automatically log every match you play. Also allows you to view information about the lobby/gathering while on the matching screen.

    • all - Save a log of all matches you play (default).

    • latest - Save a log of only the latest match.

      (These options don't affect anything if the log level is set to none)

  • --stack Address (in hex) - (Cemu only, optional) Beginning address of the stack space for Default Core 1 (Debug > View PPC threads). Only required for logging stats. If the default values don't work, you'll need to specify this manually.

    (example)
  • -sl, --single-log - Enable single log mode. When enabled, only one log file will be created for each day and logging will resume in that file instead of creating a new one for each logging session (default behavior for --auto latest).

  • -s, --silent - Disable printing logs to the console.

For example, splatlogger --ip 192.168.1.50 --log-level extended -a latest will save an extended log of the latest match you play (replace 192.168.1.50 with your actual IP address).

Logs are saved in your Documents folder in Splatlogger/logs/.

Configuration file

To avoid typing the same options every time, Splatlogger automatically creates a config.toml file in Documents/Splatlogger/ on first launch.

You can edit this file to configure your default settings. Any command-line arguments you pass will override the settings in the config.

Example config.toml:

# Splatlogger Configuration
# Uncomment and modify settings as needed. Command-line arguments will override these values.
# See the README for additional information.

# Target Wii U LAN IP address (omit if using Cemu)
ip = "192.168.1.50"

# Target network service: "pretendo", "altendo", or "none"
service = "pretendo"

# Log level: "standard", "extended", "stats", or "none"
log_level = "extended"

# Auto logging: "all", "latest" (omit for manual logging)
auto = "all"

# Flags (true / false)

# Enable single log file mode
single_log = true

# Disable printing logs to the console
# silent = false

# Cemu mode settings

# Cemu process ID (set to -1 to find automatically)
# Uncomment this option to enable Cemu mode
# cemu = -1

# Beginning address of the stack space for Default Core 1 (set only if stat logging doesn't work by default)
# stack = "0xE101440"

Troubleshooting

Only one program can be connected to TCPGecko at a time. If you have something else connected, disconnect it beforehand.

If it keeps failing to connect, make sure that:

  • Your device and Wii U are on the same local network.
  • Port 7331 isn't blocked by the firewall.
  • TCPGecko is running.

There's an issue with TCPGecko where opening an applet such as the Friend List and going back into the game causes memory reads to fail. If auto-logging is enabled, you'll need to restart Splatlogger after returning to the game.

For Cemu users on Linux, if you have ptrace protection enabled, you'll need to run Python as root. In that case, it's best to run the package from source or use the executable instead.

Important notes

  • The data collected by Splatlogger is public player info shared by the game with every user you play with in online matches.

  • Network IDs and Mii names are fetched from the network's account server; this can be disabled with --service none.

  • Splatlogger does not collect any sensitive information such as account email addresses or IP addresses.

  • All data collected stays on your machine and is not sent anywhere.

  • Please handle the logs responsibly. I do not encourage sharing other users' data without their permission, even if no real harm can be done with it.

Building the executable with PyInstaller

Set up a virtual environment and run pip install -r build_requirements.txt to install PyInstaller as well as the required dependencies.

Run:

python scripts/build.py [--upx-dir path/to/upx]

use --upx-dir if you're using UPX to compress the executable.

You can also use build.bat on Windows and build.sh on Linux to handle everything automatically.

(No builds or build script are provided for macOS as I don't have a Mac to test, and my attempts at virtualizing macOS have been unsuccessful.)

Acknowledgments

  • NWPlayer123 for the reference implementation of a TCPGecko library.

  • Everyone who found or helped me with finding the addresses/pointers used in this project, including: vyrval, javiig8, Tombuntu, oomi_the_octo and Pirlo.

  • c8ff/winterberry for finding a method to get Cemu's base address without reading the log file.

License

This project is licensed under the MIT License.

The executables include third-party components; their license texts are contained in THIRD_PARTY_LICENSES.md.

Metadata

Release files for Splatlogger 1.2.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for Splatlogger 1.2.4
File Size Uploaded
splatlogger-1.2.4.tar.gz 29.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for Splatlogger 1.2.4
File Interpreter ABI Platform
splatlogger-1.2.4-py3-none-any.whl Python 3 none any Details

Total release size: 62.3 kB

Release files / splatlogger-1.2.4.tar.gz

Download URL splatlogger-1.2.4.tar.gz
Size 29.6 kB
Tags Source
SHA-256 checksum
How to use checksums
39c78f28861879363019389cebaeabf67e8b7bd9f5236a94767757e7aaa24d43
BLAKE2b-256 checksum
How to use checksums
d063cd55db38728d16e1409fb98dd75eda0038337231c93480ce797027afd614
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release files / splatlogger-1.2.4-py3-none-any.whl

Download URL splatlogger-1.2.4-py3-none-any.whl
Size 32.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3124824fbbdedf581e0ff4db0ce19b21fa1eef00e7d7d293c85b4866de57a959
BLAKE2b-256 checksum
How to use checksums
4c99234eaeb48ad10947936b29826e8a23cb1c4676cc07c0e6e9c143e0711ba7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release history Release notifications | RSS feed

This release

1.2.4 This release

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page