Skip to content

FSIDs and Filenames

James edited this page Aug 19, 2021 · 9 revisions

Flipnote Studio IDs

Overview

Flipnote Studio IDs are the primary method of user identification on Flipnote Studio. They consist of 16 hexadecimal (0-9, A-F) digits.

They are generated when the user first starts Flipnote Studio, and are stored in savedata unless the system is reset and/or the Flipnote Studio app is deleted.

Dissection

Using 1440D700CEF78DA8 as an example Flipnote Studio ID:

Value Description
1 Region ID
440D70 Unknown - possibly generated from a per-console seed?
0 This is nearly always 0 - see below
CEF78DA8 Last 8 digits of the console's MAC address

Zero constant

In most FSIDs, the character at index 7 will always be 0. The only known exception is the FSID that Nintendo used for their contest Flipnotes (such as the Zelda 25th Anniversary, for example), which is 14E494E35A443235.

Region ID values

Value Description
0 Japan - These are from Version 1, and carried over when updated to version 2
1 Japan - Version 2 and above
5 Americas
9 Europe and Oceania

Regex

This regex can be used to check if a Flipnote Studio ID is valid:

[0159]{1}[0-9A-F]{15}

Flipnote Filenames

Dissection

Using F78DA8_14768882B56B8_030 as an example Flipnote Filename:

Value Description
F78DA8 Last 6 digits of the console's MAC address
_ Constant
14768 Likely based on console time and/or date
882B56B8 Random
_ Constant
030 Number of edits

Filesystem Filenames

When saved on the system memory or SD card, the first character of the filename is used as a kind of checksum against the rest of the filename. As a result, it will not match the current filename field in the PPM metadata.

Here's a Python 3 implementation of how the checksum character is calculated:

checksumDict = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'

# filename should be the current filename as a string e.g 'F78DA8_14768882B56B8_030'
def calc_check_digit(filename):
  # sum starts out as the first byte of the current filename as stored in the PPM metadata 
  sumc = int(filename[0:2], 16)
  for i in range(1, 16):
    char = ord(filename[i])
    # sumc should stay within the uint8 range
    sumc = (sumc + char) % 256 
  return checksumDict[sumc % len(checksumDict)]

Regex

This regex can be used to check if a Flipnote filename is valid:

[0-9A-F]{6}_[0-9A-F]{13}_[0-9]{3}

Alternatively, this regex can be used for Flipnote filenames with the filesystem checksum added:

[0-9A-Z]{1}[0-9A-F]{5}_[0-9A-F]{13}_[0-9]{3}

Notes

In most cases, the first 6 digits of a Flipnote filename match the last 6 digits of the author's Flipnote Studio ID, however if the console MAC address has changed since the user's Flipnote Studio ID was generated, the last six digits of a Flipnote filename will not be the same as the last six digits of the creator's Flipnote Studio ID.

While this is a rare occurrence, it can happen if the DSi console has been repaired after the Flipnote Studio ID was generated (the MAC address is stored on the WiFi card -- if that's replaced then the MAC address changes).

When writing a file, it uses the current MAC address in the filename, not the Flipnote Studio ID.