A downloadable tool for Windows, macOS, and Linux

Download NowName your own price


This tool lets you generate normal maps for 2D textures, with little effort. Specially designed for Sprites in 2D games. Specular map generation is possible too, which gives your sprites the shininess they need to look PRO! It also lets you create parallax maps, mainly intended for backgrounds, to obtain a nice 3D effect in 2D games!

Normal Maps lets you create awesome realistic lights for games. This tool is primarily intended for illuminating 2D sprites for 2D games, although can also be used for 2D textures for 3D games.

Specular Maps lets you make realistic shine into your sprites.

Parallax Maps lets you "deform" the texture depending on the point of view, so you can create, for example, depth effects in backgrounds like brick walls.

Ambient Occlusion maps let you define which parts ambient light should reach. Adds realism to lights.

Version translated to Spanish, English, French, Brazilian-Portuguese, Catalan, Japanese, Danish and German!

IMPORTANT: plugins have been moved to another project page, to keep this one clean. Click here to download plugins for Laigter!

Available for free, you name your own price!

Source Code

Patreon: Become a Patreon!

If you like Laigter, you can Buy Me a Coffee at ko-fi.com

If you have any doubts or suggestions, join us on discord!

PlatformsWindows, macOS, Linux
Rated 5.0 out of 5 stars
(84 total ratings)
Tags2D, normal-map, parallax, Sprites, tool
Code licenseGNU General Public License v3.0 (GPL)
Average sessionA few seconds
LanguagesEnglish, Spanish; Latin America
LinksTwitter, Patreon, Source code, YouTube, Discord, ko-fi


Download NowName your own price

Click download now to get access to the following files:

Laigter 1.10.7 Installer
Laigter 1.10.7 Portable
Laigter 1.10.7 App (Experimental)
Laigter 1.10.7 AppImage 25 MB

Development log

View all posts


Log in with itch.io to leave a comment.

Viewing most recent comments 1 to 40 of 69 · Next page · Last page

I'm trying to generate normals for a large tileset, and this seems to work perfectly, however I need to set each tile to have itself as all its neighbors in order to tile properly, and this is pretty time consuming. Is there any faster way to set up the neighbors for all tiles?
I've also noticed neighbors don't seem to save with the rest of the project.

Right now there is no other way than setting the neighbors manually, I was testing some ways to provide this, but i couldn't find yet an easy way and I'm currently very busy with work.

The neighbors not being saved must be a bug, because it should definitely save. Ill try to fix that on my vacations.

I'm making use of this excellent tool in my project now and I'd like to list you in the credits, should I put "Azagaya" or something else? And link to this page, the github page, or something else

yeah! Azagaya and a link would be great! Thanks!

(1 edit)

When is the next update


Probably in My next holidays as i'm really busy with work and games. That updated Will fix some Bugs and add some translations. No new features had been added so far for it, but You can always request if You need something!


This tool worked wonderfully for me! I used it in my latest project (Pentamental), I credited you in the description, too! :D

I'm glad You find it useful! I'll check your project soon!

Hey there, I've just downloaded on Mac but it's saying

“laigter” cannot be opened because the developer cannot be verified.

Any ideas?

Laigter is not verified in Mac because I cannot afford a dev license just for it.

You can try some things to add it as an exceptions, that other users reported that worked:

  1. Open Finder.
  2. Locate the app you’re trying to open.
  3. Control+Click the app.
  4. Select Open.
  5. Click Open.
  6. The app should be saved as an exception in your security settings, allowing you to open it in the future.

If that doesn't work, you can try this:

  1. Open the Apple menu, and click System Preferences.
  2. Click Security & Privacy.
  3. Click the General tab.
  4. Click the lock in the lower right corner of the window.
  5. Enter your username and password when prompted, and click Unlock.
  6. Click the App Store and Identified Developers radial button.
  7. Look for “(App Name) was blocked from opening because it is not from an identified developer” and click Open Anyway. (In older versions of macOS, you could click Anywhere and then click Allow From Anywhere.)
  8. Try rerunning the app.

The second way in System Preferences worked! Thanks so much :)

No problem!

Hello, thanks for this nice tool! I just have a question, can i make normal maps for pixel arts?

Yes you can!
You have a "Pixelated" checkbox in the Visualization Dock. Check it. Also, for normal maps and pixel art images is usually better to use low distance and height values, as well as smooth values.
If you have more doubts, join us on discord and i can share you some screenshots, or you can send me some of your pixel art so i show you how to use with it.

I share you an image where i use laigter with pixel art game!

