The Pufferfish is one of few animals which is capable of changing its shape.
This plugin is a set of 330 components which focuses on Tweens, Blends, Morphs, Averages, Transformations, & Interpolations - essentially Shape Changing. Pufferfish mainly uses parameters and factors for inputs for more custom control over operations like tweens and grids as opposed to grasshoppers usual division count inputs. These components are accompanied by support components which are useful methods for tween / blend / morph / lattice operations such as making curves compatible, a custom curve graph mapper, and a multi-threaded morph to twisted box. In addition, there are extra components which simplify some common grasshopper operations such as testing for equality within a tolerance and rounding to nearest numbers. Please email me if you find any bugs. Works with Grasshopper for Rhino 5, Rhino 6, Rhino 7 WIP, and Rhino Mac.
Instagrams: @ekimroyrp & @designmorphine
Download:www.food4rhino.com/app/pufferfish
Kourniatis Nikos
Good evening!
Does it work for polysurfaces or breps?
Oct 19, 2017
Michael Pryor
@Kourniatis Nikos Most likely in the next updates. I have a bunch of stuff in the works - whats here now was just polished up to get V1.0 out there. Otherwise, I would keep making forever and never actually release it:D
Oct 19, 2017
Kourniatis Nikos
Good morning from Athens! Help us play topologically...
Oct 19, 2017
Siemen
Nice work Michael. Regarding the mesh morphing, I was thinking if you remesh your mesh using mesh machine and make sure you have the same amount of triangles it would work nicely. But when I tried this, it doesn't seem to work. I'm not sure if it is because of the ring-like geometry I'm using or something else.
Oct 22, 2017
Michael Pryor
Siemen It is because using mesh machine sure you can get the same points and triangle count. However, it is very unlikely that the order of those meshes will be the same in any meaningful way to interpolate between. (that's what same topology means) hence all the criss cross between. Thats why it is suggested in many platforms like maya that you model both geometry from the same base (maybe a mesh sphere) otherwise you get that - The example they say is something like for a face if you don't model from the same base you can get stuff like an eye blending to a nose rather than to an eye. Hope that makes sense.
Oct 22, 2017
Michael Pryor
Pufferfish V1.1: Minor Update - adds Quaternion rotation option to the Tween Planes components for smoother tween rotations and prevention of Gimbal lock.
Oct 22, 2017
Daniel Piker
Siemen - If you pull the vertices of one mesh onto another, you can make sure they have the same topology, so it will work with this interpolate mesh component:
This might run into trouble if the meshes are very different, as then it could get pulled onto the wrong part, or in a folded state, so in those cases you might need to add some extra goals to guide it a little.
interpmesh.gh
Oct 23, 2017
Michael Pryor
Thanks for the example Daniel!
Oct 23, 2017
Michael Pryor
Pufferfish V1.2: Update - adds 9 new components. 6 for tweening planes on curves and surfaces with Quaternion rotation. 3 for tweening points on curves. Added tolerance input to "Is Arc/Circle/Ellipse" component.
Oct 28, 2017
Michael Pryor
Pufferfish V1.3: Update - fixes minor bug in all tween plane components with Quaternion rotation that would result in null planes when input planes X axis's aligned. Updated example files for Pufferfish V1.3. Examples now consists of 2 folders: Components, which has a small example of each component. Workflow, which has more in depth examples using Pufferfish components.
Nov 1, 2017
Michael Pryor
Pufferfish V1.4: Update - Improved algorithm for all "On Curve" components and all components with an "Interpolation Type" input.
Nov 8, 2017
Michael Pryor
Pufferfish V1.5: Update - adds 41 new components. The new components are primarily focused on a new tab for "Twisted Box" components. Additional various components added to the other tabs. Some updates to existing components. Some new components require at least Rhino 5 SR12. After installing the pufferfish1-5.gha, please close Rhino completely one time to avoid potential assembly reference errors with the new "Twisted Box" components.
Nov 27, 2017
Amir Soltani
Thanks Michael, amazing tools!
Nov 28, 2017
Michael Pryor
Pufferfish V1.5: Re-uploaded Pufferfish V1.5 and its examples to include 3 forgotten Twisted Box components. Twisted Box Array, Construct Twisted Box, and Deconstruct Twisted Box.
Nov 29, 2017
Michael Pryor
You are welcome @Amir Soltani
Dec 1, 2017
Ghana Ahmad
how to install puffer fish plugin in grasshopper
Dec 4, 2017
Michael Pryor
@Ghana Ahmad same way to install every plug-in.
First download the Pufferfish.gha file. Then right click it and go to properties and check unblock then apply. Then either drag and drop the Pufferfish.gha onto the grasshopper canvas or in grasshopper go to File>Special Folder>Component Folder and copy the Pufferfish.gha there. After you have done either of those methods Close and reopen Rhino completely. Launch grasshopper again and you will have a pufferfish tab.
Dec 4, 2017
Ghana Ahmad
@Michael Pryor sir i did the same procedure but nothing happen
Dec 7, 2017
Ghana Ahmad
puffer fish tab not appear
Dec 7, 2017
Michael Pryor
Ghana Ahmad if you did what I said it will be there. Do you understand how tabs look in GH? If it is really not there then what Rhino version are you using? What Grasshopper version are you using? Did you unblock the gha? and have you restarted rhino after installing?

Dec 7, 2017
Ghana Ahmad
i m using rhino 5 and grasshopper (grasshopper_wip_20121030)
yes i did the same. i dont know this problem
will you plzz mail(ghanaahmad16@gmail.com) the plugin or the software
i need it for my academic project
Dec 8, 2017
Michael Pryor
Ghana Ahmad the plug in is on food4rhino, You need to be more specific. For instance I have Rhino5 SR14 (I believe pufferfish will work from SR5 and up, however some tools require SR12 atleast) and the latest grasshopper should be "0.9.0076". Are you using Mac or Windows. Pufferfish is made for Windows and it may or may not work on Mac.
Dec 8, 2017
Michael Pryor
Pufferfish V1.6: Update - adds 6 new components like Twisted Box Through Surfaces and Twisted Box Through Meshes with interpolation options. Tween Mesh and Tween Surface components now have interpolation options. Some component name changes, icon changes, updates. Some components require at least Rhino 5 SR12. After installing the pufferfish1-6 gha, please close Rhino completely one time to avoid potential assembly reference errors with the "Twisted Box" components.
Dec 20, 2017
Michael Pryor
Pufferfish V1.6: Update - Re-uploaded Pufferfish V1.6 to fix a bug with the Point Divide Curve Target component.
Dec 21, 2017
Michael Pryor
Dec 23, 2017
Michael Pryor
Dec 25, 2017
Michael Pryor
Pufferfish V1.6: Update - Re-uploaded Pufferfish V1.6 to fix a bug in the corner orders of Twisted Box components that use surfaces.
Dec 28, 2017
Michael Pryor
Pufferfish V1.7: Update - adds 7 new components. Components from the Discrete Vectors plug-in (http://www.food4rhino.com/app/discrete-vectors) have been updated and are now a part of Pufferfish. Other minor updates and fixes. Some components require at least Rhino 5 SR12. After installing the pufferfish1-7.gha, please close Rhino completely one time to avoid potential assembly reference errors with the "Twisted Box" components.
Jan 2, 2018
lv
Hi,
I would like to change the size of the twisted boxes along one curve. In this example I deconstructed the twisted boxes and moved the corners nearer to the curve. However, by scaling the boxes fit not together anymore. Is there a way to merge the corners of the boxes so that the geometry matches perfectly together?
Thank you in advance
Jan 8, 2018
Michael Pryor
Hi lv,
Look in the example files "Workflow" folder at the example "Pf_TwistedBoxVariableCurve"
Jan 8, 2018
lv
Thank you for this awesome plugin!
Jan 10, 2018
Michael Pryor
Confirmed works for Rhino 6.
Jan 19, 2018
martin
Hi Michael, first thanks for the pluggin I really like it.
I just have a question, when I tween a surface i get a rectangular tween not the exactly organic shape. I have tried Patch-surface, Boundary surface and Plannar surface directly from rhino. Which surface command should I use?
Jan 28, 2018
Michael Pryor
Hi martin
Surface tweens work on the untrimmed versions of surfaces. Patch, Boundary, and Planar surfaces result in trimmed surfaces. Rhinos tweensrf command will result also in the untrimmed versions. The way to go about this is to retrim the results. Grasshopper has two components for this "retrim" and "copy trim". Use one of those components on the tween surface results to copy the trim data from either one of your input surfaces.
Jan 29, 2018
martin
Thanks for your comment Michael, but I think this command will only get me the top or bottom surface form all along the tween, this for example when iam using diferent surface forms at the top and bottom. My question is because your example tween surface gets from 1 surface form to a different one in the tween proces combining it in the middle; so the tween is neither exactly the bottom nor the top surface form, but more like a combination like the squid example
Jan 29, 2018
Michael Pryor
Hi martin
The squid is because I used a mesh. With mesh it is easy to tween shapes like that (you can make your parts as mesh). The downside of mesh tweens is that they must have the same topology (common in blending through out must software). The downside of surface is there is no robust way to tween trimmed surfaces (even try Rhino's TweenSrf command will give you the untrimmed tweens). Especially if the trim data between multiple trims is very different. (what if one has holes and one does not - for example ) In your case, it seems the surface edges are relatively similar. You could loft surface A edges to surface B edges and cut the tween surfaces with that loft. Or intersect the loft with the tween surfaces and make patch surfaces from the results.
TweenSrfTrim.gh
Jan 29, 2018
Michael Pryor
Pufferfish V1.8: Update - adds 13 new components. All Tween Curve and Tween Curve on Surface components have been completely re-written and include interpolation options. New components added, most notably Scale to Area and Scale to Volume components. Many other additions, options, and outputs added to previous components. General optimizations and fixes all around. Some component rearrangements in the tabs. Some components require at least Rhino 5 SR12. After installing the pufferfish1-8.gha, please close Rhino completely one time to avoid potential assembly reference errors with the "Twisted Box" components.
Feb 16, 2018
Michael Pryor
Pufferfish V1.8: Update - Re-uploaded Pufferfish V1.8 to add edges and faces outputs to the Deconstruct Twisted Box. Also added an Evaluate Twisted Box component and a Twisted Box Centers component. Re-uploaded the V1.8 example files as well.
Mar 1, 2018
Jorge Jimenez Felix
Hi everyone!, im working on a project where im trying to define a structure for a bridge with small diameter pipes (as shown in the discrete polyline example picture) im having some trouble to make the definition to do this, i have some experience in GH but im not an expert if anyone could help me out it would be great
Thank you!
Jorge Jimenez
Apr 8, 2018
Michael Pryor
@Jorge Jimenez all images are from definitions in the example files. Download the example files at the same place as the plugin.
Apr 8, 2018
Garikundesu
Hi Michael,
As always you 're making great things for the community.
I switched to Rhino 6 version and installed Pufferfish 1.8 updated version. Still i receive a loading error after launching grasshopper, and it seems that the hole "Twisted BOX'' tab is missing. Any idea ? I made sure to unblock the component file and restarted my rhino6.
If you could help that would be really great.
Here is an idea of the message received (didn't paste it all) :
Object: WeightedAverageTwistedBox (level 1)
{
TargetInvocationException
}
Object: WeightedAverageTwistedBox (level 2)
{
Impossible de charger le fichier ou l'assembly 'XformComponents, Version=1.0.0.0, Culture=neutral, PublicKeyToken=dda4f5ec2cd80803' ou une de ses dépendances. Le fichier spécifié est introuvable.
FileNotFoundException
}
Object: AverageTwistedBox (level 1)
{
TargetInvocationException
}
Object: AverageTwistedBox (level 2)
{
Impossible de charger le fichier ou l'assembly 'XformComponents, Version=1.0.0.0, Culture=neutral, PublicKeyToken=dda4f5ec2cd80803' ou une de ses dépendances. Le fichier spécifié est introuvable.
FileNotFoundException
}
Object: TweenTwoTwistedBoxes (level 1)
{
TargetInvocationException
}
Object: TweenTwoTwistedBoxes (level 2)
{
Impossible de charger le fichier ou l'assembly 'XformComponents, Version=1.0.0.0, Culture=neutral, PublicKeyToken=dda4f5ec2cd80803' ou une de ses dépendances. Le fichier spécifié est introuvable.
FileNotFoundException
}
Object: TweenThroughTwistedBoxes (level 1)
{
TargetInvocationException
}
Object: TweenThroughTwistedBoxes (level 2)
{
Impossible de charger le fichier ou l'assembly 'XformComponents, Version=1.0.0.0, Culture=neutral, PublicKeyToken=dda4f5ec2cd80803' ou une de ses dépendances. Le fichier spécifié est introuvable.
FileNotFoundException
}
Object: TweenConsecutiveTwistedBoxes (level 1)
{
Une exception a été levée par la cible d'un appel.
TargetInvocationException
}
Object: TweenConsecutiveTwistedBoxes (level 2)
{
Impossible de charger le fichier ou l'assembly 'XformComponents, Version=1.0.0.0, Culture=neutral, PublicKeyToken=dda4f5ec2cd80803' ou une de ses dépendances. Le fichier spécifié est introuvable.
FileNotFoundException
}
Object: TwistedBoxExtrude (level 1)
{
Une exception a été levée par la cible d'un appel.
TargetInvocationException
}
Object: TwistedBoxExtrude (level 2)
{
Impossible de charger le fichier ou l'assembly 'XformComponents, Version=1.0.0.0, Culture=neutral, PublicKeyToken=dda4f5ec2cd80803' ou une de ses dépendances. Le fichier spécifié est introuvable.
FileNotFoundException
}
Object: TwistedBoxPipe (level 2)
{
Impossible de charger le fichier ou l'assembly 'XformComponents, Version=1.0.0.0, Culture=neutral, PublicKeyToken=dda4f5ec2cd80803' ou une de ses dépendances. Le fichier spécifié est introuvable.
FileNotFoundException
}
Object: EvaluateTwistedBox (level 1)
{
Une exception a été levée par la cible d'un appel.
TargetInvocationException
}
Object: EvaluateTwistedBox (level 2)
{
Impossible de charger le fichier ou l'assembly 'XformComponents, Version=1.0.0.0, Culture=neutral, PublicKeyToken=dda4f5ec2cd80803' ou une de ses dépendances. Le fichier spécifié est introuvable.
FileNotFoundException
}
Object: ConstructTwistedBox (level 2)
{
Impossible de charger le fichier ou l'assembly 'XformComponents, Version=1.0.0.0, Culture=neutral, PublicKeyToken=dda4f5ec2cd80803' ou une de ses dépendances. Le fichier spécifié est introuvable.
FileNotFoundException
}
Apr 9, 2018
Michael Pryor
@Garikundesu
I am not exactly sure what the issue could be in that case. Do you still have Rhino 5 installed? For me it works in Rhino 6 but I have both Rhino 5 and Rhino 6 installed and Rhino 6 picks it up automatically from Rhino 5. I haven't switched fully to Rhino 6 yet as it seems Rhino 6 still has many bugs they are updating frequently and Rhino 6 rhino common has methods that cant be used in Rhino 5.
It seems like it cannot find where your grasshopper install is.
Apr 9, 2018
Garikundesu
@Michael Pryor
Thanks a lot for your swift answer.
Well, nice you brought it up. I do actually have Rhino 5 installed on my machine.
Actually the main purpose for installing rhino 6 was because i was getting exactly the same errors in Rhino 5 and that i wanted to use the hole pufferfish components.
Anyway, if you cross by this problem another time and could give me some feedback, i would be really grateful.
Apr 9, 2018
Michael Pryor
@Garikundesu Do you have other native Xform components like boxmorph or surfacebox? Trying to see if maybe you are missing that part of Grasshopper somehow.
Apr 9, 2018
Garikundesu
Hi Michael,
I could finally install it with success. I found the problem.
After downloading the component file, i pasted it in Rhino6>Plug-ins>Grasshopper>Components, while the software could load everything except the twisted box Tab.
Now i removed it from there and i went to paste it in Users>AppData>Roaming>Grasshopper>Libraries, and every Tab of Pufferfish is now working.
Thank you so much for the swift answers regardless of the time difference.
Cheers,
Apr 9, 2018
Michael Pryor
@Garikundesu ah yes - Rhino6>Plug-ins>Grasshopper>Components is where the files that make up native grasshopper go. Libraries is for Grasshopper Plug ins.
Apr 9, 2018
Michael Pryor
Pufferfish V1.9: Update - adds 26 new components. Most notably Mirror Cut components for all geometry types, Scale To Length, Twisted Box Curve Variable, and Twisted Box Pipe Variable, Parameter Mesh Surface, Trim components and others. Additional features, options, and outputs added to previous components. General optimizations and fixes all around. Some component rearrangements in the tabs and renamed. Some components require at least Rhino 5 SR14. After installing the pufferfish1-9.gha, please close Rhino completely one time to avoid potential assembly reference errors with the "Twisted Box" components.
Apr 13, 2018
Michael Pryor
Pufferfish V1.9: Update - Re-uploaded Pufferfish V1.9 to add a K (Keep) input on the Mirror Cut components dealing with geometry which gives the option of keeping the input geometry and mirroring them regularly if it is mirror cut into non-existence, or to output them as null/empty in that case. Re-uploaded the V1.9 example files as well.
Apr 15, 2018
Michael Pryor
Pufferfish V2.0: Update - adds 16 new components. Most notably components for Tweening Curves Along Curves, A custom Curve Graph Mapper which accepts any and multiple curves as inputs to graph with, Unsplit Surface components for making polysurface like surfaces which read as one untrimmed surface, Twisted Box components like Sweep, Deform, Thicken, and Subdivide. Additional features and options added to previous components. General optimizations and fixes all around. Some component rearrangements in the tabs. Some components require at least Rhino 5 SR14. After installing the pufferfish2-0.gha, please close Rhino completely one time to avoid potential assembly reference errors with the "Twisted Box" components.
May 15, 2018