Live collaboration plugin idea

G’day all :wave:

I’m exploring the idea of a plugin that would enable Sketchup users to collaborate on a design in real time. From my research and the Sketchup users I’ve interviewed, I think there is tremendous value in something like this. Figma is an example of a design tool that does live collaboration really well.

I’ve browsed the docs and I have some ideas about how such a plugin might be built. At the moment I’m thinking the plugin creates a socket connection where changes are sent and received. A server holds the canonical version of the model and sends changes to clients as they come in. I’m familiar with these types of systems but not in a Sketchup context.

Unfortunately I’m not a Sketchup user myself so I’m unable to validate this idea any further at this stage.

A couple of questions for the community:

  1. Does this kind of plugin sound possible? Can socket connections be created by plugins? I would love to hear any other challenges that come to mind.
  2. Is it possible to get licences for plugin development purposes? Close collaboration is the central idea of this plugin so at this stage I need multiple licences to build a prototype. I have reached out to the support team, they encouraged me to post here.

Thanks a lot!

1 Like

I’m intrigued. I am wondering how you see such a feature being used.

When you use the term “real time” it suggests that people are working on the same thing at the same time. My environment is the building industry, so people who might be contributors would include structural and M&E engineers, perhaps some suppliers too. But the idea that there may be no lead designer who starts the (normally) iterative process going is hard to envisage. For starters, it means everyone involved would have to be ready to work on the same project at the same time. Outside a shared office, that is difficult to envisage working.