Deleted 204 days ago

Hello, thank you for putting out such a great tool at name your own price! Is it possible to generate normal maps using only the command line with it? Would be awesome if I could   include  it   into an automated pipeline

Yes! its possible. You can call laigter from the command line with --help to see the possible parameters.
In summary, doing `laigter.exe -d "path to texture" -n` will generate normal maps with default settings.
You can use the ui to generate some presets, and then use the switch -r to tell laigter which preset to use while generating through the cmd.

Oh that's incredible, thank you!

Purchased it now officially and it's perfect!  Thought I should tell you about the tiniest of bugs, that from the command line the --no-gui flag works as intended but -g does not (at least according to --help)

Okay only issue  is I can't seem to get the preset working from the command line. I   can  create a preset in the gui and export it somewhere, but whatever I try to point the  arguments at the preset file, whether in the same directory or not, doesn't seem to get used. The defaults would be fine actually, if only they included transparency/copying the alpha channel.  Is there something I'm missing or is this perhaps a bug with the command line usage?


Hey! Thanks for the purchase!|
Im sorry to hear that you are having inconvenience. Today after work ill check it and get back to you, because perhaps is a bug or regression.

Just passing the path to the preset should work. Ill look at it to fix it asap.

Man, this tool is really awesome! Thank you

I'm glad You like it!

This is a great piece of software, thank you for everything you do for internet sharing, it will play a huge role in my game

i'm glad to hear that!

Hi. I make a comparison from Laigter (open source) with Sprite DLight (proprietary).

Your software is awesome. I could generate almost the same textures as the Sprite DLight.

PS: I don't have the sprite DLight. I just take the example from the web site and make a similar one with laigter generated textures.

Thanks for the comparison! Sprite DLight seems to be a great software! I never had the opportunity to try it. I tried to make laigter as complete as i could!

Hi. I never use Sprite DLight to.

I get the results image from this link.


Hi, i have a problem, each time i try to export an image it comes up with an error that says "Could not export maps. check destination's permissions" any solution?

Probably You are trying to export to a directory that laigter has no permissions si save to, try saving in other directory. Or moving your original files to folders with public access

Hi @azagaya,

I would love to use the normal map brush, but whenever I install it, laigter crashes.

I use the flatpack version and the plugin file downloaded in the plugin page.

cheers atn


The flatpack version is not maintained by me, and its an outdated version. Plugins from here only work with latest version. Can you tell me the version of the flatpack you are installing?  You may try with older plugin versions found here: https://github.com/azagaya/LaigterNormalBrushPlugin/releases

Great tool!


I have a problem - images are not displayed. Judging by the documentation, I did everything right

Deleted 1 year ago

Sorry, i deleted previous answer. This seems to be related to a not supported opengl version by your gpu or drivers. Could You tell me your PC specs? Have You updated drivers?

Hello! This is a good software, but I found that this software does not have Chinese. I hope this software can have Chinese, because I am a primary school student and I don't know so much English. Please adopt my opinion, thank you!:)

Hi! It would be great ti have Chinese language, but i don't know Chinese, so i have to wait for someone that knows to make the translation.

I downloaded the link for windows but when I try to open my pixel art (png file) there is only a black screen

Hi! would you tell me what gpu you have and what is the supported OpenGL version for it?

(2 edits)

My GPU is called Mobile Intel® 4 Series Express Chipset Family (Microsoft Corporation - WDDM 1.1) and the supported openGL version for it is 1.1

Oh, unfortunately OpenGL 1.1 is too low for laigter. You could try running it from command line with -s parameter. Or using a software opengl implementation, but im not sure if it will work. Check this: https://github.com/pal1000/mesa-dist-win

Ok, thanks!

Hey Azagaya I'm having issues saving images now. It saves them as a .laigter file and I can't open it :/

Hi! Thats because You are saving the proyect. For saving the output images You need to use the export button in the toolbar! There You can choose some export options


ahhh that worked! Thanks so much!

This app is really quite good.


Hey :)  Seems like an amazing app but its not allowing me to open any  files,(working on a Mac)  All the icons in the app are a solid blue not detailed like in the intro video.  I can click the file icon and it opens up my folders, just can't click an image to upload. 

try with the import icon, or drag an image file to the app. Does that fail too?

ahh thanks so much for such a quick reply! Yess that worked Thanks so much! Really happy I paid for it now. Keep it up 

Thanks! I really appreciate the contribution! helps me a lot!


if i have to say anything, its that the god of 2d games sent you to help everyone

