Skip to content

47-Tile Blob Tileset — Identify the Layout, Check, Generate

Several incompatible 47-tile orders exist and nothing in the PNG says which one you have. The Studio scores every known order at every position by how seamlessly neighbouring tiles join, and tells you which it is and how sure it is.

A blob tileset has one tile for every way a terrain cell can look given all eight of its neighbours. Eight neighbours give 2⁸ = 256 combinations, but a diagonal neighbour is only visible when both sides next to it are the same terrain, and that folds the 256 into exactly 47 tiles. Godot 4 stores such a set as a terrain set in Match Corners and Sides mode, Tiled as a mixed Wang set, Unity as a Rule Tile with eight-neighbour rules. The 47 tiles are published in several incompatible orders; the Studio tells you which one a sheet uses and exports the bits.

Drop a tileset or autotile sheet (PNG)
Runs in your browser. Files are not uploaded.
Studio Tile workspace: a 47-tile sheet recognised as the GameMaker layout, with its terrain bits and a complete check
The real Studio with a CC0 asset (OpenGameArt).
Exports to
  • Godot 4 TileSetVerified· Godot 4.7.2
  • TiledVerified· Tiled 1.12.2
  • Unity 6 Rule TileVerified· Unity 6000.5.3f1 + 2D Tilemap Extras 8.0.3
  • LDtkPartly verified· LDtk 1.5.3 schema + loader

From 256 neighbour masks to 47 tiles

Give each neighbour a bit: N 1, NE 2, E 4, SE 8, S 16, SW 32, W 64, NW 128 (y grows downwards). A cell's mask is the sum of the neighbours that are the same terrain, 0 to 255. Without a rule, that would need 256 tiles.

But a corner is hidden behind an open side. If the cell above is empty, the tile already draws a rim along its top edge, and whether the cell up-right is land changes nothing you can see. So NE counts only when N and E are both land, and the same for the other three corners. Applying that rule to all 256 masks leaves 47 different ones — the table under "Worked example" counts them.

Nothing inside a PNG says in which order those 47 tiles are laid out. cr31's ascending order, the 7×7 "wang blob", the caeles templates, GameMaker's template and Godot 3's 12×4 template all put different tiles in the same cell. Importing with the wrong table puts every tile under the wrong rule, which is why the Studio scores every known order against the seams of your art before writing any bit (how the layout is recognised).

