Local server for basic Rhino > Blender transfers?

Hi! I’m a totally new user, sorry if this is a naive question:

I’m currently using Speckle simply to push geometry from Rhino to Blender for rendering. It’s all been very straightforward so far, but it seems that having my data do a round trip to Speckle’s server is a bit overkill considering that mainly, the files are all being produced and consumed by my laptop, and at the moment I’m not really concerned with collaboration with a large team. So if I want to have Speckle just working locally, on my machine (or maybe just within my office), what’s the simplest way to accomplish this?

I have seen help documents on deploying a server manually, or though Kubernetes, or DigitalOcean, and creating a local development environment, but as I am an architect and not a developer, I am finding much of the documentation is a bit over my head. I would like to avoid installing too many dependencies and getting into complex setup if possible!

Thank you

Hey @s-p-b, nice first question, welcome. :partying_face:

The core libraries used by Rhino (c#) and Blender (specklepy) allow for stores other than a Server. (Memory, DB and DIsk)

However, as they exist now, both Connectors have not been built to use this facility. Indeed, only Grasshopper does.

It is worth noting that what seems like an overhead quickly becomes beneficial even in Single Player mode. Transporting the data through a Speckle Server allows for version control outside both applications you are using, unparalleled even with file-based methods. Those model versions on the server can be divided, joined, recalled, and filtered, and you can revert to any version ever sent.

You may be in the habit of showing your work to others as an architect. There is a great opportunity to share your work with others who have no authoring software on any device that can run a modern browser.

1 Like

What if I am working somewhere without internet connection? Are there any workarounds? So if I understand correctly, Connectors only work with your Speckle servers? Is it not possible to create a server that runs on my PC and doesn’t need internet connection?

Best regards!

1 Like

You are absolutely correct! You can indeed have a locally running server and commit and receive to this.

This doesn’t answer OP’s original question, but I thought I’d elaborate a little on what you can (And can’t do) with local transports.

As @jonathon has mentioned, There are some significant advantages to using a speckle server. Either speckle.xyz, or running one locally.
Concepts like streams, branches, commits (soon to be renamed to projects, models, versions) only exist on the server and server API.

The local transports only understand Objects, and their Ids. However, with a bit of scripting, you can transfer (and convert) this object data between “script” friendly connectors, like Grasshopper, Blender, Unity, and Unreal.

For most users, I wouldn’t recommend doing this, but for any developers, hackers, or tinkerers; a purely local Grasshopper → Blender workflow can be achieved through just using an SQLite transport.

This requires you to send your objects from the Grasshopper connector to the local SQLite transport. (The transport nodes are hidden under the “dev/transports” tab of the speckle window)

Then in Blender, with a simple python script, you can perform a local receive by copy pasting the Object ID from Grasshopper into this script, and running it.

from specklepy.api import operations
from bpy_speckle.convert.to_native import _deep_conversion

# Replace with the ID of the object to receive (it and all its children)
OBJECT_ID = "7b663a0af5108cb70afdcced6eb0c1f8"

# Receive objects from local transport, passing in no transport here will default to using a local SQLite one.
speckle_object = operations.receive(OBJECT_ID)

# Convert objects    
converted_objects = {}
_deep_conversion(speckle_object, converted_objects, True)

print(f"Finished receiving {len(converted_objects)} objects")

Just make sure you are using the latest 2.15 version of the blender connector, otherwise this _deep_conversion function won’t be available.

You’ll need to manually copy the object ids around, and local transports are not really suitable for long-term storage of objects. But if these limitations don’t bother you, this is something that is achievable in the few “script” friendly connectors.

receive_local.py (413 Bytes)
send_local.gh (8.7 KB)


Thank you Jedd, this is what I was hoping for, (although unfortunately it won’t help with the Archicad connector). I am ultimately trying to do something very very simple - move some geometry from Rhino/Archicad to Blender so I can render it - and I really dislike the idea of installing gigabytes of dependencies and with complex installation procedures. I did attempt to install a local server but ran into errors very quickly, and I don’t have the technical knowledge to even begin to fix them.

I feel that Speckle would really reduce barriers to use by making local storage a more straightforward option on all the connectors, and/or offer a nicely packaged server application with an installer. One, maybe not very important, thing is that I dislike seeing internet bandwidth being used up for files only needed by one user or within an office LAN. But the bigger consideration is security and privacy requirements for AEC projects / clients - using the public speckle.xyz server often won’t be an option for many offices.