The pattern texture is a greyscale mask under textures/entity/banner/. The game tints its white areas with the chosen dye, the same as every vanilla pattern. Skip this and a placeholder note ships in the zip telling you where to drop the PNG.
{
"asset_id": "mypack:my_sigil",
"translation_key": "block.mypack.banner.my_sigil"
}The datapack registry entry. asset_id points at your texture; translation_key names it in the loom.
{
"values": [
"mypack:my_sigil"
]
}Adds your pattern to the loom item tag so a carrier item can apply it.
{
"block.mypack.banner.my_sigil": "My Sigil"
}Resource pack lang file so the pattern shows a readable name.
/give @s minecraft:globe_banner_pattern[minecraft:provides_banner_patterns="#minecraft:pattern_item/my_sigil"]One zip with a datapack/ folder and a resourcepack/ folder, plus a HOW-TO-INSTALL text file. Everything is built in your browser, nothing uploads.
A vanilla pattern shown dyed on the base color. Upload your mask above to see it stacked here.
A custom banner pattern is a tiny datapack entry plus a texture. The datapack registers a new banner_pattern so the game knows it exists, and the resource pack supplies the greyscale mask and the loom name. Because it is a new registry entry, every vanilla pattern stays in the game next to yours. It all runs in your browser, so nothing uploads and there is no watermark.
On Java Edition 1.20.5 and later, banner patterns moved into a data-driven registry. Each one is a banner_pattern JSON file with just two fields: asset_id, which points at the texture, and translation_key, the name the loom shows. That is the whole entry, the same shape vanilla uses for bricks, globe and every other pattern.
Pick a namespace and a pattern name, decide how players get it, and optionally upload the texture mask. The tool builds the datapack entry, the loom tag, the lang file, the atlas include and the give command, then bundles it all into one zip ready to drop into your world and your resource packs folder.
A working pattern spans two packs. The datapack holds the banner_pattern entry and the tag that decides how it is obtained. The resource pack holds the texture mask, the atlas source that includes it, and the lang entry that names it. Both must be active for the pattern to appear, which is the most common reason a custom pattern seems missing.
| File | Pack | Purpose |
|---|---|---|
| data/<ns>/banner_pattern/<name>.json | Datapack | The registry entry: asset_id and translation_key. |
| data/minecraft/tags/banner_pattern/pattern_item/<name>.json | Datapack | Loom tag so a carrier item can apply the pattern. |
| assets/<ns>/textures/entity/banner/<name>.png | Resource pack | The greyscale layer mask, tinted by the chosen dye. |
| assets/minecraft/atlases/banner_patterns.json | Resource pack | Atlas source that includes the new texture. |
| assets/<ns>/lang/en_us.json | Resource pack | Readable name for the pattern in the loom. |
If you choose the always-available option instead of a loom item, the pattern goes in #minecraft:no_item_required and shows in the loom with no item needed, the way stripes and borders already work.
1. Unzip the download. It has a datapack folder and a resourcepack folder, plus a HOW-TO-INSTALL text file.
2. Copy the datapack folder into your world at saves/<world>/datapacks, then run /reload in game and check /datapack list.
3. Copy the resourcepack folder into your resourcepacks folder and enable it in Options. If you skipped the texture upload, drop your PNG into the path shown in the text file first.
4. Open a loom. The pattern is there if it is always available, or run the give command to get the carrier item that applies it.
On Java Edition 1.20.5 and later a banner pattern is a data-driven registry entry. Give it a namespace and id, and the tool writes data/<ns>/banner_pattern/<name>.json with an asset_id and a translation_key. Add the matching greyscale texture under textures/entity/banner in a resource pack, decide whether it needs a loom item, and you have a brand-new pattern that shows up in the loom next to the vanilla ones.
Exactly two fields. asset_id, like mypack:my_sigil, tells the game which texture to use (assets/<ns>/textures/entity/banner/<name>.png). translation_key, like block.mypack.banner.my_sigil, is the name shown in the loom, which you fill in with a lang file. That is the whole file, matching every vanilla entry such as bricks.json or globe.json.
Add your pattern id to the #minecraft:pattern_item/<name> tag, then give a vanilla banner_pattern item the provides_banner_patterns component pointing at that tag. The tool generates both the tag file and the exact give command. If you would rather the pattern always appear in the loom with no item, choose the always-available option and it goes in #minecraft:no_item_required instead.
Almost always one of three things. The datapack is not enabled (run /reload and check /datapack list). The resource pack is not enabled, so the texture and name are missing. Or the texture is in the wrong place: it must be assets/<ns>/textures/entity/banner/<name>.png and be included in the banner_patterns atlas. Both the datapack and the resource pack have to be active at the same time.
A greyscale PNG mask with transparency, the same as every vanilla pattern under textures/entity/banner. The game tints the white areas with the chosen dye color, so paint your shape in white or grey on a transparent background. Look at any vanilla pattern texture for the expected size and layout, then drop your PNG into the resource pack at the path the tool shows.
No. Banner patterns became data-driven registry entries on Java Edition 1.20.5, which is what makes adding a new one without overwriting vanilla content possible. Bedrock does not load banner patterns from datapacks this way, so this tool is Java only.
Design a banner from vanilla patterns, or browse more tools: