Derive from (almost) Any Product (Obsolete now)

Derive from (almost) Any Product (Obsolete now)

IMPORTANT NOTE: IMVU has fixed this bug, so you can no longer use this trick to derive from “underivable” products. Sorry.

I found out a while back that you could derive from almost any product in the catalog, even if it was marked as “Derivation Disabled”, or if the product was “Not Found in the Catalog” (it was there, trust me). In fact, you could create a new product in Create Mode, Upload it but not Publish it, and you could even derive from a product that never went into peer review.

If you would like to see a non-derivable product I had derived from, check out this product in the catalog.

Just enter the product ID here, and download the .chkn file for the product.

Product ID:

Then go to IMVU Create Mode, and open the local project you just downloaded.  Voila, it will appear in the editor window. You can modify it to your heart’s content, then upload it and even publish it and submit to peer review.  Pretty handy dandy, huh?

Please note that some things can’t be derived from.  You can’t derive from bundles, stickers or emoticons, because they typically crash IMVU with a loud thud.  Also, if you try to derive from a UFI item, the product will also be UFI and you won’t be able to submit it at all.

Normally for Derivation Disabled and Invisible products, there will be no “Derive from Product” link on the page (or no page at all), and if you try to submit the product IMVU in Create Mode, it will be rejected.  So how did this work exactly?

nerdzone

It turns out that a .chkn file is just a normal ZIP compressed file with the extension changed to .chkn.  If you rename the chkn file to .zip and decompress it, you’ll find an assortment of files in here, JPG, GIF and PNG image files, Cal3D files (.xaf, .xpf, .xrf, .xsf, etc.) and also index.xml and imvu-internal.json.  The JSON file is always just a pair of empty curly braces, and I have no idea what it’s used for yet. The index.xml is the most important file of all, it contains your product definition, including what the product ID for the product you’re deriving from is.  So when you’re editing the form UI in create mode, those changes get saved to index.xml.  However, you can create an index.xml that only specifies what the parent product should be.

So the reverse should be true.  If I create an index.xml file that has the parent product ID, and a bogus imvu-internal.json file, then zip them up and rename the .zip file to .chkn, it should open up in IMVU, right?  And lo and behold, it works.

The Get Chkn File form above merely automates these steps. The code-behind for my Chkn.aspx page can be found here: https://www.triggerless.com/media/Chkn.aspx.cs.txt.  Some of the things you need to know if you want to replicate this on your own web server, or rewrite it in PHP:

  • You have to parse the productID parameter to an integer, should seem obvious
  • For returning a ZIP file for download, you have to set ContentType to “application/octet-stream”, and also add a Response header for “Content-Disposition” so the user will download it to the filename you specify, in this case derived_#####.chkn.
  • We’re using SharpZipLib library for zip compression, and in our example code, we’re creating an in-memory zip file so no zip file is actually written to disk, instead we just stream the contents of a MemoryStream back to the web browser.

I hope you enjoy this and make good use of it.