using System.Text.RegularExpressions;
public static void Main()
var avatarUrl = "http://mpassets.highfidelity.com/a8c9a890-8a51-47fa-805f-548868c1678d-v1/avatar/baked/avatar.baked.fst";
var bakedPath = avatarUrl.Replace("avatar.baked.fst", "");
var originalPath = bakedPath.Replace("/baked/", "/original/");
Console.WriteLine(avatarUrl);
using (var wc = new System.Net.WebClient())
bakedFstContents = wc.DownloadString(avatarUrl);
string bakedFbxFilename = Regex.Match(bakedFstContents, "filename = (.*?.baked.fbx)").Groups[1].ToString();
Console.WriteLine(bakedPath + bakedFbxFilename);
string avatarFileGuid = bakedFbxFilename.Replace(".baked.fbx", "");
Console.WriteLine(bakedPath + avatarFileGuid + ".baked.json");
string allMaterialsJsonContents;
using (var wc = new System.Net.WebClient())
allMaterialsJsonContents = wc.DownloadString(bakedPath + avatarFileGuid + ".baked.json");
foreach(var match in Regex.Matches(allMaterialsJsonContents, "materialTextures/0/.*?.texmeta.json"))
string materialJsonUrl = bakedPath + match.ToString();
Console.WriteLine(materialJsonUrl);
string materialsJsonContents;
using (var wc = new System.Net.WebClient())
materialsJsonContents = wc.DownloadString(materialJsonUrl);
foreach(Match matMatch in Regex.Matches(materialsJsonContents, ": \"(.*?\\..*?)\""))
Console.WriteLine(bakedPath + "materialTextures/0/" + matMatch.Groups[1].ToString());
Console.WriteLine(originalPath + "avatar.fst");
Console.WriteLine(originalPath + avatarFileGuid + ".fbx");