Speckle for Generative Design?

TLDR; I am considering using Speckle for generative design purposes.

In particular, I am currently developing a system that builds upon and enhances tools like the DesignExplorer for design space exploration. I am considering whether the Speckle ecosystem would be suitable for storing, retrieving and 3D viewing a large number of design variations.

My plan is to create multiple streams for each generated design and to combine them all under a single project. I realize that this is not what Speckle was intended for but I am motivated that the interoperability provided by Speckle can be great in easing the move from design exploration into design refinement and finishing. It will also create a common infrastructure for design sharing and collaboration within a firm regardless of the process followed.

I am using Grasshopper/Rhino. Currently, a stream is created only when the Sender component is dragged to the canvas. Then a random steam ID is assigned to it. Instead, I want to be able to create new streams programmatically. Either I would provide those IDs or they are created whenever a new design is sent.

In a generative design process, you would create possibly hundreds of variations each of which would have its geometry and user data. So I want to create a different stream for each design variation. I realize this can quickly go out of hand and so it would be an experimental feature (perhaps a fork or a separate branch from the SpeckleRhino repo). Another option is to combine all the generated alternatives into a single stream but I am not in favor of this option.

Finally, the process would be like this:

  1. Sign in to Speckle in Rhino
  2. Use a plugin like Colibri to systemically vary input parameters.
  3. For each generated design variation, assign a new Speckle stream under a unified project.
  4. On the frontend of a design exploration tool (like DesignExplorer) request all the streams under a project and parse the JSONs to get the data + geometry for each.

What do you think of this idea? Have anyone tried or want something similar? And do you have suggestions on how to best approach it?

Regards,
Ahmed

1 Like

Hello @abuzreq! Streams can have as many children as you want, so I would recommend using that mechanism to store your design/solution space.

If I remember correctly, @pathespe and @tluther have developed something similar - ie, if memory serves well, i hacked a gh sender that would not debounce sending specifically so you could vary input parameters, wait for the solution to execute, then send that data out as a new child stream of the parent stream.

Child streams are already exposed in the admin - see this example.

My TLDR: totally doable, group streams under a parent stream rather than a project, but take care it’s quite some work :slight_smile:

2 Likes

Thanks @dimitrie I will look into this and try to post any updates.

Basically it is a question of making sure each design I send, although different, will be treated by Speckle as an iteration/version/child-stream.

1 Like