Last time I went to the dentist, they offered to use a fancy scanner to better be able to show me my teeth.

Who can say no to that? I already for fun got a 3D scan of my brain, so why not teeth too?

I requested the data, and got a link to a web UI. Unfortunately it was just a user friendly 3D viewer, without any download button.

Here’s how I extracted the 3D data:

  1. Open Chrome developer console, e.g. by pressing Ctrl-Shift-C (I hate it that Chrome hijacked this. Every single day I press Ctrl-Shift-C to copy, and it throws up this thing)
  2. Close the stupid “what’s new” spam, that nobody in the history of ever has wanted to see.
  3. Go to the ‘Network’ tab.
  4. Reload the page.
  5. Right click on any item in the list, and choose “Save all as HAR with content”. No, I don’t know why I can’t just save that one resource.
  6. A HAR file is a JSON file archive, essentially.
    $ jq '.log | keys' foo.har
    [
      "creator",
      "entries",
      "pages",
      "version"
    ]
    $ jq '.log | .entries[0].request | keys' foo.har
    [
      "bodySize",
      "cookies",
      "headers",
      "headersSize",
      "httpVersion",
      "method",
      "queryString",
      "url"
    ]
    $ jq -r  '.log | .entries[].request.url' foo.har
    [… list of the URLs …]
    $ jq -r '.log | .entries[4].response.content.text' foo.har | base64 -d > file.tmp
    $ file file.tmp
    Zip archive data, at least v2.0 to extract, compression method=store
    $ unzip file.tmp
    [… a bunch of .ctm files …]
    $ ctmconv Tooth08.{ctm,obj}