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

# Installation

> Want the short version? `install/INSTALL.md` is the quick path. This page is the full reference.

## Steps

{% stepper %}
{% step %}

## Add the resource folders

Drop **both** folders into your resources directory. If you use a bracketed category folder (`[addons]`, `[tyrix]`, …) put them in the **same** one.

| Folder               | What it is                                                         |
| -------------------- | ------------------------------------------------------------------ |
| `tyrix_frames`       | the script                                                         |
| `tyrix_frames_props` | the streamed canvas models — 70 drawables, a ytyp and a shared txd |
| {% endstep %}        |                                                                    |

{% step %}

## Add resources to `server.cfg`

Add to `server.cfg`, in this order:

```
ensure tyrix_frames_props
ensure tyrix_frames
```

{% endstep %}

{% step %}

## Register canvas items

Register the canvas items with your inventory — see [Item Setup](/docs/script-resources/tyrix-frames/item-setup.md).

Skip this entirely if you run [Standalone](/docs/script-resources/tyrix-frames/standalone.md).
{% endstep %}

{% step %}

## Grant yourself admin

```
add_ace group.admin tyrix.frames.admin allow
```

{% endstep %}

{% step %}

## Restart the server

The database tables create themselves on first start — watch for `[tyrix_frames] schema ready (v2)` in the console.

`schema.sql` is included if your host requires a manual import, but the runtime executes an identical copy, so you do not need it.
{% endstep %}
{% endstepper %}

## Why two resources

Restarting a script that carries streamed assets re-mounts them every time, and repeated in-session remounts degrade GTA's streaming memory until object creation starts failing. Keeping the models in their own resource means `restart tyrix_frames` never touches them.

Restart `tyrix_frames_props` only when the models themselves change — which for most servers is never.

## Dependencies

| Dependency           | Required        | Purpose                                                                                |
| -------------------- | --------------- | -------------------------------------------------------------------------------------- |
| `ox_lib`             | Yes             | Callbacks, notifications, context menus, locale loading.                               |
| `oxmysql`            | Yes             | Database driver.                                                                       |
| `tyrix_frames_props` | Yes             | The canvas models. Ships with the resource.                                            |
| `es_extended`        | One of the four | Framework — ESX Legacy.                                                                |
| `qb-core`            | One of the four | Framework — QBCore.                                                                    |
| `qbx_core`           | One of the four | Framework — QBox.                                                                      |
| *(none)*             | One of the four | [Standalone](/docs/script-resources/tyrix-frames/standalone.md) — no framework at all. |
| `ox_inventory`       | Auto-detected   | Inventory. Photos survive a pickup.                                                    |
| `qb-inventory`       | Auto-detected   | Inventory, including ps / lj / qs forks. Photos survive a pickup.                      |
| ESX native           | Auto-detected   | Inventory. No item metadata, so photos do **not** survive a pickup.                    |
| `ox_target`          | Auto-detected   | Third-eye interaction.                                                                 |
| `qb-target`          | Auto-detected   | Third-eye interaction. Used when `ox_target` isn't running.                            |

{% hint style="info" %}
**Neither a target resource nor an inventory is a hard dependency.** They are deliberately absent from the manifest's `dependencies` block, because hard-depending on one would stop the resource starting on a server that runs the other. If no target resource is found the script falls back to a built-in `[E]` prompt; if no inventory is found you can run [itemless](/docs/script-resources/tyrix-frames/standalone.md).
{% endhint %}

## Verifying the install

On a clean start the console should show, in order:

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

The third line reports what was detected. If it says something you did not expect, pin it explicitly with `Config.Inventory` — see [Configuration](/docs/script-resources/tyrix-frames/configuration.md).

You should see **no** warnings from `tyrix_frames_props`. In particular, `was set to a compressed texture format` or `uses N MiB of physical memory` mean the prop pack has been modified or replaced with an older build.

## Framework Support

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

Detection is automatic for the three frameworks. **Standalone is never auto-detected** and must be set explicitly — see [Standalone](/docs/script-resources/tyrix-frames/standalone.md) for why.

## Updating

Replace the `tyrix_frames` folder and restart it. Schema migrations run automatically on start; see [Database](/docs/script-resources/tyrix-frames/database.md).

Only replace `tyrix_frames_props` when a release note says the models changed.
