Your images never leave your device. Fitting the art to the painting size and zipping the bundle both run here in your browser; this page makes no network requests with your files.
Each painting here becomes a new painting_variant registry entry, so every vanilla painting stays in the game next to yours. This needs Java Edition 1.21 or later, where paintings are data-driven. Loading vanilla reference...
Your painting ids will look like mypack:<id>. Lowercase letters, numbers, _ . - only.
Vanilla paintings are 16 px per block. Higher numbers give a sharper texture but a larger file. The texture is exported at 128 x 128 px.
Each painting's asset_id of mypack:<id> resolves to this texture path in the resource pack half of the bundle:
resourcepack/assets/mypack/textures/painting/<id>.pngVanilla Java loads textures only from a resource pack, never from a datapack, so the image ships in the resourcepack/ folder you enable in Options, Resource Packs. The PNG must be exactly width * 16 by height * 16 pixels at vanilla resolution (a 2x2 painting at 16 px per block is 32 x 32 px). This tool fits your art to the right size and writes it into the download, so you do not have to resize anything by hand.
Most painting tools overwrite a vanilla texture, so you trade one piece of art for another. This builder does the opposite: it adds your painting as a brand-new painting_variant, so every vanilla painting stays in the game next to yours. It all runs in your browser, so nothing uploads and there is no watermark.
On Java Edition 26.2 and later, paintings are data-driven. Each painting is a painting_variant registry entry loaded from a datapack, with a size in blocks, an asset_id that points at a texture, and optional title and author text. That means you can register your own entry instead of editing an original, which is exactly what this tool does.
Set a size from 1x1 up to 16x16 blocks and a resolution up to 128 pixels per block, drop in art, give it a unique id, and the tool fits the image and writes the new variant. Queue as many paintings as you like into one bundle.
The download is one zip with two folders inside, a datapack half and a resource pack half, because vanilla Java loads registry JSON from a datapack but reads textures only from a resource pack. The datapack half holds the painting_variant JSON at datapack/data/<namespace>/painting_variant/<id>.json, which registers the painting and records its size, plus the placeable tag at datapack/data/minecraft/tags/painting_variant/placeable.json that adds your variants to the list of paintings the painting item can place, using replace: false so the vanilla paintings stay placeable too. The resource pack half holds the texture at resourcepack/assets/<namespace>/textures/painting/<id>.png, the image the asset_id points at, sized to width times 16 by height times 16 pixels.
Put the datapack folder in your world's datapacks folder and run /reload, then enable the resource pack folder in Options, Resource Packs. Place a painting and sneak-scroll to cycle to your art, or use the give command shown next to each painting to get exactly that variant in hand.
1. Build and download the bundle zip from the tool above and unzip it. Inside are two folders, datapack/ and resourcepack/. Install both.
2. Copy the datapack/ folder into your world's datapacks folder at .minecraft/saves/<your world>/datapacks/, then open the world, run /reload, and run /datapack list to confirm it is enabled.
3. Copy the resourcepack/ folder into .minecraft/resourcepacks/ and enable it in Options, Resource Packs. This step supplies the painting images; vanilla Java does not load textures from a datapack, so skipping it leaves the paintings showing the missing-texture checker.
4. Place a painting on a wall and sneak-scroll to find your art, or run the give command for the painting you want.
Set the painting size in blocks, drop in your art, and give it a unique id. The tool writes a new painting_variant entry and the placeable tag into a datapack, puts the matching texture into a resource pack, and gives you a give command for it. Install the datapack in your world's datapacks folder and the resource pack in Options, Resource Packs. Because it registers a new variant, every vanilla painting stays in the game alongside yours. This works on Java Edition 1.21 and later.
On Java 1.21 and later, paintings are data-driven: each one is a painting_variant JSON file loaded from a datapack. The file holds the asset_id (which points at the texture), the width and height in blocks, and optional title and author text. This tool builds that JSON for you, and because Java loads textures only from a resource pack, it puts the image in a matching resource pack so you do not have to write any JSON or move files by hand.
Minecraft accepts painting sizes from 1x1 up to 16x16 blocks. Vanilla paintings only go up to 4x4, but a datapack variant can be any size in that range. The texture must be width times 16 by height times 16 pixels at vanilla resolution, so a 5x3 painting is 80 by 48 pixels. The tool fits your art to the exact pixel size automatically.
A new painting variant only shows up when it is in the minecraft:placeable tag. This tool writes that tag for you with replace set to false, so your variants merge into the vanilla list instead of clobbering it. Make sure the datapack is enabled (run /datapack list) and that you reloaded with /reload after installing it.
The painting_variant asset_id of namespace:id resolves to assets/namespace/textures/painting/id.png in a resource pack. The PNG must be width times 16 by height times 16 pixels. Vanilla Java never loads textures from a datapack, so this tool ships the image in a separate resource pack half of the download. Enable that resource pack in Options, Resource Packs and the painting renders. Without it the painting registers and is placeable but shows the missing-texture checker.
No. Adding paintings as new registry entries relies on Java Edition's data-driven painting_variant registry, which exists on Java 1.21 and later. Bedrock does not load paintings this way. For Bedrock, or to re-skin the existing paintings on Java, use the Custom Painting Maker instead, which replaces painting textures.
Want to re-skin the existing paintings instead, or browse more tools: