Chameleon is a plugin for Grasshopper and Revit with a focus on interoperability. Chameleon simplifies the process of translating geometric data between Grasshopper and Revit. It uses Chameleon Adaptive Component Systems (CACS). As opposed to Hummingbird, the workflow is bidirectional – Geometry can be created in Grasshopper, exported to Revit and then re-imported back into Grasshopper.

The Chameleon webpage has been down for somethime now and some users have reported being unable to download the link due to anti-virus software (as the plug-in is by ‘HiJac’). Furthermore , Chameleon hasn’t been updated since 14 June 2013 (v0.4.0.0). Since Hiroshi doesn’t seem to be replying to posts, I would say Chameleon is probably dead, which is a shame. I would recommend trying one of the other plug-ins: Dynamo, Rhymano, Grevit or Hummingbird. Dynamo is the most powerful and will have the best longevity.


To install Chameleon:

  • Download chameleon (
  • Open Grasshopper and go File > Special Folders > Components folder and copy the ‘ChameleonGH.gha’ file into this folder
  • Restart Rhino and Grasshopper
  • You should not see a ‘HiJac’ tab in grasshopper


  • Ensure Revit is closed
  • Unzip/extract the files before attempting install
  • Run ‘’Install Chameleon for Revit.bat’
  • Start Revit and you should see the Chameleon panel in the Add-Ins tab



Adaptive component (AC)

Chameleon’s Revit Adaptive Component essentially does the same thing as Hummingbird’s Adaptive component but is faster and has more control over parameters. It follows a similar workflow, where within Rhino/Grasshopper a series of reference points is created which is used to place an adaptive component, which has already been pre-loaded into Revit. To use Chameleon’s Revit Adaptive Component:

  • Create an Adaptive Component within Revit.  File > New > Family > Metric Generic Model Adaptive.rft
  • Load the Adaptive Component into a Revit Project. There is no need to place it, this will be done automatically later by Chameleon.
  • Build something in Grasshopper, which will host the adaptive component. You will need a list of points for each adaptive component you want to place. For example, the four points of a subsurface. Obviously, each list of points should have the same number of points as the adaptive component’s placement points.
  • In Grasshopper, go HiJac > Chameleon > Place and edit adaptive components in Revit, and place the component on the canvas
  • Connect the points you created to the Points input.
  • Go Params > Input > Boolean Toggle and connect this to the Activate input


  • Once ready, activate the Boolean Toggle. Once done, you will not be able to work within Grasshopper.

Chameleon_Grasshopper Activate_1600x800

  • Within Revit, go Add-Ins > Chameleon > AC Connect and follow the prompts on screen.

Chameleon_Revit input_1600x800

  • Chameleon will then place all your Revit Adaptive Components based on the Grasshopper point location. Obviously you will need to have the same coordinate system in both files for it to come into the correct position.


Chameleon will export a P0 value that is a ‘number’. For the P0 value to appear in the dialogue value the Revit family you are placing has to have a number parameter already in it. (Obviously the family needs to be loaded into the project before running Chameleon). For most families the parameters will be ‘lengths’. Revit is very specific about different type of parameters. A number is a number (e.g. 10), while a length is a number with units (eg 10m). So to get around this you need to create a ‘dummy’ parameter which is a number. The length parameter which controlls you family then references this value. You will need to modify the formula to neutralize the units. This webpage describes this problem in more detail. But basically take a number and *1 and you will turn it into a length.

Keep in mind that when using any Grasshopper plug-in for interoperability with Revit, it is essential that you use the same units and co-ordination system. Problems can arise if for example Rhino is set to using meters, while Revit is set to millimetres. For example, when exporting an adaptive component via Chameleon, the number of points needs to match the number of adaptive points in the adaptive component. This is why several batches need to be exported as often you will have multiple panels types.


When you come to export a 4-point adaptive component, the resultant surface will not necessarily be planar. Although visually it may appear planar, the surface is actually doubly curved.

When creating a 5-point adaptive component, Revit will not create a doubly curved surface. Instead, it will facet the surface by introducing edges.

If you intend to use Chameleon to transfer elements from Rhino to Revit, ensure that the units are consistent BEFORE modelling. This is because when scaling planar panels from meters to millimeters the absolute tolerance varies and often results in non-planar surfaces. So although the panels are planar in Rhino, when they are converted into Revit (and millimeters), they will become non-planar. For 4-point panels, this will not result in a noticeable difference. However, for 5-point panels, additional edges will be introduced and will be visually different.

Revit Geometry Transfer and Revit Edit Params

Chameleon’s Revit Geometry Transfer and Revit Edit Params commands allow you to manipulate parameters of existing native Revit objects using Grasshopper. To do this:

  • Build something in Revit. The following geometry can be transferred:
    • Ceilings
    • Curtain Panels
    • Doors
    • Floors
    • Generic model
    • Mass
    • Mullions
    • Roofs
    • Structural columns
    • Structural Framing
    • Walls
    • Windows
  • Note however, that only Curtain Panels and mullions can be modified and exported back into Revit!
  • Make sure your Curtain Panels and/or mullions have instance parameters that are also number parameters. You’ll also need to make sure these parameters affect something in the family, geometric or otherwise.
  • In grasshopper, go HiJac > Chameleon > Revit Get Geometry component
  • Params > Input > Boolean Toggle and connect it to the ‘A’ input of the Revit Get Geometry component

Chameleon Get Geometry_1600x800

  • Activate the Boolean toggle. When activated, you will get a message prompting you to click the corresponding button in Revit.

Chameleon_Geometry Transfer_1600x800

  • In Revit, go Add-Ins > Chameleon > Geometry Transfer > and select the type of geometry you want to transfer

Chameleon_Geometry Transfer2_1600x800


  • Physically select the objects you want to move, and then click finish.
  • In Grasshopper you will now have access to this referenced geometry. Geometry comes in as a Mesh and as triangulated surfaces. You can clean this up in Grasshopper if required
  • Modify the geometry in Grasshopper as required.
  • To edit instance parameters of these same families in Revit, go HiJac > Chameleon > Revit Edit Params component. This component takes three or more inputs, a True/False Boolean to activate the command, the ID of the family you want to modify, and additional inputs for each parameter in the Revit family you want to modify. The number of inputs will grow as you insert more wires.
  • Before activating, make sure that the ID’s are each in their own branch and that each Parameter tree has the same number of branches as the ID tree. Once you are sure of this, activate the command by setting the input to true.
  • You should see a message prompting you to activate the GH Edit Params command in Revit.
  • In Revit, go Add-Ins tab > Chameleon > Edit Parameters
  • Once activated, you should see this dialog. Select the parameter(s) in the Revit family(ies) that you want to edit and click OK.

Leave a Reply