> For the complete documentation index, see [llms.txt](https://docs.rainmad.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rainmad.com/resources/scenes-draw-everywhere/troubleshooting.md).

# Troubleshooting

Work through the sections in order; the first three cover nearly every report.

{% stepper %}
{% step %}

## Nothing renders / the resource misbehaves at start

Read the **server** console from the last `rm_scenes` start:

* `ox_lib 3.30.0 or higher recommended` / `oxmysql 2.10.0 or higher recommended`: update the dependency; older versions are the usual cause of odd callback failures.
* `cfg.bridge.<category> = <name> but no adapter registered`: the value doesn't match a file in `rm_scenes/bridge/`. Check the spelling against the files in `bridge/notification/`.
* No `loaded N scenes` line: the database connection never came up; fix oxmysql first.

Also make sure the player didn't flip **Disable scene rendering** in the [scene list](/resources/scenes-draw-everywhere/scene-list.md); it's per-client and easy to forget.
{% endstep %}

{% step %}

## One specific scene doesn't render

* **Check its row in the** [**scene list**](/resources/scenes-draw-everywhere/scene-list.md) **first.** The eye icon lights up while the scene actually renders near you (line-of-sight aware), which quickly separates "not rendering" from "rendering somewhere you're not looking".
* **Attached to a missing object.** The scene's details show *Attached to object*; it only renders while that object exists near its spot. **Detach** it from the list to pin it at its world position.
* **Expired or pruned.** Expiry (`deletedOn`) and the unseen-scene cleanup (`cfg.scenes.deleteUnseenAfter`) both remove scenes at resource start. If it's gone from the list, it's gone from the database.
* **Out of range or occluded.** Scenes render within `cfg.scenes.renderDistance`; with `cfg.scenes.occlusion = true` they're also skipped behind walls. Set `occlusion = false` briefly to rule that out.
  {% endstep %}

{% step %}

## Scenes go blank/white in dense areas

More distinct scenes are in range than the runtime texture pool holds, so the farthest ones give up their texture. Raise `cfg.scenes.texturePool.max` (each slot is \~4 MB of texture memory at the default 1024 size) or lower `renderDistance`.
{% endstep %}

{% step %}

## A scene flickers against its surface

Z-fighting: the drawing sits exactly on the geometry. During placement, nudge the depth one or two taps with `Q`/`E` until it settles. For an existing scene, use **Move** and re-place it with a small depth nudge.
{% endstep %}

{% step %}

## Saving fails

The error notification tells you why:

* **Invalid data:** the image failed server-side validation. Animated sources (GIF/APNG) are rejected, as is anything that isn't a real png/webp or is oversized.
* **Rate limited:** each player gets a budget of 20 scene mutations (saves, edits, moves, copies, URL downloads) per minute.
* **No permission:** `cfg.auth` blocks the player, or a job/gang `locations` restriction doesn't cover the spot; the zone check runs server-side on every save, move and copy.
* **Scene limit reached:** `cfg.scenes.limitPerPerson`; the player must delete an old scene first (merging your own scenes never blocks on the limit).
* **Request timed out:** very large drawings stream to the server at `cfg.scenes.imageBps`; if timeouts persist on legit saves, raise that value.
* **Database error:** the save was rejected because a query failed; the server console shows the exact SQL error at that moment.

  For the exact verdict behind a generic "Scene could not be saved.", run `setr ox:printlevel:rm_scenes verbose` and read the client console (F8): every save logs its payload size, timeout and the server's reply (`no_permission`, `db_error`, `timeout`, ...).
  {% endstep %}

{% step %}

## URL images won't load in the editor

The download runs on the **server**, with hard rules: https only (`cfg.scenes.allowHttpImageUrls = true` also permits plain http), 15 MB cap (`cfg.scenes.maxImageUrlBytes` adjusts it), at most 3 redirects, and the file's actual bytes must be webp/png/jpg. Animated GIF/APNG are rejected on purpose (only a single frame would bake into the drawing). Hosts that resolve to private or internal addresses are refused; link images from a proper public host (imgur, discord CDN, your web server behind a public DNS name).
{% endstep %}

{% step %}

## A custom font doesn't show up

In `cfg.nui.fonts`, `family` must match the font's **real** family name (as declared by the CSS/font file), and `url` must be a stylesheet or direct font file the client can reach. Fonts load when the editor opens, so a wrong URL fails silently to the default font.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
Still stuck? Open a ticket in our [Discord](https://discord.gg/rainmad) with your server console output from a fresh resource start and a short clip or screenshot of the issue.
{% endhint %}