For one terrain the complete set carries 188 neighbour bits in total: 8 on the full tile, none on the isolated tile. Godot writes them as peering bits, Tiled as Wang IDs (Tiled's manual calls a complete two-terrain mixed set 256 tiles and says a reduced set such as the 47-tile blob is compatible), Unity as Rule Tile neighbours.

Neighbour mask
The sum of the bits of the neighbours that share the terrain: 0 (alone) to 255 (surrounded).
Reduced mask
The mask after dropping every corner whose two sides are not both set; only 47 values remain.
Inner corner
A tile whose four sides connect but one diagonal is open, e.g. 127 = everything except NW.
Isolated and full tile
Mask 0 (a lone cell, rim all round) and 255 (land on every side, no rim).

Counting the 47

Group the masks by how many sides are set; each corner that has both of its sides set can be on or off:

sides set       side patterns      corners that can count     tiles
0               1                  0                          1 × 2⁰ =  1
1               4                  0                          4 × 2⁰ =  4
2 opposite      2 (N+S, E+W)       0                          2 × 2⁰ =  2
2 adjacent      4 (N+E, E+S, …)    1                          4 × 2¹ =  8
3               4                  2                          4 × 2² = 16
4               1                  4                          1 × 2⁴ = 16
                                                              total  = 47

raw N + NE = 1 + 2 = 3     → reduced 1   (NE is behind the open E side)
raw 255 − NW = 127         → stays 127   (an inner corner: all sides set)

The first reduced masks in ascending order are 0, 1, 4, 5, 7, 16, 17, 20 and the last is 255: that list, eight per row, is the cr31 ascending layout.

The published 47-tile orders the Studio recognises

LayoutSheetHow to tell it
cr31 ascending ID8 × 6: 47 tiles + 1 empty cellMasks in ascending order: the isolated tile first, the full tile last; also the classic Tile Lab template
cr31 wang blob7 × 7 = 49 cellsMask 0 in three corner cells; Tiled's wangblob example uses it
caeles seamless template II7 × 7 or 8 × 6The OpenGameArt template sheets; a different order from both cr31 layouts
GameMaker Studio 2 47-tile8 × 6, first cell unusedThe full tile sits in the last cell
Godot 3 "3×3 minimal" template12 × 4: 47 masks + 1 blankSampled from the template image in the Godot 3.5 documentation

In the corpus run, all four blob templates were identified with high confidence (seam AUC 1.000) and a real 64 px cave tileset as GameMaker 47 with medium confidence (0.964), all 47 tiles with the right bits.

What it does

  • Known blob-47 orders: cr31 ascending (8×6), cr31 wang blob 7×7, caeles 7×7 and 8×6, GameMaker Studio 2, Godot 3 3×3-minimal (12×4).
  • Scored by seam continuity (ROC AUC, 1.0 = perfect); textured art is measured with colour-band histograms.
  • Bits for sheets in no known order can be suggested from the pixels, as a preview.
  • A generator builds a blob-47 set from an RPG Maker A2 block or a 2×3 base, byte-exact from its quarters.

How to do it

  1. Drop the 47-tile sheet.
  2. Use the grid; read the layout candidates and their confidence.
  3. Apply the right one and read the Check panel.
  4. Export for Godot 4, Tiled, Unity or LDtk.

Files you get

What the Studio writes for a blob set, here from a sheet named cave.png (each target in its own ZIP):

FileWhat it is for
nerulio_tileset_import.gdGodot 4: run it (File › Run) beside the PNG and nerulio-tileset.json; it saves nerulio-tileset.tres with one Match Corners and Sides terrain set — for one terrain, 47 tiles and 188 peering bits.
cave.tsxTiled: a mixed Wang set, one colour per terrain, plus sample.tmx drawn with it. The isolated tile of a one-colour set is left out, because Tiled drops a Wang ID of all zeros.
nerulio-ruletile.jsonUnity 6: with Editor/NerulioRuleTileImporter.cs, one Rule Tile per terrain, sprites sliced with Point filtering.
cave.ldtkLDtk 1.5.3: an IntGrid value per terrain and one 3×3 rule per tile (checked against the schema and loader, not opened in the app).
tileset.jsonGeneric: per tile its pattern, cr31 mask, Tiled Wang ID, Godot peering names and rectangle.

Troubleshooting

SymptomLikely causeHow to checkFix
Rims appear inside the land in the engine, everywhereThe sheet was read with the wrong 47-tile orderCompare the Studio's top layout candidate with the order you assumedApply the identified layout and export again; the mapping above lists the orders
Holes or odd tiles at lake corners and one-tile pathsThe set has fewer than 47 distinct patterns: a missing inner corner, or a duplicate in a 48-cell sheetCheck panel: missing masks as ghost tiles, duplicates listedDraw the missing tiles or generate the set from a base block (tileset generator)
The Check panel reports corner bits behind open sidesA tile carries a corner whose sides are not both set (e.g. N + NE without E) — not one of the 47Click the listed tile and read its 3×3 bitsClear the corner bit; that combination is the same tile as the one without it
Lone single tiles never appear in TiledTiled drops the all-zero Wang ID of the isolated tile in a one-colour setThe .tsx has 46 Wang tiles for 47 on the sheetExpected for one-colour sets; lone cells work in Godot, Unity and LDtk
Godot paints transitions to another terrain badlyThe blob set covers one terrain against empty; transitions need their own tilesPaint two terrains next to each other on the test mapGenerate an A-over-B set, one pair at a time, or draw the transition tiles

Other ways to do it

OptionWhen it is the better choice
A dual-grid set of 16 corner tilesYou are drawing a new set and can accept a display layer offset by half a tile: 16 tiles instead of 47 (dual grid explained).
A 16-tile side setRoads, fences, pipes and platforms, where only the four sides matter and inner corners are not drawn.
Generate the 47 from a base blockYou have an RPG Maker A2 block or a 2×3 base: the tileset generator assembles the whole set from 20 quarters.

Engine exports and how each was checked

"Verified" means the exported files were loaded by the real engine or tool on real CC0 assets and the result was compared with the source. Anything that was not loaded is labelled as such.

TargetFilesCheck
Godot 4 TileSetPNG · nerulio-tileset.json · nerulio_tileset_import.gdVerified Godot 4.7.2The included import script builds the TileSet with terrain peering bits; a map painted with set_cells_terrain_connect equals the Studio preview in every cell on 9 corpus sheets.
Tiled.tsx Wang set · sample.tmxVerified Tiled 1.12.2Tiled's own readers load every Wang ID as written and the sample map renders pixel-exact. The terrain brush itself was not driven.
Unity 6 Rule Tilenerulio-ruletile.json · Editor/NerulioRuleTileImporter.csVerified Unity 6000.5.3f1 + 2D Tilemap Extras 8.0.3Blob and side sets: a painted Tilemap shows the predicted sprite in every cell. Corner / dual-grid sets are not exported to Unity.
LDtk.ldtk (1.5.3) · rules · sample levelPartly verified LDtk 1.5.3 schema + loaderAccepted by the LDtk JSON schema and its official loader, and the rules re-run to the exported tiles; not opened in the LDtk app.

Evidence

Layouts identified from the pixels alone on the tile corpus: 4 blob-47 templates and 2 Wang templates with high confidence, a real 64 px cave tileset with medium confidence — every tile's bits right. Godot 4.7.2 painted every test cell exactly as the Studio predicted (485/485 per blob set, 251/251 on a 4-terrain dual-grid pack); Tiled 1.12.2 read every Wang ID back; Unity 6000.5 matched on every painted cell of the blob and side sets.

Limits

  • One terrain against empty per blob set; A-over-B transitions are generated one pair at a time.
  • Orders not in the list (Tilesetter's output order is not published) need the bits painted or suggested from the pixels.
  • Unity gets one Rule Tile per terrain, with no transitions between terrains.
  • Tiled's terrain brush, the LDtk app and Godot's editor painter were not driven; the checks use the engines' readers and set_cells_terrain_connect.
  • Unity gets blob and side sets only; several terrains become several Rule Tiles with no transitions between them.
  • Isometric and hex tiles, animated tiles, occlusion and navigation layers are out of scope.
  • Suggesting bits without a known layout needs a reference "full" tile; on side-only path templates the guess can fail until you select it.

Versions and sources

The 256 → 47 reduction is checked by tests/game-autotile.test.mjs for all 256 masks. The layout tables were verified against their sheets in the corpus manifest; the Godot 3 table was sampled from the Godot 3.5 documentation's template image. Exports verified 2026-09-23: Godot 4.7.2 (485/485 cells on each blob set), Tiled 1.12.2, Unity 6000.5.3f1; LDtk 1.5.3 by schema and loader only. The engine terms follow the linked documentation.

Official documentation used

Questions

How reliable is the identification?

All four blob templates in the test corpus were identified with high confidence (AUC 1.000), and a real 64 px cave tileset with medium confidence (0.964) — all 47 tiles with the right bits.

What if two tiles are swapped in my sheet?

The art check finds exactly the two swapped tiles on every blob set in the corpus.

Is it free, and do I need an account?

Everything on these pages is free and works without an account. There is no watermark and no export that is held back.

Are my sprites uploaded?

No. The Studio decodes, packs and exports in this browser tab. Projects are autosaved in the browser (IndexedDB) and can be saved as a .nerulio file.

Does it need Aseprite or an engine plugin installed?

No. .aseprite files are read and written in the browser, and each engine bundle carries what that engine needs (for Godot, the import settings and scene; for Unity and the Godot TileSet, a small editor script).