File size: 3,324 Bytes
3692a8a
 
af20eb7
 
 
3692a8a
 
94c10c8
3692a8a
 
94c10c8
af20eb7
94c10c8
 
 
 
 
 
af20eb7
94c10c8
af20eb7
94c10c8
 
ee8d7b8
94c10c8
d51456e
94c10c8
 
 
 
 
 
 
d51456e
af20eb7
d51456e
b73e4b2
94c10c8
ee8d7b8
 
 
 
 
 
 
94c10c8
 
d51456e
 
 
 
 
 
 
 
94c10c8
 
 
040f736
 
 
 
 
 
94c10c8
d51456e
 
94c10c8
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
---
title: Inkmap
emoji: πŸ™
colorFrom: gray
colorTo: pink
sdk: static
pinned: false
short_description: Try a tattoo on a 3D body before it touches skin.
---

# Inkmap β€” try a tattoo on before it's real

Pick a design, click anywhere on the body, and it wraps onto the skin right
there. Turn it, size it, mirror it, move on to the next one. Inkmap is the
sketchpad in front of [Tatbot](https://tatbot.ai), an open-source tattoo robot
being built in public in Austin: the place where a tattoo gets *decided* β€”
which design, where on the body, how big, which way up β€” in a form a machine
can read back.

## How to use it

| do this | to |
| --- | --- |
| describe a placement, such as **on the left forearm** | resolve an exact spot with InkLang; choose from buttons if the wording is ambiguous |
| click a design, then click the body | place it β€” a ghost follows your pointer until you click |
| **Import art** | bring your own design as a PNG or JPEG |
| **A** / **D** | rotate on the skin (hold **Shift** for bigger steps) |
| **W** / **S** | make it larger / smaller |
| **Enter** or βœ“ Accept | keep it and pick the next one |
| **Delete** or βœ• Discard | throw it away |
| click a placed tattoo | select it again β€” sliders and mirror are in the sidebar |
| β™‚ / ♀ and the colour dots | switch body, change skin tone (natural or otherwise) |
| drag the background | orbit; scroll to zoom |
| **File** | save a project backup and bring it back later, or export a tattoo brief |

Placing and saving happen in your browser; your art and files stay on your
own computer.

InkLang is the placement system behind the description box. It normalizes the
words, combines them with the selected body, and records one exact point on the
body's canonical surface. It does not generate artwork. A phrase like
**forearm** needs a left/right choice and nothing is generated or placed until
you make it. The older β€œa fine line octopus on the left knee ditch” sentence
also works; its design words and placement clause stay separate internally.

## What is in a saved layout

Each tattoo is stored as its design's image plus a **surface anchor** β€” a spot
on the body mesh β€” a rotation and a size in millimetres, and the file records
exactly which body it was made on. The original placement description,
normalized meaning, and body-surface resolution travel with that anchor. The
robot's strokes are not made here: Tatbot's art pipeline makes them later from
the image, at the size you chose. A layout is a sketch, not a robot
instruction, reachability result, or contact qualification. Nothing here
operates a machine or tattoos a person.

## Credits

- Body: a synthetic nominal body derived from
  [SOMA-X v0.3.0](https://github.com/NVlabs/SOMA-X/tree/v0.3.0) (Copyright (c)
  2026 NVIDIA CORPORATION & AFFILIATES) and
  [MHR v1.0.1](https://github.com/facebookresearch/MHR/tree/v1.0.1) (Copyright
  (c) Meta Platforms, Inc. and affiliates), both Apache-2.0. It is not a scan
  of anyone.
- Rendering: [three.js](https://threejs.org/) via React Three Fiber.
- Designs: three flash designs generated with Google Flow and kept by the
  Tatbot team. They are not public domain and no licence is granted.

Made by [Tatbot](https://tatbot.ai) Β· code on
[GitHub](https://github.com/hu-po/tatbot) Β· hello@tatbot.ai