Skip to content

Saved Designs

How saved designs work, what is stored, and what must be configured in 0r-clothing_designer

How saved designs work, what is stored, and what must be configured in 0r-clothing_designer

Saved designs are optional.

If you do not need them, turn them off:

lua
Config.SavedDesigns.Enabled = false

If you do want them, read this page and make sure the setup guide was completed first.

1. What Must Exist Before Saved Designs Work#

All of these must be true:

  • Config.SavedDesigns.Enabled = true
  • the SQL table was imported
  • oxmysql is running
  • a valid remote preview storage provider is configured

If one of these is missing, save and restore flows can fail.

2. What Gets Saved#

When a player saves a design, the resource stores:

  • project metadata
  • template metadata
  • normalized workspace JSON
  • a remote preview image reference
  • remote image-layer asset references when needed

Each saved design is tied to the player's license identifier.

3. Why Remote Storage Is Needed#

Saved designs do not only store database rows.

The preview image and some uploaded image-layer assets are stored through a remote provider, then referenced by the saved design record.

Current providers:

  • discord_webhook
  • fivemanage

4. Provider Setup#

Discord webhook#

Use this when you want preview assets uploaded to a Discord webhook destination.

Required field:

lua
Config.SavedDesigns.Storage.DiscordWebhook.Url = ""

Optional display field:

lua
Config.SavedDesigns.Storage.DiscordWebhook.BotName = "0Resmon Clothing Designer"

FiveManage#

Use this when you want preview assets uploaded through FiveManage.

Required field:

lua
Config.SavedDesigns.Storage.FiveManage.ApiKey = ""

Optional path field:

lua
Config.SavedDesigns.Storage.FiveManage.BasePath = "clothing-designer/saved-designs"

5. Choosing a Primary Provider and Fallback#

Set the main provider here:

lua
Config.SavedDesigns.Storage.Provider = "discord_webhook"

Fallback providers are tried in order if the primary one fails:

lua
Config.SavedDesigns.Storage.FallbackProviders = {
    "fivemanage"
}

Simple rule:

  • set one primary provider
  • add fallback providers only if you actually want them

6. Delete Behavior#

If this setting is enabled:

lua
Config.SavedDesigns.Storage.DeleteRemoteOnDesignDelete = true

deleting a design also queues remote cleanup for:

  • the saved preview image
  • remote image-layer assets referenced by that workspace

This cleanup is asynchronous, so the design delete can succeed even if remote cleanup finishes later.

7. Queue Monitoring#

The resource keeps separate upload and cleanup queues for saved design storage work.

You can inspect queue stats with:

lua
exports["0r-clothing_designer"]:getSavedDesignStorageQueueStats()

This is useful when you want to confirm whether uploads or cleanup jobs are stuck.

8. Fast Checklist#

If saved designs do not work, check these first:

  1. the SQL file was imported
  2. oxmysql is running
  3. Config.SavedDesigns.Enabled = true
  4. the selected provider credentials are valid
  5. the remote provider is not blocked or rate-limited

If those are correct and it still fails, continue with the troubleshooting page.