Posts: 712
Threads: 32
Joined: Mar 2012
07-20-2018, 02:47 PM
(This post was last modified: 07-06-2021, 07:32 AM by daemoth.)
Sprite Sheet Analyzer list all continuous sprite's palettes.
Functionality:
- List all palette of the sprites of a sheet.
- Sort sprites depending on their palette
- Modify the colors used by a palette or the background by pressing the Ctrl key and a color.
- Help you identify the most appropriates colors for a IRL pixel art project
- Highlight duplicates or palette swaps
- "De-sheet" sprites: Save every sprites found on a sheet as individuals files.
- Recuperate deleted pixel ( if they haven't been covered by something else)
- Give specific information about a sprite ( number of pixel, how many times each colors are used...) by pressing the Shift key and a sprite.
Download: Spritesheet Analyzer v16
Full Explanation:
1. Background Colors:
When a sheet is loaded, the default background is automatically detected. A new background color can be picked by clicking on one of the box on the top right panel, and then clicking on the sprite sheet. A background color can be deleted by right clicking it. Press reload after picking the background color in order to reload the palettes with the new background colors. You can also change the background color directly on the sheet, just hold the Ctrl key while clicking the color box on the background panel.
2. Palette List:
The "Master" palette is a palette containing every color used by the sprite on the sheet.
When a palette is clicked, all sprites using that palette will get highlighted by a red rectangle.
Click a color to highlight all pixel using that color in the selected palette.
Pressing the " F" key while a color is selected will make those pixel flash.
Ctrl + Click a color to change it.
Pixel Art Helper
This menu will you choose the most appropriate colors depending on your IRL colors.
First, you will need a ".txt" file describing what are your irl colors with the following format:
"ColorName;R###G###B###"
Where # are the RGB value.
Example:
Code: Black;R0G0B0
White;R255G255B255
Gray10;R34G34B34
Gray10A;R94G94B94
Gray09;R63G63B63
Gray08;R110G110B110
Gray07;R155G155B155
Gray7A;R166G166B166
To get your RGB values, i suggest sticking each of your colors on sheet of papers and scanning it. Then, open your image with Gimp and use the color picker tool. Make sure to activate the activate the "Sample Average" option.
Then, Select a sprite and open the menu View>PixelArtHelper
On the left, your chosen sprite. On the right, the colors of your sprites, and the most similar color from the list you have loaded in previously, along with their percentage of correlation. You can also change the colors used manually.
"Preview": Will apply your chosen colors to the sprite.
"Restore": Will restore the original colors of the sprite.
"Change Sprite": Will change the sprite on the sprite sheet with the chosen colors.
"Change Pal." : Will change the palette of the previously selected sprite, along with every sprite used by that palette.
"Minimum correlation before dupe": If you have enough colors in IRL palette, dupe will be avoided unless the next best color correlation is 80% or lower. You can change this percentage and then press "Update Color" to update the chosen colors.
Reference:
When a reference sprite is loaded, SSA will tell you if it has found a patern and palette match trough the sheet. Only 1 sprite must be present on the reference image. Like for the sprite sheet, the background color must be present at the top left corner ( x=0,y=0)
Highlight duplicates/ Palette Swap:
SSA will search for all duplicates, either flipped vertically or horizontally, or rotated (90-180-270) or straight dupe and highlighted them. Each highlight get numbered depending on which sprite they are a dupe of. Sprite of less than 4 pixels will get automaticaly ignored in orden to avoid false positive made by some fonts (The amount of pixels can be modified in the Config. menu) . Same thing for palette swap.
Transparency:
If SSA detect 100% transparent pixels during the loading of a sheet, the user will be asked whether if he want to "Ignore" them, which will generate the palette as if there was no pixels there, "Transform" them, so they are no longer transparent, or Load them as is, which will generate palette of apparently blank colors.
Once a sheet is loaded, you can also remove all transparent pixel from the sheet by clicking the menu Edit\Remove Transparency.
Sprite Info
Press Shift while clicking a sprite to see info about that sprite: width, height, number of pixels, number of colors and how many times each colors are used.
If you guys have an idea for a functionality that could be useful, particularly the vg staff, or spot a bug, there's probably still a few, post it in here!
07-20-2018, 02:54 PM
(This post was last modified: 07-20-2018, 02:55 PM by Superjustinbros.)
Okay, this is honestly a pretty cool program, especially for the ability to quickly replace the background color on a sheet (incase they don't have Photoshop).
I can see it being quite useful.
Posts: 712
Threads: 32
Joined: Mar 2012
(07-20-2018, 02:54 PM)Superjustinbros Wrote: Okay, this is honestly a pretty cool program, especially for the ability to quickly replace the background color on a sheet (incase they don't have Photoshop).
I can see it being quite useful.
Oh, although adding this functionnality would be pretty easy, it doesnt presently do that. The background color is used to determine the boundaries of the sprite and their palettes. The background colors are always ignored if found on the sheet.
But yeah, the ability to change a background color or the color of a palette ( and all their associated sprites) is doable, ill put it on my check list.
Posts: 712
Threads: 32
Joined: Mar 2012
07-23-2018, 12:41 PM
(This post was last modified: 07-23-2018, 03:05 PM by daemoth.)
Sprite Sheet Analyser V04.2
- You can now modify the colors found on the sheet, in a palette or in the background. Hold down Ctrl when clicking on a color box ( in the palette list or on the background panel) and choose the new color.
- Added a "Color Picker" icon that appear to make a distinction between picking a new background color, which will change the color to ignore when generating the palette list, and changing a background color directly on the sheet.
Edit: V4.1: Managed to optimise the loading process, should be at least 5 times faster than V4.0
V4.2 Fixed crash when adding a new background color
Posts: 712
Threads: 32
Joined: Mar 2012
So, i was implementing transparency and fun fact, when you delete pixels in gimp, it doesnt actually erase the color data of each pixel, it just put everything to 100% transparent....
For example: this test sheet,
i deleted the center block like so,
Give me this when loaded in SSA
This could be an interresting feature, to be able to recuperate deleted pixel, but at the same time, if youre sheet is completely transparent and you have moved and deleted pixel all over the place, this will lead to many issues, in particular the sprite boundaries.
I guess ill make it so it ignore by default all pixel that are 100% transparent but also add a second way to load the palette with those pixels, and an option to set all colors that are 100% transparent, opaque.
Just a thought; does this detect flipped/mirrored sprites? That could help cut down on redundancies.
Quote:You had wasted MY LIFE... waiting for just a goddamn bunnelby model.
-The prestigious Farlavor
Posts: 712
Threads: 32
Joined: Mar 2012
(07-26-2018, 07:43 AM)Ton Wrote: Just a thought; does this detect flipped/mirrored sprites? That could help cut down on redundancies.
Not presently, but this is a good idea. Ill see how i can implement it ^^
Posts: 712
Threads: 32
Joined: Mar 2012
Download Spritesheet Analyser V5.0
- Highlight duplicates implemented, will also search for sprite that are either flipped horizontally, vertically or rotated ( 90-180-270 degrees), then highlight and number them. This algorythm still need optimisation, depending on the number of sprite to analyse, the time to process will be exponentionnally long. A sheet with with 800 sprite will take about 3-4min to fully process where a sheet with 80 sprites, like in the example below, will take less than a second. I might add a way to search for only straight dupe ( no flipping or rotating) if im not able to optimise enough the full process.
Example:
-Transparency implemented, with function to recuperate deleted pixels upon load. When a palette is selected, each color transparency percentage is now written on them.
- Fixed crash when a single sprite was bigger than 4300 pixels. There should be no limit to the sprite size now.
More info added to the first post.
Man. You are a hero.
Quote:You had wasted MY LIFE... waiting for just a goddamn bunnelby model.
-The prestigious Farlavor
Posts: 712
Threads: 32
Joined: Mar 2012
Spritesheet Analyser V5.3
Added a bunch of "quality of life" improvement.
- You can load a sprite sheet or a reference by drag and dropping a picture file directly onto the software.
- You can now load a sprite sheet by entering the URL of the picture.
- If you click a palette panel and its first focused sprite isnt being displayed ( because your zoomed too much), the scrolling panel will center onto it.
- Like in most image editing software, pressing the Ctrl Key while using the mousewheel will zoom/dezoom the spritesheet.
Posts: 712
Threads: 32
Joined: Mar 2012
08-01-2018, 03:32 PM
(This post was last modified: 08-03-2018, 10:29 PM by daemoth.)
Spritesheet Analyser V6.0
- Added arrow controls, Up & down to switch between the palettes, left right to switch between the selected sprites.
- Clicking on a sprite directly on the sprite sheet will select that sprite and show its palette.
- Pressing delete while a sprite is selected will delete it. The first background color will be used for the fill.
- When changing the color of a "mother" palette, you now have the option to also change the palette of all of its child.
- The master palette ( a palette made up of all the color used by the sprites of the sheet) is now displayed at the top of the list.
- A progress bar is now displayed when loading a sheet or searching for duplicates.
- and tons of bug fix.
Edit Spritesheet Analyser 6.3
- You can now highlight palette swap.
- Fixed memory leak and greatly optimised "highlight duplicate", should be 10 times faster now.
- Added a grid function and a menu to change its spacing and offset.
Posts: 712
Threads: 32
Joined: Mar 2012
08-05-2018, 04:54 PM
(This post was last modified: 08-06-2018, 03:31 PM by daemoth.)
Spritesheet Analyser V7.0
- Shift clicking a sprite will now give some information about that sprite: number of pixels, number of time each colors are used etc.
- When the grid is activated and the image zoomed enough, the grid is now numbered.
- Added an off-grid ( probably not the right term), a second, bigger grid. Also resizable in the grid menu.
With the above now implemented, SSA should be quite helpful when youre doing irl pixel art like hama beads.
- The main screen is now fully resizable.
Edit:
Spritesheet Analyser v7.5
- Completely changed how sprite data are stored, SSA should not take more than 1 gig of ram even for monster sheet.
For a pretty big sheet like this one of Dias in So2, it would take about 2gig of ram in version 7.0. Now, even the sheet that has the most sprite that ive worked on, Lenneth of Valkyrie Profile, take less than 800mg of ram to load.
- You can now click on the asterisk of the mother palette in order to select every sprite that is within that familly. Which should make it easier to spot sprites that have anomalies.
This keeps looking better!
Quote:You had wasted MY LIFE... waiting for just a goddamn bunnelby model.
-The prestigious Farlavor
Posts: 17
Threads: 1
Joined: May 2015
Bug Report: I had Spritesheet Analyzer open in the background while typing this post and noticed my laptop was getting hot. Checked the task manager and Java (confirmed to be running this program) was constantly using all of a CPU core. Its usage appeared to scale with the window size such that the maximized window used 25% CPU / 100% of a core, and resizing it to be smaller dropped it to a steady 14% or so. I reckon it's constantly redrawing even though it was a static image and nothing was being analyzed.
This has been very helpful for finding goof-ups with palettes, more so than most programs. Usually it's been a tedious hassle with the magic wand tool to see if anything doesn't get selected and thus doesn't match the target value.
The ability to merge palettes would be helpful for this situation: I have a sheet of NES sprites, some sprites are using the same 4-color palette in-game but some of the sprites in the sheet use white and some don't. Currently it creates two palettes for this (which is probably the best way to handle it on its own) but I'd like to combine the Black + Pink + White palette with the Black + Pink palette so that they're both selected and manipulated and merged with less duplicated data in the list. I can see a problem with this though, if there's a situation where there are sprites that have the same palette save for 1 entry, and there are sprites that should be using those different palettes but don't use the one differing color and thus end up with their own shorter palette missing that last entry, they could end up merged into an unintended palette grouping. Perhaps a rectangular or freehand selection tool to choose what sprites gets merged into what palettes would be helpful.
Continuing from the selection solution for palette grouping, this could be helpful for grouping sprites into named groups, like Firing Animation and Left-Facing Equipment Variations, for human organization and for possible future features to use and have available.
The option to hide the reference section of the window so that it doesn't take up space when it isn't wanted, even if there's a reference loaded, would be nice.
With later versions and new features loose parts of sprites may be a problem so the ability to merge sprites into a single sprite, like if there's a floating piece that should be in the same sprite, may be good to add.
Since there's a grid, and it seems to understand the bounds of sprites, it seems like a natural continuation to have an auto-arrange function. Knowing what should go where would be a problem, but using a combination of named groups and rectangular marquees there may be a natural solution. It could arrange things with name-grouped sprites in the same area; maybe detect 8x8 tile boundaries in the sprites by comparing pieces of sprites to find repeated tiles which could help with arranging items on a grid if some sprite boundaries don't fill out a multiple of 8 pixels in a direction, this way tiles are locked to the grid rather than a few boundary edges locked to the grid, but sometimes that may not be worth bothering with if it's a computational grind so I'd take it or leave it, it just seems like it'd be neat to have and be satisfying to see happen; perhaps manually drag multiple sprites via selection into general areas and have Spritesheet Analyzer cluster and arrange them together with a specified distance of padding between each sprite boundary or detected 8x8 tile.
Posts: 712
Threads: 32
Joined: Mar 2012
(08-08-2018, 05:10 PM)torridgristle Wrote: Bug Report: I had Spritesheet Analyzer open in the background while typing this post and noticed my laptop was getting hot. Checked the task manager and Java (confirmed to be running this program) was constantly using all of a CPU core. Its usage appeared to scale with the window size such that the maximized window used 25% CPU / 100% of a core, and resizing it to be smaller dropped it to a steady 14% or so. I reckon it's constantly redrawing even though it was a static image and nothing was being analyzed.
Hmm, it could be because when a color is selected and that their pixel glows, its true that the image is constantly being redrawn, but the cpu usage for that should be minimal, in theory. Ill make sure to check cpu usage in my next tests.
This has been very helpful for finding goof-ups with palettes, more so than most programs. Usually it's been a tedious hassle with the magic wand tool to see if anything doesn't get selected and thus doesn't match the target value.
The ability to merge palettes would be helpful for this situation: I have a sheet of NES sprites, some sprites are using the same 4-color palette in-game but some of the sprites in the sheet use white and some don't. Currently it creates two palettes for this (which is probably the best way to handle it on its own) but I'd like to combine the Black + Pink + White palette with the Black + Pink palette so that they're both selected and manipulated and merged with less duplicated data in the list. I can see a problem with this though, if there's a situation where there are sprites that have the same palette save for 1 entry, and there are sprites that should be using those different palettes but don't use the one differing color and thus end up with their own shorter palette missing that last entry, they could end up merged into an unintended palette grouping. Perhaps a rectangular or freehand selection tool to choose what sprites gets merged into what palettes would be helpful.
Continuing from the selection solution for palette grouping, this could be helpful for grouping sprites into named groups, like Firing Animation and Left-Facing Equipment Variations, for human organization and for possible future features to use and have available.
-Selecting mutiple palette in order to change more sprite when you change a color, when the "mother" and "master" selection doesnt do the job, is implementable. However, creating group name would kinda imply saving those group name when you save the sheet and then i would need to manage a second file just for that. And then the user would need to load that file when he reload the image... it seem a little overkill. Same reason for creating a new palette rectangular selection tool. But, ill think about it.
The option to hide the reference section of the window so that it doesn't take up space when it isn't wanted, even if there's a reference loaded, would be nice.
- On the check list
With later versions and new features loose parts of sprites may be a problem so the ability to merge sprites into a single sprite, like if there's a floating piece that should be in the same sprite, may be good to add.
-Its again the same problem as the palette grouping, all the work you will make will be lost if you reload the sheet unless i make a file system. However , I was thinking of adding some options to sprites detection script. For example, if the sprite use 8x8 tiles, you could specify that before loading, and even if the sprite has floating pixels around it, it would be detected.
Since there's a grid, and it seems to understand the bounds of sprites, it seems like a natural continuation to have an auto-arrange function. Knowing what should go where would be a problem, but using a combination of named groups and rectangular marquees there may be a natural solution. It could arrange things with name-grouped sprites in the same area; maybe detect 8x8 tile boundaries in the sprites by comparing pieces of sprites to find repeated tiles which could help with arranging items on a grid if some sprite boundaries don't fill out a multiple of 8 pixels in a direction, this way tiles are locked to the grid rather than a few boundary edges locked to the grid, but sometimes that may not be worth bothering with if it's a computational grind so I'd take it or leave it, it just seems like it'd be neat to have and be satisfying to see happen; perhaps manually drag multiple sprites via selection into general areas and have Spritesheet Analyzer cluster and arrange them together with a specified distance of padding between each sprite boundary or detected 8x8 tile.
-At first, it was on my checklist to have something to rearrange sprite on a sheet. By patern match, palette, size etc However, theres Daxar's spritesheeter that already sheet your sprites if they are on individuals image, and it has a tons of options. If they are already on a single sheet, it means you already placed them., or at least someone placed them. Thus the work to fix them should be minimal. And it would be a lot of work to make a good sorting system and lot of options like there is in the spritesheeter.
Drag and drop sprite on the check list. Thx for the sugestion and bug report ^^
I answered in color up there.
Also, im currently working on a palette swaping menu. Which will allow you to choose 2 palettes, 1 to modify ( either the master palette, or any combination of the other palette) and the second one as the reference (a palette loaded from either the sheet or the reference image that has a sprite patern match with another sprite in the sheet) .
For example, you load a Mario sheet, you load as a reference a fire mario( which has the same pose as one found on the sheet). It change every mario to fire mario colors.
I was also gonna add a way to create a new palette in that menu, but if i implement a way to select multiple palette, that wont be needed
|