Custom Painting Generator
BetaSet the painting's size, title and author, choose whether it can show up when players hang a painting, and get the painting variant file with commands to give or place it. The preview hangs it on a wall at its real size.
Describe it — AI writes the command
Type what you want in plain words. The AI fills the form below, so you can see it and change anything. It follows the edition and version you picked.
Checking the AI…
Your command · Java 26.3
124 characters/give @p painting[painting/variant="my_pack:sunset_hills"]/summon painting ~ ~ ~ {variant:"my_pack:sunset_hills",facing:0b}
data/my_pack/painting_variant/sunset_hills.json{
"asset_id": "my_pack:sunset_hills",
"author": {
"text": "Alex",
"color": "gray"
},
"height": 1,
"title": {
"text": "Sunset Hills",
"color": "yellow"
},
"width": 2
}
data/minecraft/tags/painting_variant/placeable.json{
"values": [
"my_pack:sunset_hills"
]
}
- The picture comes from a resource pack: a 32×16 PNG (16 pixels per block) at assets/my_pack/textures/painting/sunset_hills.png. Without it the painting shows the missing-texture pattern.
- The first line gives you the painting item; the second hangs it at your feet on the wall behind it (facing south = the wall is on your north side). A wall too small or blocked by entities makes it drop as an item.
- It is added to #minecraft:placeable, so it can come up when anyone hangs a plain painting (if the wall has room).
- Put the file in your data pack (or press Download data pack), drop the pack in your world's datapacks folder, then run /reload.
Raw editor
How it works
Since Java 1.21 paintings are data: each one is a file in data/<namespace>/painting_variant/ pointing at a texture. Width and height are in blocks, from 1 to 16.
Java 1.21 and 1.21.1
{"asset_id": "my_pack:sunset_hills", "height": 1, "width": 2}The tooltip text comes from the language keys painting.my_pack.sunset_hills.title and .author in a resource pack.
Java 1.21.2 to 26.3
Title and author go in the file as text, with the vanilla colours (yellow title, gray author):
{"asset_id": "my_pack:sunset_hills",
"author": {"text": "Alex", "color": "gray"},
"height": 1,
"title": {"text": "Sunset Hills", "color": "yellow"},
"width": 2}Commands
Up to 1.21.4 the item carries the painting in entity_data; from 1.21.5 it has its own component:
give @p painting[entity_data={id:"minecraft:painting",variant:"my_pack:sunset_hills"}]
give @p painting[painting/variant="my_pack:sunset_hills"]
summon painting ~ ~ ~ {variant:"my_pack:sunset_hills",facing:0b}facing is 0 south, 1 west, 2 north, 3 east. Tick “Can come up” to add it to #minecraft:placeable, the list the game picks from when you hang a plain painting.
The picture
The image goes in a resource pack at assets/<namespace>/textures/painting/<name>.png, 16 pixels per block (a 2×1 painting is 32×16). Without it you see the missing-texture pattern. Bedrock has no custom paintings, so this generator is Java only.
FAQ
How do I add a custom painting to Minecraft?
Make the painting variant file here (data pack), put your image in a resource pack at assets/<namespace>/textures/painting/<name>.png, load both and run /reload. Then use the /give or /summon line.
What size should the image be?
16 pixels per block: a 1×1 painting is 16×16, a 4×2 is 64×32. Larger images work if the ratio matches, for example 32 pixels per block.
Why can't I get my painting by placing one normally?
Only paintings in the #minecraft:placeable tag come up at random, and only if the wall has room for them. Tick the option, or use the commands.
Why doesn't the summoned painting appear?
A painting needs a solid wall behind it with room for its full size, and no other entities in the way. Summon it in the block in front of the wall, facing away from it.
Does the title work in 1.21?
Not in the file: title and author fields were added in 1.21.2. In 1.21 and 1.21.1 the tooltip uses the painting.<namespace>.<name>.title and .author language keys from a resource pack.