This is a great tool. I have some questions .

Is there a way to add flicker or other effects to the light preview?
Is there any way to hide that flame icon/logo in the light preview?

Hi! Thanks.

No, there is currently no way to add flicker or to hide the icon. What are you trying to do?

nothing I can't do in an engine just being lazy with the previewing, The tool is exactly what I was looking for . 

Cool! Glad to hear that.


Hi! Is it possible to have normal map flow properly for Tilesetter generated patterns? I'm trying to get normal maps for a tileset tile seamlessly but I think the app will treat edges as edges while they should expect some other tile to be there. Do you know the best way to deal with it?

Hi! if I understood you correctly, you just need to set the neighbors of each tile in Laigter. If you join us on discord, I can better explain how.

But basically, you import the tileset, set how many cells it has, check tileable option, and open neighbor selector to select a neighbor tile to each individual tile.

Oh, I think I found it, thanks! Is there an option to export the neighbour set? It looks like the relations are gonna be the same for most of my cases.

no option for that yet.. it may be a good new feature to add though.

Pleeeaaase =^.^= It seems saving the project doesn't save neighbours.

Oh, thats a bug... Ill look at it.

(1 edit)

I am trying the animation feature but for me it crashes with a "simple" sprite. The sprite is 128*384 pixels and 32bit color:

The steps: import the image in laigter, cut it 2 by 6. Check animation box. Select it. Press play => CRASH.

Using version 1.10.3 on windows 10 64bits nvidia geforce gtx 1650

Other than that it is a great tool :-)
Thank you.

PS: should I post on github instead?


hi! Thanks for repirting the issue. Ill try today, sorry for the inconvenience.. yeah it would be nice if you open the issue in github! Thanks


I just tried in my pc and worked fine. This afternoon ill try in another widnows pc.


Yes, its crashing on some machines. Thanks for the heads-up! If you could open an issue it would be great.


Also, if you could, try dropping the image in laigter instead of importing.


Ok, i think i fixed it. It will be released a patch soon.

(1 edit)

Pablo, buen día; una pregunta, espero me puedas ayudar; ¿cómo se puede replicar el filtro Caricatura y Pixelado en Unity? es con shader graph? estuve leyendo los post anteriores y mencionas una solución pero para Godot, no encontré mas. El sprite agarra un efecto muy bueno con Toon y pixelated palomeados pero no es lo mismo cuando se pasa a unity; es una herramienta increible muchas gracias. Pd. no divulgare tu identidad secreta 

Hola! Honestamente, he usado unity muy poco y no estoy seguro de como se haría. En godot es muy facil renderizar el juego en pixel perfect y eos ayuda mucho. El shader de toon creo que se podria hacer facil en unity... nunca use shader graph, siempre lo hago por código . En esta semana intento averiguar y si encuentro algo te aviso.  

Hi! Just curious to know if you ended up finding something. I've been messing around trying to do the same thing. here

Not really sorry, i havent tried to implement that kind of shader on unity.


i literally googled for about 2 hours with my 16x16 unormalized texture to get here

and i gotta say

thank you so fucking much for this


im glad you find laigter useful!

Hello! Great tool, very easy to use!

For some reason Laigter stopped displaying imported texture into main screen after I generated my first normal map. Do you know how to fix this issue? I already tried pressing all the zoom bottons.

To anyone who expericnece this issue, the problem is that I dont have a dedicated graphics card. Here is the step by step guide to tackle this problem:

1) Download this file: https://fdossena.com/?p=mesa/index.frag
2) Unzip and copy the "opengl32.dll" file open your install Laigter folder and paste the file there
3) Enjoy Laigter even with no dedicated graphics card.


Hi azagaya.

This is a really great program, and it's allowed my friends to quickly create some really nice normal maps for a project we are doing together. However, we have a question. 

When we import the actual normal map into Godot, the normal map itself works. However, we can't seem to get the lighting to work the way your test light in Liaghter works, specifically the Toon and Pixel filters. Could you explain to me what you used and how you made those filters possible? Specifically, did you have to use shaders, or a set of layered circles etc... ?

They look great and we'd really like to try and put that kind of light into the project. For reference, we are using Godot (if that matters, but I don't think it does).

Hi! The Pixelated and Toon options in Laigter are only for visualization.. that information cannot be exported with the map.

To replicate them in godot, for the pixel filter, you just need to import the textures with filter option unchecked.

For the Toon lighting, in godot 2D you need to write your own shader. I made a simple shader for my game with a simple toon efect. if you are interested, reach me at discord and i will share it to you. This is the discord link: https://discord.gg/88kJqry

