Imports & Exports
Table of Contents
Exporting
To export your Tupperbox data you can use one of two tools:
- The Import/Export tool (recommended)
- The tul!export command on Discord
Both methods allow you to export either all or part of your data.
Exporting everything is the recommended way to back up your data in case you lose your account or accidentally run a destructive command like tul!purge.
Exporting is also a good way to share tuppers with other users - using the online tool, you can uncheck "Everything" and only check the tuppers you wish to share, and send the resulting file to a friend.
Tuppers you share in this way are copies and do not retain any link to your account.
This means edits you make to the tupper won't automatically be sent to your friends that have imported that tupper. If you want to share an updated version, you'll have to re-export it and have them re-import the new data.
Importing
To import Tupperbox data to your account you can use one of two tools:
- The Import/Export tool (recommended)
- The tul!import command on Discord
Importing data can overwrite some or all of your existing tuppers and groups! It's a good idea to export all your data first if you have data you might want later.
Imports work using a "merge" process:
- Tuppers in your account that aren't in the import data aren't touched.
- Tuppers in the import data that aren't in your account will be newly created.
- Tuppers in your account that are also in the import data will be overwritten by the import data.
Note that this merge happens by name, not by ID or anything else. This can result in unexpected overwrites if an imported tupper or group happens to have the same name as one you already have.
Export file format
The following is a JSON schema describing the latest Tupperbox export format. The latest export schema can be downloaded in file form here: tupperbox_export_schema.json
tupperbox_export_schema.json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://tupperbox.app/tupperbox_export_schema.json",
"title": "Tupperbox export",
"description": "The root object for the export data.",
"type": "object",
"required": [
"tuppers",
"groups"
],
"properties": {
"groups": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"id": {
"type": "integer",
"description": "An identifier used to reference this group from other objects, such as tuppers."
},
"user_id": {
"type": "string",
"pattern": "^\\d{1,20}$",
"description": "Discord user ID of the user that originally created this group."
},
"name": {
"type": "string",
"description": "Name for the group, used for both text commands and display."
},
"avatar": {
"type": [
"string",
"null"
],
"minLength": 1,
"maxLength": 128,
"description": "Avatar hash. Can be used to construct the group's avatar URL in the following format: https://cdn.tupperbox.app/group-pfp/{user_id}/{avatar}.webp"
},
"description": {
"type": [
"string",
"null"
],
"description": "Description of the group."
},
"tag": {
"type": [
"string",
"null"
],
"maxLength": 32,
"description": "A short string that serves to identify tuppers belonging to this group. It shows up at the end of group members' names when proxying."
}
}
}
},
"tuppers": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"brackets"
],
"properties": {
"id": {
"type": "integer",
"description": "An internal ID for the tupper, currently has no real use and is ignored on import."
},
"user_id": {
"type": "string",
"pattern": "^\\d{1,20}$",
"description": "Discord user ID of the user that originally created this tupper."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80,
"description": "A name for the tupper used for text commands, and also for display if no `nick` name is set."
},
"brackets": {
"type": "array",
"items": {
"type": "string"
},
"description": "A flat array of prefix-suffix pairs. Even if one is empty it must still be provided as an empty string. The array must have an even length and be given in the form [prefix, suffix, prefix, suffix, ...]."
},
"avatar_url": {
"type": "string",
"description": "A 'source URL' for the tupper's avatar. Might not always correspond to the URL obtained by the `avatar` property. If the avatar is cropped, this may point to the full uncropped version."
},
"avatar": {
"type": [
"string",
"null"
],
"minLength": 1,
"maxLength": 128,
"description": "Hash of the tupper's avatar image used in the following url syntax: https://cdn.tupperbox.app/pfp/{user_id}/{avatar}.webp."
},
"avatar_ext": {
"type": [
"string",
"null"
],
"minLength": 1,
"maxLength": 16,
"description": "File extension of the tupper's full-sized avatar image. Only used for premium uploads. If set, the full-sized avatar image can be found with this format: https://cdn.tupperbox.app/pfp/{user_id}/full/{avatar}.{avatar_ext}"
},
"banner": {
"type": [
"string",
"null"
],
"minLength": 1,
"maxLength": 128,
"description": "Hash of the tupper's banner image used in the following url syntax: https://cdn.tupperbox.app/banner/{user_id}/{banner}.webp"
},
"posts": {
"type": "integer",
"description": "Number of times this tupper has been used to proxy."
},
"show_brackets": {
"type": "boolean",
"description": "Toggles whether the tupper's brackets are stripped or kept in proxied messages."
},
"birthday": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "Designated birthday of a tupper. If set, a cake emoji is displayed on the tupper's name when it's their birthday."
},
"description": {
"type": [
"string",
"null"
],
"description": "Description of the tupper."
},
"tag": {
"type": [
"string",
"null"
],
"maxLength": 32,
"description": "Applied to the end of the tupper's name when proxying. Applied before group tag. Mostly made obsolete by `nick`, but kept as a legacy feature."
},
"nick": {
"type": [
"string",
"null"
],
"maxLength": 80,
"description": "Tupper nickname. If set, this is the name that actually shows during proxies. Useful to have a complex name show up in proxies while keeping a simple name for text commands."
},
"created_at": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "Original creation date of the tupper."
},
"group_id": {
"type": [
"integer",
"null"
],
"description": "Local ID of the group this tupper belongs to. If it matches a group also defined within this export file, the tupper's group will be set to that group."
},
"group_name": {
"type": [
"string",
"null"
],
"description": "Name of the group this tupper belongs to. Only used if there is a pre-existing group with this name, no pre-existing tupper to overwrite, and `group_id` doesn't match a group."
},
"last_used": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "Last time the tupper was used to send a proxy."
}
}
}
}
}
}Rebuilding image links
Tupperbox stores your tuppers' and groups' images on its own CDN, and the export file doesn't keep a full URL for every image. URLs for the CDN can be reconstructed using the following templates:
Cropped Profile Picture:
https://cdn.tupperbox.app/pfp/{user_id}/{avatar}.webp
Full Size Original (Premium feature, only if avatar_ext is present):
https://cdn.tupperbox.app/pfp/{user_id}/full/{avatar}.{avatar_ext}
Banner Image:
https://cdn.tupperbox.app/banner/{user_id}/{banner}.webp
Group Avatar:
https://cdn.tupperbox.app/group-pfp/{user_id}/{avatar}.webp