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

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:

1 Like

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.