There is no optimization done in any way. (ex: when selecting the Hats subcategory, it will load almost 8,000 UI elements at once; huge frame drops).
Searching through the UI elements is also causes frame drops.
My catalog database is accurate as of December 29, 2019.!
I have included the catalog database used to load all the UI elements; located in ReplicatedStorage.Catalog which you can use to make your own avatar editor or whatever. Assets are formatted in this way: {Id = 0000, Name = "hat name"} in a giant array of all the items.
ServerScriptService.BundleGetter contains code on how to get all the limbs of the bundles. ServerScriptService.CatalogGetter contains code on how to get the Roblox catalog. (you cannot get the catalog directly use HttpService, use a proxy).
How do we update it so that it can have new items every time. Example: when a new UGC item comes out and how would I add that UGC item? Can we make it so that it automatically adds new items when new items come out?
I have provided code on how to get a list of all the catalog items. Check the CatalogGetterModuleScript in ServerScriptService.
On line 21 you pick which subcategory you want (subcategory ids are on lines 3-15). On line 25, you pick how many pages you want to look up. Generally 25 pages is enough for all subcategories except for the Hat subcategory.
For the Hat subcategory, you cannot get all the assets at once; you will get an error like: string too long or something; you need to split it up.
Example: On line 28
for i = 1, 25 do
for i = 26, 51 do
for i = 52, 77 do
and so on; up to 200 with what is currently in the catalog, you might need to increase it as Roblox adds more assets. You will also need to do this for other categories as creators keep assets.
You cannot use HttpService:GetAsync to get the catalog. Search for http proxy on the devforum for solutions to get around this.