> For the complete documentation index, see [llms.txt](https://tyrix.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tyrix.gitbook.io/docs/script-resources/tyrix-frames/troubleshooting.md).

# Troubleshooting

## Read the console first

Most problems announce themselves on start. A healthy boot looks like:

```
[tyrix_frames] schema ready (v2)
[tyrix_frames] loaded 128 frame(s)
[tyrix_frames] inventory: ox (metadata supported)
```

Anything the resource is unhappy about — a bad config value, an undetected framework, a missing inventory — is printed in yellow or red at start, with what it fell back to.

## Installation

| Symptom                                               | Cause                                                                                                                                                                    |
| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Canvases invisible, console shows model load failures | `tyrix_frames_props` isn't started, or started **after** `tyrix_frames`                                                                                                  |
| `No supported framework detected`                     | Your framework started after this resource — set `Config.Framework` explicitly. If you genuinely run none, set it to `'standalone'`                                      |
| `No supported inventory detected`                     | Your inventory started late, or is an unsupported fork — set `Config.Inventory` explicitly. On a server with no inventory, use standalone or `Config.Inventory = 'none'` |
| Nothing happens at all, no console output             | The resource never started. Check for a Lua error above, and that both folders are in your resources directory                                                           |

## Items

| Symptom                                              | Cause                                                                                                                                                                                                             |
| ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Item does nothing when used                          | **ox:** the `server.export` line is missing, or ox wasn't restarted. **qb:** `useable = true` is missing, or qb-core wasn't restarted. **ESX:** the `items` row wasn't inserted, or es\_extended wasn't restarted |
| Two canvases share one stack and a photo vanishes    | **ox:** `stack = false` is missing. **qb:** `unique = true` is missing                                                                                                                                            |
| Item is consumed even though placement was cancelled | `consume = 0` is missing from the ox item definition                                                                                                                                                              |
| Photo is lost when a canvas is picked up             | Expected on ESX native and itemless — neither can store metadata. The startup log says which inventory was detected. Use ox\_inventory or qb-inventory to keep photos                                             |
| `/placecanvas` does nothing                          | It only exists in itemless mode. On a framework server, use the inventory item                                                                                                                                    |

## Photos

| Symptom                                            | Cause                                                                                                                                      |
| -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| "That image host isn't allowed"                    | The link isn't on `Config.AllowedHosts`, or isn't a direct image link. Right-click the image → Copy image address, don't copy the page URL |
| "Couldn't verify that image"                       | The host didn't respond within 5 s, the link is dead, or the server is saturated with probes. Try again                                    |
| GIF rejected                                       | Deliberate. Static JPEG, PNG and WebP only                                                                                                 |
| Photos that worked yesterday are blank today       | Almost always a Discord CDN link. Those expire after \~24 h, which is why Discord is off the whitelist by default                          |
| Canvas shows blank at a distance, correct up close | More than `Config.MaxActiveDuis` canvases are competing for renderer slots. Raise it or spread them out                                    |

## Rendering

| Symptom                                                                          | Cause                                                                                                                                                                                               |
| -------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Two nearby canvases show the same photo — even a blank one mirroring a neighbour | More than 10 same-**size** canvases within render distance must share prop models. Mix sizes, or space clusters out. See [Performance](/docs/script-resources/tyrix-frames/performance.md)          |
| Magenta or rainbow noise on a canvas at distance                                 | The prop pack has been modified or replaced with an older build. The `script_rt_*` textures must be **uncompressed, single mip**. Check the client log for `was set to a compressed texture format` |
| `Asset … uses N MiB of physical memory` warning                                  | Same cause — an older or re-optimised prop pack                                                                                                                                                     |

## Permissions

| Symptom                                    | Cause                                                                                                                                                                   |
| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/frameadmin` says no permission           | Neither the ace nor a framework group matched. `add_ace group.admin tyrix.frames.admin allow`, and check `Config.Admin.groups` for your framework                       |
| Admin panel opens then immediately closes  | The framework hadn't loaded your character when the panel asked. Rejoin, or check the framework is actually running                                                     |
| Player sees no options on their own canvas | Their character identifier doesn't match the `owner` on the row — usually a framework that assigns identifiers late. The client re-syncs automatically once it resolves |

## Limits

| Symptom                                   | Cause                                                                                                                    |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| "You've reached your canvas limit"        | Working as designed. Raise `Config.PlacementLimit.default`, add an override in `config_sv.lua`, or have them pick one up |
| A player has more canvases than the limit | Either the limit was lowered after they placed them — which never deletes anything — or they have an override            |

## Logging

| Symptom                                         | Cause                                                                                                                |
| ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| Nothing appears in Discord                      | `enabled = false`, every webhook is empty, or that log type is off                                                   |
| `discord log queue full - dropped N message(s)` | Too many log types enabled for your population. Turn off `photo_transform`, `gallery_add` and `gallery_delete` first |

## Getting unstuck

`/tf_closeeditor` and `/tf_closeadmin` release NUI focus if a panel ever fails to hand control back. Both work from the F8 console.

## Still stuck

Turn on `Config.Debug`, reproduce, and collect:

* The **server** console from resource start (the detection lines matter)
* The **client** F8 console
* Output of `/tf_render` while looking at the problem canvas
* Your framework, inventory and target resource

{% hint style="warning" %}
Turn Debug back off afterwards — it exposes `/frameplace` and `/framedel` to admins.
{% endhint %}