It matters which engine are you using, because each engine has different features out of the box. With godot you have normal map, but no specular or others in 2D, for which you should implement shaders.

Also, for using with godot, remember to invert the y axis of the normal maps!

Wow, huge thanks for the quick and informative reply! I will send you a message on discord asap.

Hi. I'm  having some issues exporting maps. I keep receiving an error message saying check permissions of the destination and I don't  know how to fix this

Where are You trying to save the exported images? You are using Windows versión, right? 


you have created an absolutely brilliant program here. thank you very much for your fantastic work =)

i would like to output the preview view directly via commandline. maybe you could add this possibility... and in this context also restore the lights (position, color, ...) via preset when loading via commandline?

my wish may seem strange, but i would like to use your excellent program to automatically give sprites a bit more depth without explicitly using normal maps in my game.

Hi! Im glad you like it! 

The problem of being able to output the preview with the command line is that the Qt framework needs an active opengl widget for rendering it. So the gui needs to be launched for that. The other maps are calculated in cpu instead. Maybe i can find another way to implement it. Thanks for the suggestion!

Gracias Pablo, una herramienta increible!

Me alegro que te haya gustado!

Por favor, no reveles mi identidad secreta!


Awesome program. Im trying to figure out how to use this to make deep effect on a top down building game, and day/night cycles, i would love if u can recomend me any tutorial on this program becose i couldn't find anything

Hi! i'm glad you like it! Can you share some screenshots of how your game looks? And what engine are you using?
About tutorials, there are a few on youtube... I have some unfinished tutorials that i hope i can release soon.

Awesome! I am using Godot an was looking for a tool to help generate normals for pixel art sprites, and was disappointed to learn that SpriteIlluminator apparently does not provide an option for y-invert. This is where Laigter came to the rescue!

Hi! i'm gald you like Laigter!

But to be fair, i think you can invert y in sprite illuminator, right before you export.

I want to know if the tool is free for commercial use without conditions


You can use it freely!


How can i change language manualy? I like to use all kind of tools in english, even if my native language is portuguese. Is there a way to change it?

Awesome tool by the way.


Hi! thanks for the kind words! this is a featured implemented in master branch. It will be included soon in 1.9 version, when i finish project file save/load. Here is a twitt about it!


Thank you for the reply! Glad to see this nice tool is improving!
Keep up the good work!

great tool



AMAZING!!!! thankyou so much!

Wonderful program <3

2 questions:

-Is there a way to change the language from a menu? 

I work on a spanish machine, but do English Tutorials and work with American Coworkers.


-Is there a way to Batch Render alot of images?



About the language, you cant in current version.. is planned for next version. If you are on windows you may try renaming the laigter_en files in the installation directory with laigter_es.

About the export, when you click export in the export dock, all oppened textures will be exported. Is that what you need? You could also use cli commands for using without gui

Yes! thats exactly what I needed~ thank you <3

Can´t wait for the next release, good luck! I´ll support you anyway I can as thanks~


thanks! 1.9 is taking longer because too many refactoring is going on i  the backend. But i hope ill finish it soon!

This shows how you will be able to change language in future version :)


can i use this in : "game maker studio" too?


Yes you can, but you need to make/find a shader for that. See this for reference. If there is enough interest, perhaps i can make a tutorial for this.

thanks so much i'll see this soon i have game maker studio 1.4.9999 i'll try this soon and thanks again :)

Is there a way to flip normal map colors to work with different lighting engines such as Godot?

(1 edit)

On the left side of the screen (under the "Normal" tab) there is a section called "Axis:". You can flip the X and/or Y axis there before exporting.

Thats right! Thats the way to flip normals. Thanks for taking the time to answer!

Thank you for this tool! I came back to it after a couple of months and I am very excited for the progress that has been made on it.

Thanks! Im working really hard on this tool! I really appreciate your kind words. Lots of new features are planned.. but they take time!

Yes! thank you for the answer, I saw it there but dismissed it because it looked like it was inverting the height (making bumps into dips). I may need more sleep... Again thank you.

you can also use those checkboxes to invert height. In fact,i think it would be useful to add an invert option on export, and leave those checkboxes only for inverting height.

I must say that in 1.8 there is a bug that affects flipping in some way. Please see: https://github.com/azagaya/laigter/issues/31

To workarround it, modify "distance" slider AFTER checking the invert checkbox.

Viewing most recent comments 1 to 40 of 69 · Next page · Last page