> 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.md).

# Tyrix Frames 🖼️

Custom photo canvases for FiveM. Players place a framed canvas anywhere in the world, set a photo from a direct image link, and adjust how that photo sits inside the frame - live, on the real prop, while they look at it.

Seven canvas sizes, a cinematic editor, a per-player photo collection, a full admin panel, and Discord logging with image embeds.

Built on ox\_lib + oxmysql. ESX, QBCore, QBox and standalone are all first-class, and so are ox\_inventory, qb-inventory, ESX native and itemless.

## Features

* **Seven canvas sizes** - 8×8, 8×10, 11×14, 12×12, 16×20, 20×24, 20×30, one inventory item each.
* **Place anywhere** - aim and press `E`, or hold `G` for a 6-DOF precision gizmo. Canvases snap flush to walls automatically and stand up correctly on floors. Works in **any routing bucket**, so housing, apartments and instances are all supported without integration.
* **Cinematic editor** - the camera eases in, the canvas fills the left of the screen and the panel sits on the right. Move, scale and rotate the photo *inside* the frame with Fit / Fill / Reset. The real canvas updates as you drag; Cancel reverts it.
* **Photo collection** - every photo a player uses is saved for reuse, with delete and paging. Capped, never silently evicted.
* **Photos travel with the item** - pick a canvas up and the photo comes with it, stored in the item. Place it again and the photo and its adjustment return.
* **Move Frame** - re-open the gizmo on a placed canvas without picking it up.
* **Admin panel** - `/frameadmin` lists every canvas on the server with thumbnails, owner, size, bucket, coordinates and dates. Search, filter, sort, teleport, wipe a photo, delete.
* **Placement limits** - per character, with higher allowances for specific players.
* **Discord logging** - per category, queued and rate-limited, with the photo embedded on every `photo_set`.
* **Five languages** shipped, with per-key fallback to English.

## Compatibility

|               | Supported                                                                       |
| ------------- | ------------------------------------------------------------------------------- |
| **Framework** | ESX Legacy · QBCore · QBox · standalone (no framework)                          |
| **Inventory** | ox\_inventory · qb-inventory (incl. ps / lj / qs forks) · ESX native · itemless |
| **Targeting** | ox\_target · qb-target · built-in `[E]` prompt — *all optional*                 |
| **Language**  | English · Spanish · French · Portuguese · German                                |

Everything above is detected at runtime. Nothing has to be told which framework, inventory or target resource you run.

| Framework  | Status |
| ---------- | ------ |
| ESX        | ✅      |
| QBCore     | ✅      |
| QBox       | ✅      |
| Standalone | ✅      |

## Quick Start

The download contains **two** folders and both are required:

```
ensure tyrix_frames_props
ensure tyrix_frames
```

Add the canvas items to your inventory, restart, and the database tables create themselves. Full walkthrough on the [Installation](/docs/script-resources/tyrix-frames/installation.md) page.

## Where to next

* Getting it running → [Installation](/docs/script-resources/tyrix-frames/installation.md)
* Registering the seven canvas items → [Item Setup](/docs/script-resources/tyrix-frames/item-setup.md)
* Every setting explained → [Configuration](/docs/script-resources/tyrix-frames/configuration.md)
* What your players actually do → [Player Guide](/docs/script-resources/tyrix-frames/player-guide.md)
* Running the server without a framework → [Standalone](/docs/script-resources/tyrix-frames/standalone.md)
* How it stays at 0.00 ms → [Performance](/docs/script-resources/tyrix-frames/performance.md)
* Something is wrong → [Troubleshooting](/docs/script-resources/tyrix-frames/troubleshooting.md)
