Minecraft Paintings & Custom Art
Understand vanilla painting mechanics, then choose the correct custom-art workflow for your Java Edition version. Minecraft 1.21+ separates the visible texture asset from the data-driven painting definition.
1) Vanilla painting mechanics
Paintings are entities that fit against a wall and snap to the available area. The game picks the largest painting that fits (width × height in blocks). Craft with sticks + wool, then place on a solid wall.
- Sizes: multiples of 16×16 px per block (e.g., 1×1, 2×2, 4×4 blocks).
- Selection: cycling happens when you replace a painting without changing the available wall bounds.
- Lighting: bright walls and daytime shots look better.
2) Controlling which painting appears
To force a target artwork, briefly frame the area with temporary blocks so only that size fits, place the painting, then remove the frame. Repeat replace if needed to cycle variants of the same size.
3) Choose the workflow for your Java version
Before Java Edition 1.21: a resource pack can replace the texture asset of an existing vanilla painting. It does not create a new data-driven painting size or ID. Asset paths and pack metadata change between releases, so copy the exact painting asset path from the same game version instead of following a version range from an older tutorial.
Java Edition 1.21 and later: a new painting variant uses two separate pack responsibilities:
- Resource pack: supplies the PNG sprite referenced by an
asset_idin the paintings atlas. - Data pack: adds
data/<namespace>/painting_variant/<id>.json, which declareswidth,height, and the matchingasset_id.
{
"width": 2,
"height": 2,
"asset_id": "my_gallery:sunset"
}
At vanilla resolution, a 2 × 2-block painting uses a 32 × 32-pixel image. Higher-resolution packs can scale that image up, but must keep the same aspect ratio. The official Java 1.21 notes allow width and height values from 1 to 16 blocks and define asset_id as the sprite ID in the paintings atlas.
painting_variant file. This page describes the separate in-game packaging step.4) Build and test the pack
- Confirm the exact Java Edition release you will run. Use that release's own client JAR or official pack notes as the source for folder layout and
pack.mcmetavalues. - Crop the art to the declared block ratio. At vanilla resolution, multiply each block dimension by 16 pixels, then export a lossless PNG.
- For a pre-1.21 replacement, mirror the chosen vanilla painting's asset path in the resource pack. For a 1.21+ new variant, add the texture asset and the matching
painting_variantJSON shown above. - Enable the resource pack. For a 1.21+ new variant, also install the data pack in the world or server and make sure the variant is included in the applicable
painting_variant/placeabletag when it should appear through normal placement. - Reload or reopen the world, place the painting on a wall large enough for its declared dimensions, and confirm both the size and artwork. If the frame exists but the art is missing, recheck the namespace and
asset_id; if the variant never appears, recheck the data pack and placeable tag.
For the authoritative 1.21 field names and limits, see Mojang's Minecraft: Java Edition 1.21 technical notes.
5) Gallery layout tips
- Use neutral blocks (quartz/deepslate) for walls; add soft lighting.
- Keep consistent gaps between frames; align top edges for series.
- Mix sizes for rhythm, but avoid overly busy compositions.
6) Common pitfalls
- Wrong aspect ratio → stretched or cropped-looking art. Match the PNG ratio to the declared block width and height.
- Transparent backgrounds unintended → check alpha channel.
- Painting exists but shows a missing texture → check that the resource-pack namespace matches
asset_id. - Multiplayer visibility differences → the server/world needs the data pack, and each viewer needs the resource-pack assets.
FAQ
How do I quickly generate pixel-art style images? Use the Classic Editor and see Getting Started.
Can I mix vanilla and custom paintings? Yes. On older versions, replace only the vanilla assets you intend to change. On Java 1.21+, use your own namespace for new variants so the vanilla definitions remain separate.
Is a resource pack enough for a new Java 1.21+ painting? No. The resource pack supplies the visible asset; the data pack supplies the variant definition and placement registration.
How do I share packs? Share the version-matched resource pack and, for a new 1.21+ variant, the companion data pack. State the tested Java Edition release so players do not assume compatibility with other versions or Bedrock Edition.
Open the Classic Editor → · Back to Tutorials · Pixel Art Complete Guide