Well, the first thing to understand is that the starting pilot portraits are actually defined in simGameConstants/SimGameConstants.json... right underneath the list of "StartingMechWarriors" it has a section for "StartingMechWarriorPortraits".
It is important to note that "PortraitPreset_glitch" there is NOT a path... it is an ID. The system figures out what to do with the ID based on the information in the VersionManifest.csv file. For... well, reasons... I currently have 1.0.4 installed, so I don't know if some of this has changed... but in my testing, I found that the starting pilots can NOT use the "Sprite" type of resource that indicates a pre-generated image. It must use the "PortraitSettings" type of resource instead. The good news is that the portrait preset does appear to in turn allow you to select a Sprite resource to use by listing it in the "Icon" field. (Confused yet?)
I didn't fully test it since the 1.0.4 version can't skip the tutorial missions and I'm not running through those just to see if I managed to change Glitch's appearance correctly. What I do know, however, is that when I used an existing Sprite resource as the "StartingMechWarriorPortraits" entry, it would not start a new campaign and just sat on the loading screen endlessly (typical behavior when it can't find the resource it needs). When I instead changed the Icon entry in the PortraitPreset_glitch.json file (which is the one loaded for the PortraitPreset_glitch ID referenced in the default SimGameConstants.json file), the new campaign DID start correctly. I recommend first trying to load one of the existing custom images before working on getting your own in... basically all of the Skirmish pilots have IDs that are just their names. So in that Icon field, try putting "Apex", "Arclight", or whatever pilot you prefer.
If that works, then you can create your own ID by modifying the version manifest:
- Find the line that starts with PortraitPreset_glitch.
- COPY the whole line to a new line.
- Change the ID (PortraitPreset_glitch) to some other value that isn't likely to be used anywhere else in the file (such as My_Custom_Glitch_Portrait).
- Change the PortraitSettings bit to Sprite instead.
- Change the data/portraits/PortraitPreset_glitch.json path to point to your PNG image instead.
Once the manifest is changed, you can then put the ID you used into Glitch's portrait preset file and it should work (assuming it's possible to use the custom portraits at all... if the Icon field isn't active, you're out of luck).
Edit: Almost forgot to mention... if you use Modtek/BTML it can take care of version manifest changes for you. I'm not going to run through the details, but basically you tell the modding system about the new entries you've made and it deals with telling the game.
2nd Edit: Also, it's likely that this is one of those changes that can safely be reverted to the vanilla unmodded game without having any effect on existing saves. So unless you want more custom pilots in future games, updates will not break things and you won't need to go through this process again.