The other issue is the reach of Sketchup. I am not sure that there are that many of us who use it regularly as their go to design tool. That is largely because of the market penetration of software provided by the likes of Autodesk, but also because (whisper it) SU may not really be targeted at professional users (in the sense of keeping up with hardware developments, for example. So I would ask if there is a market, however good the idea is.

If you didn’t get a direct answer (re: free dev licenses,) then likely the answer is no, not for new unknown developers. (I would suggest you install SketchUp Make 2017 and use it to learn Ruby and the SketchUp API.)

And then also you need to understand you are wanting to develop a product that competes directly with Trimble Connect. (SketchUp ships with a native extension that facilitates Trimble Connect use.)

You are not the first to contemplate this idea. There have been forum discussions here and probably also at SketchUcation on this subject.

Yes I think so. SketchUp uses Ruby. Ruby has a standard library:

… and also extensions called Ruby gems:

The SketchUp API has recently added some asynchronous HTTP request and response classes:

FYI, some devs use AJAX.

I think the main issue is that “live collaboration” would need to be transaction based.
The API was not designed this way, except for the ability to start and commit edit operations.
This might mean you’d have to develop a DSL wrapper around SketchUp’s API.

Simon brings up a good point. SketchUp is a single threaded application. Really only one user could be making changes at a time. So somehow all “watchers” would need to be informed of which one of them “had the pencil”.
There would need to be a mechanism for a “watcher” to request the pencil (edit control) and a means to hand off control from the editor to another of the “watchers”.

Another challenge is that SketchUp has had some problems in the past with latency when model files are opened from network locations. It has been standard advice to encourage users to work on local files and afterward sync to network locations.

The API does have a method to load a component from a URL …

… basically a model .skp file is a component definition and any internal component definition can be saved out as a model .skp file.

This might be a way to update the “watchers” local models. (There might be some update challenges, ie, open API issues. See the API Issue Tracker.)

Also check this for ideas:

1 Like

Modumate is based upon the Unreal gaming engine. It has a web-like interface (which I’m not fond of.)

(Epic has a plugin for SketchUp available for download free on it’s website. It at least has an export to Datasmith command.)

I got a laugh from it’s FAQ …

I’m not a building professional or 3D modeler. Can I use Modumate?

We don’t advise it - try SketchUp instead. Modumate requires construction knowledge, which is how we automate professional DWGs, quantity estimates, and renderings.

Anyway, … the take away from this product as an example is, … use web technologies meant for multiusers and transaction based modeling (or gaming) APIs and easily transportable (open source) file formats, …
rather than shoehorn something like SketchUp (a single user, single threaded desktop application) into a “live” multiuser workflow.

If the result is saved in a good open source free model file format, then it can be exported to or imported into SketchUp or any number of other 3D applications.

1 Like

Wow thanks for the replies everyone!

@simoncbevans my current thinking is that this plugin is most useful in an early stage of the design process. Where two or more team mates can quickly explore and iterate on ideas together. With more people WFH and teams being more distributed, I see tools that support close collaboration becoming more valuable. Is there a part of your workflow where “real time” collaboration would be useful? Thanks heads up on where Sketchup sits in the design tool landscape. I’ll need to have a deeper look at this before I decide commit to this idea.

And then also you need to understand you are wanting to develop a product that competes directly with Trimble Connect .

My (limited) understanding of Trimble Connect is that it supports more of a async publish/review workflow. What I imagine for this plugin is a more synchronous “real time” workflow. They both could work well together. Two team mates use this plugin to work together on a design, their progress gets published to Trimble Connect for a wider review.

SketchUp is a single threaded application. Really only one user could be making changes at a time.

@DanRathbun does this impact what a plugin can during a user interaction? For example, two users are resizing the ends of a wall. Each user should see what the other is doing as they resize. From a technical perspective, the plugin receives and applies changes to the model. Can that happen as a user is make their own changes to the model? Singled threaded sounds ok to me, a bigger problem would be if the model is locked during user interactions.

I take your point that a plugin might struggle to support a live multiuser workflow in a product built for a single user workflow. That said, I’m still interested to see if there’s a chance :grinning_face_with_smiling_eyes:

Maybe with a structural engineer, but they would have to be using Sketchup. I don’t know any who do. Many of the ones I work with only sketch manually over an architect’s drawing. I can’t see them investing time and money into learning to use CAD for the relatively small amount of drawing work they do. Those I work with who do use AutoCad. But I am only one person in one country operating at a fairly low level so I don’t have the bigger picture.

My instance of SketchUp can only handle my edit interactions with what I locally have caused to be the active edit context.

In order for two distantly separated users to be making changes at the same time to the same object, the model’s active edit context must be the same for both users. For this scenario (wall edit) we would assume both user’s model had entered the wall object’s edit context. (See the API Sketchup::Entities collection class.)

First of all, I myself would find this confusing and annoying. (Really only one user should be editing an object at a time. Ie, A double-clicks and enters a wall object. That particular wall is locked for B but could “watch” as A modifies it.)

Currently there is NO mechanism in the API or SketchUp that expects Ruby extension code to be running (making the remote changes) whilst the local user is using native tools or other extension tools. This would be a kind of multi-tasking operation.

You might … big might, be able to write some time sharing code so that a little of the local edit happens then some of the remote edit, etc. But the main problem is that you cannot control either native tool operations nor all the other extensions that users use. So I doubt it.

Any extension can do this if it’s code is that which is running. Whilst it does this, the main application thread is suspended. (Often in very long duration operations the application goes into ghost window … ie “Not responding” mode.)

I really do not think so.

EDIT: Well, perhaps, if they were working on a different component in the model and did not effect the viewpoint (camera) of the other editor, nor move what the other guy was editing, nor make changes that effected what the other guy wanted visible. Ie, each editor would need to be working through separate scene pages and any switching on / off of (layer) tags must apply only to their own scene page.

But still, the updates to the local models would need to be staggered. Ie, real time is just not possible.
Either a timer would need to be used, or users manually click an update button.

Well the idea has some merit, but I do not think inside desktop SketchUp.

I think that some others have tried and wasted their time trying.

This one claims to have done it. (It has a trial):

  • ReVue
    But I think it may use the update definition and publish scenario I contemplated above.

Now there are quite a few external presentation exporters that write proprietary file formats that can then be shared with multiple “watchers”. See:

… likely others as well.

If you take the web-based SketchUp Free for a spin, you get a better idea of what is possible if you change your thinking to a cloud app. If so, you either use your own model data format or something that is open source like glTF or COLLADA. There are already free 3D JavaScript API libraries you can use. (See the references on those linked pages.)

The “watchers” that are not going to edit … should not need to install an edit application like SketchUp.
They could just “watch” one of the actual modelers desktops using Zoom or Google Meet or some other desktop sharing / meeting web app.

Note that there are already several free glTF importers and exporters for SketchUp available.

I also imagine that other 3D modelers have importers.