> For the complete documentation index, see [llms.txt](https://docs.spoof.dev/asteroid/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.spoof.dev/asteroid/usage/profiles.md).

# Profiles

A profile is the identity a fake player wears: a username and a skin. Asteroid keeps a pool of profiles in your database and picks from it whenever it spawns a fake player. You need profiles before any fake player can appear.

## Three ways to add profiles

| Method   | What it does                                                                       |
| -------- | ---------------------------------------------------------------------------------- |
| Generate | Bulk-creates profiles from real Minecraft accounts (real names, skins, and UUIDs). |
| Create   | Makes one custom profile with a name you choose.                                   |
| Import   | Loads specific Java or Bedrock players from a file. See Importing Players.         |

## Generating profiles (real UUIDs)

The easiest way. Asteroid pulls real usernames, skins, and UUIDs from over 100 built-in sources.

```
/asteroid profiles generate 100
```

Generates 100 profiles (the default is 1000 if you omit the number). Each uses a genuine Java account's name, skin, and UUID fetched from Mojang, so they look completely real. The console reports how many were Unique versus Cloned (already in your pool). Run it again to add more. Aim for several times more profiles than your maximum fake player count.

## Creating a custom profile (cracked / offline UUID)

```
/asteroid profiles create <name> <default_skin>
```

Creates one profile with the exact username you choose. `<default_skin>` is `true` or `false`:

* `false` (or omitted): the profile gets a real skin fetched from Mojang.
* `true`: the profile uses a blank default skin (no custom skin).

Unlike generated profiles, a created profile's UUID is derived from the username (an offline, or cracked, UUID). This is the right choice on cracked or offline-mode servers, where players are identified by name rather than by a Mojang account.

## Real versus cracked UUIDs

Asteroid can produce both kinds of UUID, so it fits any server:

* **Generate** uses **real (online) UUIDs** from actual Minecraft accounts. Best on premium servers.
* **Create** uses **offline (cracked) UUIDs** derived from the name. Best on cracked or offline-mode servers.

If your server is cracked and generated profiles do not behave correctly, prefer created profiles, or import a file of names.

## Removing a profile

```
/asteroid profiles remove <profile>
```

Removes a single profile from the pool so it will not be used again.

## Custom name sources

By default Asteroid uses its built-in name sources. To use your own, add sources in the config:

```yaml
profiles:
  profile_links:
    - 'https://api.namemc.com/server/purple.wtf/likes'
```

Each link must point directly to a JSON array of Minecraft usernames. These are used the next time you generate profiles.

## Auto-remove on real join

```yaml
profiles:
  remove_fake_on_real_join: true
```

If a real player joins with the same name as an existing fake, the fake profile is deleted permanently, so a real player never sees themselves already online.

## Keeping profiles healthy

Over time some profiles can go stale (a name change, a banned account). Clean the database with the AsteroidDatabaseFixer tool: <https://github.com/Asteroid-Enterprise/AsteroidDatabaseFixer>

## Where profiles are stored

Profiles live in your database. On a single server that is a local SQLite file by default. On a network, use MySQL or MongoDB so all servers share the same pool.
