If you're a frequent visitor to my blogs, you know I love to dive deep into technical matter. Years ago, I got a Golf GTE, and didn't like the way the default image on my infotainment was looking, which in hindisigh kicked off a total new chapter in my life. Wat followed was: Gaining access to my infotainment, reverse engineering binary formats, writing tools, sharing knowledge. In the end, I was able to modify the graphics of the infotainment… and waaaay more. (an early blog about it: www.drive2.ru/l/450951501066535589/, and another www.drive2.ru/l/459198937786494994/) .
But nowadays, things have become much more advanced. Since MIB3, the infotainment now mostly consists of animated 3D models within Kanzi scenes, and I didn't really care to update the graphics on my current car since… they were already accurate. But then my friend Meich challenged me: Let's dive into the Kanzi format. I was a bit hesitant at first, since Kanzi… I don't really want to hack into a commercial product. But Mike struck the right note and in the end he convinced me: let's do this!
So… I got to play with hex editors again (not that I ever stopped). I decided to take this topic in a structured way. In MIB1 and MIB2, images were saved in a MCF container, a proprietary format you can compare to ZIP, but different. I like to think MCF stands for Multi Functional Container, and since MFC was already taken, they moved to MCF. Since MIB3, many more parts of the HMI are saved within these containers, so I decided to make a generic MCF template in 010 Editor first, and move on from there. So I got kicking. and then fed my results to Claude.
Claude laughed at me. Is this all you can do, you measly human?!
So I decided to join powers with Claude and step up my game. Decompiling MIB3 Java code, finding out how the MCF format actually works after years of just guessing… and then the 010 Editor Template grew vastly in size (currently 1229 lines of code).

.
— appdata.mcf holds appui (widget classes), tree (widget hierarchy), poit (popup behavior), smd (state machines)
— car_lhd.mcf / car_rhd.mcf holds Kanzi 3D scenes, which are shown on your screen: Car status overview, animations between views, interior views, etc.
— i18ndata.mcf holds the strings for display in the UI and all the translations for various languages
— images.mcf holds all the 2D images that are used by the various skins, as well as car images used in all themes.
— imageidmap.mcf has the hashes for the filenames of images inside images.mcf. Unfortunately, not possible to translate the hashes back to real filenames, like we had on MIB1/2 where we could reconstruct the entire folder structure.
— skindata.mcf holds information related to the various views in a skin.
For now, images.mcf, car_lhd.mcf and i18ndata.mcf are the most interesting ones to investigate. This time, I will take you on a journey full of bloopers, trial and error. Because a lot can be learned from failures, and brains are trained by the right amount of frustration, as anyone who ever played Super Mario Brothers would agree with me.
So here are some screenshots of me trying to get the exact 3D format to parse and display correctly… Enjoy!















In the end things worked out.









So what's next?
Still a lot of testing to do. And in the mean time I wrapped up an i18ndata editor as well. I am preparing to release the tools on mqbtools.nl so you can view and edit the 3D scenes yourself. Simple things like recoloring the model will be very easy. For more advanced stuff, I will make an import/export function to a common 3d format, so people can do all the 3D modelling they want to do in their favorite tools :-) And the best thing: it will be totally free!
If you have suggestions, feel free to let me know.


Comments 4
Hi! I replaced CNS 3.0 (JN) unit in my chinese teramont pro for MIB3GP (LG). Got EU languages, nav, android auto, etc. But lost access to dvr, some clima features, lights features and have no teramont pro graphics in menus (only EU cars avaliable).
What do you think is it possible to move apps between units (like clima app) and replace graphics (like in mib2-2.5)?
With yours mib-toolbox it was easy on old units =)
Great, I'm curious. But I had the same problems. The imageidmap.mcf file doesn't need to be edited to display custom images when the images.mcf file is modified. I've been editing and replacing the graphics on my MIB3 unit for a long time.
Indeed, but it would have been nice if we could read the filenames… On MIB2 that made editing much easier 😁 now I've brutefoeced about 50% of the filenames for Seat/Cupra, but it is useless.
I've replaced mib3 images once the first mib3 dropped and Mike and I put Jurassic Park graphics in 😁😁
But having nice filenames… Unfortunately the dev who made the format, I spoke to him a few times, and before MIB3 came out he told me he would make our lives harder 😂 great, hashed filenames 😂😂😂
Some updates also change the filename assignments ^^