# Installation > Setup guide for ML Tattoos Category: TATTOOS · Source: https://miciomods.it/docs/ml-tattoos-installation · Last updated: 2026-07-09 ## Overview ML Tattoos is a tattoo shop resource. Players browse vanilla GTA overlay tattoos and player custom-image tattoos on a 3D rotating preview, then apply or remove them. Staff manage custom tattoos, restrictions and factions from a built-in admin panel. ## Quick Start - Download the package from `https://portal.cfx.re` - Extract it to your `resources` folder, keeping `ml_tattoos` and `ml_tattoos_meta` together - Add to `server.cfg`: **server.cfg** ```cfg ensure oxmysql ensure ox_lib ensure ml_bridge ensure ml_tattoos_meta ensure ml_tattoos ``` > **WARNING:** Load Order > > `ml_tattoos` must start AFTER `ml_bridge`, `ox_lib`, `oxmysql` and `ml_tattoos_meta`. The meta companion must be present, or custom tattoos will not render. ## Database Tables are created automatically on first start: - `ml_tattoos_players`: Each player's applied tattoos - `ml_tattoos_custom`: Custom-image tattoo definitions (image, position, visibility, owner) - `ml_tattoos_admins`: In-panel admin whitelist - `ml_tattoos_restrictions`: Per-tattoo job/faction restrictions - `ml_tattoos_credits`: Per-player use balances (solo/faction/ytd) - `ml_tattoos_credit_log`: Audit trail of every use grant, consume, refund and revoke - `ml_tattoos_ytd_unlocks`: Which full-body packs each player has unlocked The schema includes automatic migrations for older installs; they run safely and skip on already-healthy databases. ## Item Registration Items are only needed when you use item payment or the item-kit presets. Copy the definitions from `_INSTALL/items.lua` into your inventory: **ox_inventory/data/items.lua** ```lua ['tattoo_kit'] = { label = 'Tattoo Kit', weight = 200, stack = true, close = true, description = 'A portable tattoo kit. Use it to apply one tattoo.', }, ['tattoo_kit_basic'] = { label = 'Basic Tattoo Kit', weight = 200, stack = true, close = true }, ['tattoo_kit_premium'] = { label = 'Premium Tattoo Kit', weight = 200, stack = true, close = true }, ['tattoo_kit_custom'] = { label = 'Custom Tattoo Voucher', weight = 50, stack = true, close = true }, ``` > **INFO:** Match your config > > Register only the items you actually reference in `Config.ItemPerTattoo`, `Config.ItemPresets` and `Config.UnlockableHashes`. The full list lives in `_INSTALL/items.lua`. > **WARNING:** Meta data must be writable > > The custom-tattoo overlay pool is written into `ml_tattoos_meta/data` at boot, so that folder must be writable at runtime. On a read-only deploy, grant write access to it before starting the resource. ## Verify After starting, the console prints: ```text [ml_tattoos] Resource started [ml_tattoos] thank you for choosing miciomods.it ``` Open the shop in-game through a configured shop location, a tattoo-kit item, the `/opentattoo` admin grant, or the `openShop` export. Admins open the management panel with `/tattooadmin`. > **INFO:** Maintenance > > Run `/reloadtattoos` to reload tattoo data without restarting the resource. **Troubleshooting** - Custom tattoos do not appear: Confirm `ml_tattoos_meta` is present and started, and that its `data` folder is writable. Restart `ml_tattoos` so the pool is rebuilt and the meta resource restarts. - UI does not open: Check the F8 console for resource errors and confirm `ml_bridge` and `ox_lib` started first. - Admin panel missing: The player needs the `ml_bridge` permission set in `Config.AdminPermission` (default `'admin'`), or an entry in the in-panel admin whitelist. - Tattoos not saving: Confirm `oxmysql` started before `ml_tattoos` and that the tables were created on boot. - A custom image is rejected: Images must be served over HTTPS from an approved host. Re-upload to a supported image host, or enable the in-game uploader with FiveManage. - Tebex donations not delivering uses: Confirm `ml_tebex` is started, the convars are set, and each package id in `Config.TebexPackages` matches the identifier on your Tebex store.