Skip to content

FSIDs and Filenames

James edited this page Jul 21, 2020 · 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 always 0
CEF78DA8 Last 8 digits of the console's MAC address

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]{6}0[0-9A-F]{8}/

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.

Clone this wiki locally