<!-- fivemad.com, Markdown source of https://fivemad.com/docs/tools/tattoo-editor -->
> Source: https://fivemad.com/docs/tools/tattoo-editor
> Section: Tools
> Tags: tattoos, overlays, decorations, freemode, 3D
> Tool: https://fivemad.com/tools/tattoo-editor
> Last updated: 2026-09-25
> Site map for assistants: https://fivemad.com/llms.txt

# 3D Tattoo Editor

How to place a tattoo on the freemode ped in 3D by zone, tune its uvPos, scale and rotation, and get the overlay XML or a Durty Cloth Tool project out of it.

The 3D Tattoo Editor lets you upload a tattoo image, pick a body zone and position it on `mp_m_freemode_01` or `mp_f_freemode_01` in 3D. You click the body to place it, fine tune the numbers, then copy the overlay XML or hand everything to Durty Cloth Tool. It is for anyone making addon tattoos who is tired of guessing `uvPos` values and restarting the game to check them.

Every snippet block on this page has a **Lua / JS / TS / C#** switcher in its corner. The choice is remembered across the site, and [the runtimes page](/docs/development/runtimes) explains what changes between them.

## What it is for

GTA V tattoos are overlays: each one sits in a body zone (head, torso, each arm, each leg) and is placed by three values in the overlay XML:

| Value | Meaning |
| --- | --- |
| `uvPos` | Centre of the tattoo inside the zone, `x` and `y` from 0 to 1. |
| `scale` | Size, `x` and `y` from 0 to 1. |
| `rotation` | Angle in degrees. |

These numbers are hard to guess by hand. The editor shows the tattoo on the real freemode body while you move it, and what you see is where the game puts it.

## Quick start

1. Open the [tool](/tools/tattoo-editor). The male ped loads in the viewer.
2. Under **Tattoo image**, click **Upload tattoo image** or drop a PNG, JPG or WebP on it. No image yet? Click **No image at hand? Try a sample** for a test design with an arrow that shows which way is up.
3. Pick **Male** or **Female** and the **Zone**.
4. Click the body where the tattoo should go. The zone switches to the part you clicked and the position jumps there.
5. Fine tune with the **UV X**, **UV Y**, **Scale** and **Rotation (deg)** sliders, or type the numbers.
6. Set the **Overlay name** and **Collection**, then **Copy overlay XML** or press **Create in Durty Cloth Tool**.

## The viewer

Drag to orbit, scroll to zoom, click the body to place the tattoo there (a click only counts when you did not drag). The label in the top left shows the ped model and the current zone. The buttons in the top right:

| Button | What it does |
| --- | --- |
| Background colour | Colour picker for the viewer background (default near black). |
| Focus zone | Moves the camera to the current zone. The camera also moves there when you change zone. |
| Save screenshot | Downloads the current view as a PNG named `<overlay name>_<zone>.png`, for example `my_tattoo_zone_torso.png`. |

## Panels

### Tattoo image

Accepts PNG, JPG and WebP. A PNG with a transparent background works best, because everything that is not transparent shows on the skin.

Tattoo textures are square in GTA. When your image is not square, a dialog asks what to do:

- **Crop centre** cuts the largest centred square out of the image.
- **Fit with padding** keeps the whole image and pads the short side with transparency.

After loading you see a thumbnail with the file name and size, **Change** to pick another file, and the X to remove it. Uploading a file also fills the **Overlay name** from the file name (lower case, anything but letters, digits and underscores turned into `_`).

### Placement

| Control | What it does | Default |
| --- | --- | --- |
| **Male** / **Female** | Switches between `mp_m_freemode_01` and `mp_f_freemode_01`. | Male |
| **Skin tone** | Pale, Light, Medium, Tan, Brown, Dark. Preview only, it does not change the export. | Light |
| **Zone** | Head, Torso, Left arm, Right arm, Left leg, Right leg. | Torso |
| **Quick spots** | Preset positions for the current zone (see below). | |
| **UV X**, **UV Y** | The `uvPos` centre, 0 to 1 in steps of 0.001. | 0.5, 0.5 |
| **Scale** | One slider for both axes while **X + Y linked** is on. Click the lock to switch to **X and Y separate** and get **Scale X** and **Scale Y**. | 0.2, linked |
| **Rotation (deg)** | Minus 360 to 360. | 0 |
| **Show tattoo** | Hides the tattoo to compare with bare skin. | On |
| **Wrap around** | Continues the tattoo past the edge of the zone, the way the game does around limbs. | On |
| **Reset placement** | Back to the defaults above. | |

Each slider has a number box, so you can paste exact values from an existing overlay file.

### Quick spots

| Zone | Spots |
| --- | --- |
| Torso | Chest, Stomach, Upper back, Lower back, Right ribs, Left ribs |
| Head | Forehead, Left cheek, Right cheek, Left temple, Right temple |
| Left arm, Right arm | Shoulder, Upper arm, Forearm, Wrist, Hand |
| Left leg, Right leg | Thigh front, Thigh back, Shin, Calf, Ankle |

A quick spot only sets **UV X** and **UV Y**, scale and rotation stay as they are.

### How the zone coordinates run

Knowing this saves a lot of trial and error when you type values:

