# Commands
One command, `/painting`, and it works the same on Paper and on Velocity. `/resourcepack` does the same thing if you prefer it.
---
## /painting
| Subcommand | Permission | Description |
|---|---|---|
| `reload` | `lodestone.painting.commands.painting` | Reload pack and server registries from disk. |
| `resend` | `lodestone.painting.commands.painting` | Resend resource pack offers to every online player. |
| `generatehashes` | `lodestone.painting.commands.painting` | Download every configured pack URL, compute SHA-1, and write the hash back to config. |
| `hash <url\|file>` | `lodestone.painting.commands.painting` | Print the SHA-1 of a single pack URL or pack file without touching config. |
Aliases: `/resourcepack`.
---
## Applying config changes
```
/painting reload
```
Rereads your packs, servers, messages and version overrides from disk. If you've pointed a server at a pack that doesn't exist, you'll get a warning about it in the console.
Players already online keep whatever pack they were given. To push the new setup out to them as well, follow it with `/painting resend`.
---
## Resending to everyone
```
/painting resend
```
Offers packs again to every player currently online. On a proxy, each player gets whatever their current server should send them. Anyone who already has the right pack is skipped, so this won't make people re-download things unnecessarily.
---
## /painting generatehashes
Downloads every configured pack URL, computes SHA-1, and writes the result back to the config file.
| Outcome | Message |
|---|---|
| No URLs configured | `No packs with a URL to hash.` |
| All hashes already current | `All N hashes already up to date.` |
| Mixed | `<changed> of <total> hashes changed.` (with optional `(N failed)` suffix) |
After a successful run, the config is reloaded so the new hashes take effect immediately. A manual `generatehashes` always forces a refresh, bypassing the `hash-refresh-throttle` window, on both platforms.
Players joining mid-run are let through without a pack and sent theirs as soon as the run finishes, so a rehash never offers a pack with a hash the client would reject.
Since 1.0.20 you rarely need this: both platforms re-check hashes on their own (see `hash-refresh-throttle` in [[Painting/Server Owners/Configuration]]). Reach for `generatehashes` when you want a full re-download now, ignoring what the origin says about freshness.
---
## /painting hash
Prints the SHA-1 of one source and nothing else, config is untouched.
```
/painting hash https://cdn.example.com/pack.zip
/painting hash packs/base.zip
```
A path is resolved against the Painting data folder first, then the server directory. Useful for filling in a `hash:` field by hand, or checking what a CDN is actually serving.
The command runs under the same limits as the API: `http`/`https` only, a byte cap, and paths confined to the server directory. A source outside them comes back as an error rather than a hash, see `hash-security` in [[Painting/Server Owners/Configuration]].
---
## Permissions
| Permission | Grants |
|---|---|
| `lodestone.painting.commands.painting` | All `/painting` subcommands. Defaults to `op` on Paper. |
---
## Related Pages
- [[Painting/Server Owners/Configuration]], config values reloaded by `/painting reload`
- [[Painting/Developers/Overview]], `PackRegistryReloadEvent` is fired after `/painting reload`