Allow the loading of third-party models in game

As a Roblox developer, it is currently too hard to load user generated models in game.

If Roblox is able to address this issue, it would improve my development experience because I would be able to let players upload models to Roblox and then load them in games.

InsertService cannot be used to load free models anymore. I had no idea this was ever changed, and it was extremely disappointing to learn that all the previous methods you could use to do this are gone. There are a lot of use cases I previously had for this that I can no longer achieve.

In the past, free models have frequently been used to allow loading lots of data in a compact and efficient way which is easy for players to share. The inability to load free models, mixed with the inability to export data from Studio, mixed with plaintext and TextBox limitations requiring users to upload content to GitHub gists or pastebin make this kind of UGC content impossible to scale.

This would also allow this type of content to be moderated through Roblox, instead of potentially allowing bad models to be loaded from off-site with no feasible way to perform moderation on the inserted content besides blacklisting specific links, which can just get reuploaded anyways.

A model permissions system similar to audio permissions would solve this really well.

In combination with a more “secure” scriptless method of loading models, similar to the one used internally to load the avatar context menu would be really really cool.

Generally, models would be loaded and processed into a different form that confines to game rules anyways, rather than just being directly inserted.

Problems in detail and further considerations

The inability to do this requires the maintenance and support of a custom model format which rivals the rbxm format. These formats may represent barely any data but may still be hundreds of times the size of an rbxm.

Not only are there barely any means to get this kind of stuff into a game due to TextBox limits, it’s difficult to get it out of Studio too. It isn’t possible to export binary data from Studio. It also isn’t trivial to load binary data in game. Thus, solutions often include encoding in plaintext, making the size of modules 2x, or even 4x larger depending on whether base64, or smaller but more complex 0-127 range packing is used.

I want to let players build stuff and then upload those builds to Roblox so that they can be loaded in a game and the parts in them can be processed by the server and inserted. I don’t want to own every asset uploaded by every user, it’s not feasible or realistic.

On top of this, while debug.loadmodule isn’t enabled, the idea that it eventually could be is relevant. The ability to load modules within models inside of sandboxes would be incredibly useful and powerful for user generated content.

As far as I am aware, I also don’t believe it’s possible to load public modules via InsertService now, e.g. modules named with MainModule. I used to use this to load data inside of modules but I don’t think this is possible anymore unless there is an exception for public module functionality.


Building Tools by F3X lets you do that, but you need HTTP requests on as they use HttpService:GetAsync('') (I used youtube as an example)

or you can use InsertService:LoadAsset() to import models to the game, you need to make a remote event if you want to fire it in the client…

1 Like

This is a feature request, not a scripting support topic. I don’t think you even need read the topic because the post mentioned that loading 3rd party modules via insert service is prohibited.

1 Like

This. I believe that it should have the same restrictions as require(), where it needs to be a public model.

1 Like

As a developer who is enamored with the concept of allowing players to create custom content that can be loaded ingame, I am forced to have to do terrible workarounds (asking players to send me their models so I can reupload them to my account, as an example) to allow people to load their own content.

There are two games I have considered making before but cannot (in a reasonable manner) under the current restrictions.
Consider a fighting game with a “custom game” mode that allows players to create their own fighters with their own models and module scripts for attacks. If I were able to insert models by ID, it’d allow people to make a fighter in Studio, upload it, and then I insert the model ingame, running their provided code in a sandboxed environment.

Another idea would be something like VRChat, where I could give players an SDK and then they create avatars in Studio, using a mix of meshes and particle emitters and whatever else (alongside some key Instances that my engine would use), that is then loaded ingame without the need for any coding on the players’ part and I end up running no outside code as well. No sandboxing or anything.

InsertService models are parented to nil upon first being inserted, guaranteeing that I can scan the model for any regular scripts (or anything really that could cause unintended destruction) before it ever gets parented to somewhere where code can run. By contrast, requiring a public module means that code has to run before I can ever get the contents of the model.

We’re at a point in time where the Roblox engine is more powerful than ever, and developers know well about how to utilize it. Please let us insert content created by our communities in a way that lets us foster fun creativity inside our experiences.

There’s another thread on this topic here, in a more specific form: Allow InsertService:LoadAsset() to insert free assets

1 Like