- `y` runs from bottom (0) to top (1): waist to neck on the torso, hand to shoulder on arms, ankle to hip on legs.
- On the torso, `x` wraps around the body: about 0.25 is the back, 0.5 the right side, 0.75 the chest, and both 0 and 1 are the left side.
- Arms and legs are mirrored on `x`, so the same values on the left and the right limb land on matching spots.

### Export

| Field | What it does | Default |
| --- | --- | --- |
| **Overlay name** | Written to `nameHash`, `txdHash` and `txtHash` in the XML, and used in the Lua snippet. | `my_tattoo` |
| **Collection** | Only used in the Lua snippet, as the collection argument. | `mpfivemad_overlays` |

Buttons:

- **Copy overlay XML** copies the `<Item>` block shown below the editor.
- **Create in Durty Cloth Tool** opens Durty Cloth Tool (v3.1 or newer must be installed) with the zone, gender and placement filled in. The tattoo image is passed through your clipboard, so allow clipboard access when the browser asks.
- **Copy share link** copies the page URL with the current gender, zone, skin tone and placement.

## Output

Below the panels you get two code blocks: the overlay item and a Lua snippet. With the defaults and an image named `dragon.png` on the torso:

```xml title="dragon_overlay.xml"
<Item>
  <uvPos x="0.500000" y="0.500000" />
  <scale x="0.200000" y="0.200000" />
  <rotation value="0.000000" />
  <nameHash>dragon</nameHash>
  <txdHash>dragon</txdHash>
  <txtHash>dragon</txtHash>
  <zone>ZONE_TORSO</zone>
  <type>TYPE_TATTOO</type>
  <faction>FM</faction>
  <garment>All</garment>
  <gender>GENDER_MALE</gender>
  <award />
  <awardLevel />
</Item>
```

```lua title="client.lua"
-- Apply the tattoo to the local player (collection = your overlay .ymt / dlc name)
local ped = PlayerPedId()
AddPedDecorationFromHashes(ped, `mpfivemad_overlays`, `dragon`)

-- Remove all tattoos
-- ClearPedDecorations(ped)
```

The tool does not make the `.ytd` itself. Durty Cloth Tool builds the `.ytd`, the overlay file and the stream folder for you; by hand you need to do those steps yourself.

## Getting it into FiveM

### With Durty Cloth Tool

Press **Create in Durty Cloth Tool** and follow its steps. Its [tattoo guide](https://docs.gta.clothing/getting-started/first-addon-tattoo) covers the resource it creates.

### By hand

1. Put your tattoo texture in a `.ytd` whose name matches `txdHash` (here `dragon.ytd`), with a texture inside named like `txtHash`. The [Texture Editor](/docs/tools/texture-editor) can build that dictionary from a PNG.
2. Add the copied `<Item>` to the `<presets>` list of your collection's overlay XML (the file name, without extension, is the collection name you pass to the natives).
3. Stream the `.ytd` and register the overlay file in your manifest.
4. Apply the tattoo in a script with `AddPedDecorationFromHashes` (or `AddPedDecorationFromHashesInCorona` in character creators).

A sketch of the resource:

```bash
my_tattoos/
  fxmanifest.lua
  overlays/mpfivemad_overlays.xml
  stream/dragon.ytd
```

```lua title="fxmanifest.lua"
fx_version 'cerulean'
game 'gta5'

files {
  'overlays/mpfivemad_overlays.xml',
}

data_file 'PED_OVERLAY_FILE' 'overlays/mpfivemad_overlays.xml'
```

> [!TIP]
> Tattoo shops read a separate shop list (`shop_tattoo.meta`) for prices and names. If you only apply tattoos from your own scripts, the overlay file and the `.ytd` are enough.

## Tips

- The URL always holds the current gender, zone, skin tone and placement (`?gender=MALE&zone=ZONE_TORSO&uvx=...`). Bookmark it or send it to a teammate to pick up where you left off. The image and the **Wrap around** setting are not part of the link.
- Keep **Wrap around** on for bands around arms and legs. Turn it off to see exactly where the tattoo gets cut at the zone edge.
- Make one version per gender. Female and male bodies differ, so place the tattoo on each and copy both items; the XML says `GENDER_MALE` or `GENDER_FEMALE`.
- Use **Save screenshot** for your store page or changelog.

## Common mistakes

- **Tattoo upside down or mirrored.** Use the sample image first: its arrow shows which way is up for each zone. Then flip or rotate your artwork, or use **Rotation (deg)**.
- **Scale too big.** A scale of 1 fills the whole zone. Most tattoos sit between 0.1 and 0.4.
- **Names that do not match.** `txdHash` must match the `.ytd` name and `txtHash` the texture inside it. Changing **Overlay name** changes all three.
- **Clipboard blocked.** If Durty Cloth Tool opens without the image, the browser did not allow clipboard access. Allow it and try again.

## Limitations

- Placement only. The tool does not write `.ytd` files or a complete overlay file.
- **Skin tone** tints the preview skin, it is not the game's skin shader.
- Everything runs in your browser. The image is not uploaded anywhere; for Durty Cloth Tool it goes through your own clipboard.

## Related tools

- [Clothing Designer](/docs/tools/clothing-designer) for painting clothing textures in 3D.
- [Texture Editor](/docs/tools/texture-editor) to build the tattoo `.ytd` from a PNG.
- [YMT Creator](/docs/tools/ymt-creator) for addon clothing files.
- [Hash Calculator](/docs/tools/hash-calculator) to get the joaat hash of an overlay or collection name.
