The save is just a text file in JSON format. It's located in the games folder, which'll be something like "\SteamLibrary\steamapps\common\Inscryption" - you can also get there by right-clicking the game in Steam, then clicking Browse Local Files.
Once you've found the folder, the save file is called "SaveFile.gwsave". I strongly recommend you make a backup of it by copying it to a different folder. I name my save files based on the date and time, so I have copies at different progression points, but that's not necessary - you just need a copy of it.
Open up SaveFile.gwsave in a text editor like Notepad++, and you can edit it. I also particularly like Notepad++ because you can set the Language of the file to JSON, and then it becomes much easier to expand/collapse sections.
JSON is structured in key:value pairs, so to edit data, you just need to look for the keys corresponding to what you want to change, then edit the values. For more detail on exactly what to change, check out the guide linked above.
A short guide on save editing cards
from Noll Reed (Noll Reed#4813) and Mouthless_Stoat (khanhFG#3753)
Recommended to have a backup save file to go back to in case you don’t like having illegitimate stats.
First start off by enabling the “Annoying Starters” challenge.
Before you are properly taken to the map screen, leave to the main menu. From this point you can add cards (like daus) to your deck in your “SaveFile.gwsave” (Found in local files) Deck info is located around line 2350. Use Ctrl+f and type: playerDeck
Make sure that your "$rlength" matches, that your formatting stays correct, and that you save.
Now press continue, go to the map, then quit out again to the main menu, heading back to your SaveFile.
Your cards should now have: “Abilities”:{ :.. "$rcontent": [76]} You can use the table below and change that 76 to whatever you please. Such as modifying stats, appearance and cost.
Look for the “ascensionData” key in your save file. Under that key, look for the "itemUnlockEvents" key. Within that section, change the value of “$rlength” to 4, and the value of “$rcontent” to “[168, 169, 170,171]”.
It should look mostly like this:
"itemUnlockEvents": {
"$id": 1480,
"$type": 2,
"$rlength": 4,
"$rcontent": [
168,
169,
170,
171
]
},
1 = Squirrel
2 = Avian
3 = Canine
4 = Hooved
5 = Reptile
6 = Insect