Status
SteamPeaks
ChartsSalesUpcomingPatchesNewsCalculator
New on SteamEvery app, DLC and depot the minute Steam creates itAppsEvery app on Steam, newest change firstPackagesSubs and bundles, and what each containsDepotsDepots, manifests and install sizesTagsSteam's user tags and the games under themDevelopers & publishersCompanies and their cataloguesTechnologiesEngines, SDKs and anti-cheat found in the filesChange historyEvery PICS changelist as it lands
SignalsNineteen readings of the whole catalogueCompareAny games side by sideRecordsAll-time peaks and the days they were setReportsWeekly and monthly write-upsAlerts & newsroomWatch a game, get told when it movesSteam statusIs Steam up, right nowWeb API explorerTry the endpoints in the browser
NewsSteam's own announcements and the sales calendarCalculatorWhat a Steam account is worth, and its pile of shame
/
Sign in
/
SteamPeaks
The ultimate resource for Steam data.
ExploreChartsSalesSales and festsUpcomingPatchesNewsRecordsTrendingSignals
DatabaseAppsPackagesDepotsTagsDevelopersTechnologiesChange history
ToolsCalculatorCompareSearchAlertsSteam statusAPI
SiteMethodologyFAQDiscordSupportSign in via Steam
Not affiliated with Valve or Steam. Game names and artwork belong to their owners. All times UTC.
PrivacyCookiesFair useStatus
Totally Normal MapperNewsSeamless tile sheets and batch processing
Community

Seamless tile sheets and batch processing

Totally Normal Mapper · published 28 Sep 2026, 04:23 UTC

All newsPlayers around this dateRead on Steam

Public release is still December. This build solves a tile sheet the way a tilemap uses it, and it puts the batch tool in the Steam install, so a whole folder of sprites can take the look you tuned on one.

Tile sheets without seams


A tile sheet is not a picture. Unity cuts it into cells and places each one beside cells it never touched in the sheet. Solved as one picture, a tile was smoothed into whatever was packed beside it, and flat fill that stopped on a tile line was lit as an edge. In a tilemap, that is a line at every seam.

Turn on Tile grid in the Solver tab and enter the numbers you gave Unity's Slice > Grid By Cell Size: cell size, offset and padding. Each tile is then solved on its own. Where its art carries on into the next tile, its edge is held level, so any tile meets any other cleanly. A rock drawn across the tile line keeps its shape. The viewport draws the cells, and a brush stroke stays inside the tile it started in.

Do not leave a pixel of space between tiles to get rid of seams. That makes every flat edge an outline, and the sheet comes out as a grid of pillows.

totallynormalmapper.com/docs/tiles

Outline edge


The grid cannot tell from the pixels whether a flat edge on a tile line is the top of the ground or fill that carries on below. It assumes fill. Paint Outline edge (G) along the tops of platforms and ledges, and those edges roll over like any other outline. Paint right into the corners with any size of brush: an edge opens only where your stroke runs along it, so the spill down a tile's sides, or a roof's slope crossing the tile line, opens nothing.

It works without a grid too, on a sprite cropped tight to its art.

Quick to paint


With a grid on, tiles are solved on the CPU and the status bar says Tiles. Only the tiles you change are solved again. A 512x288 sheet of 32-pixel tiles solves in about a third of a second, and a stroke comes back in about fifteen milliseconds.

Height and ambient occlusion are worked out per tile, on one shared scale, so a neighbor in the sheet never shades a tile.

Batch processing, in the install


A scenery set is two hundred sprites that have to match. tnmap, the batch tool, applies one look to all of them, and from this build Steam installs it: tnmap.exe sits beside totally-normal-mapper.exe, with nothing else to download.

Tune the look on one sprite in the editor. Then choose Edit > Copy batch command, pick your shell, and paste. Or save a preset and point tnmap at it:

tnmap sprites/ --preset knight.tnpreset --out normals/


It runs the same solver as the editor and reads the same presets, so the folder comes out the way the sprite you tuned did. It exports for the same engines, writes height, AO and specular maps when asked, and takes the tile grid as --tile-width and --tile-height. On a folder you care about, run it with --dry-run first: it lists what it would write, and stops.

Hand it a Photoshop or Aseprite file and the hint layers come along. A layer named hint: front, hint: cut, hint: flatten and so on is that hint, visible or not. A hidden layer named for a hint is that hint too. Every other visible layer is the artwork, and other hidden layers are skipped. There is no dialog to confirm any of that, so the report for each file lists what became of every layer, and --dry-run shows it before anything is written.

Steam has to be running, and the account logged in there has to own the app. The batch tool solves on the CPU, one sprite at a time. Hints painted in the editor stay with the project; File > Export every frame solves a set of hinted frames, each with its own.

totallynormalmapper.com/docs/cli

Fixed

  • Outline blur reaches every export. At any setting other than 2, the preview and exports made through Export every frame or the batch tool disagreed about the fold at each drawn line. Exports now match what the preview showed.

For testers


If the app is already in your library, Steam will offer this build. Start it from your Steam library. A copy started some other way asks Steam to relaunch it. The About dialog should read 1.4.0.

The woods tiles are by karsiori, released CC0: karsiori.itch.io/woods-tileset-and-background

More from Totally Normal Mapper

Other announcements

All news
Community9 Oct 2026Live updates that keep up, and a prompt before unsaved work is lostPublic release is still December 3. Almost everything in this build came from sitting with a tester while they worked, so thank you to them, and to everyone sending reports. Live updates that keep up with a large sprite On a large sprite a solve can take a few seconds, and live updating used to switch itself off when one did. The picture then stopped answering just when you had opened the artwo…Community4 Oct 2026Normal map and lighting side by side, and the batch tool on the GPUPublic release is still December. This post covers two builds: 1.6.0 rebuilt Split and started a native Linux build, and 1.6.1 puts the batch tool on the graphics card and gives the Linux editor one to solve on. Split, side by side Split used to be one picture divided by a line you could move, with the normal map on one side of it and the lit result on the other. Now it is two panes: the normal…Community3 Oct 2026Three fixes, including a crash on LinuxA small update: three fixes for problems in 1.5.0 and earlier, all from your reports. Thank you for sending them. Lights are picked up where they are drawn A light's handle is drawn in the middle of the pixel the light sits on, but a click was tested against that pixel's corner. On large artwork the difference was a fraction of a screen pixel. On pixel art zoomed in, the spot that picked a ligh…