GimConv
Description
GimConv.exe is a sony program for microsoft windows used to convert GIM images, see Graphic Image Map (GIM)
- GimConv.exe versions:
- 1.20c (GIM files made around 2005 included in pre-retail PS3 firmwares such 0.82.006)
- 1.20e (GIM files made around 2006 and still present in PS3 4.82 firmware)
- 1.20h released with p3tcompiler v2.00 as part of the PS3 Custom Theme Toolbox (this is the version included in rcomage using a modifyed GimConv.cfg)
- Other notes:
- GIM images can be previewed in PC by using Gim Viewer (unnofficial app made by hsreina, it has limited support for the "rgba based" GIM formats). See Multimedia Formats and Tools
- The option -viewer (start gimview.exe when process ends) in the official config file (that was removed for rcomage) is intended to launch an official gimview.exe that doesnt exists in the public release
- PSP Custom Theme Toolbox admits GIM files as inputs, but doesnt includes an standalone GIM converter
- Some of the settings (such merge_mode) seems to be related with animated images but the support of animated GIM images on PlayStation consoles is unknown, see: talk
- Supports AVI video as input, converts the video frames to static images and build a multiframe GIM with them
- Supports an internal script format to automatize image conversions, there is one script definition located at bottom of Gimconv.cfg named "Filter". The usage of this scripting features is unknown
- It uses an intermediate format named GIS that seems to be related with the scripting features
- There is a GIS2PNG converter made by TizzyT
GimConv.cfg Overview
Before explaining how GimConv.exe works is needed an introduction about GimConv.cfg (the config file). All features of GimConv.exe are driven by the settings that appears on GimConv.cfg
The contents of GimConv.cfg are loaded "from top to bottom" first are loaded the default settings, and then the settings inside the option (incase you enable some option/s, otherway the options are ignored). When enabled, the settings inside the options (at bottom ofGimConv.cfg) are going to "override" the default settings (at top of GimConv.cfg), this overriding also happens with any setting or option you use in command line, as example, if you change the same setting 3 times in a single command line the only setting that counts is the last one
usage { This is the help screen (only informative) } default { Default predefined settings (loaded "from top to bottom", if a setting is repeated two or more times the most at bottom overrides the other/s at top) } input * { Settings for input file formats } option * { Groups of settings (overrides the defaults settings, are only used when you specify the option name at the command line) } script * { Unknown }
Below is shown GimConv.cfg released by sony as part of the PS3 Custom Theme Toolbox (official version)
Code Sample
The config file released with Rcomage have some default settings modifyed that are problematic for PS3 compatibility. For more info about the modifications made in the config file released with rcomage see the differences in the Discussion page
GimConv.exe usage
Help screen
The help screen of GimConv.exe displays a few options with an small explain about them, the example below belongs to the official GimConv.cfg with the options sony considered useful, this options are mostly useless for us, in short: interact doesnt allows to do special things, the merge modes are hardcore because are intended to create GIM files by some kind of artisan method where you create the GIM by using "pieces" from other files, the promt modes doesnt helps much, gimview.exe doesnt exists, the image resize methods should not be used (instead you should prepare your images with the correct size before converting them with GimConv.exe), the pixel formats normal/faster should not be used that way individually, and the options to swap rgba color channels are not needed for PS3
'''C:\PS3_Custom_Theme_v200\GimConv>GimConv.exe''' gimconv ver 1.20h --- generic picture converter Copyright (C) 2006 Sony Computer Entertainment Inc. All Rights Reserved. usage: gimconv <input files> [options] options: -interact input additional options -pictures merge files as pictures -frames merge files as frames -levels merge files as levels -prompt prompt always -warning prompt on warning -error prompt on error -viewer start gimview.exe when process ends -o <filename> specify output file name -s <w,h> resize image data -S output text format -P resize image data to a power of two -N output in normal pixel storage format -F output in faster pixel storage format -R re-convert ( don't swap RGBA <-> ABGR )
Options
GimConv.exe allows to make a GIM-to-PNG conversion by specifying the file extension with the option -o:
'''gimconv.exe in.gim -o out.png'''
If you make a PNG-to-GIM conversion (or any of the supported input formats to GIM) without specifying any other option then are going to be loaded all the default settings of GimConv.cfg (from top to bottom) and this is not good because you dont have much control of the resulting GIM, most probably is going to generate a GIM file not compatible with PS3, at this point maybe you thought in creating a modifyed GimConv.cfg with all the default settings required by PS3 but this is not good enought either because there are (at least) 2 different GIM formats used in PS3 and you are going to break the compatbility with PSP, anyway here is the command as an usage example
'''gimconv.exe in.png -o out.gim'''
The interesting options are located at middle of GimConv.exe and contains several settings, this is an example of an option that is overriding the most critical settings (is a bit pointless thought, because the settings are given the value "default")
'''gimconv.exe in.png -o out.gim -DXT'''
The option -DXT used in this example contains 3 settings that are going to be loaded after the default settings (this is an example of the official GimConv.cfg, the one used inside rcomage is different):
Code Sample
Another example where can be seen better how the options contains settings that overrides the default settings:
'''gimconv.exe in.gim -o out.gis -S'''
- The option -S contains this settings:
Code Sample
At top of GimConv.cfg (as part of the default settings) appears the settings: output_object with value on and output_script with value off (so by default gimconv.exe outputs a GIM and doesnt outputs a GIS). The option -S of this example is switching them (doesnt outputs a GIM but it outputs a GIS)
Settings
This is the most accurate way to have full controll of the GIM settings, if you are picky you can write a long line of settings to override all the critical default settings (just incase the GimConv.cfg was modifyed by someone, by doing this you are overriding his/her changes made to the default settings). If you are writing an script or any tool that sends actions to gimconv.exe you should use this method
'''gimconv.exe in.png -o out.gim --pixel_order normal --format_style psp --format_endian big'''
The 3 settings in the example are overriding the default settings at top of GimConv.cfg (this is an example of the official GimConv.cfg, the one used inside rcomage is different):
Code Sample
Cumulative options and settings
This is the official way, the predefined options of the official GimConv.cfg are intended to be used together with other options, this way you can have an option containing a group of settings (that are common for a console) and several other options for the different GIM formats supported in that console, using GimConv.exe this way is a bit more confusing though and makes harder to pass commands to it, but is very handy to make tests
'''gimconv.exe in.png -o out.gim -DXT --pixel_channel brag'''
The command in the example is loading the option -DXT like in the example above, but additionally is overriding one of the settings inside -DXT with the --pixel_channel brag to reorder the color channels (from left to right, BLUE, RED, ALPHA, GREEN), the resulting GIM is going to be like the one made in the example above, the only difference is the location of the pixel colors
It allows to cummulate many options and settings in any order (be careful this could create some problems) to do something like this:
'''gimconv.exe in.png -o out.gis -DXT --pixel_channel brag -S'''
From rcomage
This ones are rcomage commands that includes gimconv commands in between quotes, are optional and are intended to change the default GIM settings used by rcomage when doing the PNG-to-GIM conversions. Rcomage.exe sends the GIM settings to gimconv.exe when is compiling the RCO (see the "compile" help in rcomage page). There are 2 options in rcomage specific for this task, named: --gimconv-cmd and --gimconv-flags
'''rcomage.exe compile in.xml out.rco --gimconv-cmd ".\gimconv\gimconv.exe" --gimconv-flags "--pixel_order normal --format_style psp --format_endian big"'''
Inside RCO files from PS3 official firmwares there are (at least) 2 types of GIM formats, and usually both are used inside the same RCO, as example... an RCO with a total of 14 GIM files where 12 of them was made using some GIM settings, and the other 2 with different GIM settings, for this reason is needed to identify the GIM settings and rebuild every GIM file individually
Is not posible to compile a PS3 RCO with rcomage by using PNG images as source (either way, using the commands in the example above or not using them, the problem is the same) because the GIM settings sent by rcomage are applyed to all the PNG images, so all the GIM files in the RCO will have the same GIM settings, this doesnt works for PS3 GIM files !
- As mentioned here the correct way to compile a PS3 RCO with custom GIM files is:
- - Use rcomage/rcomagegui to extract the RCO contents without image conversions (so GIM files are extracted as GIM) to a folder named RebuildMe. This files are for GIM identification and RCO rebuilding purposes
- - Identify visually the image you want to customize by converting it to PNG. For this example lets say the image is named icon.png. The conversion to PNG can be made by two optional ways:
- - Use rcomage/rcomagegui to extract the RCO contents with image conversions (so GIM files are extracted and converted to PNG) to a folder named DontRebuildMe
- - Or use gimconv to make a GIM-to-PNG conversion of the image you want to customize
- - Use gimconv to identify the original GIM settings of icon.gim (from RebuildMe folder) by doing GIM-to-GIM conversions
- - Use icon.png as the base (mostly to respect the original width and height) and customize it in any image edition app
- - Use gimconv to make a PNG-to-GIM conversion of the custom icon.png to icon.gim with the GIM settings you found in step 3
- - Copy the custom icon.gim to the RebuildMe folder overwriting the original (this is the only change made in the RebuildMe folder along all this explain)
- - Use rcomage/rcomagegui to compile the RCO with the files from RebuildMe folder
GimConv.cfg options for PS3
You can modify the GimConv.cfg file by adding some options (with custom names) containing any settings, by doing this you can keep a record of the correct settings for some GIM formats and group lot of settings under a single option, additionally when using GimConv.exe from command line the commands will be much shorter. This wiki section proposes a couple of options (but probably PS3 supports a lot more) that have been tested and are the first and second most commonlly used in PS3 official firmwares
- 1st most common GIM format used in official PS3 firmwares
Code Sample
- 2nd most common GIM format used in official PS3 firmwares
Code Sample
How to identify GIM settings
The goal is to identify the GimConv settings that was used when the original GIM file was created, there are basically two ways to identify GIM settings, by reading the GIM structure, or by bruteforce
Both identification methods can be made manually or by using external code, and are not exclusive. For code performance reading the GIM structure is faster, but for accuracy the bruteforce method is 100% accurate, so a code could start reading "what we know" from the GIM structure and then start with the bruteforce to get the confirmation
By reading GIM structure
GIM format is not completly documented, allows for lot of features that generates different GIM structures, at this point is not posible to identify all this GIM formats, for more info see: Graphic Image Map (GIM)
- The most important settings needed to collect from the original GIM file are:
- format_endian (offset 0 in the GIM)
- format_style (offset 8 in the GIM)
- image_format (offset 4 at block 4 in the GIM)
- pixel_order (offset 6 at block 4 in the GIM)
- Some notes:
- GIM files using image formats with indexed colors have an additional block 5, and block 4 is displaced
- The list of settings mentioned above will work only if the GIM contains a single image/level/frame, otherway the GIM structure becomes more complex
- There are 4 unknown fields in GIM structure, and it seems GIM was used in other unknown sony devices or tools, so dont take this as something general, is just an approach focused in PS3 and PSP
For this reasons, identifying GIM settings by reading GIM structure is not 100% accurate (there are too much unknown features and room for errors), the way to identify GIM settings more accuratelly is the next method explained... by bruteforce
By bruteforce
The word bruteforce sounds a bit ridiculous when used to identify image settings but defines pretty well how this identification method works. Consist in rebuilding the original GIM file several times by using different GimConv settings until we generate a GIM file identical to the original. In other words... if you find how to create a GIM file exactly like the original you can be 100% sure the GIM settings you are using are exactly the same used by sony to create that GIM
The only way to create a GIM file exactly like the original (that works with all image formats) is by making a GIM-to-GIM conversion, GimConv rebuilds the file when doing a GIM-to-GIM conversion and in the conversion is preserved the pixel data of dxt based image formats, otherway if the GIM image is dxt based and you try to convert it to other format (such PNG) and back to dxt it will never be like the original because dxt conversions are lossy
For bruteforce is used a "dictionary" that contains the posible "candidates" to solve the "problem", our dictionary (with the GIM formats found in PS3) only contains 3 candidates, this means in the worst scenario is need to rebuild the GIM file a max of 3 times. If none of the 3 GIM files matches with the original we have a problem (please report back and we will add the rare format to this wiki page)
1st most common
'''gimconv.exe original.gim -o try1.gim -ps3rgba8888'''
2nd most common (this is a variant of the previous with a block added at the end of the file)
'''gimconv.exe original.gim -o try2.gim -ps3rgba8888 --update_fileinfo on'''
3rd most common
'''gimconv.exe original.gim -o try3.gim -dxt5'''
After every GIM-to-GIM conversion is needed to compare the hashes, first "original.gim VS try1.gim", then "original.gim VS try2.gim", then "original.gim VS try3.gim"
GimConv.exe version patch
The reason to use this patch is because by enabling the setting --update_fileinfo on is added a block of data (named "fileinfo" with block id 0x00FF) at bottom of the GIM file, in a GIM-to-GIM conversion this block of data (from the original.gim) is preserved (added in the rebuild GIM file) but the GimConv version included at the end of this block is updated. The GimConv versions in the original PS3 retail GIM files are GimConv 1.20e and when you do the GIM-to-GIM conversion it changes to GimConv 1.20h, the difference is a single byte but doesnt allows to create a GIM file identical to the original (the hash check fails, and this sucks). If you are using some external code you can modify this byte by other means (so you dont need to use this patch for GimConv.exe) but for normal usage of GimConv.exe in command line this patch is handy because it allows to create identical GIM files
GimConv.exe v1.20h original (MD5:425B2E4D9684BCE1FC79A37247618AC8) At offset 0x91E4 replace 0x68 by 0x65 (character 'h' by character 'e') At offset 0x91F8 replace 0x68 by 0x65 (character 'h' by character 'e') GimConv.exe v1.20h patched to v1.20e (MD5:6C9B0E47273EFA6D34121A46E65EEDC6)
As far i know all the GIM files from PS3 retail firmwares that was created using --update_fileinfo on was build with GimConv.exe v1.20e, and the patch changes the GimConv.exe version from v1.20h (the public GimConv.exe) by v1.20e (the internal GimConv.exe not available for us), so it should work for most GIM files... if at some point someone finds other GIM files that was made with other GimConv.exe versions (c, d, f, g) and you want to use this bruteforce identification process you can make others GimConv.exe patched with different versions and rename them to GimConvC.exe, GimConvD.exe, GimConvE.exe, GimConvF.exe, GimConvG.exe etc... and keep all them in the same folder next to the original v1.20h
Exercises (wip:)
- In explore_plugin_full.rco from firmware 4.70 there are 245 images:
- 201 was created by using settings: --format_style psp --format_endian big --image_format rgba8888 --pixel_order normal (exact match of gims after rebuilding gim--->png--->gim), such tex_psn.gim
- 030 was created by using settings: --format_style psp --format_endian big --image_format rgba8888 --pixel_order normal --update_fileinfo on (exact match of gims after removing footer from originals and rebuilding gim--->png--->gim), see: fileinfo:
- 014 was created by using settings: --format_style psp --format_endian big --image_format dxt5 (exact match of gims after rebuilding gim--->gim)
- item_tex_trophy.gim, trophy_tex_grade_bronze.gim, trophy_tex_grade_gold.gim, trophy_tex_grade_hidden.gim, trophy_tex_grade_platinum.gim, trophy_tex_grade_silver.gim, item_tex_CardBallon.gim, item_tex_Profile_Game.gim, item_tex_Profile_Highlight.gim, item_tex_Profile_Onlines.gim, tex_indi_Me.gim, tex_sb_base.gim, tex_sb_base_s.gim, tex_sb_slider.gim
|